This is an old revision of the document!
Este un robot care poate interactiona cu jocul de mobile 'Piano Tiles'. Va recunoaste diferenta dintre culorile patratelor care apar pe ecran si va apasa pe cele negre. Am jucat destul de mult acest joc si as vrea sa vad daca un robot ar putea depasi limitele unui om.
Robotul va citi valori de segmente din ecran si in functie de culoarea pe care o citeste pe fiecare segment va simula sau nu o atingere a ecranului touchscreen.
Piese necesare:
Arduino UNO LDR (photoresistor) Power Relays Jumper Wires Rezistors(22kohm) Breadboard
Schema Bloc:
Hardware Design:
Proiectul poate fi impartit in 2 segmente: achizitia de date (photorezistorii) si simularea atingerii touch screen (prin relays).
Photorezitorii o sa fie positionati astfel incat sa poata citi valorile de pe ecran;
Pentru negru, valoarea data la input va fi mai mica decat pentru alb, photorezistorul va interpreta culoarea negru ca lipsa luminii.
Atunci cand un LDR citeste culoarea negru, acesta va declansa o mutare a relayului, mai exact inchiderea switchului.
Ecranele touchscreen sunt ecrane capacitive, deci atunci cand noi atingem ecranul ne comportam ca o impamantare pt circuit. Voi incerca sa simulez un comportament simular prin folosirea unor switchuri care se conecteaza la ground cand vrem sa “apasam”.
Voi atasa in continuare o imagine cu schema proiectului in ThinkerCad:
In proiectul fizic se vor inlocui multimeter-urile cu fire care au un material conductiv la capat, care vor fi pozitionate pe ecranul telefonului, dar in ThinkerCad folosesc multimeters pentru a ma asigura ca relayurile comuta intre 5V si ground (~0).
Codul folosit este unul simplu, care trebuie doar sa citeasca cate un input de la fiecare photorezistor si in functie de valoarea acestora va schimba valoarea unui pin conectat la un relay intre HIGH si LOW.
Codul initial, testal in ThinkerCad, arata astfel:
int photo0 = A0; int photo1 = A1; int photo2 = A2; int photo3 = A3; int relay0 = 10; int relay1 = 11; int relay2 = 12; int relay3 = 13; int photo0Read; int photo1Read; int photo2Read; int photo3Read; void setup() { Serial.begin(255); pinMode(photo0, INPUT); pinMode(photo1, INPUT); pinMode(photo2, INPUT); pinMode(photo3, INPUT); pinMode(relay0, OUTPUT); pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); } void loop() { photo0Read = analogRead(photo0); photo1Read = analogRead(photo1); photo2Read = analogRead(photo2); photo3Read = analogRead(photo3); if (photo0Read < 817) { Serial.println("A0"); digitalWrite(relay0, LOW); }else{ Serial.println("not A0"); digitalWrite(relay0, HIGH); } if (photo1Read < 817) { Serial.println("A1"); digitalWrite(relay1, LOW); }else{ Serial.println("not A1"); digitalWrite(relay1, HIGH); } if (photo2Read < 817) { Serial.println("A2"); digitalWrite(relay2, LOW); }else{ Serial.println("not A2"); digitalWrite(relay2, HIGH); } if (photo3Read < 817) { Serial.println("A3"); digitalWrite(relay3, LOW); }else{ Serial.println("not A3"); digitalWrite(relay3, HIGH); } }
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.