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

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

Top