This is an old revision of the document!


Sistem pentru invatare cod Morse

  • Autor: Ilie Alexandru-Gabriel
  • Grupa: 331CB

Introducere

Acest proiect este destinat pentru a învăța codul Morse. Pentru îndeplinirea acestui scop, exista trei moduri diferite:

  • învățare, unde se pot scrie cuvinte prin interfața seriala pentru a vedea care este traducerea lor in Morse, atat prin sunet, cat si printr-un motor ce va fi acționat pentru a simula impulsurile,
  • test usor, fără limite de timp, axat în principiu pe litere și numere
  • test complex, cu limita de timp, ce are la baza un dicționar de cuvinte, care poate fi mărit prin interfață seriala. Pentru a scrie un simbol, se vor apasa butoane și se va simula, de asemenea, sunetul. Datele vor apărea pe un ecran LCD.

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.

Descriere generală

Hardware Design

Lista pieselor:

  • Arduino UNO
  • ecran LCD cu I2C
  • Butoane
  • Buzzer
  • Servomotor
  • Fire de legătură
  • Rezistențe

Software Design

Logica jocului

Jocul are trei moduri de functionare:

  • modul de invatare
  • modul test usor
  • modul test greu

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.

Rezultate Obţinute

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

mod_0_-_invatare.jpeg mod_1_-_test_usor.jpeg mod_2_-_test_greu.jpeg

Concluzii

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

Download

Jurnal

Etapele proiectului:

  • 22 Aprilie - au ajung piesele
  • 29 Aprilie - Prezentare Milestone 1
  • 14 Mai - verificare functionare corecta piese
  • 15 Mai - algoritm de decodificare
  • 21 Mai - implementare mod invatare
  • 22 Mai - implementare moduri de test
  • 23 Mai - Prezentare Milestone 2
  • 26 Mai - Wiki

Bibliografie/Resurse

pm/prj2022/dene/learn_morse.1653641512.txt.gz · Last modified: 2022/05/27 11:51 by alexandru.ilie2108
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