18 aprilie 2022

Arduino RDS PI decoder

Dupa construirea receptorului FM, urmatoarea etapa a fost integrarea unui decodor RDS. In prima faza intentia mea a fost intelegerea principiului de transmitere RDS si decodarea acestuia. Ulterior, dupa ce am citit mai multe documente pe internet, am trecut la experimente. Folosind semnalele de ceas si date, furnizate de un receptor Sony ST-SE370, am incercat si am reusit sa decodez. Am folosit un Arduino Nano, care s-a potrivit perfect nivelelor semnalelor din receptor. Ultima parte a proiectului a reprezentat simplificarea codului sursa, micsorarea timpului de decodare si extragerea doar a datelor care ma interesau, respectiv identificatorul PI.

Transmisiunea RDS se face in paralel cu semnalul audio stereo in cadrul unui semnal multiplex. Transmisia este seriala, cu o viteza de 1187.5 biti / secunda. Datele sint impartite pe grupuri. Acestea la rindul lor sint impartite in blocuri: A, B, C, D. Fiecare bloc are 26 biti, fiecare grup are 26 x 4 = 104 biti. Intr-o secunda sint transmise cca 11 grupuri. Blocul A contine identificatorul PI. El se regaseste in primul bloc din fiecare grup transmis, din 104 in 104 biti. In concluzie, blocul A este transmis de cca 11x / secunda, respectiv odata la 87.5 milisecunde.

Daca blocul A este transmis de cca 11x / secunda, cred ca este deajuns, in cadrul unor reflexii MS, de scurta durata, daca semnalul este destul de puternic, sa pot identifica PI-ul postului transmis. Pentru aceasta imi este necesar o receptie a grupului, respectiv 87.5 milisecunde, pentru a decoda si memora temporar PI-ul postului receptionat. Urmat dupa aceea de inca o receptie a grupului, alte 87.5 milisecunde, pentru a decoda dinou ID-ul si apoi sa il compar cu primul PI temporar. In caz de egalitate, totul este ok, am identificat postul, altfel, reiau procesul de la inceput.

Aceasta ultima afirmatie este pura teorie. Nu am testat-o inca. Teoretic ar putea sa functioneze, practic voi afla in vara aceasta, cu ocazia Perseidelor. In anii precedenti am receptionat des semnale de scurta durata via MS intr-un receptor auto. Anul acesta am posiblitatea sa si testez.

Schema de principiu este simpla. Pini de date si masa au fost conectati direct la microcontroler. Nu a fost necesara nicio interfatare, nivelele semnalelor sint perfect compatibile, 0 - 5V. Pinii D2 si D3 sint folositi ca intrari si sint conectati pull-up intern din setarile software. Rezultatul decodarii se trimite prin intermediul portului serial in USB la calculator si evidentiat intr-un monitor. Alimentarea se face din portul USB al calculatorului.

Software-ul seteaza pinii ca intrari si activeaza o intrerupere interna pe pinul de ceas. Dupa receptionarea a 26 de biti de date se incearca identificarea blocului prin calcularea CRC. Daca CRC nu este bun operatia se repeta. Cind CRC este ok, se identifica blocul. Daca blocul este altul decit A, se calculeaza dupa citi biti urmeaza blocul A si se reia asteptarea blocului A. Cind blocul A este identificat, se decodeaza si memoreaza PI. Se asteapta timp de 104 biti, se receptioneaza urmatorul bloc A, fara sa se mai verifice CRC, se extrage PI si se compara cu primul decodat. Daca este in regula se trimite prin intermediul portului serial catre calculator pentru a fi afisat pe monitor.

Aceasta este pe scurt descrierea algoritmului decodorului meu si intentiile mele pentru a-l folosii. Mai multe detalii dupa experimentele ce urmeaza sa le intreprind.

Sa vina vara, eu sint pregatit!

Constantin Bădican - YO7FWS

Descarca: codul sursa

Pentru realizarea proiectului m-am inspirat din:

---  73's   YO7FWS  ---

15 aprilie 2022

Alertă E Sporadic prin SMS

Salut!
Curind incepe sezonul de propagare E Sporadic in unde ultrascurte. Sinteti pregătiți? 
Iată ce mi-am construit: un sistem de alertare prin SMS in caz de propagare E Sporadic.
Dispozitivul monitorizează anunțurile de pe DXCluster și dacă sint raportate legaturi radio via E Sporadic, mă anunță in cel mai scurt timp, printr-un SMS. Folosesc dispozitivul din anul 2017 și de-a lungul timpului mi-a adus reale satisfacții.

Hardware

