Differences

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

Link to this comparison view

pm:prj2023:apredescu:automatic_cat_toy [2023/05/29 23:45]
ioana.popescu1905 [Rezultate Obţinute]
pm:prj2023:apredescu:automatic_cat_toy [2023/05/30 00:42] (current)
ioana.popescu1905 [Bibliografie/Resurse]
Line 103: Line 103:
 {{ :​pm:​prj2023:​apredescu:​cat_fizic.jpg?​600 |}} {{ :​pm:​prj2023:​apredescu:​cat_fizic.jpg?​600 |}}
  
 +**Rezultatele simulării**
 +
 +În această etapă am conectat componentele Hardware și am scris si o parte din cod, bazându-mă strict pe funcții Arduino. Rezultatul a fost unul așteptat, funcționalitățile de bază mergeau, însă logica programului nu era încă implementată și optimizată,​ iar designul era încă la nivel teoretic.
 +Ulterior, circuitul a fost puțin modificat deoarece am constatat că pinii pentru servomotor nu erau potriviți, am adăugat un condensator și am schimbat puțin poziționarea pentru a elimina firele redundante.
 </​note>​ </​note>​
  
Line 161: Line 165:
   sei(); ​                                          // Enable interrupts   sei(); ​                                          // Enable interrupts
   ​   ​
 +  ​
 +__Calcule internal counter frequency__
 +
 + f_int = 16,000,000 / (1024 * (255 + 1))
 + = 16,000,000 / 262144
 + = 61.0352 Hz
 +
 Rutina de întrerupere,​ modul 2 de funcționare. În funcție de valoarea counter-ului Timer, calculez o nouă poziție de deplasare și un nou unghi pentru mișcarea servomotorului. Rutina de întrerupere,​ modul 2 de funcționare. În funcție de valoarea counter-ului Timer, calculez o nouă poziție de deplasare și un nou unghi pentru mișcarea servomotorului.
  
Line 201: Line 212:
   myServo.write(servoPosition);​ // move servo   myServo.write(servoPosition);​ // move servo
   ​   ​
-Restul funcțiilor,​ elementele de sincronizare și dependențele dintre variabile sunt explicate detaliat în README-ul din arhivă.+Restul funcțiilor,​ elementele de sincronizare și dependențele dintre variabile sunt explicate ​mai detaliat în README-ul ​și codul din arhivă
 +  * drawAnimations -> Afișează pe LCD titlul și animația inițială cu 5 pisici care dispar succesiv până la începerea jocului. 
 +  * updateLCD -> Se scrie un mesaj pe LCD, în modul de funcționare 2, la un interval de timp, care să nu fie prea rapid (probleme cu PWM). 
 +  * moveServo() -> Funcție care miscă efectiv servomotorul. 
 +  * nonBlockingServoControl() -> Aceasta este o funcție care să miște servomotorul în modul de funcționare 2, la o poziție random calculată în rutina de întrerupere.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 210: Line 225:
 </​html>​ </​html>​
  
 +Rezultatul este o **jucărie funcțională**,​ cu un **design atractiv**, care îi oferă mobilitate, foarte interesantă pentru pisici, așa cum se poate observa și din demo-ul de mai sus!
  
