ESP-WROOM-02再び

スマートスピーカーを買って、いろいろ家電を操作したいと思ってWiFiにつなげるESP-WROOM-02を購入。
(実はESP-WROOM-32の開発ボードを2つほど買ったんだけど、Arduino IDEにうまくインストールできなかったので、実績のあるESP-WROOM-02にした。)

AE_ESP-WROOM-02

AE_ESP-WROOM-02

AE-ESP-WROOM02-DEV

AE-ESP-WROOM02-DEV

カテゴリー: ESP-WROOM-02 | タグ: | コメントする

BME280

気圧、温度、湿度センサーのBME280のI2Cボードをヤフオクで購入。
I2Cアドレス : 0x76
電源電圧 : 3.0〜3.3V
I/Oレベル : 3.3V以下

BME280(I2C)

BME280(I2C)

BME280裏面

BME280裏面

VCC, GND, SCL, SDA, CSB, SDO の6本。

ヤフオクでの説明
Bosch社の高精度デジタル圧力センサBME280ブレークアウトボードです。
◎特徴は気圧や温度に加え湿度まで計測できるマルチセンサです。

※レベル変換及びレギュレータ無のボードです。Arduinoなど5V系マイコンへの接続にはレベル変換が必要になります。

≪BME280概略≫
・供給電圧(VCC): 1.71 ~ 3.6V
・圧力レンジ:300~1100hPa (動作レンジ)
・温度レンジ:-40~85°C (動作レンジ)
・湿度レンジ:0~100% (動作レンジ)
・絶対精度:±1hPa(950~1050hPa、0~ +40°C)
・インターフェース:I2C最大3.4 MHz)/SPI(3,4線式,MAX10MHz)
(I2Cアドレス=0x76, 0x77)
・消費電流:2.7uA(サンプリング=1Hz)
・外形寸法:15 x 12 mm
※資料・説明書は付属しません、接続はボード裏面のシルク文字(信号名)を参照してください。
その他詳細はBMP280のデータシートを参照ください。

≪BME280データシート
https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf

≪商品内容≫
1.BME280ブレークアウトボード x1
2.ヘッダーピン(6pin) x1

≪Adafruitの参考ページ≫
https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/wiring-and-test?view=all

カテゴリー: センサー | タグ: , , | コメントする

Google Home Miniとあっち向いてホイ!

Google Home Miniで何か動かしたいと思って、作ったのがコレ。

まずは単純に手元にあったドロイド君のフィギュアの頭を左右に回せるように首にサーボを入れてみた。

ドロイド君

ドロイド君

ドロイド君(サーボ部分)

ドロイド君(サーボ部分)

ドロイド君(サーボ部分)

ドロイド君(サーボ部分)

ドロイド君(頭部)

ドロイド君(頭部)

ドロイド君(頭部)

ドロイド君(頭部)

あとはArduinoでサーボを制御。
本当はサーボには別の電源から供給した方がいいんだろうけど、とりあえずここではUSBからの5Vで動かしています。

Arduino Nanoとドロイド君

Arduino Nanoとドロイド君

最終的に、USB経由のシリアル通信で’r’, ‘l’, ‘c’で「右」、「左」、「中央」に首を振るようにした。
さらに’r’も’l’も1秒で中央に戻るようにしたので、’c’は使わなくていいようにした。

#include 

Servo myservo;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
  myservo.attach(9);

  delay(100);
  myservo.write(90);
}

void loop() {
  // put your main code here, to run repeatedly:

  if (Serial.available() > 0) {
    int c = Serial.read();
    //Serial.write(c);
    if (c=='c') {
      myservo.write(90);
    } else if (c=='l') {
      myservo.write(10);
      delay(1000);
      myservo.write(90);
    } else if (c=='r') {
      myservo.write(170);
      delay(1000);
      myservo.write(90);
    }
  }
}

次にRaspberry Pi 3にGoogle Home Notifierを入れて使っていたので、そのGoogle Home Notifierのexample.jsにシリアル通信部分を追加して対応した。
それにngrokが使えると便利だし。

var express = require('express');
var googlehome = require('./google-home-notifier');
var ngrok = require('ngrok');
var bodyParser = require('body-parser');
var app = express();
var SerialPort = require('serialport');
var port = new SerialPort('/dev/ttyUSB0', {
  baudRate: 9600
});
const serverPort = 8080;

port.on('open', function() {
  console.log('Serial open.');
});

var deviceName = 'Google Home';
googlehome.device(deviceName);
// googlehome.accent('uk'); // uncomment for british voice

var urlencodedParser = bodyParser.urlencoded({ extended: false });

