This shows you the differences between two versions of the page.
pm:prj2022:bogdanc:pinball-game [2022/05/27 23:26] stefana.dranca [Concluzii] |
pm:prj2022:bogdanc:pinball-game [2022/05/27 23:48] (current) stefana.dranca [Mesaje display LCD] |
||
---|---|---|---|
Line 7: | Line 7: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul este o implementare a clasicului joc de pinball. Jocul conține mai multe ținte, ce odată lovite cresc scorul jucătorului (afișat pe ecranul LCD). Jucătorul lovește mingea cu ajutorul unor flippere, acționate prin butoane. Odată ce mingea pătrunde printre flippere jocul se încheie! | + | Proiectul este o implementare a clasicului joc de pinball. Jocul conține mai multe ținte, ce odată lovite cresc scorul jucătorului (afișat pe ecranul LCD). Jucătorul lovește mingea cu ajutorul unor flippere, acționate prin butoane. Odată ce mingea pătrunde printre flippere de 3 ori sau jucătorul acumulează un scor maxim jocul se încheie! |
Scopul proiectului este divertismentul celor care vor să joace acest arcade game iubit de generații întregi! | Scopul proiectului este divertismentul celor care vor să joace acest arcade game iubit de generații întregi! | ||
Line 14: | Line 14: | ||
- | Se acționează un buton de start, pentru a porni jocul. Pe tot parcurul lui, scorul curent este vizibil pe ecranul LCD. Mingea va fi propulsată printr-un mecanism mecanic în spațiul de joc. Spațiul de joc este construit din carton, sub forma unui plan înclinat. Jucătorul va acționa prin două butoane laterale flipper-ele. Flipper-ele sunt montate pe servomotoare. | + | Se acționează un buton de start, pentru a porni jocul. Pe tot parcursul lui, scorul curent este vizibil pe ecranul LCD. Mingea va fi propulsată printr-un mecanism mecanic în spațiul de joc. Spațiul de joc este construit din carton, sub forma unui plan înclinat. Jucătorul va acționa prin două butoane laterale flipper-ele. Flipper-ele sunt montate pe servomotoare. |
- | De fiecare dată când un buton este apăsat, flipper-ul corespunzător se rotește cu un număr de grade (același pe tot parcurul jocului), după care revine în poziția inițială. | + | De fiecare dată când un buton este apăsat, flipper-ul corespunzător se rotește cu un număr de grade (același pe tot parcursul jocului), după care revine în poziția inițială. |
- | Țintele pe are mingea trebuie să le atingă vor avea punctaje diferite, în funcție de cât de accesibile sunt, iar pentru a detecta când sunt lovite, acestea vor conține limit switch-uri. | + | Țintele pe care mingea trebuie să le atingă vor avea punctaje diferite, în funcție de cât de accesibile sunt, iar pentru a detecta când sunt lovite, acestea vor conține limit switch-uri. |
- | Atunci când mingea trece printre flippere, jocul se încheie și se afișează scorul final. Detectarea acestui incident se face tot cu ajutorul unui limit switch montat în planul înclinat, în zona de ieșire. | + | Atunci când mingea trece printre flippere de trei ori, jocul se încheie, iar jucătorul pierde. Detectarea acestui incident se face tot cu ajutorul unui limit switch montat în planul înclinat, în zona de ieșire. Dacă jucătorul acumulează punctajul maxim înainte de a scăpa mingea de 3 ori printre flippere, acesta câștigă! |
Line 41: | Line 41: | ||
- | {{:pm:prj2022:bogdanc:schematicpinball.png?nolink|}} | + | {{:pm:prj2022:bogdanc:schematic_pinball_final.png?nolink|}} |
{{:pm:prj2022:bogdanc:tinkercad_pinball.png?nolink|}} | {{:pm:prj2022:bogdanc:tinkercad_pinball.png?nolink|}} | ||
Line 58: | Line 58: | ||
- | În **setup()** am configurat pinii de input și output și lcd-ul, am atașat pinii corespunzători variabilelor de tip Servo prin care se controlează cele două servomotoare. În **loop()** se apelează mai întâi funcția **checkStart()** prin care jocul poate fi pornit sau repornit prin apăsarea butonului de start. Dacă jocul este pornit se pot acționa cele două servomotoare prin apăsarea butoanelor (**buttonControl()**), se verifică toate target-urile (limit switch-uri) prin funțiile corespunzătoare, dar și dacă jucătorul a atins un scor maxim (**checkWin()**) sau dacă mingea a ieșit din joc (**checkSwOut()**). Dacă target-urile sunt atinse scorul este incrementat. Dacă este atins switch-ul montat la ieșirea din spațiul de joc, înainte de atingerea scorului maxim, jucătorul pierde. Dacă jucătorul atinge scorul maxim a câștigat! | + | În **setup()** am configurat pinii de input și output și lcd-ul, am atașat pinii corespunzători variabilelor de tip Servo prin care se controlează cele două servomotoare. În **loop()** se apelează mai întâi funcția **checkStart()** prin care jocul poate fi pornit sau repornit prin apăsarea butonului de start. Dacă jocul este pornit se pot acționa cele două servomotoare prin apăsarea butoanelor (**buttonControl()**), se verifică toate target-urile (limit switch-uri) prin funcțiile corespunzătoare, dar și dacă jucătorul a atins un scor maxim (**checkWin()**) sau dacă mingea a ieșit din joc (**checkSwOut()**). Dacă target-urile sunt atinse scorul este incrementat. Dacă este atins switch-ul montat la ieșirea din spațiul de joc, înainte de atingerea scorului maxim, jucătorul pierde. Dacă jucătorul atinge scorul maxim a câștigat! |
Line 64: | Line 64: | ||
- | În funcțiile care detectează dacă switch-urile au fost acționate am folosit tehnica de **debouncing** pentru a evita rezultate neașteptate, cum ar fi incrementarea scorului de mai multe ori atunci când un switch este apăsat o singură dată. Pentru a obține timpii când au fost acționate switch-urile am utilizat funcția **milis()**. | + | În funcțiile care detectează dacă switch-urile au fost acționate, am folosit tehnica de **debouncing** pentru a evita rezultate neașteptate, cum ar fi incrementarea scorului de mai multe ori atunci când un switch este apăsat o singură dată. Pentru a obține timpii când au fost acționate switch-urile am utilizat funcția **millis()**. |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 72: | Line 72: | ||
==== Mesaje display LCD ==== | ==== Mesaje display LCD ==== | ||
- | {{:pm:prj2022:bogdanc:msg1_00.jpeg?nolink&200|}} {{:pm:prj2022:bogdanc:msg_2_00.jpeg?nolink&200|}} {{:pm:prj2022:bogdanc:msg3_00.jpeg?nolink&200|}} | + | {{:pm:prj2022:bogdanc:msg1_00.jpeg?nolink&200|}} {{:pm:prj2022:bogdanc:msg_2_00.jpeg?nolink&200|}}{{:pm:prj2022:bogdanc:msg3_00.jpeg?nolink&200|}} |
==== Butoane și led ==== | ==== Butoane și led ==== | ||
Line 88: | Line 88: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | Am lucrat cu plăcere la proiect, deoarece am învățat lucruri noi și am pus în practică cunoștințe adunate de la laboratoare, iar asamblarea și testarea proiectului a fost amuzantă. Am văzut importanța rezistențelor de pull-up și pull-down, dar și a verificării circuitelor cu ajutorul multimetrului. Am realizat cât de necesară este o analiză a componentelor electrice, dar și a celorlalte elementelor ce se folosesc într-un proiect real (din punct de vedere al greutății, al design-ului, al materialelor din care sunt făcute). | + | Am lucrat cu plăcere la proiect, deoarece am învățat lucruri noi și am pus în practică cunoștințe obținute de la laborator, iar asamblarea și testarea proiectului a fost amuzantă. Am văzut importanța rezistențelor de pull-up și pull-down, dar și a verificării circuitelor cu ajutorul multimetrului. Am realizat cât de necesară este o analiză a componentelor electrice, dar și a celorlalte elemente ce se folosesc într-un proiect real (din punct de vedere al greutății, al design-ului, al materialelor din care sunt făcute). |
Am avut câteva dificultăți la integrarea tuturor elementelor și la cablarea lor, deoarece dimensiunea jocului este destul de mare, iar componentele sunt numeroase, însă le-am depășit. Am încercat mai multe mingi, iar cea aleasă are rata cea mai mare de acționare a limit switch-urilor. | Am avut câteva dificultăți la integrarea tuturor elementelor și la cablarea lor, deoarece dimensiunea jocului este destul de mare, iar componentele sunt numeroase, însă le-am depășit. Am încercat mai multe mingi, iar cea aleasă are rata cea mai mare de acționare a limit switch-urilor. | ||