This shows you the differences between two versions of the page.
pm:prj2023:iotelea:pacanea [2023/05/29 19:44] david_gabriel.nitu [Hardware Design] |
pm:prj2023:iotelea:pacanea [2023/05/30 15:26] (current) david_gabriel.nitu [Hardware Design] |
||
---|---|---|---|
Line 27: | Line 27: | ||
Lista de piese: | Lista de piese: | ||
* Arduino nano | * Arduino nano | ||
- | * Ecran LCD 1602A | + | * Ecran LCD 1602A |
* Potentiometru | * Potentiometru | ||
* Senzor ultrasonic distanta HC-SR04 | * Senzor ultrasonic distanta HC-SR04 | ||
Line 43: | Line 43: | ||
Senzorul ultrasonic si butonul sunt legate ca input la placuta Arduino nano. Butonul este legat la un rezistor de 10k Ω. LED-urile sunt legate ca output, si necesita folosirea unor rezistori de 330 Ω. Tot ca output este legat si ecranul LCD 1602A, care are nevoie si el de un rezistor de 330 Ω pentru a nu face scurt, si care la randul lui primeste input de la potentiometru. Pentru lipituri am folosit un ciocan de lipit imprumutat de la un prieten:). Arduino nano este alimentat printr-un micro USB de la laptop. | Senzorul ultrasonic si butonul sunt legate ca input la placuta Arduino nano. Butonul este legat la un rezistor de 10k Ω. LED-urile sunt legate ca output, si necesita folosirea unor rezistori de 330 Ω. Tot ca output este legat si ecranul LCD 1602A, care are nevoie si el de un rezistor de 330 Ω pentru a nu face scurt, si care la randul lui primeste input de la potentiometru. Pentru lipituri am folosit un ciocan de lipit imprumutat de la un prieten:). Arduino nano este alimentat printr-un micro USB de la laptop. | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Am folosit libraria LiquidCrystal.h pentru a afisa text pe LCD. | + | Am folosit libraria LiquidCrystal.h pentru a afisa text pe LCD.\\ |
+ | Initial am spus ce pin e input si ce pin e output in setup().\\ | ||
+ | Cam tot se petrece in loop(), in care sunt folosite functii auxiliare precum:\\ | ||
+ | readDistance(int, int) care returneaza distanta citita de senzor.\\ | ||
+ | generateOutcome(int) care este practic toata implementarea ideii de pacanea. Se alege un numar random si in functie de probabilitatile alese, se intra intr-unul dintre if-uri afisandu-se rezultatul si updatandu-se suma.\\ | ||
+ | rollLights() care face LED-urile sa palpaie.\\ | ||
+ | resetLED() care evident opreste LED-urile.\\ | ||
+ | printBank() care afiseaza suma de bani curenta.\\ | ||
+ | printSafeCode() care arata PIN-ul de la lacat.\\ | ||
+ | Inainte de orice avem label-ul start care e folosit pentru a reseta pacaneaua cand balanta ajunge la 0. Asadar flow-ul din loop incepe cu afisarea banilor din banca. Banca este updatata daca senzorul detecteaza o bancnota, si balanta noua este afisata. Pe LCD ramane balanta curenta pana la apasarea butonului. Avem apoi label-ul bet_again care ne permite sa jucam din nou in cazul in care nu pierdem banii. Dupa ce butonul e apasat, jocul de pacanea incepe, implementat prin functiile auxiliare si prin cateva variabile precum buttonCounter(care ma ajuta sa imi dau seama daca dupa finalul unui bet e apasat iar butonul) si afterBetTime(care ma ajuta sa vad daca au trecut 5 sec dupa finalizarea bet-ului curent pentru a afisa PIN-ul). Astfel sunt 2 cazuri mari: betul se termina cu 0 bani in banca si se revine la label-ul start, sau betul se termina neutru sau mai bine, caz in care ori se afiseaza PIN-ul de la lacat ori se revine la label-ul bet_again(daca butonul este apasat in mai putin de 5 secunde de la finalizarea betului).\\ | ||
+ | Am folosit si Serial.println pentru a utiliza UART. | ||
===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||
+ | Mai jos am atasat un link catre un demo scurt. | ||
+ | https://youtube.com/shorts/tP9zxzsjyGQ?feature=share | ||
+ | Parerea mea e ca a iesit un proiect destul de fun si usor de jucat. | ||
+ | {{:pm:prj2023:iotelea:alfaromeo.jpeg?300|}} | ||
+ | {{:pm:prj2023:iotelea:alfaromeo2.jpeg?300|}} | ||
+ | {{:pm:prj2023:iotelea:alfaromeo3.jpeg?300|}} | ||
+ | {{:pm:prj2023:iotelea:alfaromeo4.jpeg?300|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost o experienta tare sa fac acest proiect. Primele probleme au aparut inca din alegerea pieselor pentru ca am luat din greseala alt ecran lcd decat pe cel pe care il voiam:). M-am descurcat totusi cu cel pe care l-am comandat. As zice ca cea mai mare dificultate a fost la lipire, insa am avut noroc sa am un ciocan de lipit la indemana si sa primesc niste sfaturi despre folosirea lui. Alta problema a fost la buton, pentru ca am vrut sa fac cu intreruperi insa nu m-am uitat de dinainte la specificatiile placutei si am aflat ca nu toate intrarile pot face intreruperi de-abia dupa ce lipisem tot. // | ||
+ | In ciuda tuturor aceste obstacole, acest proiect m-a invatat multe despre lucrul practic si despre cata rabdare e necesara pentru a face ceva. Chiar daca pacaneaua mea nu e foarte complicata, m-am distrat realizand-o si am dobandit multe cunostinte noi:)// | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2023:iotelea:pacaneaua.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
+ | * 2.05.2023: Am ales tema si am confirmat cu Ionut ca e ok | ||
+ | * 5.05.2023: Am inceput sa lucrez la schema hardware, si am ales piesele | ||
+ | * 9.05.2023: Am creat pagina de ocw si am adaugat introducerea si descrierea generala | ||
+ | * 12.05.2023: Mi-au venit piesele comandate | ||
+ | * 16.05.2023: Am terminat schema hardware si am inceput sa conectez piesele | ||
+ | * 20.05.2023: Am facut rost de ciocan de lipit de la un prieten si am lipit tot | ||
+ | * 25.05.2023: Am inceput sa scriu soft-ul pentru pacanea, am confectionat cutia de carton si am facut senzorul sa poata cat de cat sa recunoasca bancnotele | ||
+ | * 27.05.2023: Am terminat partea de software | ||
+ | * 29.05.2023: Am terminat pagina de ocw | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | Lab 1\\ | ||
+ | Lab 5\\ | ||
+ | Lab 6\\ | ||
+ | https://github.com/arduino-libraries/LiquidCrystal\\ | ||
+ | \\ | ||
<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> | ||