This shows you the differences between two versions of the page.
pm:prj2022:avaduva:pianoplayer [2022/05/22 13:13] sergiu.spiridon [Hardware Design] |
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> | ||
Line 48: | Line 49: | ||
Voi atasa in continuare o imagine cu schema proiectului in ThinkerCad: | Voi atasa in continuare o imagine cu schema proiectului in ThinkerCad: | ||
+ | |||
{{:pm:prj2022:avaduva:thinker_cad_full_sergiu.png?800|}} | {{: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, | In proiectul fizic se vor inlocui multimeter-urile cu fire care au un material conductiv la capat, care vor fi pozitionate pe ecranul telefonului, | ||
Line 56: | Line 62: | ||
- | <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 89: | 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> | ||