Circuitul are in componența sa două module interconectate: un microcontroler ESP8266 și o placă de dezvoltare GSM, respectiv IOT-GA6. Microcontrolerul este componenta principală a dispozitivului. Acesta se conectează prin WiFi la internet și dupa aceea la un server DXCluster. Tot el monitorizeză anunțurile și declansează alertarea. Placa de dezvolare GSM asigură conexiunea telefonică cu un operator și in caz de alertă, transmite SMS. Comunicația intre cele două module se face prin intermediul porturilor seriale din dotare. Acestea sint alimentate cu tensiune prin intermediul a două stabilizatoare de tensiune: 3.3V și 5V. Conectarea la rețeaua WiFi, logarea la serverul DXCluster și conectarea la rețeaua GSM sint semnalizate prin intermediul a două LED-uri.


Intregul  montaj a fost realizat pe o bucată de cablaj imprimat cu dimensiunile 58 x 53 mm. Montajul a fost introdus intr-o carcasă din plexiglass. 


Principiul de funcționare
Pe DXCluster sint anunțate continuu legăturile radio realizate intre corespondenți și suplimentar, pentru informarea comunității, modul de propagare. Dispozitivul monitorizează conținutul acestor anunțuri și cind identifică cuvinte cheie precum: <ES> sau ESporadic, se prealertează sau anunță prin SMS utilizatorul. 

In timpul funcționării, dispozitivul se poate afla intr-una dintre următoarele stări: starea de veghe, starea de prealertare și starea de alertare.

Atunci cind nu este propagare radio dispozitivul se află in stare de veghe. In tot acest timp, monitorizează anunțurile in vederea identificării unuia care implică propagare de tip E Sporadic.

In starea de prealertare se trece intotdeauna numai din starea de veghe. Tranziția are loc doar atunci cind se identifică un anunț care implică propagare de tip E Sporadic. Invers, trecerea din starea de prealertare in starea de veghe, se face atunci cind după anunțul de prealertare, timp de 15 minute, nu mai este identificat un alt anunț asemănător. In acest caz, prealertarea a fost o alarmă falsa, o deschidere de scurtă durată a propagării radio.

Alerta propriu-zisă, starea de alertă, se activează intotdeauna numai din starea de prealertare. Condiția de alertare este dată de apariția după primul anunț de prealertare a unui alt anunț asemănător, intr-o perioadă mai scurtă de 15 minute. In concluzie, intr-un interval mai mic de 15 minute, primul anunț declanșează prealertarea, iar al doilea declanșează alerta SMS, respectiv semnalizează deschiderea propagării radio.

Trecerea din stare de alertă in stare de veghe reprezintă sfirșitul propagării radio. Aceasta se consideră incheiată cind timp de 60 minute de la ultimul anunț, care implică propagare de tip E Sporadic, nu se identifică un alt anunț asemănător.

Cuvintele cheie și duratele de timp folosite au fost astfel alese incit să nu existe alerte SMS false sau rateuri. 

Software
Programul care gestionează dispozitivul a fost scris in limbajul Arduino. Pentru o bună funcționare au fost implementate urmatoarele funcții:
- conectarea la internet prin rețeaua wireless și semnalizarea conectării
- conectarea la un server DXCluster, logarea și semnalizarea logării
- conectarea la rețeaua GSM și semnalizarea conectării
- filtrarea anunțurilor
- identificarea anunțurilor, prealertarea, alertarea și revenirea la starea de veghe
- trimiterea anunțurilor prin SMS
- menținerea activă a conexiunii cu serverul DXCluster
- resetarea dispozitivului in caz de eroare


Alerte false
Dispozitivul nu este perfect. Nu este capabil să identifice anunțurile false. Acesta tratează toate anunțurile identic. Pentru a micșora numărul de alerte false trebuiesc imbunătățiți algoritmii de analiză și filtrare. Din fericire aceste anunțuri false sint tot mai puține in ultima perioadă.

Iată două cazuri care pot genera alerte false:

Are loc o legatură radio intre doi corespondenți și acestia raportează fiecare legatura pe DXCluster. Dacă anunțurile apar consecutiv, intr-o perioadă mai scurtă de 15 minute, dispozitivul le identifică ca două anunțuri: unul de prealertare și celalalt de alertare. In realitate avem o singură legatură radio.
Soluție: verificarea incrucișată a indicativelor din anunțuri și ignorarea ultimului anunț in caz de egalitate.

Un alt caz de alertă falsă este atunci cind se raportează greșit legătura radio. Aceasta se intimplă cind legăturile radio Tropo sint raportate ca legaturi radio E Sporadic. 
Soluție: calcularea distanței intre locatoare și dacă este <700..1000 km, se va ignora ultimul anunț.

Alerta prin SMS se poate adresa unui destinatar sau grup de destinatari. De asemenea, aceasta poate fi inlocuită cu alertă prin email sau un alt tip de alertă. Totul ține de preferințele utilizatorului.

Să inceapă sezonul, eu sint pregatit!
73!

Constantin Bădican - YO7FWS

---  73's   YO7FWS  ---