Makey Makey управление новогодней RGB-гирляндой

Кажется в 2012 году на kickstarter был более чем успешно запущен проект MaKey MaKey, который позволял  превратить в сенсорные кнопки любые предметы, которые хоть немного проводят электрический ток. Более того, плата подключалась к компьютеру и превращалась в USB-клавиатуру, С MaKey MaKey клавиатурой оказывались фрукты, цветы и прочие предметы.

Естественно через некоторое время предприимчивые китайцы наладили производство более дешевых аналогов, одним из которых была плата Makey Makey Touch USB shield — шилд к Arduino Uno. 

Использовать данный шилд можно в качестве USB-клавиатуры, либо для управления различными устройствами, я его решил использовать для управления RGB-лентой (в качестве гирлянды для новогодней елки). С помощью Makey Makey Touch USB shield мы будем определять прикосновения к новогодним «игрушкам» (кружки из фольгированной цветной бумаги разного цвета (красный, зеленый, синий, желтый, сиреневый, белый)) и зажигать RGB-ленту соответствующим цветом.

Электрическая схема (во Fritzing) имеет следующий вид

Элементы управления RGB-лентой (транзисторы TIP120 и резисторы) вынес на самодельный шилд

Вот примерно так

И скетч на Arduino. Нажатие на «игрушку» определенного цвета приводит к изменению цвета RGB-ленты на соответствующий. Чтобы лента постоянно горела будем запоминать последний цвет. При одновременном выборе нескольких цветов переключение цвета не происходит — введен фильтр, определяющий одновременное нажатие.

Вот Arduino код

 // pins для RGB strip int pinRed=6; int pinGreen=7; int pinBlue=5; // переменные для хранения данных с touch int InData0 = 0, InData1 = 0, InData2 = 0, InData3 = 0, InData4 = 0, InData5 = 0;   int TouchSensitivity = 30; //  int AllData=0; int tekpos=0; // массив значений rgb ленты для разных нажатий int leds[8][3]={{0,0,0},               {1,0,0},  // r               {0,1,0},  // g               {0,0,1},  // b               {1,1,0},  // yellow               {1,0,1},  // r+b               {1,1,1},  // white               {0,0,0}   // нажато несколько              }; void setup() {   Serial.begin(9600);   for(int i = A0; i <= A5; i++)     {       //pins touch Red, Green, Blue, Yellow, ,White       pinMode(5, INPUT);           }      // настройка пинов RGB strip   pinMode(pinRed, OUTPUT);      pinMode(pinGreen, OUTPUT);    pinMode(pinBlue, OUTPUT);    tekpos=random(1,3);   setRGB(tekpos);   //TIMSK0 &= !(1 << TOIE0); }   void loop() {   // получение данных с touch   InData0 = 1024 - analogRead(A0);                   InData1 = 1024 - analogRead(A1);   InData2 = 1024 - analogRead(A2);   InData3 = 1024 - analogRead(A3);   InData4 = 1024 - analogRead(A4);   InData5 = 1024 - analogRead(A5);   // определение нажатой   AllData=0;   if(InData0 >= TouchSensitivity)      AllData=AllData+5;   if(InData1 >= TouchSensitivity)      AllData=AllData+6;   if(InData2 >= TouchSensitivity)      AllData=AllData+7;   if(InData3 >= TouchSensitivity)      AllData=AllData+8;   if(InData4 >= TouchSensitivity)      AllData=AllData+9;   if(InData5 >= TouchSensitivity)      AllData=AllData+10;   //    AllData=min(AllData,11);    AllData=max(AllData,4);    AllData=AllData-4;      Serial.print("AllData=");Serial.println(AllData);   // включение ленты      if(AllData>0 && AllData<7)      {     tekpos=AllData;     setRGB(tekpos);     }       delay(100); }  // процедура включения ленты void setRGB(int pos)   {   digitalWrite(pinRed,leds[pos][0]);   digitalWrite(pinGreen,leds[pos][1]);   digitalWrite(pinBlue,leds[pos][2]);   } 

И фото данного проекта

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino Arduino Uno 1
Makey Makey Touch shield 1
Биполярный транзистор TIP120 3
Резистор 1 кОм 3
Светодиодная лента RGB 1
Блок питания DC 12В 1
Круг Фольгированная цветная бумага 6
Замим крокодил 14
Провод 7