This shows you the differences between two versions of the page.
|
pm:prj2026:cezar.zlatea:rodion.balaniuc [2026/05/07 23:09] rodion.balaniuc |
pm:prj2026:cezar.zlatea:rodion.balaniuc [2026/05/14 16:55] (current) rodion.balaniuc [Concluzii] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Signal Corps — Old School Morse Code Trainer ====== | + | ====== Signal Corps - Old School Morse Code Trainer ====== |
| - | ===== Introduction ===== | + | ===== Introducere ===== |
| - | **Signal Corps Trainer** is an embedded device for training and decoding Morse code, built around the **ATmega328P-XMINI** microcontroller and a **vintage Soviet telegraph key**. | + | <note tip> |
| + | Signal Corps Trainer este un dispozitiv embedded de antrenament si decodare a codului Morse, construit pe placa ATmega328P-XMINI si o cheie telegrafică vintage sovietică ca interfata de intrare. | ||
| + | </note> | ||
| - | **What it does:** | + | Ce face proiectul: |
| - | * Allows the user to physically send Morse code by pressing the telegraph key, automatically decoding characters in real time | + | * Utilizatorul trimite cod Morse apasand cheia telegrafică, iar sistemul decodează caracterele in timp real si le afisează pe LCD |
| - | * Provides a **Trainer** mode in which the system generates random letters and checks whether the user transmits them correctly | + | * In modul Trainer, sistemul propune o litera aleatorie si verifica daca a fost transmisa corect |
| - | * Provides a **Decoder** mode in which any incoming signal is interpreted and displayed on the LCD screen | + | * In modul Decoder, orice semnal primit este interpretat si afişat fara restrictii |
| - | * Visualizes the Morse signal waveform on the OLED graphical display | + | * Pe ecranul OLED se vizualizeaza forma de unda a semnalului |
| - | * Provides audio feedback through a piezo buzzer and visual feedback through colored LEDs | + | * Buzzerul si LED-urile ofera feedback audio-vizual imediat |
| - | **Project goal:** | + | Scopul proiectului este sa transforme o cheie telegrafică intr-un instrument functional de invatare. Codul Morse nu tine doar de istorie: este folosit in radioamatorism, aviatie civila si comunicatii de urgenta. |
| - | The project aims to transform a vintage object — the Soviet telegraph key — into a fully functional educational tool. Morse code is not merely history: it is still actively used in amateur radio, civil aviation, and emergency communications. | + | |
| - | **Starting idea:** | + | <note tip> |
| - | A fascination with analogue technology and the desire to understand how radio operators communicated before the digital era. A telegraph key forgotten in a drawer became the starting point for a complete learning system. | + | Fata de aplicatiile software de invatare Morse, acest dispozitiv ofera senzatia mecanica reala a cheii si sunetul pe care il auzeau operatorii acum cateva decenii. Combinatia dintre feedback fizic si audio face memorarea mai rapida decat invatatul vizual. |
| + | </note> | ||
| - | **Why it is useful:** | + | ===== Descriere Generala ===== |
| - | Unlike software-based Morse learning applications, this device provides the authentic mechanical feel of a real telegraph key and the characteristic sound heard by operators 70 years ago. The simultaneous physical and audio feedback accelerates the memorization of the code. | + | |
| - | ===== General Description ===== | + | **Schema bloc:** |
| - | The system is organized into four functional blocks that interact in real time through the microcontroller's pins: | + | {{:pm:prj2026:cezar.zlatea:signalcorpsdiagramdrawio.png?700|Schema bloc Signal Corps Trainer}} |
| - | **Block diagram:** | + | Descrierea modulelor: |
| - | <code> | + | * **ATmega328P-XMINI** ruleaza intreaga logica: masoara durata impulsurilor de la cheie, decodifica caracterele Morse, actualizeaza afisajele si controleaza buzzerul si LED-urile. Programarea se face direct prin USB via mEDBG, fara programator extern. |
| - | ┌────────────────────────────────────────────────────────────────┐ | + | |
| - | │ Signal Corps Trainer │ | + | |
| - | │ │ | + | |
| - | │ ┌──────────────┐ I2C (SDA/SCL) ┌─────────────────────┐ │ | + | |
| - | │ │ LCD 1602 │◄───────────────────►│ │ │ | + | |
| - | │ │ (0x27) │ │ ATmega328P-XMINI │ │ | + | |
| - | │ └──────────────┘ │ │ │ | + | |
| - | │ │ MCU + mEDBG │ │ | + | |
| - | │ ┌──────────────┐ I2C (SDA/SCL) │ │ │ | + | |
| - | │ │ OLED 0.96" │◄───────────────────►│ PC4=SDA PC5=SCL │ │ | + | |
| - | │ │ SSD1306 │ │ PC0=A0 D2=INT0 │ │ | + | |
| - | │ │ (0x3C) │ │ D6 D7 D8 │ │ | + | |
| - | │ └──────────────┘ │ D9(PWM) │ │ | + | |
| - | │ └──────────┬──────────┘ │ | + | |
| - | │ ┌──────────────┐ │ │ | + | |
| - | │ │ KY-037 │──── AO ──────────────── PC0 │ │ | + | |
| - | │ │ Sound sensor│ │ │ | + | |
| - | │ └──────────────┘ │ │ | + | |
| - | │ │ │ | + | |
| - | │ ┌──────────────┐ │ │ | + | |
| - | │ │ Morse key │──── D2 (INT0) ────────────────┤ │ | + | |
| - | │ │ Vintage USSR│ │ │ | + | |
| - | │ └──────────────┘ │ │ | + | |
| - | │ │ │ | + | |
| - | │ ┌──────────────┐ │ │ | + | |
| - | │ │ Mode BTN │──── D6 ───────────────────────┤ │ | + | |
| - | │ │ Trainer/Dec.│ │ │ | + | |
| - | │ └──────────────┘ │ │ | + | |
| - | │ │ │ | + | |
| - | │ ┌──────────────────────────┘ │ | + | |
| - | │ │ │ | + | |
| - | │ D7 ─────►──── R1(220Ω) ──── Green LED │ | + | |
| - | │ D8 ─────►──── R2(220Ω) ──── Red LED │ | + | |
| - | │ D9 ─────►──── Passive Piezo Buzzer │ | + | |
| - | │ │ | + | |
| - | └────────────────────────────────────────────────────────────────┘ | + | |
| - | </code> | + | |
| - | **Module descriptions:** | + | * **LCD 1602 (I2C, 0x27)** afiseaza caracterele decodate si starea curenta a sistemului (modul activ, scor, erori). |
| - | * **ATmega328P-XMINI** — Central processing unit. Runs the Morse decoding logic, measures pulse durations (dot/dash), manages the I2C displays, and controls all feedback elements. The on-board mEDBG debugger enables direct programming via USB without an external programmer. | + | * **OLED 0.96" SSD1306 (I2C, 0x3C)** arata forma de unda a semnalului in timp real, cu scroll orizontal, si animatii la fiecare raspuns. |
| - | * **LCD 1602 (I2C, 0x27)** — Displays the decoded text character by character and system status messages (active mode, Trainer score, errors). | + | * **Senzorul KY-037** citeste nivelul de zgomot ambiental pe A0. Daca depaseste un prag setat, LED-ul rosu se aprinde ca avertizare. |
| - | * **OLED 0.96" SSD1306 (I2C, 0x3C)** — Visualizes the Morse signal waveform in real time (horizontal scroll) and shows feedback animations for correct/incorrect answers. | + | * **Cheia telegrafică** este conectata la D2 (INT0) si genereaza impulsuri de durata variabila. Clasificarea dot/dash se face pe baza timpului cat e apasata. |
| - | * **KY-037 Sound Sensor** — Monitors the ambient noise level via the analogue output (AO → A0). If the threshold is exceeded, the red LED lights up as a warning. | + | * **Butonul SW2 pe D6** comuta intre modul Trainer si modul Decoder la fiecare apasare. |
| - | * **Vintage telegraph key** — Primary input interface. Connected to D2 (INT0) for hardware interrupt detection. Generates pulses of variable duration (dot < 150 ms, dash > 150 ms). | + | * **Buzzerul piezo pasiv pe D9** scoate un ton de 700 Hz cat timp cheia e apasata, folosind functia tone(). |
| - | * **Mode selector button (SW2)** — Connected to D6, switches between Trainer and Decoder mode on each press. | + | * **LED verde** confirma un raspuns corect in modul Trainer, **LED rosu** semnalizeaza o greseala sau zgomot detectat. |
| - | + | ||
| - | * **Passive piezo buzzer** — Generates a 700 Hz tone on D9 (PWM, ``tone()`` function) synchronized with the key signal. | + | |
| - | + | ||
| - | * **Green LED / Red LED** — Instant visual feedback: green = correct answer in Trainer mode, red = error or ambient noise detected. | + | |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | ==== Bill of Materials ==== | + | ==== Lista de Piese ==== |
| - | ^ Reference ^ Component ^ Role ^ Qty ^ | + | ^ Referinta ^ Componenta ^ Rol ^ Cant. ^ |
| - | | U1 | ATmega328P-XMINI | Main microcontroller | x1 | | + | | U1 | ATmega328P-XMINI | Microcontroler principal | x1 | |
| - | | U2 | LCD 1602 with I2C interface | 16x2 text display | x1 | | + | | U2 | LCD 1602 cu interfata I2C | Afisaj text 16x2 | x1 | |
| - | | U3 | OLED 0.96" SSD1306 | 128x64 graphical display | x1 | | + | | U3 | OLED 0.96" SSD1306 | Afisaj grafic 128x64 | x1 | |
| - | | SEN1 | KY-037 sound sensor | Analogue acoustic input | x1 | | + | | SEN1 | Senzor sunet KY-037 | Intrare acustica analogica | x1 | |
| - | | SW1 | Vintage telegraph key | Haptic Morse input | x1 | | + | | SW1 | Cheie telegrafică vintage | Intrare haptica Morse | x1 | |
| - | | SW2 | Push-button | Trainer/Decoder mode selector | x1 | | + | | SW2 | Push-button | Selector mod Trainer/Decoder | x1 | |
| - | | BZ1 | Passive Piezo Buzzer | Morse audio output | x1 | | + | | BZ1 | Buzzer Piezo Pasiv | Iesire audio ton Morse | x1 | |
| - | | LED1 | Green LED 5mm | Correct answer indicator | x1 | | + | | LED1 | LED Verde 5mm | Indicator raspuns corect | x1 | |
| - | | LED2 | Red LED 5mm | Error / noise indicator | x1 | | + | | LED2 | LED Rosu 5mm | Indicator eroare / zgomot | x1 | |
| - | | R1, R2 | 220Ω resistor | LED current limiting | x2 | | + | | R1, R2 | Rezistor 220Ω | Limitare curent LED-uri | x2 | |
| - | | R3 | 10kΩ resistor | External pull-up (optional) | x1 | | + | | R3 | Rezistor 10kΩ | Pull-up extern (optional) | x1 | |
| - | | C1 | 100nF capacitor | Power supply decoupling | x1 | | + | | C1 | Condensator 100nF | Decuplare alimentare | x1 | |
| - | | — | Breadboard + jumper wires | Prototype wiring | — | | + | | -- | Breadboard + fire jumper | Conectica prototip | -- | |
| - | ==== Electrical Connections — Pinout ==== | + | ==== Conexiuni Electrice - Pinout ==== |
| - | ^ MCU Pin ^ Type ^ Connected to ^ | + | <note tip> |
| - | | PC4 (A4) | SDA | LCD 1602 + OLED SSD1306 (shared I2C bus) | | + | Toti pinii se refera la placa ATmega328P-XMINI. Alimentarea la 5V vine direct prin USB, nu e nevoie de sursa externa. |
| - | | PC5 (A5) | SCL | LCD 1602 + OLED SSD1306 (shared I2C bus) | | + | </note> |
| - | | PC0 (A0) | Analog | KY-037 analogue output (AO) | | + | |
| - | | D2 | INT0 | Telegraph key (hardware interrupt) | | + | ^ Pin MCU ^ Tip ^ Conectat la ^ |
| - | | D6 | Digital | Mode selector button | | + | | PC4 (A4) | SDA | LCD 1602 + OLED SSD1306 (magistrala I2C partajata) | |
| - | | D7 | Digital | Green LED via R1 (220Ω) | | + | | PC5 (A5) | SCL | LCD 1602 + OLED SSD1306 (magistrala I2C partajata) | |
| - | | D8 | Digital | Red LED via R2 (220Ω) | | + | | PC0 (A0) | Analog | KY-037 iesire analogica (AO) | |
| - | | D9 | PWM | Passive Piezo Buzzer — tone() function | | + | | D2 | INT0 | Cheie telegrafică (intrerupere hardware) | |
| - | | 5V | Power | Power supply for all components | | + | | D6 | Digital | Buton selector mod | |
| - | | GND | Power | Common ground | | + | | D7 | Digital | LED Verde prin R1 (220Ω) | |
| + | | D8 | Digital | LED Rosu prin R2 (220Ω) | | ||
| + | | D9 | PWM | Buzzer Piezo Pasiv -- functia tone() | | ||
| + | | 5V | Power | Alimentare toate componentele | | ||
| + | | GND | Power | Masa comuna | | ||
| - | ==== Technical Notes ==== | + | ==== Note Tehnice ==== |
| <note important> | <note important> | ||
| - | The I2C bus is **shared** between the LCD and the OLED. Both devices coexist on the same SDA/SCL bus thanks to their different addresses: LCD = **0x27**, OLED = **0x3C**. | + | Magistrala I2C este partajata intre LCD si OLED. Coexistenta functioneaza fara probleme deoarece cele doua dispozitive au adrese diferite: LCD = 0x27, OLED = 0x3C. |
| </note> | </note> | ||
| - | * **Pull-up:** SW1 and SW2 use the MCU's internal pull-up resistors (''INPUT_PULLUP''). The external 10kΩ resistor is optional. | + | * SW1 si SW2 folosesc pull-up intern (''INPUT_PULLUP''). Rezistenta de 10kΩ externa este optionala. |
| - | * **Decoupling:** Capacitor C1 (100nF) should be placed as close as possible to the MCU's VCC/GND pins for effective power supply noise filtering. | + | * C1 (100nF) se plaseaza cat mai aproape de pinii VCC/GND ai MCU-ului pentru a filtra zgomotul de pe linia de alimentare. |
| - | * **Power supply:** The entire system is powered at 5V via USB from the X-MINI board. | + | * Intreg sistemul e alimentat la 5V prin USB de pe placa X-MINI. |
| - | ==== Electrical Schematic ==== | + | ==== Schema Electrica ==== |
| - | The circuit was assembled on a breadboard using male-to-male and male-to-female jumper wires. The detailed schematic includes: | + | Circuitul este asamblat pe breadboard cu fire jumper. Schema include: |
| - | * The I2C bus with both displays connected in parallel | + | * Magistrala I2C cu cele doua afisaje in paralel |
| - | * Protection resistors R1 and R2 in series with the LEDs | + | * R1 si R2 in serie cu LED-urile |
| - | * Decoupling capacitor C1 between VCC and GND | + | * C1 intre VCC si GND |
| - | * The telegraph key connected directly between D2 and GND (internal pull-up active) | + | * Cheia telegrafică intre D2 si GND, cu pull-up intern activ |
| ===== Software Design ===== | ===== Software Design ===== | ||
| <note tip> | <note tip> | ||
| - | TODO — to be completed in a future update. | + | TODO -- va fi completat intr-o actualizare viitoare. |
| </note> | </note> | ||
| - | ===== Results ===== | + | ===== Rezultate Obtinute ===== |
| - | * The Soviet telegraph key works correctly as a simple switch — detected via ''INPUT_PULLUP'' on D2 | + | <note tip> |
| - | * The piezo buzzer generates a 700 Hz tone synchronized with key presses, with no perceptible latency | + | * Cheia telegrafică functioneaza corect ca intrerupator simplu, detectata prin ''INPUT_PULLUP'' pe D2 |
| - | * The OLED display shows the current state and signal waveform in real time | + | * Buzzerul genereaza 700 Hz sincronizat cu apasarea cheii, fara latenta perceptibila |
| - | * The shared I2C bus between the LCD and OLED operates stably with addresses 0x27 and 0x3C | + | * OLED-ul afiseaza starea si forma de unda in timp real |
| - | * The green/red LED feedback system responds correctly to commands on pins D7/D8 | + | * Magistrala I2C cu doua dispozitive la adrese 0x27 si 0x3C functioneaza stabil |
| + | * LED-urile verde si rosu raspund corect pe D7 si D8 | ||
| + | </note> | ||
| - | ===== Conclusions ===== | + | ===== Concluzii ===== |
| - | The project demonstrates that vintage technology can be reinterpreted in a modern educational context. The Soviet telegraph key, far from being a mere collector's item, becomes an authentic tactile interface and a bridge between 20th-century analogue communication and contemporary microelectronics. | + | Proiectul a pornit de la o cheie telegrafică veche si a ajuns un dispozitiv functional de invatare. Ce e interesant e ca obiectul fizic schimba complet experienta fata de o simpla aplicatie: senzatia mecanica si sunetul buzzerului fac invatatul mai intuitiv. |
| - | The primary value of this project lies in the learning experience: the user does not learn Morse code through an abstract application, but through a physical object with history, a distinctive mechanical feel, and the characteristic sound heard by radio operators 70 years ago. | + | Pe parcurs au aparut cateva probleme neasteptate, in special cu configurarea driver-ului mEDBG in Arduino IDE si cu calibrarea timpilor pentru dot/dash la viteze diferite de tastare. Partajarea magistralei I2C intre doua dispozitive a necesitat atentie la adrese, dar a functionat fara modificari hardware. |
| - | Challenges encountered: | + | <note tip> |
| - | * Correctly configuring the ATmega328P-XMINI board in Arduino IDE (mEDBG driver) | + | Dificultati intampinate: |
| - | * Sharing the I2C bus without address conflicts | + | * Configurarea board-ului ATmega328P-XMINI in Arduino IDE si instalarea driver-ului mEDBG |
| - | * Calibrating dot/dash timing thresholds to match the user's keying speed | + | * Partajarea magistralei I2C fara conflicte de adrese |
| + | * Calibrarea pragurilor de timing dot/dash in functie de viteza de tastare | ||
| + | </note> | ||
| ===== Download ===== | ===== Download ===== | ||
| <note warning> | <note warning> | ||
| - | The project archive contains: | + | Arhiva proiectului contine: |
| - | * Complete source code (''.ino'') | + | * Codul sursa complet (''.ino'') |
| - | * Electrical schematic (PDF) | + | * Schema electrica (PDF) |
| - | * ''README.md'' file with installation and usage instructions | + | * Fisier ''README.md'' cu instructiuni de instalare si utilizare |
| - | * ''ChangeLog'' with version history | + | * ''ChangeLog'' cu istoricul versiunilor |
| - | Files are uploaded to the wiki using the **Add Images or other files** facility. | + | Fisierele se incarca pe wiki folosind facilitatea **Add Images or other files**. |
| </note> | </note> | ||
| - | ===== Journal ===== | + | ===== Jurnal ===== |
| <note tip> | <note tip> | ||
| - | TODO — to be completed as the project progresses. | + | * **25.04.2026** - Comanda componentelor |
| + | * **26-30.04.2026** - Saptamana de asteptare a livrarii, citire datasheet-uri | ||
| + | * **02.05.2026** - Primire componente, verificare individuala | ||
| + | * **03.05.2026** - Test cheie telegrafică cu multimetru si lipirea a 2 cabluri cu ciocan de lipit | ||
| + | * **04.05.2026** - Setup Arduino IDE, driver mEDBG, primul upload functional | ||
| + | * **05.05.2026** - Asamblare breadboard, test cheie + buzzer + OLED | ||
| + | * **06.05.2026** - Integrare LCD pe I2C, verificare coexistenta cu OLED | ||
| + | * **07.05.2026** - Documentatie pe wiki, schema bloc draw.io | ||
| </note> | </note> | ||
| - | ===== Bibliography / Resources ===== | + | ===== Bibliografie / Resurse ===== |
| - | ==== Hardware Resources ==== | + | ==== Resurse Hardware ==== |
| - | * [[https://www.microchip.com/en-us/development-tool/atmega328p-xmini|ATmega328P-XMINI User Guide — Microchip Technology]] | + | * [[https://www.microchip.com/en-us/development-tool/atmega328p-xmini|ATmega328P-XMINI User Guide - Microchip Technology]] |
| - | * [[https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf|SSD1306 OLED Driver Datasheet — Solomon Systech]] | + | * [[https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf|SSD1306 OLED Driver Datasheet - Solomon Systech]] |
| - | * [[https://arduinomodules.info/ky-037-microphone-sound-sensor-module/|KY-037 Sound Sensor Module — Arduino Modules Info]] | + | * [[https://arduinomodules.info/ky-037-high-sensitivity-sound-detection-module/|KY-037 Sound Sensor Module - Arduino Modules Info]] |
| - | ==== Software Resources ==== | + | ==== Resurse Software ==== |
| - | * [[https://github.com/adafruit/Adafruit_SSD1306|Adafruit SSD1306 Library — GitHub]] | + | * [[https://github.com/adafruit/Adafruit_SSD1306|Adafruit SSD1306 Library - GitHub]] |
| - | * [[https://github.com/adafruit/Adafruit-GFX-Library|Adafruit GFX Library — GitHub]] | + | * [[https://github.com/adafruit/Adafruit-GFX-Library|Adafruit GFX Library - GitHub]] |
| - | * [[https://www.arduino.cc/reference/en/|Arduino Language Reference — arduino.cc]] | + | * [[https://www.arduino.cc/reference/en/|Arduino Language Reference - arduino.cc]] |
| - | * [[https://www.itu.int/rec/R-REC-M.1677/en|Morse Code Timing Standard — ITU-R M.1677-1]] | + | * [[https://www.itu.int/rec/R-REC-M.1677/en|Morse Code Timing Standard - ITU-R M.1677-1]] |
| <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> | ||