This is an old revision of the document!


Signal Corps — Old School Morse Code Trainer

Introducere

Signal Corps Trainer este un dispozitiv embedded pentru antrenament și decodare a codului Morse, construit în jurul microcontrolerului ATmega328P-XMINI și al unei chei telegrafice vintage sovietice.

Ce face:

  • Permite utilizatorului să trimită cod Morse fizic, prin apăsarea cheii telegrafice, decodând automat caracterele în timp real
  • Oferă un mod Trainer în care sistemul generează litere aleatorii și verifică dacă utilizatorul le transmite corect
  • Oferă un mod Decoder în care orice semnal de intrare este interpretat și afișat pe ecranul LCD
  • Vizualizează forma de undă a semnalului Morse pe ecranul OLED grafic
  • Oferă feedback audio prin buzzer piezo și feedback vizual prin LED-uri colorate

Scopul proiectului: Proiectul urmărește să transforme un obiect vintage — cheia telegrafică sovietică — într-un instrument educațional funcțional. Codul Morse nu este doar istorie: este folosit activ în radioamatorism, aviație civilă și comunicații de urgență.

Ideea de pornire: Fascinația pentru tehnologia analogică și dorința de a înțelege cum comunicau operatorii radio înainte de era digitală. O cheie telegrafică dintr-un sertar uitat a devenit punctul de plecare al unui sistem complet de învățare.

De ce este util: Spre deosebire de aplicațiile software de învățare Morse, acest dispozitiv oferă senzația mecanică autentică a unei chei telegrafice reale și sunetul caracteristic pe care îl auzeau operatorii acum 70 de ani. Feedback-ul fizic și audio simultan accelerează procesul de memorare a codului.

Descriere Generală

Sistemul este organizat în patru blocuri funcționale care interacționează în timp real prin pinii microcontrolerului:

Schemă bloc:

┌────────────────────────────────────────────────────────────────┐
│                    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   │              │
│  │  Senzor sunet│                               │              │
│  └──────────────┘                               │              │
│                                                 │              │
│  ┌──────────────┐                               │              │
│  │  Cheie Morse │──── D2 (INT0) ────────────────┤              │
│  │  Vintage URSS│                               │              │
│  └──────────────┘                               │              │
│                                                 │              │
│  ┌──────────────┐                               │              │
│  │  BTN Mod     │──── D6 ───────────────────────┤              │
│  │  Trainer/Dec.│                               │              │
│  └──────────────┘                               │              │
│                                                 │              │
│                      ┌──────────────────────────┘              │
│                      │                                         │
│              D7 ─────►──── R1(220Ω) ──── LED Verde             │
│              D8 ─────►──── R2(220Ω) ──── LED Roșu              │
│              D9 ─────►──── Buzzer Piezo Pasiv                  │
│                                                                │
└────────────────────────────────────────────────────────────────┘

Descrierea modulelor:

  • ATmega328P-XMINI — Unitatea centrală de procesare. Rulează logica de decodare Morse, măsoară durata impulsurilor (dot/dash), gestionează afișajele I2C și controlează toate elementele de feedback. Debuggerul on-board mEDBG permite programarea directă prin USB fără programator extern.
  • LCD 1602 (I2C, 0x27) — Afișează textul decodat caracter cu caracter și mesajele de stare ale sistemului (modul activ, scor în Trainer, erori).
  • OLED 0.96” SSD1306 (I2C, 0x3C) — Vizualizează forma de undă a semnalului Morse în timp real (scroll orizontal) și afișează animații de feedback la răspunsuri corecte/greșite.
  • Senzor sunet KY-037 — Monitorizează nivelul de zgomot ambiental prin ieșirea analogică (AO → A0). Dacă pragul este depășit, LED-ul roșu se aprinde ca avertizare.
  • Cheie telegrafică vintage — Interfața principală de intrare. Conectată la D2 (INT0) pentru detecție prin întrerupere hardware. Generează impulsuri de durată variabilă (dot < 150 ms, dash > 150 ms).
  • Buton selector mod (SW2) — Conectat la D6, comută între modul Trainer și modul Decoder la fiecare apăsare.
  • Buzzer piezo pasiv — Generează un ton de 700 Hz pe D9 (PWM, funcția ``tone()``) sincronizat cu semnalul cheii.
  • LED Verde / LED Roșu — Feedback vizual instant: verde = răspuns corect în modul Trainer, roșu = eroare sau zgomot ambiental detectat.

Hardware Design

Listă de Piese

