ESP32(MH-ET LIVE ESP32 MiniKIT)のタッチセンサー

ESP32には10本ものタッチセンサーがあります。しかも、インタラプト関数が用意されているので便利に使えそうです。

OLYMPUS DIGITAL CAMERA

ESP32の安価でコンパクトなボードを購入したので試しに使ってみようと思います。特にアフィリエイトが得られるわけではありませんが、購入先は下記URLです。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.u50SMy

このボードはLチカ用LEDが付いているのが原因だと思いますが、T2は使えません。また、T8とT9が入れ替わっているようです。

T0–IO04
T1–IO0
T3–TDO
T4–TCK
T5–TDI
T6–TMS
T7–IO27
T8–IO32
T9–IO33

フラットケーブルを使ったら60ぐらいあったタッチセンサーの出力が20ぐらいまで低下して、検知できるギリギリですがなんとか使えています。

(18.02.11)

 

ヤマハFM音源LSI YMF825搭載モジュールのデモプログラム

Arduino UNO互換機でYMF825を動作させてみました。

複数の音色パラメータから音色データを生成して、西洋音階で和音を鳴らします。ヘッドフォンアンプが付いていますが、スピーカーにつないでいます。

購入先はスイッチサイエンスです。
https://www.switch-science.com/catalog/3399/

OLYMPUS DIGITAL CAMERA

音の雰囲気が伝わるように動画を作りました。
https://www.facebook.com/koji.ohashi.12/videos/1635981226477849/

音色パラメータが4種類入っているのでプログラムが長くなっていますが、実際に使えるものを作ろうとするとこのぐらいの機能は必要になるのでまとめてみました。

lineNo.304-307にバグがありましたので修正しました。(180213)

(18.02.09)

参考にさせてもらったサイト

https://kanpapa.com/today/2017/08/ymf825-fm-board.html

https://sites.google.com/site/himagine201206/home/arduino/ymf825/030

 

NeoPixelのDemo

ArduinoのNeoPixelライブラリのサンプルは参考になりますが、盛りだくさん過ぎて分かりにくい印象があります。

OLYMPUS DIGITAL CAMERA

シンプルでカラフルに書いてみました。

ついでに、「グルグル巻けば円筒ディスプレイ」用のDemoプログラムも紹介します。10mmピッチのLEDを200個φ60mm(よりも少し太い)のボトルに巻きつけました。一周21個で縦に9個の(狙いは20個✖️10個でしたが、)円筒ディスプレイです。

 

ESP32のArduino IDEでBLEを試してみました

ESP32はWiFiに加えてBLEも使えるということで注目されています。Arduino IDEでは、2017年の10月頃からBLEがサポートされ始めました。

ボードも入手しやすくなってMH-ET LIVE D1 mini ESP32という小型のボードは$7.5ぐらいでAliExpressで購入できました。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.Zbsxqj

今回はそのESP32を2個使って、サーバーとクライアントで動作させてみました。どちらもArduino IDEでプログラミングできるので楽なのではないかと思います。サーバーには照度センサーNJL7502Lがあり、クライアントが接続すると照度のデータを送ります。クライアントが接続している間はゆらゆら人形が揺れます。クライアントはデータをもらってシリアルでPCにデータを表示します。

電気回路:
3.3Vを照度センサの+側(長い足)、照度センサの-側(短い足)は10kΩでGNDに接続して、短い足の電圧をアナログ入力AI6(IO34)に接続します。データシートを見ると1000luxで3Vの出力になるようです。ゆらゆら人形はIO5とGNDに接続します。ゆらゆら人形はDaisoのソーラーゆらゆらを改造して、コイル両端を回路から外して外部に取り出します。
クライアント側はUSBでPCに接続します。

BLEライブラリの導入には以下のURLの情報を参考にしました。
「Arduino IDEでESP32 BLEライブラリを導入」
https://qiita.com/tomorrow56/items/afa06e206eec9fafcc7a

 

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

BLEライブラリはArduinoっぽくないので、「山勘で書いて、動いた」というレベルですのでもっと良いサンプルを誰かが書いてくれると思います。現状で分かっている問題点としては、サーバーが電源OFFで停止するとクライアントがハングアップして、クライアントの電源をOFF-ONしないと復帰しない点です。

 

