This shows you the differences between two versions of the page.
pm:prj2022:dene:learn_morse [2022/05/26 10:45] alexandru.ilie2108 [Hardware Design] |
pm:prj2022:dene:learn_morse [2022/05/27 11:52] (current) alexandru.ilie2108 [Hardware Design] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Sistem pentru invatare cod Morse ====== | ====== Sistem pentru invatare cod Morse ====== | ||
- | <note tip> | + | |
* Autor: Ilie Alexandru-Gabriel | * Autor: Ilie Alexandru-Gabriel | ||
* Grupa: 331CB | * Grupa: 331CB | ||
- | </note> | + | |
===== Introducere ===== | ===== Introducere ===== | ||
- | <note tip> | ||
Acest proiect este destinat pentru a învăța codul Morse. Pentru îndeplinirea acestui scop, exista trei moduri diferite: | 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, | * î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, | ||
Line 17: | Line 16: | ||
Proiectul este util pentru oricine doreste sa se distreze si sa invete codul Morse. | Proiectul este util pentru oricine doreste sa se distreze si sa invete codul Morse. | ||
- | </note> | + | |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | ||
{{pm:prj2022:dene:ilie_alexandru_schema_bloc.png}} | {{pm:prj2022:dene:ilie_alexandru_schema_bloc.png}} | ||
- | </note> | + | |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | ||
Lista pieselor: | Lista pieselor: | ||
* Arduino UNO | * Arduino UNO | ||
Line 35: | Line 32: | ||
* Fire de legătură | * Fire de legătură | ||
* Rezistențe | * Rezistențe | ||
- | </note> | ||
- | {{pm:prj2022:dene:sch_el_alex_ilie.png}} | + | {{pm:prj2022:dene:schema_electrica_pm_alexandru_ilie.png?800x700}} |
+ | |||
+ | {{pm:prj2022:dene:sch_el_Alexandru_Ilie_2.png}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | <note tip> | + | **Logica jocului** |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Jocul are trei moduri de functionare: |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * modul de invatare |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * modul test usor |
- | * (etapa 3) surse şi funcţii implementate | + | * modul test greu |
- | </note> | + | |
+ | **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. | ||
+ | |||
+ | {{pm:prj2022:dene:morse_tree.png}} | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Am reusit sa realizez toate cele 3 moduri pe care mi le-am propus initial, astfel facilitand invatarea codului Morse printr-un joc interactiv. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Proiectul este 100% functional si poate fi folosit pentru invatare si testare. |
- | </note> | + | |
+ | Am atasat si cateva poze din cele 3 moduri existente. | ||
+ | |||
+ | **Galerie foto** | ||
+ | |||
+ | {{pm:prj2022:dene:mod_0_-_invatare.jpeg?500x400}} | ||
+ | {{pm:prj2022:dene:mod_1_-_test_usor.jpeg?500x400}} | ||
+ | {{pm:prj2022:dene:mod_2_-_test_greu.jpeg?500x400}} | ||
===== Concluzii ===== | ===== 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 ===== | ===== Download ===== | ||
- | <note warning> | ||
- | 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**. | ||
- | </note> | ||
+ | {{pm:prj2022:dene:ilie_alexandru_proiect_pm.zip}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | Etapele proiectului: |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 22 Aprilie - au ajung piesele |
- | </note> | + | * 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 ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | **Resurse Software** |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | [[https://en.wikipedia.org/wiki/Morse_code|Informatii despre codul Morse]] |
+ | |||
+ | [[https://www.101computing.net/morse-code-using-a-binary-tree/|Implementare decodificare cu arbori]] | ||
+ | |||
+ | [[https://ocw.cs.pub.ro/courses/pm/lab/lab2-2022|Laboratoare]] | ||
+ | |||
+ | [[https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library|Biblioteca pentru LiquidCrystal cu I2c]] | ||
+ | |||
+ | [[https://github.com/nabontra/ServoTimer2|Biblioteca pentru servomotor ce nu foloseste Timer1]] | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||