Referință Componentă Rol Cant.
U1 ATmega328P-XMINI Microcontroler principal x1
U2 LCD 1602 cu interfață I2C Afișaj text 16×2 x1
U3 OLED 0.96” SSD1306 Afișaj grafic 128×64 x1
SEN1 Senzor sunet KY-037 Intrare acustică analogică x1
SW1 Cheie telegrafică vintage Intrare haptică Morse x1
SW2 Push-button Selector mod Trainer/Decoder x1
BZ1 Buzzer Piezo Pasiv Ieșire audio ton Morse x1
LED1 LED Verde 5mm Indicator răspuns corect x1
LED2 LED Roșu 5mm Indicator eroare / zgomot x1
R1, R2 Rezistor 220Ω Limitare curent LED-uri x2
R3 Rezistor 10kΩ Pull-up extern (opțional) x1
C1 Condensator 100nF Decuplare alimentare x1
Breadboard + fire jumper Conectică prototip

Conexiuni Electrice — Pinout

Toți pinii de mai jos se referă la placa ATmega328P-XMINI. Alimentarea întregului sistem provine de la cei 5V furnizați prin USB de pe placă — nu este necesar un alimentator extern.

Pin MCU Tip Conectat la
PC4 (A4) SDA LCD 1602 + OLED SSD1306 (magistrală I2C partajată)
PC5 (A5) SCL LCD 1602 + OLED SSD1306 (magistrală I2C partajată)
PC0 (A0) Analog KY-037 ieșire analogică (AO)
D2 INT0 Cheie telegrafică (întrerupere hardware)
D6 Digital Buton selector mod
D7 Digital LED Verde prin R1 (220Ω)
D8 Digital LED Roșu prin R2 (220Ω)
D9 PWM Buzzer Piezo Pasiv — funcția tone()
5V Power Alimentare toate componentele
GND Power Masă comună

Note Tehnice

Magistrala I2C este partajată între LCD și OLED. Cele două dispozitive coexistă pe același bus SDA/SCL datorită adreselor diferite: LCD = 0x27, OLED = 0x3C.

  • Pull-up: SW1 și SW2 folosesc rezistențele pull-up interne ale MCU (INPUT_PULLUP). Rezistența de 10kΩ externă este opțională.
  • Decuplare: Condensatorul C1 (100nF) trebuie plasat cât mai aproape de pinii VCC/GND ai MCU-ului pentru filtrarea eficientă a zgomotului de alimentare.
  • Alimentare: Întregul sistem este alimentat la 5V prin USB de la placa X-MINI.

Schemă Electrică

Circuitul a fost asamblat pe breadboard cu fire jumper Tată-Tată și Tată-Mamă. Schema detaliată include:

  • Magistrala I2C cu ambele afișaje conectate în paralel
  • Rezistențele de protecție R1 și R2 în serie cu LED-urile
  • Condensatorul de decuplare C1 între VCC și GND
  • Cheia telegrafică conectată direct între D2 și GND (pull-up intern activ)

Software Design

TODO — va fi completat într-o actualizare viitoare.

Rezultate Obținute

  • Cheia telegrafică sovietică funcționează corect ca întrerupător simplu — detectată prin INPUT_PULLUP pe D2
  • Buzzerul piezo generează un ton de 700 Hz sincronizat cu apăsarea cheii, fără latență perceptibilă
  • Ecranul OLED afișează starea curentă și forma de undă a semnalului în timp real
  • Magistrala I2C partajată între LCD și OLED funcționează stabil cu adresele 0x27 și 0x3C
  • Sistemul de feedback LED verde/roșu răspunde corect la comenzile de pe pinii D7/D8

Concluzii

Proiectul demonstrează că tehnologia vintage poate fi reinterpretată într-un context educațional modern. Cheia telegrafică sovietică, departe de a fi un simplu obiect de colecție, devine o interfață tactilă autentică și o punte între comunicația analogică a secolului XX și microelectronica contemporană.

Valoarea principală a acestui proiect constă în experiența de învățare: utilizatorul nu învață Morse dintr-o aplicație abstractă, ci printr-un obiect fizic cu istorie, cu senzație mecanică distinctă și cu sunetul caracteristic pe care îl auzeau operatorii radio acum 70 de ani.

Dificultăți întâmpinate:

  • Configurarea corectă a board-ului ATmega328P-XMINI în Arduino IDE (driver mEDBG)
  • Partajarea magistralei I2C fără conflicte de adrese
  • Calibrarea pragurilor de timing pentru dot/dash în funcție de viteza utilizatorului

Download

Arhiva proiectului conține:

  • Codul sursă complet (.ino)
  • Schema electrică (PDF)
  • Fișier README.md cu instrucțiuni de instalare și utilizare
  • ChangeLog cu istoricul versiunilor

Fișierele se încarcă pe wiki folosind facilitatea Add Images or other files.

Jurnal

TODO — va fi completat pe măsură ce proiectul avansează.

Bibliografie / Resurse

Resurse Hardware

Resurse Software

pm/prj2026/cezar.zlatea/rodion.balaniuc.1778452018.txt.gz · Last modified: 2026/05/11 01:26 by rodion.balaniuc
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