サーバー側のスケッチ(ベースにしたのはBLE_notify)

 

クライアント側のスケッチ(ベースにしたのはBLE_client)

 

5V駆動のステッピングモーターを試す

28BYJ48 DC 5V 4-フェーズ5線式ステッピングモータとULN2003ドライバボード
これも去年の春に購入したまま眠っていたパーツです。中国直送で200円前後で購入できます。

便利なライブラリを見つけて動かしてみたという段階です。通常のstepperライブラリではなく、AccelStepperというライブラリを使うことでハーフステップで滑らかに駆動することができます。28BYJ-48モーターでの使い方は42Botsの記事に従いました。

回転数は1000pps(およそ15rpm)が上限で、それ以上はトルクが小さくなり指でシャフトをつまむと止まってしまいます。

 

 

美しいミニマリズムの8pinoで光る置き物を作る

最近のArduino IDEではボード追加で8pino(Trinket 8MHz)をプログラミングできるようになりました。価格は888円なので中国直送互換機には及びませんが、ボードの小ささでは群を抜いています。

I2Cの加速度センサーで姿勢を検知して傾けるとフルカラーLEDの色や光の強さが変わるようにプログラミングしてみました。

用意した機材
8pino
GY521(加速度・ジャイロセンサー)
マイコン内臓フルカラーLED

機能
加速度センサーで置き物の前後左右方向の傾きに応じて目に配置された2個のLEDの色と明るさが変化します。不感帯を設けて垂直に静止している時には光らないようにしています。

メモリーが小さいのでプログラムもミニマル目指して推敲を重ねました。「最大5,310バイトのフラッシュメモリのうち、スケッチが5,176バイト(97%)を使っています。グローバル変数は69バイトのRAMを使用しています。」

 

Arduino GPSロガー (Pro Mini 3.3V版)

道路施設の維持管理のために適切な予防保全が必要と言われていますが、人口が減少がしていく中で山間の生活道路の質を維持するために、コストをかけずに客観的な情報を蓄積していけるシステムが望まれているのではないでしょうか?

Arduino GPSロガーは路面のデコボコの振動を加速度センサーにより定量化しGPSによる位置情報とともにSDカードに記録して路面診断用のデータを蓄積するツールです。

使用するパーツ
Arduino Pro Mini 328 3.3V 8MHz(スイッチサイエンス 1,243 )
あるいは互換機 EasyWordMall Pro Mini モジュール Atmega328 3.3V 8M Arduino用 (EasyWordMall 375円)

GPS受信機キット (秋月電子通商 2200円)1PPS出力付き

マイクロSDカードスロットDIP化キット(秋月電子通商 300円)

MPU-6050 使用 3軸ジャイロスコープ・3軸加速度センサー モジュール(GY-521)(Umemoto LLC 198円)

動作の概要
電源はIoT機器用モバイルバッテリー cheero Canvas 3200mAhがお勧めです。一般的なモバイルバッテリーでは消費電力が小さすぎて自動的に給電が停止してしまいます。USBケーブルの電源線から5VをPro MiniとGPSモジュールに給電し、Pro Miniから供給される3.3VでSDとGY-521に給電します。
GPSから日付、時刻、緯度、経度、捕捉衛星数を読み取ります。加速度・ジャイロセンサーから約50msec毎に200回データを読み取り、進行方向の加速度の平均値と標準偏差、上下方向の加速度の平均値と標準偏差、左右方向の回転角速度の平均値と最大値と最小値を求めます。
測定の周期はおよそ14秒でしたが、日付から自動生成されるファイル名のファイルmm_dd.txtにカンマ区切りで追記されます。

16.12.31追記
GPSでの時刻はUTC(世界協定時)で出力されるので日本では9時間加算する必要があります。日付の繰り上がりなどを考えると面倒なのでUTCで我慢していましたが、落ち着いて考えると日本時間の9時にファイルの日付が変わるのでそれはそれで面倒です。時差を反映させるTimeというライブラリを見つけましたので、実装しました。

データ表示
オープンソースソフトウェアのQGISを使用して表示します。国土地理院のタイル地図に測定点を表示します。例として振動が大きかったポイントは赤い大きな星印、振動が少なかった地点は小さな丸印で表示しています。
結線
(Arduino Pro Mini 3.3V)
[GPS–Pro Mini]
5V–5V
GND–GND
RXD–NC
TXD–D2

