Table of Contents

Chug-o-meter

Nume: Raducanu Cristiana
Grupă: 334CB

Introducere

Chug-o-meter reprezinta un mic accesoriu de luat la iesiri sau la petreceri. El ia forma unei competitii de baut (responsabil), castigatorul fiind cel care poate termina cel mai rapid paharul. Este simplu si usor de folosit, avand butoane pentru fiecare start de runda si pentru fiecare player nou al rundei. Pe langa aceasta competitie, la final, participantii mai pot testa ceva in plus pentru un posibil nou turnament: cine a baut cel mai mult. Asadar, proiectul are atasat si o improvizatie de etilotest, nu la fel de estetic ca cel al politistilor, dar cu siguranta functional. Drink responsibly!

Descriere generală

Un timer va porni la ridicarea unei greutati (pahar) de pe senzorul de forta rezistiv, astfel incepand randul unui player. La asezarea paharului la loc, acesta se va opri si timpul va fi salvat in memoria placutei. La finalul unei runde, va fi anuntat playerul pe ecranul LCD, impreuna cu aprinderea unor leduri si pornirea unui buzzer. Apoi, pentru “etilotest”, functioneaza asemanator dar de data aceasta informatia va fi adusa de senzorul de detectie alcool.

Hardware Design

Software Design

Pentru implementarea acestui proiect am folosit IDE-ul Arduino. O biblioteca suplimentara folosita a fost LiquidCrystal_I2C.h.

Chug-o-meterul: In aceasta parte am setat si folosit 2 butoane, un buzzer, un ecran LCD, un rezistor pentru masurarea fortei. Pentru implementarea aceasta am folosit o clasa separata pentru buton, fiindu-mi astfel mai usor sa contorizezi actiunile celor doua butoane. In cadrul acesteia am doua functii: init, unde setez modul pinului si ii citesc starea curenta, initiala, si onPress, unde salvez ultima stare a butonului (sa pot retine ca a fost apasat), si intorc apasat/neapasat.

Am implementat un usor sistem de leaderboard pentru acest joc. Proiectul are doua butoane: unul de START JOC si unul de URMATORUL JUCATOR. De fiecare data cand START JOC este apasat, se restarteaza un leaderboard si numarul de jucatori. Apoi se va afisa pe rand mesajul “GET READY!” impreuna cu numarul jucatorului curent, asteptandu-se un nou pahar pus. Dupa ce un player a terminat de baut si a pus paharul la loc, va fi apasat butonul URMATORUL JUCATOR, astfel pastrandu-se scorul sau in leaderboard si resetandu-se timerul pentru urmatorul. Am ales sa implementez cu un numar maxim de jucatori, astfel cand se va incerca participarea unui numar mai mare, jocul se va reseta, afisand bineinteles intai castigatorul curent.

Functia winner() trece prin urmatorii pasi: -afiseaza mesajul de final de joc; -calculeaza castigatorul, facand minimul dintre timpii playerilor; -afiseaza numarul castigatorului; -reseteaza leaderboard-ul si numar jucatorilor;

Functia get_force() imi intoarce valoarea citita de rezistor si o transforma intr-un format human-readable, urmand apoi sa fie folosita pentru functionarea jocului. Pentru sunetul de la finalul unui joc, am adaugat notele sunetului de “hooray” in fisierul Notes.h, folosindu-ma apoi de functia tone() pentru a reda melodai respectiva. Aceasta parte am implementat-o in functia song().

Partea de etilotest: Codul este unul simplu, in functie de valoarea extrasa de la senzorul de gaze, se stabileste starea utilizatorului: baut/nu. Rezultatul acestui test este afisat pe un ecran LCD, impreuna cu un mesaj drept reactie. De asemenea, impreuna cu rezultatul afisat se va aprinde un LED de culoare corespunzatoare: rosu daca a depasit limita alcoolului, verde in caz contrar. Asadar, in setup() initializez cursorul, las un timp de asteptare pentru senzorul ce trebuie intai sa se incalzeasca, setezi pinii ledurilor. In loop() citesc valoarea senzorului, apoi in functie de aceasta afisez pe LCD si aprind unul din leduri.

Rezultate Obţinute

In final, am avut mici probleme cu etilotestul..senzorul fiind nu foarte sensibil :D si nu nimereste chiar intotdeauna. De asemenea, au fost batai de cap si cu senzorul de presiune, cautand acel sweet spot pentru prea multa vreme de fiecare data cand testam. Jos adaug un demo unde aceste obstacole nu se observa! Ideal version: :
https://youtu.be/gqYhxZOUpR4

Concluzii

In urma proiectului am invatat, inclusiv strict in cautarea unei idei pentru proiect, diverse aspecte ale microprocesoarelor. A fost o experienta placuta si sper ca pe viitor sa pot face lucruri mai complexe de atat folosind diverse componente si o parte de software mai complexa.

Download

raducanucristiana334cb.zip

Jurnal

Bibliografie/Resurse

Export to PDF