app.post('/google-home-notifier', urlencodedParser, function (req, res) {
  if (!req.body) return res.sendStatus(400)
  console.log(req.body);
  var text = req.body.text;
  if (text){
    res.send(deviceName + ' will say: ' + text + '\n');
    googlehome.notify(text, function(res) {
        console.log(res);
    });
  }else{
    var dd = new Date();
    var dice = dd.getMilliseconds()%2;
    if (dice==0) {
      port.write(new Buffer('l'), function (err, results) {});
    } else {
      port.write(new Buffer('r'), function (err, results) {});
    }
    res.send('Please POST "text=Hello Google Home"');
  }
})

app.listen(serverPort, function () {
  ngrok.connect(serverPort, function (err, url) {
    console.log('POST "text=Hello Google Home" to:');
    console.log('    http://localhost:' + serverPort + '/google-home-notifier');
    console.log('    ' + url + '/google-home-notifier');
    console.log('example:');
    console.log('curl -X POST -d "text=Hello Google Home" ' + url + '/google-home-notifier');
  });
})

さらにIFTTTでGoogle AssistantとWebhookでAppletを作って、次のように設定した。

Google Assistant部分

フィールド
What do you want say? あっちむいて
What’s another way to say it? (optional) (空欄)
And another way? (optional) (空欄)
What do you want the Assistant to say in response? ほい
Language Japanese

Webhook部分

フィールド
URL https://??????.ngrok.io/google-home-notifier
Method POST
Content Type (optional) application/json
Body (optional) test

※ URLの??????部分は起動する毎に変わるので、その度にIFTTTの設定を変えている。

本来は「あっち向いてホイ!」と全部こっち側がしゃべるべきだけど、反応も欲しいので「あっち向いて」までしゃべるとGoogle Home Miniに「ホイ」と反応させている。

カテゴリー: 作ったモノ | タグ: | コメントする

Rainbow LEDの動作テスト

Rainbow LEDにケーブルを付けて動作テスト。
ケーブルはサーボモーター用の3線のケーブル。

Rainbow LEDの動作テスト

Rainbow LEDの動作テスト

Adafruit_NeoPixelライブラリのサンプルstrandtestをそのまま使った。

カテゴリー: Arduino, 部品 | タグ: , | コメントする

16 x 12-bit PWM & Servo Shield

16 x 12-bit PWM & Servo Shieldをヤフオクで見つけたので購入。

16 x 12-bit PWM & Servo Shield

16 x 12-bit PWM & Servo Shield

ヤフオク情報

NXP社のI2C-LEDコントローラPCA9685を使用した16ch-12bitPWM/サーボシールドです。16個のサーボをI2Cインターフェース(信号2本)で制御可能な便利なシールドです。
◎商品は組立て済完成品、動作確認済です。

≪商品概要≫
・電源:5V
・インターフェース:I2C
・PWM周波数:最大1.6KHz
・分解能:12bit (約4usec/60Hz)
・サーボ電源入力用ターミナルブロック(2P-2.54mmピッチ)
・サーボ出力ヘッダ:4x3Px4グループ(16チャンネル)
・出力ライン220Ω保護抵抗付き
・62種のアドレス設定(6アドレスパッド・半田ジャンパー)
・大型電解コンデンサ用パッド(470~100uF/10Vを必要の応じて実装してください)

≪参考ページ≫
・PCA9685データシート
http://cache.nxp.com/documents/data_sheet/PCA9685.pdf?pspll=1

・Adafruitサーボドライバライブラリ
https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library

≪商品内容≫
(1)16ch-12bitPWM/サーボシールド x1台
※商品は本体のみです、説明書・資料などは付属しません。

Adafruit PWM Servo Driver Libraryのサンプルservoでの動作テスト
さっそく、Arduinoプラットフォームを使って、動作テストを行った。

16 x 12-bit PWM & Servo Shieldの動作テスト(全体)

16 x 12-bit PWM & Servo Shieldの動作テスト(全体)

16 x 12-bit PWM & Servo Shieldの動作テスト(サーボモーター接続部分)

16 x 12-bit PWM & Servo Shieldの動作テスト(サーボモーター接続部分)


サーボモーターを0, 1, 4, 5に接続。

カテゴリー: Arduino, 部品 | タグ: , | コメントする

Rainbow LED

ヤフオクでRGB LEDがリング状に配置された部品を見つけたので2つ購入。

Rainbow LED

Rainbow LED

Rainbow LED 単品表面

Rainbow LED 単品表面

Rainbow LED 単品裏面

Rainbow LED 単品裏面

ヤフオクでの情報

