ハロウィン用 LED マスク『ヒトミちゃん』
お母ちゃんが今年はハロウィンの仮装で巷の子供たちを驚かしたいと言うので、恐ろしいマスクを目指して
お父ちゃんが腕をふるいました。
ダイソーのハロウィングッズのホラーマスクを加工してLED付けてみました 😈
目次
構成
テープLEDでひとつ目を構成し、マイクも取り付けて声でマスクの口が赤く光るようにしました。
部品
- ダイソー ホラーマスク
- マイコン Arduino Pro Mini 5V 16MHz
- Trinket バッテリーモジュール
- LiPoバッテリー
-
LEDテープ NeoPixel RGB/W テープLED 144LED/1m
ピッチの狭いLEDテープを使用したかったので手元にあったRGBWのNeoPixelを使用しました。
- 高感度マイクアンプキット
- 赤色LED
マスク制作
マスク塗装
マスクの布を外して黒く塗装しました。ダイソーの黒スプレーを使用しました。何か月面のアノ顔みたい。。。
テープLED加工
マスクの額にLEDを貼って目ん玉を構成します。LEDの発光部以外を黒く塗装します。
発光部にマスキングテープを貼ります。ダイソーの穴あけポンチ (4mm径)でマスキングテープを切り取って一つ一つ貼りました。シンドイ。。。。
黒く塗ったLEDをマスクの額に貼り付けて配線します。配線も黒く塗ってマスクキングテープを外して完了!LED貼って配線終了してからマスク含めてスプレーすべきだったと若干いや かなり後悔。
LEDの配置は以下の通りで信号線1本で制御します。
マイク配置
マスク裏の口元にマイクモジュールと口の両端に赤色LEDを配置します。
音声を拾うとLEDが光ります (怖い!)。
仕上げ
諸々配線&接着で完成。
Arduinoコード
NeoPixel用のライブラリを使用してプログラムしました。
https://github.com/adafruit/Adafruit_NeoPixel
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
#include <Adafruit_NeoPixel.h> const int analogInPin = A0; const int ledPin = 12; int sensorValue = 0; int sensorTh = 700; int avTime = 10; #define PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRBW + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; uint32_t color; int brightness = 20; byte eyeColor; int LR =7; //Black eye L&R animation int blackLED[15][24] = {{12,32,35,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {12,13,31,36,54,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {11,13,14,30,37,53,54,56,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {10,11,14,15,29,38,52,53,56,57,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, { 9,10,11,12,15,16,28,33,34,39,51,52,55,56,57,58,68,68,68,68,68,68,68,68}, { 0, 8, 9,10,11,12,13,16,17,27,32,35,40,50,51,54,55,56,57,58,59,67,68,68}, { 0, 1, 7, 8, 9,10,13,14,17,18,26,31,36,41,49,50,53,54,57,58,59,60,66,67}, { 1, 2, 6, 7, 8, 9,14,15,18,19,25,30,37,42,48,49,52,53,58,59,60,61,65,66}, { 2, 3, 5, 6, 7, 8,15,16,19,20,24,29,38,43,47,48,51,52,59,60,61,62,64,65}, { 3, 4, 5, 6, 7,16,17,20,21,23,28,39,44,46,47,50,51,60,61,62,63,64,68,68}, { 4, 5, 6,17,18,21,22,27,40,45,46,49,50,61,62,63,68,68,68,68,68,68,68,68}, { 4, 5,18,19,26,41,48,49,62,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, { 4,19,20,25,42,47,48,63,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {20,21,24,43,46,47,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {21,23,44,46,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}}; //pupil L&R animation int pupilLED[15][12] = {{33,34,68,68,68,68,68,68,68,68,68,68}, {32,33,34,35,68,68,68,68,68,68,68,68}, {12,31,32,33,34,35,36,55,68,68,68,68}, {12,13,30,31,32,33,34,35,36,37,54,55}, {13,14,29,30,31,32,35,36,37,38,53,54}, {14,15,28,29,30,31,36,37,38,39,52,53}, {15,16,27,28,29,30,37,38,39,40,51,52}, {16,17,26,27,28,29,38,39,40,41,50,51}, {17,18,25,26,27,28,39,40,41,42,49,50}, {18,19,24,25,26,27,40,41,42,43,48,49}, {19,20,23,24,25,26,41,42,43,44,47,48}, {20,21,22,23,24,25,42,43,44,45,46,47}, {21,22,23,24,43,44,45,46,68,68,68,68}, {22,23,44,45,68,68,68,68,68,68,68,68}, {22,45,68,68,68,68,68,68,68,68,68,68}}; //Blink animation int eyelid = 0; int eyelidNum[8] = {0,4,8,16,24,34,44,56}; int eyelidLED[56] = {64,65,66,67,58,59,60,61,56,57,62,63,49,50,51,52,47,48,53,54,38,39,40,41,46,55,36,37,42,43,26,27,28,29,35,44,24,25,30,31,15,16,17,18,34,45,23,32,13,14,19,20,6,7,8,9}; void blink(int eyelid, int LR) { if (eyelid != 8){ //白目 for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led.Color(0, 0, 0, 46)); led.setPixelColor(11, led.Color(26, 26, 26)); } //黒目 for(uint16_t i=0; i<blackNum; i++) { led.setPixelColor(blackLED[LR][i], color); } //瞳孔 for(uint16_t i=0; i<pupilNum; i++) { led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66)); } //まぶた for(int i=0; i < eyelidNum[eyelid]; i++) { led.setPixelColor(eyelidLED[i], 0); } } else if (eyelid == 8){ led.clear(); } led.show(); } void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); led.begin(); led.setBrightness(brightness); // Initial Brightness 40 led.show(); // Initialize all pixels to 'off' color = led.Color(0, 177, 55); //pupil color blink(eyelid, LR); } void loop() { //mic入力 LED for(int i = 0; i < avTime; i++){ sensorValue += analogRead(analogInPin); } sensorValue = sensorValue / avTime; Serial.println(sensorValue); if(sensorValue > sensorTh){ digitalWrite(ledPin, HIGH); }else{ digitalWrite(ledPin, LOW); } int eyeMotion = random(0, 1200); switch (eyeMotion) { //右 case 10: for(int i = LR; i < 12; i++){ if(sensorValue > sensorTh) break; blink(0, i); delay(random(10, 100)); LR = i; } if(sensorValue > sensorTh) break; delay(random(100, 700)); for(int i=LR; i>=7; i--){ if(sensorValue > sensorTh) break; blink(0, i); delay(random(10, 100)); LR = i; } break; //左 case 123: for(int i=LR; i>2; i--){ if(sensorValue > sensorTh) break; blink(0, i); delay(random(10, 100)); LR = i; } if(sensorValue > sensorTh) break; delay(random(100, 700)); for(int i=LR; i<=7; i++){ if(sensorValue > sensorTh) break; blink(0, i); delay(random(10, 100)); LR = i; } break; //瞬き case 32: case 300: for(int i = 1; i < 9; i++){ if(sensorValue > sensorTh) break; blink(i, LR); delay(random(10, 30)); } if(sensorValue > sensorTh) break; delay(random(10, 300)); for(int i = 8; i > 0; i--){ if(sensorValue > sensorTh) break; blink(i, LR); delay(random(10, 30)); } break; default: blink(0, 7); } sensorValue = 0; } |
目ん玉はランダムで左右にギョロギョロ動いたり、瞬きします。当初は以前に検証したフォトリフレクタでアイトラッキングしようと思ったのですが。。。
ヒトミちゃん#neopixel #LED pic.twitter.com/qCBpmT7x0h
— HomeMadeGarbage (@H0meMadeGarbage) 2018年9月17日
メガネかけながらマスクして、しかも歩いて動き回って 正確にセンシングするのが難しいので断念しました。
動作
巷の子供たちを驚かしたいと言う お母ちゃんの願いを叶えるために出した お父ちゃんの答え
「ヒトミちゃん」#ハロウィン 🎃 #Halloween #neopixel pic.twitter.com/8GsQvFUBd6— HomeMadeGarbage (@H0meMadeGarbage) 2018年9月19日
目ん玉がランダムで動作し、声に反応して口が赤く光ります。
怖いねぇ。札幌の子どもたちよ。ハロウィンまで震えて眠れ!
これちなっすけど、ギャルじゃなくても電飾パリピでマジ卍のヤバタニエン!
新人類感がチョベリグで やまだかつてないみたいなゲロゲロ〜
追記
2019/10/28 Arduino公式ブログ様
ハロウィン工作特集でご紹介いただきました♪