Узнайте, как использовать Makey Makey для управления новогодней RGB-гирляндой. Простой проект с Arduino и шилдом Makey Makey Touch USB shield.
Кажется в 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]);
}
И фото данного проекта

Скачать список элементов (PDF)
Прикрепленные файлы:
- HappyNewYear_03.zip (2 Кб)