WS2811 5050 RGBレインボーLEDモジュール(FC102)です。

≪商品概要≫
・電源電圧:5V
・外形寸法:直径60mm
・チップ:WS2811(LEDに内蔵)
・LED:5050 RGBフルカラー・ハイライトパッケージx16個
・制御ポート:デジタル
・プラットフォーム:Arduinoなどマイクロコントローラ用
・基板カラー:ホワイト
・重量:11g

≪商品内容≫
(1)5050 RGBレインボーLEDモジュール(FC-102) x1台
※商品は本体のみです、説明書・資料などは付属しません。

≪参考ページ≫
https://www.adafruit.com/product/1463

≪Adafruit_NeoPixelライブラリ≫
https://github.com/adafruit/Adafruit_NeoPixel

カテゴリー: 部品 | タグ: | コメントする

テレビ回転台

直径40cmあるテレビ回転台を見つけたので購入。
耐荷重も100kgある。

テレビ回転台

テレビ回転台


3Dプリンターを乗せてテーブルの高さ調整をするのに便利と思ったので。

カテゴリー: 3Dプリンター, 工具 | タグ: | コメントする

Arduino用プラットフォーム

最近、Arduino用プラットフォームというのを見るのでちょっと試してみたくて購入。

Arduino用プラットフォーム(組み立て前)

Arduino用プラットフォーム(組み立て前)

Arduino用プラットフォーム(組み立て後)

Arduino用プラットフォーム(組み立て後)

カテゴリー: Arduino, 工具 | タグ: | コメントする

ほこりセンサー

シャープのほこりセンサー(GP2Y1010AU0F)をヤフオクで入手した。
秋月でも売ってたけど、ヤフオクだと他に必要な部品も付属してる。

ほこりセンサー

ほこりセンサー

付属していた部品は次の通り。
接続用ケーブル(6Pin、約14cm) x1
・抵抗10KΩ x1
・抵抗150Ω x1
・NPNトランジスタ(2N3904)
・電解コンデンサー220μF

配線は秋月のデータシートの接続例を参考にした。
プログラムはヤフオクで紹介している http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/ を参考にした。

ほこりセンサーの配線

ほこりセンサーの配線

/*
 Standalone Sketch to use with a Arduino Fio and a
 Sharp Optical Dust Sensor GP2Y1010AU0F
 
 Blog: http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/
 Code: https://github.com/Trefex/arduino-airquality/
 
 For Pin connections, please check the Blog or the github project page
 Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex)
 Changelog:
   2012-Dec-01:  Cleaned up code
 
 This work is licensed under the
 Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
 To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/
 or send a letter to Creative Commons, 444 Castro Street, Suite 900,
 Mountain View, California, 94041, USA.
*/
 
int measurePin = 0;//6;
int ledPower = 12;
 
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
 
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
float vcc = 5.0; //3.3;
 
void setup(){
  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);
}
 
void loop(){
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);
 
  voMeasured = analogRead(measurePin); // read the dust value
 
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);
 
  // 0 - 3.3V mapped to 0 - 1023 integer values
  // recover voltage
  calcVoltage = voMeasured * (vcc / 1024);
 
  // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
  // Chris Nafis (c) 2012
  dustDensity = 0.17 * calcVoltage - 0.1;
 
  Serial.print("Raw Signal Value (0-1023): ");
  Serial.print(voMeasured);
 
  Serial.print(" - Voltage: ");
  Serial.print(calcVoltage);
 
  Serial.print(" - Dust Density: ");
  Serial.println(dustDensity);
 
  delay(1000);
}

 

変えたのは、measurePinを6->0にしてA0を使うようにして、ソースコード中の3.3を変数vccを新設して5.0に。

ほこりセンサーの出力

ほこりセンサーの出力

カテゴリー: Arduino, 部品 | タグ: , | コメントする

パルスセンサモジュール

ヤフオクでパルスセンサモジュールを買った。

パルスセンサモジュール

パルスセンサモジュール

指につけるために百均でベルクロ(手芸コーナーで縫い付ける用のモノ)を購入。

ベルクロ

ベルクロ

グルーガンでセンサーをベルクロに接着。

グルーガン

グルーガン

こんな感じ。

パルスセンサモジュール+ベルクロ

パルスセンサモジュール+ベルクロ

装着して動かしたところ。

≪参考サイト≫
・開発元 pulsesensor.com
http://pulsesensor.com/pages/code-and-guide

・adafruit社のページ
https://learn.adafruit.com/pulse-sensor-displayed-with-neopixels?view=all

カテゴリー: Arduino, センサー, 作ったモノ | タグ: | コメントする