[SD–Pro Mini]
DAT2–NC
DAT3–D10
CMD–D11
VDD–3.3V
CLK–D13
VSS–GND
DAT0–D12
DAT1–NC
SWB–NC
SWA–NC

[GY-521–Pro Mini]
VCC–3.3V
GND–GND
SCL–A5(SCL)
SDA–A4(SDA)
XDA–NC
XCL–NC
ADD–NC
INT–NC

[LED–Pro Mini]
RED LED–D9
GREEN LED–D8

時差対応版

UTC版

 

QGIS上でGoogle Satelliteに表示した例です。三陸海岸を探索していた軌跡です。

テクノ手芸 – 音に反応するネコ

声をかけると目が光りシッポをブルブルさせるフェルトのネコです。

R0014918s

R0014916s

主な部品
Arduino Nano (5V 16MHz)互換ボード
SPW2430搭載 シリコンMEMSマイクモジュール
円盤型 振動モーター(2個入)
導電糸

配線
マイクDC出力:A0
LED+:D5, D9
LED-:D12 (GND) 導電糸引き回し軽減のため
振動モーター:D3

スケッチ(Mic_DelayedReaction-nano12f)

ノイズ除去のために3回測定して中央値をデータとします。そのデータを要素100のdata[]に格納します。100個のデータから標準偏差を計算して音の大きさとします。

音に対するLEDと振動モーターの反応は、音を受けて間を置いてLEDが光り、さらに遅れて振動モーターが動作するようにしています。音の大きさを要素50個のtimeShift[]にリングバッファー状に格納します。LEDと振動モーターのデータは指標をシフトさせて読み込みます。

振動モーターが振動した音をマイクが拾って反応が止まらなくなりますので、要素30個のvibHistory[]に振動モーターへの出力を記録して振動モーターの動作中は音を格納しないようにします。

 

ESP8266気象ユニット(1) – 温湿度・気圧センサー

温湿度・気圧センサーモジュールBME280から温度、湿度、気圧データを取得します。

使用する主なもの
ESP-WROOM-02ピッチ変換済みモジュール《フル版》
BME280使用 温湿度・気圧センサモジュールキット
FT231X USBシリアル変換モジュール

接続
ESP-WROOM-02 ———- 接続先
3V3 ———- 3.3V電源
EN ———- Pull UP
IO14 ———- NC
IO12 ———- NC
IO13 ———- LED+ (LED-は100Ω経由GND)
IO15 ———- Pull DOWN
IO2 ———- NC
IO0 ———- DTR# (FT231X)

GND ———- GND
IO16 ———- NC
TOUT ———- NC
RST ———- 書き込み時 RTS# (FT231X)/実行時 NC
IO5 ———- SCK (BME280)
TXD ———- RXD (FT231X)
RXD ———- TXD (FT231X)
IO4 ———- SDI (BME280)

電源
3端子レギュレーター (NJU723F33 3.3V 500mA)
Pin 1 ———-3.3V出力 (GNDと0.1μFセラミックコンデンサ)
Pin 2 ———-外部電源入力(バッテリーなど) (GNDと0.1μFセラミックコンデンサ)
Pin 3 ———-GND

Arduino IDEの設定
スイッチサイエンスの記事「ESP-WROOM-02開発ボードをArduino IDEで開発する方法」参照

スケッチの書き込みと実行
書き込み時はRSTにRTS# (FT231X)を接続、実行時はRSTはNCで電源OFF-ON

R0015091s

出力例
Temp=28.64
Humidity=55.35
Pressure=989.70

 

WiFiサウンドセンサー

ヘッドフォンをかけていたり、大きめの音で音楽を聴いていると玄関のお客さんに気がつかないことがありますね。WiFiサウンドセンサーは離れた場所の物音や振動をマイクで検知して、LEDの光で知らせてくれます。

R0014992s
R0015003s

主な部品
「Board1 ver.1.0」ESP-WROOM-02搭載モジュール:2個
マイコン内蔵RGB 5mmLED:2個
SPW2430搭載 シリコンMEMSマイクモジュール:1個

受信側のスケッチ

送信側のスケッチ