miercuri, 15 noiembrie 2017

RTL-SDR, o noua provocare pentru mine ( partea 2 )

           Experimentele mele in domeniul RTL-SDR continua. Dupa finalizarea primei variante a programului au urmat ore intregi de teste si comparatii cu alte programe. Am urmarit, in mod deosebit, care este nivelul minim al semnalelor receptionate ce pot fi afisate si identificate pe ecranul waterfall. Deoarece experienta mea in domeniul DSP este mica, am crezut ca nivelele afisate sint puternic dependente de algoritmii ce stau la baza calculului FFT. Astfel, am testat mai multi algoritmi, iar rezultatele au fost absolut identice. Am continuat sa experimentez si am analizat cu atentie rezultatele, iar la final am ajuns la concluzia urmatoare: nivelul minim afisat este dependent de numarul esantioanelor analizate in FFT. Astfel, cu cit este mai mare, cu atit mai bine. Pentru afisarea unor semnale foarte slabe este necesar folosirea unui numar de 128 x 1024 esantioane. La o asemenea valoare am constatat ca toate semnalele radio ce se aud in difuzorul statiei mele, indiferent cit de slabe sint, se disting si pe ecranul waterfall. Datorita incarcarii procesorului, marirea numarului de esantioane are ca rezultat intirzieri in afisarea spectrului. Dupa testarea vitezei de calcul al tuturor alogoritmilor disponibili, cel mai rapid a fost, algoritmul FFTW. Toate testele au fost facute in aceleasi conditii, fara afisarea spectrului in ecranul waterfall. 
            Cine doreste sa testeze algoritmii FFT, are la dispozitie programul si codul sursa al acestora.


Descarca codul sursa si executabilul.

Pentru realizarea proiectului m-am inspirat din:
http://raxp2.blogspot.ro/2016/04/rtl-sdr.html
http://www.fftw.org/install/windows.html
http://www.ibiblio.org/pub/academic/computer-science/history/pdp-11/rt/misc/mega/fft.pas


---  73's   YO7FWS  ---

marți, 7 noiembrie 2017

RTL-SDR, o noua provocare pentru mine ( partea 1 )

            Cu ceva timp in urma am intrat in posesia unui stick dedicat receptiilor TV si adaptat de catre radioamatori receptiilor SDR, avind in componenta sa cipul RTL2832U. Dupa citeva experimente reusite am trecut la montarea acestuia in interiorul transceiverului meu, un FT897D, pe post de panoramic adapter. Pentru a vizualiza semnalele radio am folosit mai multe programe, dintre acestea evidentiindu-se HDSDR si SDR Console. HDSDR este cel mai apropiat nevoilor mele, dar SDR Console mi se pare mult mai deosebit. Desi ambele programe imi plac foarte mult, acestea nu sint complete si prezinta anumite dezavantaje functionale. Datorita acestor aspecte, am luat hotarirea de a incerca sa imi dezvolt o aplicatie proprie, care sa se apropie cit mai mult cerintelor mele. 
            Din fericire pentru mine, pe internet exista o multime de aplicatii Open Source care le-am folosit ca sursa de inspiratie si care m-au ajutat sa dezvolt prima mea aplicatie simpla. Pentru inceput am invatat cum pot seta si afisa un anumit segment din spectrul radio. Deorece vizualizarea emisiunilor radio foarte slabe este greoaie, am hotarit sa afisez spectrul radio numai printr-un ecran waterfall. Acesta afiseaza amplitudinea semnalelor pe diferite nivele de culoare, usurind diferentierea emisiunilor radio de zgomotul de fond. Desi fiecare comanda trimisa receptorului este urmata de un raspuns din partea acestuia, in aceasta etapa a programului, am ales sa nu tratez acest raspuns, considerindu-l intotdeauna ca fiind OK.


            Programul a fost scris in mediul de dezvoltare Borland Delphi 6 si o mica parte a fost inspirat din sursele programelor lui Sergey G. Badlo. Pentru afisarea ecranului waterfall am testat mai multe Fast Furier Transform (FFT) cu rezultate foarte asemanatoare. In aceasta versiune a programului am folosit FFT din codul sursa al autorului sus mentionat, la care am adus usoare modificari. Pentru afisarea culorilor din waterfall am creat o paleta proprie de 64 de nivele de culoarea in spectrul Albastru - Galben - Rosu.
            Deoarece programul este in teste, afisez numai segmente mici din spectrul radio, doar pentru a evidentia rezutatele codului scris de mine. Proiectul este destul de captivant si cere multa pregatire din partea celui care il abordeaza. Personal sper sa il duc la bun sfirsit.

Descarca codul sursa si executabilul.

Pentru realizarea proiectului m-am inspirat din:
http://delphiexamples.com/application/appsynchthread.html
http://ajoo.blog/intro-to-rtl-sdr-part-ii-software.html
http://raxp2.blogspot.ro/2016/04/rtl-sdr.html
http://www.m0dts.co.uk/files/simple_rtlsdr_fft.c


---  73's   YO7FWS  ---

joi, 2 noiembrie 2017

