デジタルかざぐるま Digindmill
@HomeMadeGarbage 2019年10月08日に作成

息を吹きかけると回転するデジタルかざぐるま”Digindmill”を作りました。

構成

マイコンにマイクとLEDテープ(Neopixel)を接続し、マイクに息をかけることで音を検出しLEDの発光を制御します。
音量によってLED回転スピードが変わります。

構成図

接続写真

部品一覧

製作過程

羽には100均のポリプロピレンシートを使用し、持ち手には100均のピコピコハンマーの物を利用しました。
製作過程1.png

持ち手内部で配線します。LEDテープはセル5づつの8本使用しポリプロピレンシートに貼り付けました。
製作過程2.png

配線と電源スイッチをグルーガンで固定しフタをして完成です。
完成.jpg

Arduinoコード

プログラミングはArduino IDEを用いて実施しました。

LEDテープ Neopixelのライブラリとサンプルコードは以下で公開されており、気軽に楽しむことができます。
 https://github.com/adafruit/Adafruit_NeoPixel

Digindmillコード

#include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> #endif const int analogInPin = A1; int sensorValue = 0; int amp = 0; int rotDelay = 500; int fin = 0; //かざぐるまの羽 八枚分のLED設定 #define NUMPIXELS 5 Adafruit_NeoPixel pixel0 = Adafruit_NeoPixel(NUMPIXELS, 2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel1 = Adafruit_NeoPixel(NUMPIXELS, 3, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel2 = Adafruit_NeoPixel(NUMPIXELS, 4, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel3 = Adafruit_NeoPixel(NUMPIXELS, 5, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel4 = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel5 = Adafruit_NeoPixel(NUMPIXELS, 7, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel6 = Adafruit_NeoPixel(NUMPIXELS, 8, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixel7 = Adafruit_NeoPixel(NUMPIXELS, 9, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixels[8] = {pixel0, pixel1, pixel2, pixel3, pixel4, pixel5, pixel6, pixel7}; uint32_t finColors[8]; void setup() { Serial.begin(9600); #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif for(int i = 0; i < 8; i++ ){ pixels[i].begin(); pixels[i].setBrightness(20); } //羽の色 設定 finColors[0] = pixels[0].Color(255,0,0); finColors[1] = pixels[0].Color(150,150,150); finColors[2] = pixels[0].Color(85,0,170); finColors[3] = pixels[0].Color(120,155,0); finColors[4] = pixels[0].Color(0,0,255); finColors[5] = pixels[0].Color(170,0,85); finColors[6] = pixels[0].Color(0,255,0); finColors[7] = pixels[0].Color(0,170,170); } void loop() { //マイク出力平均化 for(int i = 0; i < 10; i++){ sensorValue =+ analogRead(analogInPin); } Serial.print(sensorValue/10); //マイク出力バイアス除去 amp = abs(sensorValue/10 - 30); Serial.print(" "); Serial.print(amp); //マイク出力から回転スピード導出 rotDelay = map(amp, 10, 60, 150, 0); if(rotDelay < 0){ rotDelay = 0; } Serial.print(" "); Serial.println(rotDelay); for(int j = 0; j < 8; j++){ int k = j + fin; if(k >= 8){ k = k - 8; } for (int i = 0; i < 5; i++){ pixels[j].setPixelColor(i, finColors[k]); } } for(int i = 0; i < 8; i++ ){ pixels[i].show(); } delay(15); //マイク出力が一定以上で回転 if(amp > 10){ delay(rotDelay); fin++; if(fin >= 8){ fin = fin - 8; } } for(int i = 0; i < 8; i++ ){ pixels[i].clear(); pixels[i].show(); } delay(1); }

8本のLEDテープの信号線を指定して発色の色がくるくる回るようにしました。
回転スピードはマイクから検出される音声信号の大きさで変更しています。
マイクの信号はアナログ入力ピンA1に接続しています。

動作

きれいなデジタル風車が完成いたしました♪
1.gif

2.gif

5
1
5
HomeMadeGarbage さんが 2019/10/08 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する

elchikaの記事投稿では
Markdown記法を採用しています。

Markdown記法については
コチラをご確認ください

elchikaの記事投稿では
Markdown記法を採用しています。

Markdown記法については
コチラをご確認ください