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]);
}

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


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

Плата ArduinoArduino Uno1

Makey Makey Touch shield1

Биполярный транзисторTIP1203

Резистор1 кОм3

Светодиодная лентаRGB1

Блок питанияDC 12В1

КругФольгированная цветная бумага6

Замимкрокодил14

Провод7
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.