This is an old revision of the document!


Dice Simulator - Voicila Alexandra

Introducere

Proiectul va simula aruncarea unui zar. In cazul in care ai noroc si nimeresti 6, se va deschide o cutie cu o mica surpriza. In total, vei avea 3 sanse de aruncare care vor fi contorizate si afisate prin intermediul unui ecran. Cred ca este un proiect amuzant si interactiv. In acelasi timp, consider ca proiectul imbina atat cunostinte de PM, cat si de probabilitate/matematica. Pentru a afla care este surpriza va astept la PM fair ;-)

Descriere generală

Prin apasarea butonului se va simula aruncarea. In functie de numarul random aruncat, se vor aprinde ledurile specifice. La fiecare aruncare, pe ecranul LCD-ului se va afisa un mesaj corespunzator: numarul de incercari ramase sau joc pierdut/castigat. In cazul in care se aprind toate cele 6 leduri, se va activa servomotorul care va duce la deschiderea cutiei. Dupa cele 3 incercari esuate de a arunca numarul castigator, jocul se reseteaza. Schema bloc:

Hardware Design

Lista componente:
-Arduino UNO
-LCD I2C 1604
-leduri
-fire
-rezistente variabile
-buton
-Servomotor SG90 cu limitator

Software Design

Dezvoltarea codului s-a realizat in Arduino IDE.
Biblioteci folosite au fost LiquidCrystal_I2C.h, Servo.h pentru controlarea servomotorului, respectiv a display-ul I2C de catre Arduino.
Pentru initializare, am folosit variabile globale precum button (pinul la care este conectat butonul), pozitia initiala a servomotorului (aleasa convenabil prin testare).
Functii:
-setup() - initializarea servomotorului, starii pinilor, serialei (pentru afisarea mesajelor de debug), a lcd-ului si a intreruperii folosite la apasarea butonului.
-displayNumOnDice() - se genereza numarul random in functie de care se face aprinderea ledurilor si afisarea unui mesaj specific pe lcd. In cazul in care se nimereste 6, jocul este “castigat”, servomotorul se activeaza, deschizand cutia pe care o pastreaza deschisa 5s, un timp suficient pentru jucator sa isi ridice premiul.
-ISR() - rutina de tratare a intreruperii, facuta dupa debounceTime
-rollDice() - functia specifica “aruncarii zarului”
-loop() - apeleaza functia precedenta
-generateRandomSeed() - pentru a creste complexitatea, am folosit aceasta functie de generare a seed-ului in locul functiei obisnuite de random. Folosind functia de analogRead, se realizeaza o citire pe un pin neconectat, “in aer”. Dar acest lucru nu este suficient deoarece tensiunea nu fluctueaza la un nivel considerabil. Folosindu-ma totusi de valorile citite, interpretate ca biti, se creeaza prin shiftari si adunari un rezultat final pentru seed pe 32 de biti.

Rezultate Obţinute

Etapa urmatoare

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

07.05 - etapa 2
21.05 - etapa hardware
28.05 - etapa software

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware. https://rheingoldheavy.com/better-arduino-random-values/

Export to PDF

pm/prj2023/fstancu/alexandra.voicila.1685305854.txt.gz · Last modified: 2023/05/28 23:30 by alexandra.voicila
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