編集履歴一覧に戻る
HomeMadeGarbageのアイコン画像

HomeMadeGarbage が 2019年10月08日12時41分34秒 に編集

初版

タイトルの変更

+

デジタルかざぐるま Digindmill

タグの変更

+

Arduino

+

LED

+

Neopixel

記事種類の変更

+

製作品

本文の変更

+

息を吹きかけると回転するデジタルかざぐるま”Digindmill”を作りました。 # 構成 マイコンにマイクとLEDテープ(Neopixel)を接続し、マイクに息をかけることで音を検出しLEDの発光を制御します。 音量によってLED回転スピードが変わります。 ![構成図](https://camo.elchika.com/60a3b6489fe8ae8abb2d30b4e2fe1344b402d61d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f65356536303961652d623936342d343537652d383361632d663931303066643766613933/) ![接続写真](https://camo.elchika.com/551d54a8f8065c9e9f75b335a33ffb8991e80672/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f34646530343465302d376632372d346334612d393264332d313266303861666538663533/) ## 部品一覧 - [Arduino Nanoクローン品](https://www.amazon.co.jp/HiLetgo%C2%AE-3%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88-ATmega328P-CH340-Arduino%E3%81%A8%E4%BA%92%E6%8F%9B/dp/B013QV27WI?SubscriptionId=AKIAJHVVJYUU4UUMZRMQ&tag=homemadegarba-22&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B013QV27WI) - [高感度マイクアンプキット](http://akizukidenshi.com/catalog/g/gK-05757/) - [LEDテープ Neopixel](https://www.amazon.co.jp/%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-Switch-Science-%E3%83%95%E3%83%AB%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%ABLED%E3%83%86%E3%83%BC%E3%83%97/dp/B00CHHD6FU?SubscriptionId=AKIAJHVVJYUU4UUMZRMQ&tag=homemadegarba-22&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B00CHHD6FU) # 製作過程 羽には100均のポリプロピレンシートを使用し、持ち手には100均のピコピコハンマーの物を利用しました。 ![製作過程1.png](https://camo.elchika.com/19d3502bb8a589587e69844b4c561ae8ad458118/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f65653233336265372d363132632d346461652d613962312d643266653432636239656335/) 持ち手内部で配線します。LEDテープはセル5づつの8本使用しポリプロピレンシートに貼り付けました。 ![製作過程2.png](https://camo.elchika.com/2256f1257e4fdd133546a6aeceb45e2d124ae733/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f61326137386539362d383263372d346335342d383562312d663932393435366531343331/) 配線と電源スイッチをグルーガンで固定しフタをして完成です。 ![完成.jpg](https://camo.elchika.com/0da7ab7ae85110931d8337f5ca2de2b0c780ed9f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f62643238333432322d373035382d343437352d623432352d393438616433383562386435/) # Arduinoコード プログラミングは[Arduino IDE](https://www.arduino.cc/en/Main/Software)を用いて実施しました。 LEDテープ Neopixelのライブラリとサンプルコードは以下で公開されており、気軽に楽しむことができます。  [https://github.com/adafruit/Adafruit_NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) ```arduino: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](https://camo.elchika.com/dc98bc9734d49668663d1276e5dcdf62059b3eb2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f63326564623665352d363735322d343035382d616262622d393537646265333266343830/) ![2.gif](https://camo.elchika.com/063c8e7785fe5aa930912cdc9a6263b15d65d7cf/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39396533383932642d313165622d346636362d393638622d3230623961353138303030652f38326161653636642d623236642d343134622d396533652d363139326636646130333165/)