This shows you the differences between two versions of the page.
pm:prj2022:avaduva:pianoplayer [2022/04/26 22:12] sergiu.spiridon created |
pm:prj2022:avaduva:pianoplayer [2022/05/27 22:28] (current) sergiu.spiridon [Bibliografie/Resurse] |
||
---|---|---|---|
Line 12: | Line 12: | ||
<note tip> | <note tip> | ||
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | Proiectul reprezinta un robot care poate juca popularul joc Piano Tiles. |
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | 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. | ||
</note> | </note> | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Piese necesare: |
- | Aici puneţi tot ce ţine de hardware design: | + | Arduino UNO |
- | * listă de piese: Arduino UNO, LDRs, Power relay, Resistors, Breadboard | + | LDR (photoresistor) |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | Power Relays |
- | * diagrame de semnal | + | Jumper Wires |
- | * rezultatele simulării | + | Rezistors(22kohm) |
- | </note> | + | Breadboard |
+ | |||
+ | |||
+ | |||
+ | |||
+ | Schema Bloc: | ||
+ | |||
+ | {{:pm:prj2022:avaduva:schema_bloc_sergiu.png?600|}} | ||
+ | |||
+ | 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: | ||
+ | |||
+ | {{:pm:prj2022:avaduva:thinker_cad_full_sergiu.png?800|}} | ||
+ | |||
+ | Schematic: | ||
+ | |||
+ | {{:pm:prj2022:avaduva:schematic_sergiu.png?800|}} | ||
+ | |||
+ | 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). | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | <note tip> | + | Codul folosit este unul simplu, care trebuie doar sa citeasca cate un input de la fiecare photorezistor si |
- | Descrierea codului aplicaţiei (firmware): | + | in functie de valoarea acestora va schimba valoarea unui pin conectat la un relay intre HIGH si LOW. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
+ | Codul initial, testal in ThinkerCad, arata astfel: | ||
+ | |||
+ | <code> | ||
+ | |||
+ | 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 delay_close_1 = 50; | ||
+ | int delay_close_2 = 50; | ||
+ | |||
+ | int delay_far = 100; | ||
+ | |||
+ | void setup() { | ||
+ | // put your setup code here, to run once: | ||
+ | Serial.begin(9600); | ||
+ | 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() { | ||
+ | | ||
+ | if (analogRead(photo0) < 700) { | ||
+ | delay(delay_far); | ||
+ | digitalWrite(relay0, HIGH); | ||
+ | delay(delay_close_1); | ||
+ | digitalWrite(relay0, LOW); | ||
+ | delay(delay_close_2); | ||
+ | } else if (analogRead(photo1) < 700) { | ||
+ | digitalWrite(relay1, HIGH); | ||
+ | delay(delay_close_1); | ||
+ | digitalWrite(relay1, LOW); | ||
+ | delay(delay_close_2); | ||
+ | } else if (analogRead(photo2) < 700) { | ||
+ | delay(delay_far); | ||
+ | digitalWrite(relay2, HIGH); | ||
+ | delay(delay_close_1); | ||
+ | digitalWrite(relay2, LOW); | ||
+ | delay(delay_close_2); | ||
+ | } else if (analogRead(photo3) < 700) { | ||
+ | digitalWrite(relay3, HIGH); | ||
+ | delay(delay_close_1); | ||
+ | digitalWrite(relay3, LOW); | ||
+ | delay(delay_code_2); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | Photorezistorii sunt atasati catre porturile A0, A1, A2, A3 si trimit pe acestea valori semnificand intensitatea | ||
+ | luminoasa citita. Atunci cand eranul afiseaza culoarea negru (o clapa), valoarea returnata de LDR este mai mica de 700. | ||
+ | |||
+ | O valoare mai mica de 700 rezulta in comutarea unui releu la HIGH si apoi la LOW pentru a simula atingere. | ||
+ | |||
+ | Pe ecran, monedele atasate de relay-urile 1 si 3 o sa fie mai departe de senzori, deci au un delay inainte de a face atingerea. | ||
+ | <note> | ||
+ | In cod trebuie adaugate delayuri custom pentru a lua in considerare distanta dintre LDR-uri (punctul de citire) si | ||
+ | monedele de pe ecran (punctul de atingere al ecranului). | ||
+ | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | In final, am reusit sa fac un robot care poate diferentia intre casutele negre si cele albastre de pe ecran, si care poate |
+ | simula actiunea de 'touch' pe casutele negre. | ||
</note> | </note> | ||
+ | {{:pm:prj2022:avaduva:poza_rez_1_sergiu.jpeg?300|}} | ||
+ | {{:pm:prj2022:avaduva:poza_rez_2_sergiu.jpeg?500|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
Line 63: | Line 165: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://create.arduino.cc/projecthub/susheel_06/piano-tile-robot-a06ae6?ref=part&ref_id=8233&offset=5622 |
+ | |||
+ | https://www.youtube.com/watch?v=8hlQ0MiowN8 | ||
+ | |||
+ | https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||