Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:abirlica:din-runner [2022/05/30 18:54]
radu.millio [Hardware Design]
pm:prj2022:abirlica:din-runner [2022/05/30 20:30] (current)
radu.millio [Software Design]
Line 38: Line 38:
 **Schema electrica:​** **Schema electrica:​**
  
-{{:​pm:​prj2022:​abirlica:​schema_electrica_dino.png?200|}}+{{:​pm:​prj2022:​abirlica:​schema_electrica_dinoo.png?800|}}
  
 +**Implementare**
 +
 +{{:​pm:​prj2022:​abirlica:​image1_dino.jpeg?​800|}}
 +{{:​pm:​prj2022:​abirlica:​image2_dino.jpeg?​800|}}
 +
 +<​note>​Pentru a izola mediul senzorului am printat 3D un suport conic de culoare neagra. Astfel putem obtine valori care sunt mult mai putin dependente de mediul in care se efectueaza masuratoarea.</​note>​
 +
 +
 +===== Software Design =====
 +
 +**Diagrama de activitate**
 +
 +
 +{{:​pm:​prj2022:​abirlica:​diagrama_dinoo.png?​800|}}
 +
 +
 +**Descrierea codului**
 +
 +Pentru editarea codului am folosit Arduino IDE. Logica de functionare este urmatoarea: Variabila GameState este controlata de butonul care face toggle pe aceasta valoare (STOP/​PLAY). In modul STOP, senzorul este calibrat, adica ultima valoare produsa de acesta este salvata drept referinta de baza pentru modul de joc. Cand se apasa iar pe buton intram in modul PLAY. Se compara in loop valoarea oferita de senzor cu valoarea de referinta. Daca diferenta dintre acestea este mai mare decat un threshold atunci servomotorul este actionat.
 +
 +Pentru functionarea butonului am creat o intrerupere INT0 cu activare pe falling edge. Pentru debouncing am folosit un condensator de 100n.
 +Pentru controlarea servomotorului am folosit headerul <​Servo.h>​.
 +
 +<spoiler Cod sursa>​{{:​pm:​prj2022:​abirlica:​source_dino.txt|}}</​spoiler>​
 +
 +
 +
 +
 +
 +
 +===== Rezultate obtinute =====
 +
 +**Video** https://​youtube.com/​shorts/​IwO0r8xIpnk?​feature=share
 +
 +Scor mediu obtinut ~ 200 de puncte.
 +
 +**Discutie probleme si solutii incercate / Concluzii**
 +
 +O problema pe care am intalnit-o a fost click-ul dublu al servomotorului cand doar un click este necesar. Datorita variatiei mari intre obstacole (cactusi mici, medii mari; cate 1, 2 sau 3 deodata) senzorul "​vede"​ doua obstacole cand de fapt este unul singur. Am incercat sa folosesc un timer pentru a masura lungimea obstacolelor formate din mai multi cactusi si apoi am impus un delay minim (egal cu aceasta durata) intre masuratori pentru a incerca sa elimin sariturile duble. Desi aceasta solutie rezolva sariturile duble, consecinta este faptul ca atunci cand cactusii vin unul cate unul dar cu viteza mare, dinozaurul nu mai are timp sa sara peste al doilea sau al treilea. Prin incercari, am incercat sa aleg un delay astfel incat aceste efecte sa fie minimizate iar performanta sa fie cat mai buna. 
  
  
Line 48: Line 87:
 Am folosit Tinkercad pentru generarea schemei electrice. Am folosit Tinkercad pentru generarea schemei electrice.
 </​note>​ </​note>​
 +
 +**Resurse** {{:​pm:​prj2022:​abirlica:​resurse_dino.zip|}}
  
 <​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>​
pm/prj2022/abirlica/din-runner.1653926042.txt.gz · Last modified: 2022/05/30 18:54 by radu.millio
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0