Кажется в 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 | |||||