Acest proiect este destinat pentru a învăța codul Morse. Pentru îndeplinirea acestui scop, exista trei moduri diferite:
Scopul proiectului este invatarea codului Morse, care este inca folosit in comunicatia radio, cat si pentru a transmite semnale de urgenta. Este, de asemenea, o activitate distractiva.
Mereu mi s-a parut interesant codul Morse si am mai invatat cateva simboluri de-a lungul timpului, iar prin acest proiect ofer un mod de a te familiariza cu el, abordand cat mai multe dintre notiunile invatate la laboratoarele de PM.
Proiectul este util pentru oricine doreste sa se distreze si sa invete codul Morse.
Logica jocului
Jocul are trei moduri de functionare:
Modul de invatare
Utilizatorul va interactiona cu placuta prin intermediul interfetei seriale (USART). El poate trimite orice simbol de la tastatura (alfanumeric), iar acesta va fi decodificat. Pe ecranul LCD vor aparea simbolurile specifice codului Morse (. sau _) ce reprezinta codificarea literei, va fi actionat buzzer-ul pentru a face un sunet similar de tonurile pulsurilor radio folosite pentru a codifica puncte si linii. De asemenea, servomotorul este actionat pentru a simula trimiterea unui punct sau a unei linii, depinzand de durata ramanerii acestuia in pozitia “apasat”.
Pentru comunicarea cu LCD-ul am folosit biblioteca LiquidCrystal_I2C.h, iar pentru comunicarea cu servomotorul biblioteca ServoTimer2.h pentru a putea folosi intreruperile pe Timer1 (servo.h foloseste intreruperi pe timer1 asa ca a fost nevoie sa folosesc alta biblioteca).
Modul test usor
Pe ecranul LCD vor aparea litere ce trebuie codificate in codul Morse de catre utilizator prin intermediul butoanelor. Am limitat numarul maxim de simboluri la 6, pentru a putea incapea mereu pe ecran; in orice caz, codificarea maxima a unui caracter alfanumeric are 5 simboluri. Pe acelasi ecran apar si timpul ramas, cat si o statistica a numarului de raspunsuri corecte din numarul total de intrebari. Pentru a marca finalul unui caracter, se va apasa un buton specific. Atunci cand se codifica caracterul, pentru apasarile de . sau _ buzzerul va scoate un sunet similar cu cel de la modul de invatare. Generarea unui caracter se face prin alegerea random dintr-un vector ce contine toate caracterele ce pot fi codificate. Timpul asociat unei codificarii unei litere este de 20 de secunde.
Modul test greu
Similar cu test usor, vor aparea pe ecranul LCD cuvinte ce trebuie codificate. Similar, buzzerul simuleaza apasarile unui simbol specific. Se va codifica pe rand, cate un caracter, apasand butonul specific. La final, prin apasarea altui buton se marcheaza finalul cuvantului. Limita de timp este de 99 de secunde, si din nou apare statistica raspunsurilor corecte.
Pentru a itera prin modurile existente am plasat un buton.
Decodificarea unui simbol
Pentru decoficarea unui simbol alfanumeric am folosit un arbore binar (practic un arbore trie, dar fiind doar doua simboluri posibile e binar) prin care iterez pentru a verifica litera la care se ajunge. Un ”.” inseamna parcurgerea arborelui stang, iar o “_” inseamna parcurgerea arborelui drept. Pentru mai multe detalii am atasat aceasta imagine.
In implementarea mea nu am folosit un arbore per se, ci am codificat acest arbore printr-un vector, inceputul arborelui stang pentru nodul i fiind la indexul 2*i + 1, iar al arborelui drept la 2*i + 2.
Am reusit sa realizez toate cele 3 moduri pe care mi le-am propus initial, astfel facilitand invatarea codului Morse printr-un joc interactiv. Proiectul este 100% functional si poate fi folosit pentru invatare si testare.
Am atasat si cateva poze din cele 3 moduri existente.
Galerie foto
E primul proiect de acest gen pe care il fac fizic (la ADIV a fost facut in TinkerCad) si este intr-adevar mult mai interesant sa legi fizic pin-urile, sa lipesti si verifici piesele.
Per total sunt multumit de rezultatul proiectului si am si invatat mai multe simboluri din codul Morse. :D
Etapele proiectului: