声でうごく パトランプ作ったよ
音に反応して動くパトランプを作りました 😀
マイクで音を拾いある程度の振幅で検知するとLEDが光り、小型モータが回ります。
目次
部品一覧
- モータードライバモジュール DRV8830
- 振動モーター LA4-466FB
バイブレータ用のモータを回転部に使用メチャメチャ小さくて使いやすかった♪
- LEDテープ Neopixel
LED1個だけ使用
- 高感度マイクアンプキット
- リチウムイオンポリマー電池110mAh
- Adafruit Trinket 3.3V
こちら小さくて可愛いマイコンなのですがシリアルモニタ出来ないのでデバッグしにくい。。。
- Trinket バッテリーモジュール
これ使えばTrinketにUSB挿しとくと自動でバッテリーが充電されて満タン時に充電止めてくれる
んで出来たのが
モータに遮光板をつけたペットボトルのキャップを固定し、
LEDテープを中心に回転させます。
LEDの配線まとめるのに熱収縮チューブを使用しています。熱
使用したマイコンAdafruit Trinketは小さくて便利!Arduinoコードでプログラミング可能です。書き込み時に若干クセがあります。ピン配置など詳細はこちらの通りです。 🙄
以下Arduino IDE用コードです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include <Wire.h> #include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> #endif const int DRV8830 = 0x64; const int analogInPin = 2; int sensorValue = 0; //マイク出力値 #define PIN 1 #define NUMPIXELS 1 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { Wire.begin(); #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif pixels.begin(); } void writeMotorResister(byte vset, byte data1){ int vdata = vset << 2 | data1; Wire.beginTransmission(DRV8830); Wire.write(0x00); Wire.write(vdata); Wire.endTransmission(true); } void loop() { sensorValue = analogRead(analogInPin); if(sensorValue > 520 || sensorValue < 455){ //LED点灯(赤) pixels.setPixelColor(0, pixels.Color(255,0,0)); pixels.show(); //モータ回転 writeMotorResister(0x20, 0x01); }else{ //LED消灯 pixels.clear(); pixels.show(); //モータ静止 writeMotorResister(0x00, 0x00); } delay(50); } |
モータドライバのI2Cコントロール部は以下を参考させていただきました♪
これで夜、外を「ウー ウー」言いながら走り回りたいな
追記(6/8)
Adafruit様のブログで紹介いただきました!
Adafruit社製のLEDとマイコンを使用してます
クレイジーって 😆