-===== Concluzii =====+Consider că rezultatul final depășește simularea inițială, cu funcții Arduino, care bifa criteriile de funcționalitate,​ însă la capitolul feature-uri și fiabilitate lăsa de dorit.
  
 +===== Concluzii =====
 +A fost un proiect foarte interesant, primul de până acum care implică componente fizice și lucru manual pentru design. Am lucrat cu mare drag la el, mai ales având în vedere scopul său și m-am bucurat foarte tare să îmi văd ideea pusă în practică după atâtea săptămâni.
 +Bineînțeles,​ au existat și o serie de situații și evenimente neprevăzute,​ din care am putut trage o serie de concluzii:
 +  * La un astfel de proiect, trebuie să ai foarte clar în minte ce vrei să faci și mai ales **de ce ai nevoie** exact. S-a întâmplat să am nevoie ulterior primei comenzi de rezistențe,​ alt tip de buton, condensator,​ etc.
 +  * Există posibilitatea să nu primești componentele pe care le-ai comandat, evident o mare problemă dacă ai nevoie de ceva specific.
 +  * **Lucrul cu întreruperi și AVR** este dificil, îți consumă timp, dar te face să înțelegi și să descoperi ce se află în spatele funcțiilor Arduino și poți pune în aplicare ce vezi în DataSheet.
 +  * Să implementezi un proiect cu componente fizice este mult mai interesant ca pe TinkerCad.
 +  * Multe biblioteci și funcții folosesc deja în spate Timer 1, deci trebuie atenție mare.
 +  * Biblioteca LiquidCrystal nu este chiar atât de ușor de manipulat și poate cauza probleme în combinație cu rutina de întreruperi.
 +  * **Servomotorul consumă foarte mult** curent/​resurse și generează **electrical noise** care poate interfera cu modulul I2C de pe LED.
 +  * Ar fi fost de preferat, în cazul proiectului meu, **să alimentez LCD-ul la altă sursă**, sau tot circuitul la o sursă peste 5V.
 +  * **Potențiometrul** are fluctuații foarte mari și este foarte delicat, ajută să pui în paralel cu pinii săi un **condensator**.
 ===== Download ===== ===== Download =====
  
-<​note ​warning>+<​note ​important>
 Arhiva cu codul sursă și README cu detalii despre implementare:​ Arhiva cu codul sursă și README cu detalii despre implementare:​
  
Line 224: Line 252:
  
 <note tip> <note tip>
-To Be Continued ​+  * **20 Aprilie** - Alegere temă proiect 
 +  * **26 Aprilie** - Confirmare temă, discuție la laborator 
 +  * **5 Mai** - Documentație Inițială 
 +  * **6 Mai** - Comandă piese 
 +  * **9-13 Mai** - Livrări 
 +  * **14 Mai** - Magazin fizic - ServoMotor, Led-uri, Rezistențe 
 +  * **21 Mai** - Hardware și funcționalități de bază 
 +  * **22 Mai** - Implementare logică și AVR 
 +  * **24 Mai** - Implementare buton întrerupere Pin Change 
 +  * **26 Mai** - Întrerupere PWM, schimbări sumare hardware 
 +  * **27-28 Mai** - Design și Finalizare cod 
 +  * **29 Mai** - Finalizare Design, Introducere condensator,​ testare 
 + 
 </​note>​ </​note>​
  
Line 230: Line 270:
  
 <​note>​ <​note>​
-To Be Continued ​ 
  
 [1]: https://​www.youtube.com/​watch?​v=GjWr48w6o2Q [1]: https://​www.youtube.com/​watch?​v=GjWr48w6o2Q
  
 [2]: https://​www.youtube.com/​watch?​v=vf2lW4LkmMQ [2]: https://​www.youtube.com/​watch?​v=vf2lW4LkmMQ
 +
 +[3]: https://​ocw.cs.pub.ro/​courses/​_media/​pm/​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf
 +
 +[4]: https://​www.hackster.io/​jacoslabbert99/​arduino-lcd-icons-custom-characters-548f38
 +
 +[5]: https://​www.youtube.com/​watch?​v=aQy3DGSIGm4
 +
 +[6]:  https://​www.youtube.com/​watch?​v=Uv9UeYUsA8A&​t=192s
 +
 +[7]: https://​lastminuteengineers.com/​i2c-lcd-arduino-tutorial/​
 +
 +[8]: https://​forum.arduino.cc/​t/​rotary-encoder-interrupt-routine-interfering-with-servo-h/​377538/​5
 +
 +[9]: https://​forum.arduino.cc/​t/​lcd-over-i2c-not-working-with-timer2/​523211/​5
 +
 +[10]: https://​thewanderingengineer.com/​2014/​08/​11/​arduino-pin-change-interrupts/​
 +
 +[11]: https://​chat.openai.com/​
 +
 +[12]: https://​youtube.com/​shorts/​_sKWP6fl-NU?​feature=share
 +
 </​note>​ </​note>​
  
pm/prj2023/apredescu/automatic_cat_toy.1685393108.txt.gz · Last modified: 2023/05/29 23:45 by ioana.popescu1905
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