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.