Proiectul are funcționalitățile unui zar cu un număr configurabil de fețe (4, 6, 8, 10, 12, 20). Random seed-ul este generat de un accelerometru, care măsoară deplasarea fizică a plăcuței.
Pentru afișarea numărului final, microprocesorul preia la un anumit moment de timp valoarea dată de accelerometru, iar pe baza acesteia calculează numărul care va fi afișat.
Ideea a pornit din necesitatea de a avea mai multe zaruri cu un număr variabil de fețe, pentru jocuri de tabletop RPG (Dungeons & Dragons, Starfinder, etc.). Astfel, acest zar oferă un element aleator aproape perfect, fără riscul unui “loaded die” (un zar care are centrul de greutate deplasat către o anumită fața, oferind probabilități inegale pentru fețe).
In plus, fiind de 20 de ori mai mare decât un zar normal, sunt șanse mult mai mici să-l pierd (ceea ce reprezintă, în opinia mea, principalul avantaj).
Microcontroller-ul va avea câteva butoane pentru selectarea numărului de fețe ale zarului N (4, 6, 8, 10, 12, 20) și încă o intrare pentru accelerometru. Ca ieșire, va afișa pe ecran un număr între 1 și N.
Modulele vor funcționa conform schemei:
Din punct de vedere software, programul va funcționa ca un FSM, asemănător schemei următoare:
Lista de piese:
Schema electrica (microcontroller & accelerometru):
Am folosit 3 biblioteci:
Acestea oferă funcții intuitive pentru inițializarea și transmisia/recepția de date:
În principal, folosesc următoarele notații:
Programul are 3 părti esențiale:
switch(state) { case MENU: execute_menu(); case ROLL: execute_roll(); case FINAL: execute_final(); case INIT: execute_init(); case CHOOSE_DIE: execute_choose_die(); case CHOOSE_TIME: execute_choose_time(); }
if (state == MENU) { if (is_pressed(_C) && !button[_C]) { button[_C] = 1; state = ROLL; } if (is_pressed(_L) && !button[_L]) { button[_L] = 1; state = CHOOSE_TIME; } if (is_pressed(_R) && !button[_R]) { button[_R] = 1; state = CHOOSE_DIE; } }
În final, am obținut un prototip funcțional pentru un zar electronic, având numărul de fețe și timpul de așteptare configurabile. Există următoarele meniuri/stări:
Prin cele 3 butoane de pe breadboard se poate naviga între aceste meniuri.
Poze cu rezultatul final:
All in all, am reușit să duc la bun sfârșit un proiect amuzant, la care mi-a făcut plăcere să lucrez. Am avut lucruri de învățat din el și mă bucur că l-am ales, iar acum mai rămâne doar să-l testez la D&D.