Alarma SMS in Arduino cu ESP8266


            Sint multe situatii cind doresti sa monitorizezi un eveniment, iar daca acesta se intimpla, sa fii anuntat in timp real. La ideea unui coleg de serviciu am incercat sa gasesc o solutie pentru monitorizarea unei usi aflata intr-o anumita locatie si anuntarea proprietarului la momentul deschiderii ei. Am luat in calcul toate posibilitatile si cea mai simpla solutie a fost monitorizarea deschiderii usii printr-un senzor Reed si anuntarea proprietarului printr-un mesaj SMS. Iata cum arata aceasta solutie.
            In magazine, pentru monitorizarea usilor si ferestrelor se gasesc niste dipozitive de alarma foarte ieftine care emit un sunet puternic cind acestea sint deschise. Dispozitivul are in componenta sa doua module, respectiv un circuit electronic si un magnet. Acestea trebuiesc montate unul in apropierea celuilalt pe elemente diferite, respectiv usa si tocul usii. Momentul deschiderii sau inchiderii usii este sesizat de un senzor Reed si apoi anuntat acustic intr-un difuzor piezoelectric. Montajul se alimenteaza cu doua baterii de 1,5V si poate fi pornit sau oprit dintr-un comutator basculant. Datorita constructiei sale, acest dispozitiv se preteaza perfect proiectului meu.


            Momentul cind usa este deschisa este semnalizat prin expedierea unui mesaj SMS. Dar cum este posibila aceasta? O metoda ar putea fi conectarea dispozitivul nostru prin wireless sau bluetooth la un telefon mobil si prin comenzi AT sa trimita un mesaj SMS. Desi aceasta solutie este perfect posibila, personal, nu o agreez. Cea mai simpla solutie pentru expedierea mesajelor SMS, este transmiterea lor din internet. Pentru aceasta dispozitivul nostru trebuie sa se conecteze la internet si apoi sa transmita mesajul. Conectarea la internet se face cu ajutorul unui modul din familia ESP8266, respectiv ESP - 01, care permite conectarea wireless. Pentru trimiterea mesajelor SMS am ales un provider local, care prin intermediul unei platforme API permite acest serviciu. Astfel am cumparat un pachet de mesaje SMS la un pret foarte convenabil cu o perioada de valabilitate de 6 luni. 
            Pentru realizarea proiectului, am eliminat circuitul electronic si difuzorul piezoelectric, pastrind in continuarea carcasa. Circuitul electronic a fost inlocuit cu altul construit de mine. Schema de principiu este foarte simpla si poate fi vazuta in imaginea urmatoare.


           Modulul ESP - 01 este alimentat de la baterii prin intermediul unui senzor Reed si un comutator basculant. Comutatorul este folosit pentru pornirea si oprirea functionari sistemului, iar senzorul Reed pentru activarea alarmei cind usa este deschisa. Senzorul original a fost inlocuit cu un senzor care contine un contact Normal Inchis (NC). Principiul de functionare este simplu: 
      - daca comutatorul se gaseste in pozitia Pornit (ON) si usa este inchisa, contactul Reed este basculat in pozitia Normal Deschis (NO) si astfel modulul ESP - 01 ramine fara alimentare.
      - cind usa este deschisa, contactul Reed basculeaza in pozitia Normal Inchis (NC), pornind alimentarea modulului ESP - 01 si alarmarea proprietarului prin conectarea la internet si transmiterea mesajului SMS.
            In acest moment proiectul prezinta si un dezavantaj. Ori de cite ori este pornit sau oprit sistemul de catre proprietar, acesta va trimite un mesaj SMS. Acest dezavantaj ar putea fi inlaturat prin introducerea unei intirzieri intre momentul deschiderii usii si momentul transmiterii mesajului SMS, interval de timp in care se poate opri sistemul. Personal, nu agreez aceasta varianta, scopul urmarit de catre mine fiind scurtarea intervalului de timp dintre activarea alarmei la deschiderea usii si trimiterea mesajului SMS.


           Montajul electronic a fost realizat pe o placuta de cablaj imprimat cu dimensiunile de 27 x 27 mm. Deoarece pe viitor este posibila upgradarea acestei versiuni, am luat decizia montarii modulului ESP - 01 prin intermediul unui conector autoconstruit. Am ales aceasta varianta deoarece spatiul nu permitea conectori clasici. Astfel am folosit pini terminali de 0.6 mm folositi la cablurile electrice la care am indepartat portiunea PVC colorata si i-am montat prin cositorire pe cablajul imprimat.


            Montarea celor doua module componente ale sistemului trebuie facuta cu atentie, astfel incit in momentul inchiderii usii, senzorul Reed trebuie sa se gaseasca in pozitia Normal Deschis (NO). 
            Pentru conectarea wireless la routerul de internet si transmiterea mesajului SMS in interiorul modulului ESP - 01 trebuie incarcat un program. Acest program l-am scris cu ajutorul mediului de dezvoltare Arduino. Datorita simplitatii sale nu voi descrie functionarea programului.
            De remarcat la acest proiect este faptul ca timpul de conectare la router si transmiterea mesajului SMS este puternic influentat de starea de incarcare a bateriilor. Scaderea tensiunii de alimentare sub 3V va avea ca efect marirea intervalului de timp intre momentul activarii alarmei si momentul transmiterii mesajului SMS. Pe viitor voi incerca sa inlatur acest neajuns prin folosirea unei baterii de 12V. Sistemul functioneaza perfect si este deja montat pe usi si ferestre.
            


Descarca:

La executarea proiectului m-am inspirat din:

Pentru trimiterea mesajelor SMS folosesc serviciile:

---  73's   YO7FWS  ---