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に表示した例です。三陸海岸を探索していた軌跡です。

ACC4LVでMPU-6050を使ってみる

** LabVIEW Advent Calendar 2016 ** 2016年12月3日の記事です。

MPU-6050は加速度3軸とジャイロ3軸を内蔵したI2C接続のセンサーで、GY521というモジュールで安価に入手することができます。私は安いので海外直送のGY521を使っていますが、中国から送料無料で商売になるのが不思議です。

仕様書にはジャイロはフルスケール(±250, ±500, ±1000, あるいは±2000°/sec (dps)) を16ビットADC、加速度はフルスケール(±2g, ±4g, ±8g, あるいは±16g)を16ビットADCで測定し、OUTPUT DATA RATEはジャイロが最大8kHz、加速度が最大1kHzと書かれています。

Arduinoはお気に入りのESP8266WiFiモジュールです。使い勝手が良いESPr Developer(ESP-WROOM-02開発ボード)を使います。Arduinoでの使い方は購入元のページにリンクがあります。LabVIEWでプログラムを書いてコンパイルして書き込む場合でも、初めにArduinoで基本的な動作を確認するのが良いでしょう。Arduinoが初めての場合はArduino UNOからスタートするのが苦労が少ないと思います。中国直送の互換ボードは安いし、(経験上)きちんと動きますが、USBシリアル変換チップがCH340なので、ネットでドライバーを探してくる必要があるかもしれません。

pb280115

ESPr DeveloperとGY521との接続は4本だけです。
3.3V <—> VCC
GND <—> GND
SCL <—> IO5
SDA <—> IO4

Arduinoでの動作確認のためのサンプルプログラムはArduino Plyagroundのものを使いました。LabVIEWへの移植も基本的にはこれに従いました。

LabVIEWでArduinoにプログラムを書くことができるツールが「Arduino™ Compatible Compiler for LabVIEW」です。名前が長いのでACC4LVと縮めて書いています。使える関数が限定されているサブセット版なので多少の工夫が必要です。例えばU16からI16への変換がありません。どうしましょ。

 

Arduinoのサンプルを素直に移植するとこんな感じです。
mpu-8050d

 

14要素のU8配列を7要素のI16に変換します。U8を2個を上位、下位で合わせてU16になるのですが、I16にする必要があります。U16–>I16の変換はACC4LVには無いので、加算で出力をI16にしています。
sub__rawtoi16d

I16を加速度、温度、ジャイロの単位に変換します。
sub__i16tovalued

シリアル出力用の文字列に変換します。
sub__valuetostringd

 

では、では、

 

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

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

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個

受信側のスケッチ

送信側のスケッチ