デジタルかざぐるま Digindmill
息を吹きかけると回転するデジタルかざぐるま”Digindmill”を作りました
マイクに息がかかることで音をセンスしLEDの発光を制御します。
音量によって回転スピードが変わります。
目次
部品一覧
- Arduino Nanoクローン品
- 高感度マイクアンプキット
- LEDテープ Neopixel
製作過程
羽には100均のポリプロピレンシートを使用し、
持ち手には100均のピコピコハンマーの物を利用しました 🙂 。
中で配線して
完成!
きれいだね!
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#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(); } |
追記
Adafruitのオフィシャルページで紹介していただきました!