Licenta Gaita Andrei Varanta5 [606455]

UNIVERSITATEA DIN CRAIOV A
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE [CALCULATOARE ȘI TEHNOLOGIA
INFORMAȚIEI / AUTOMATICĂ, ELECTRONICĂ ȘI
MECATRONICĂ]
PROIECT DE DIPLOMĂ
Andrei Laurențiu Gaiță
COORDONATOR ȘTIINȚIFIC
Aparat de radio FM folosind Arduino, Nicolae Enescu
Septembrie, 2018
CRAIOV A
1

UNIVERSITATEA DIN CRAIOV A
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE [CALCULATOARE ȘI TEHNOLOGIA
INFORMAȚIEI / AUTOMATICĂ, ELECTRONICĂ ȘI MECATRONICĂ ]
APARAT DE RADIO FM FOLOSIND ARDUINO
Andrei Laurențiu Gaiță
COORDONATOR ȘTIINȚIFIC
Aparat de radio FM folosind Arduino , Nicolae Enescu
Septembrie, 2018
CRAIOV A
2

„Învățătura este o comoară care își urmează stăpânul pretutindeni.”
Proverb popular
3

DECLARAȚIE DE ORIGINALITATE
Subsemnatul ANDREI LAURENȚIU GAIȚĂ, student: [anonimizat], Calculatoare și Electronică a Universității din Craiova, certific prin
prezenta că am luat la cunoștință de cele prezentate mai jos și că îmi asum, în acest context,
originalitatea proiectului meu de licență:
cu titlul AP ARAT DE RADIO FM FOLOSIND ARDUINO ,
coordonată de AP ARAT DE RADIO FM FOLOSIND ARDUINO , NICOLAE ENESCU
prezentată în sesiunea SEPTEMBRIE, 2018.
La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:
reproducerea exactă a cuvintelor unui alt autor, dintr-o altă lucrare, în limba română sau prin
traducere dintr-o altă limbă, dacă se omit ghilimele și referința precisă,
redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte
lucrări, dacă nu se indică sursa bibliografică,
prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără
menționarea corectă a acestor surse,
însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care
are alt autor.
Pentru evitarea acestor situații neplăcute se recomandă:
plasarea între ghilimele a citatelor directe și indicarea referinței într-o listă corespunzătoare
la sfârșitul lucrării,
indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de
referințe a sursei originale de la care s-a făcut preluarea,
precizarea sursei de la care s-au preluat date experimentale, descrieri tehnice, figuri, imagini,
statistici, tabele et cetera,
precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a
căror paternitate este unanim cunoscută și acceptată.
Data, Semnătura candidat: [anonimizat],
4

UNIVERSITATEA DIN CRAIOV A
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de [Calculatoare și Tehnologia Informației
/ Automatică, Electronică și Mecatronică]Aprobat la data de
…………………
Șef de departament,
Prof. dr. ing.
Marius BREZOV AN/
Emil PETRE
PROIECTUL DE DIPLOMĂ
Numele și prenumele student: [anonimizat]/-ei: Gaiță Andrei Laurențiu
Enunțul temei:Aparat de radio FM folosind Arduino
Datele de pornire: Să se creeze un sistem de radio care poate fi controlat prin
intermediul unei plăci Arduino.
Conținutul proiectului:Capitolul 1 prezintă o introducere despre scopul și motivația
alegerii acestei lucrări.
Capitolul 2 prezintă detalii despre componentele folosite și
modul acestora de funcționare.
Capitolul 3 prezintă schema generală a sistemului de radio
precum și câteva exemple de cazuri de utilizare pentru o
ilustrare cât mai bună a modului de funcționare a radioului.
Capitolul 4 prezintă implementarea fizică a întregului sistem
de radio .
Concluziile se referă la ceea ce am reușit să implementez dar
și la modalitatea în care acest proiect ar fi putut evolua.
Material grafic obligatoriu:
Consultații: [Periodice/zilnice/săptămânale/lunare ]
Conducătorul științific
(titlul, nume și prenume, semnătura):Șef lucrări dr. ing. Marius MARIAN
Data eliberării temei:
Termenul estimat de predare a
proiectului:01.09.2018
Data predării proiectului de către
student și semnătura acestuia:
5

UNIVERSITATEA DIN CRAIOV A
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de [Calculatoare și Tehnologia
Informației / Automatică, Electronică și Mecatronică]
REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC
Numele și prenumele
candidatului/-ei:Gaiță Andrei Laurențiu
Specializarea: Calculatoare
Titlul proiectului: Aparat de radio FM folosind Arduino
Locația în care s-a realizat practica
de documentare (se bifează una sau
mai multe din opțiunile din
dreapta):În facultate □
În producție □
În cercetare □
Altă locație: [se detaliază]
În urma analizei lucrării candidatului au fost constatate următoarele:
Nivelul documentăriiInsuficient
□Satisfăcător
□Bine
□Foarte bine

Tipul proiectuluiCercetare
□Proiectare
□Realizare
practică
□Altul
[se detaliază]
Aparatul matematic utilizatSimplu
□Mediu
□Complex
□Absent

UtilitateContract de
cercetare
□Cercetare
internă
□Utilare
□Altul
[se detaliază]
Redactarea lucrăriiInsuficient
□Satisfăcător
□Bine
□Foarte bine

Partea grafică, deseneInsuficientă
□Satisfăcătoare
□Bună
□Foarte bună

Realizar
ea
practicăContribuția
autoruluiInsuficientă
□Satisfăcătoare
□Mare
□Foarte mare

Complexitatea
temeiSimplă
□Medie
□Mare
□Complexă

Analiza cerințelorInsuficient
□Satisfăcător
□Bine
□Foarte bine

ArhitecturaSimplă
□Medie
□Mare
□Complexă

Întocmirea
specificațiilor
funcționaleInsuficientă
□Satisfăcătoare
□Bună
□Foarte bună

ImplementareaInsuficientă
□Satisfăcătoare
□Bună
□Foarte bună

TestareaInsuficientă
□Satisfăcătoare
□Bună
□Foarte bună

FuncționareaDa
□Parțială
□Nu

6

Rezultate experimentaleExperiment propriu
□Preluare din bibliografie

BibliografieCărțiRevisteArticoleReferințe web
Comentarii
și
observații

În concluzie, se propune:
ADMITEREA PROIECTULUI
□RESPINGEREA PROIECTULUI

Data, Semnătura conducătorului
științific,
7

MULȚUMIRI
În cele ce urmează vreau să mulțumesc domnului profesor coordonator Nicolae Enescu care m-a ajutat cu
unele sfaturi în ceea ce privește modalitatea de implementare și ceea ce trebuia să achiziționez pentru a
realiza acest sistem de radio FM folosind mediul de dezvoltare Arduino. În continuare voi detalia câteva din
problemele apărute pe parcursul realizării acestei lucrări dar și modul de soluționare a acestora.
Conform fișei de documentație a modulului de radio TEA5767, se poate programa ca acest modul de radio să
caute canalele de radio în mod automat, am încercat să fac acest lucru, însă, modulul de radio nu reușea să
găsească nici o stație radio deoarece calitatea semnalului era destul de slabă și nu se putea realiza căutarea
cu succes a unei stații radio. Rezolvarea la această problemă a venit din partea domnului profesor
coordonator Nicolae Enescu care mi-a făcut o propunere să schimb această căutare automată a stațiilor radio
cu setarea manuală a frecvențelor dorite folosind un potențiometru liniar 10k. Am realizat și acest lucru, dar,
cu acest potențiometru nu aveam o stabilitate foarte bună și am decis într-un final să folosesc un codor
rotativ. După implementarea acestui codor s-a rezolvat partea de căutarea a unei noi stații radio.
La acest sistem mi-am propus să adaug și un buton de citire a unei stații „favorite” pe care anterior o stocam
în memoria EEPROM a plăcii Arduino, apoi cu acest buton urma doar să citesc această frecvență pe care o
alegeam eu inițial când scriam codul sursă. Domnul profesor coordonator mi-a sugerat să îmbunătățesc
această variantă propunându-mi următoarele: să implementez trei butoane prin intermediul cărora se pot citi
trei stații diferite de radio, iar cu ajutorul unui buton în plus să pot face și memorarea a trei frecvențe diferite
în memoria EEPROM a plăcuței Arduino prin intermediul acestor butoane. Exemplu este asemănător cu cel
al unei taste funcționale de la tastatura calculatorului: dacă voi apăsa doar tasta „A” pe ecran va apărea litera
„a”, astfel, dacă voi apăsa tasta „SHIFT” și tasta „A” pe ecran va apărea litera „A”. La această funcționalitate
trebuia să semnalăm faptul că operațiunea de citire/memorare din/în memoria EEPROM a avut loc iar în
acest sens, domnul profesor coordonator mi-a propus să fac acest lucru prin intermediul unor leduri și să las
afișajul LCD mai „curat” deoarece erau foarte multe informații de afișat. V oi descrie în capitolele următoare
și alte cauze pentru care este bine ca afișajul LCD-ului să nu se actualizeze prea des.
Printre micile probleme se mai număra și faptul că nu puteam să schimb volumul ieșirii audio prin
intermediul programării modulului de radio, acesta fiind având o putere de ieșire care este suficientă doar
pentru a conecta o pereche de căști. Îmi doream să implementez controlul volumului în așa fel încât acesta să
poată fi utilizabil atât cu căștile cât și cu un amplificator de sunet pentru a utiliza radioul cu un difuzor de
putere mai mare (1…5 W ).
Pot spune că și această privință domn profesor coordonator Enescu Nicole mi-a dat ideea de a controla
ieșirea audio a modului de radio TEA5767 folosind un potențiometru liniar în mod divizor de tensiune, însă,
pe parcurs mi-am dorit să fie posibilă și afișarea volumului pe LCD iar acest lucru nu puteam să îl fac cu
acest potențiometru analogic. În acest sens, am realizat acest control al volumului folosind un potențiometru
8

digital MCP41010. Pe această cale, îi mulțumesc profesorului meu coordonator Nicolae Enescu pentru ideile
pe care mi le-a oferit și consultațiile de care am avut nevoie pentru a realiza această lucrare de licență.
REZUMATUL PROIECTULUI
Tema proiectului presupune implementarea unui radio FM folosind plăcuta Arduino. Aceasta va avea
funcționalitatea unui radio FM asemănător cu cel pe care îl folosim în viața de zi cu zi. Pentru a implementa
acest sistem avem nevoie de anumite module și componente electronice printre care se numără:
a) un receptor FM TEA5767 pentru a recepționa datele transmise de stațiile de radio și pe care îl
vom conecta la plăcuța Arduino;
b) un difuzor pe care vom transmite informațiile obținute prin intermediul undelor electromagnetice;
c) cinci butoane pe care le vom folosi în felul următor : trei dinte cele cinci butoane vor fi folosite
pentru a citi frecvența radio memorată în memoria EEPROM a plăcuței Arduino.
Cu un buton „Fn” suplimentar rolul butoanelor de mai sus se schimbă și anume: se va efectua o operație de
memorare a unei noi frecvențe pentru fiecare buton în parte.
De asemenea, este implementat și un buton pe care l-am numit „Band”, iar acesta va fi folosit pentru
alegerea benzii de frecvență a radioului: putem avea posibilitatea să alegem dintre banda de frecvențe din
Japonia, bandă care cuprinde frecvențe de la 76 MHz până la 91 MHz și banda de frecvențe din Europa care
cuprinde frecvențele de la 87,5 MHz până la 108 MHz.
d) trei leduri pentru a semnala faptul că operația de citire/scriere/eroare a avut loc pentru fiecare
dintre cele trei butoane;
e) un codor rotativ pentru a seta modulul TEA5767 pe ce frecvență dorim;
f) un potențiometru liniar 10 kΩ pentru a comanda circuitul MCP41010 să regleze volumul
sunetului oferit de dispozitivul integrat TEA5767;
g) un amplificator audio care va prelua semnalul de la potențiometru digital și îl va amplifica astfel
încât să putem reda volumul sunetului recepționat în mod controlat;
h) un lcd cu organizarea de 16 coloane și două linii pe care îl vom programa să ne afișeze frecvența
postului setat, modul de transmisie al sunetului (mono sau stereo), banda de frecvențe și volumul sunetului.
i) o sursă de tensiune continuă necesară alimentării amplificatorului audio LM386N-4. Această
sursă o vom realiza cu ajutorul unui transformator de curent alternativ și prin intermediul unei scheme de
redresare a curentului alternativ vom putea să alimentăm amplificatorul de sunet așa cum cere fișa sa de
documentație.
j) breadboard-uri pentru implementarea circuitelor;
k) socluri și mufe audio necesare pentru a conecta modulele între ele ;
9

În capitolele următoare voi detalia informații teoretice despre toate modulele și componentele folosite,
diagramele de stare ale diferitelor procese de control al informațiilor dar și modalitatea de implementare a
acestui sistem.
PROLOG
Lucrarea își propune realizarea unui radio FM folosind Arduino . În această secțiune voi descrie principalele
componente ale sistemului de radio FM folosind Arduino precum și modul în care acestea interacționează
între ele. Pentru a realiza acest sistem avem nevoie de câteva module și componente pentru a le programa
ulterior mai târziu folosind plăcuța Arduino.
Componenta principală a acestui sistem este modulul TEA5767 , un modul care este folosit în diverse
aplicații care folosesc radiourile portabile deoarece aceste module de radio au diferite interfețe de
comunicare printre care și o interfață I2C, iar acest lucru însemnând că necesită doar patru fire de utilizat:
SDA1, SLC2, 5V și GND) și un consum de energie foarte redus ( 15mA ). Acest modul vine însoțit de
documentația tehnică a acesteia care prezintă modul de programare a registrelor sale.
Din fișa tehnică3 observăm că anumiți regiștri pot fi setați/resetați iar alți regiștri pot fi doar citiți oferind
informații despre starea parametrilor postului de radio (transmisie stereo, nivel semnal etc.). Despre toate
acestea și multe alte detalii despre acest modul integrat voi descrie într-un capitol separat.
Reglarea și setarea frecvenței de radio se face prin intermediul unui codor rotativ. În sistemul nostru de radio
vom avea un buton de bandă pe care dacă îl vom apăsa, plăcuța Arduino va „traduce” în mod diferit aceste
benzi de frecvențe. Prima bandă este cea europeană care ia valori ale frecvențelor de la 87.5 MHz până la
108 MHz, iar cea dea două bandă este cea folosită în Japonia și cuprinde valori ale frecvențelor între 76 MHz
și 91 MHz.
Totodată, am implementat și posibilitatea de memora sau de a citi frecvențe ale posturilor de radio în
memoria non-volatilă a plăcuței Arduino și anume în memoria EEPROM. Acesta are avantajul că odată cu
oprirea sistemului de radio aceste frecvențe rămân în memorie și la următoarea alimentare cu energie
electrică acestea pot fi citite și setate pe radio fără a mai fi necesară căutarea manuală cu codorul rotativ a
postului de radio pe care l-am ascultat ultima dată. Folosind această facilitate a memoriei EEPROM, am
implementat un număr de trei posturi „favorite” și acestea pot fi schimbate la rândul lor cu alte posturi pe
care le dorim să le memorăm în locul celor deja memorate anterior.
Memorarea postului de radio se face în felul următor: căutăm frecvența dorită și prin apăsarea simultană
celor două butoane va avea loc memorarea frecvenței postului la o anumita adresă(adresa de memorare/citire
1. SDA – din limba engleză: Serial Data Line
2. SCL – din limba engleză: Serial Clock Line
3. http://pdf1.alldatasheet.com/datasheet-pdf/view/166931/PHILIPS/TEA5767HN.html , pag. 14, [consultat
la data 11.05.2018]
10

este diferită pentru fiecare buton în parte). După momentul memorării/citirii unui post sistemul semnalizează
cu ajutorul unor leduri un semnal luminos diferit pentru fiecare tip de eveniment petrecut ( citire post FM,
înregistrare post FM, sau eroare de utilizare a butoanelor ). V om vedea în capitolele următoare mai multe
detalii despre aceste evenimente și modul lor de operare.
Afișarea informațiilor precum banda aleasă: JPN(Japonia) sau EU(Europa), frecvența căutată, modul de
transmisie al sunetului(mono sau stereo) și nivelul sonorului le vom afișa pe un LCD cu organizarea de două
linii și șaisprezece coloane. Așadar, pentru a evita supraîncărcarea LCD-ului trebuie să afișăm toate aceste
informații pe cele două linii și șaisprezece coloane.
Un aspect important al acestui LCD, este faptul că acesta, asemănător modulului de radio, au aceeași
interfață de conectare: I2C. Interfața I2C a acestui LCD ne ajută să scăpam de multitudinea de fire pe care le-
am fi utilizat dacă nu aș fi avut la dispoziție acest tip de LCD I2C. Cu numai 4 fire reușim să programăm
LCD-ul pentru a ne afișa informațiile necesare.
Ieșirea audio este oferită de modulul de radio TEA5767, dar, aceasta nu poate fi programată software pentru
controlul volumului și pentru acest lucru am preluat ieșirea audio oferită de modulul de radio și am conectat-
o la un potențiometru digital MCP41010. Aici, trebuie menționat că modul de control al transmisiei sunetului
este posibil doar pe un singur canal, deci, vom avea transmisie mono deoarece potențiometrul digital pe care
l-am folosit dispune doar de un singur canal care poate fi controlat prin intermediul interfeței SPI a plăcuței
Arduino.
Pentru a putea realiza modul de transmisie stereo, adică posibilitatea transmiterii sunetului pe două canale,
am avea nevoie de un potențiometru digital cu două canale. Despre acest mod de control al volumului voi
detalia într-un subcapitol separat.
Conform datelor oferite anterior, ieșirea audio a modulului de radio nu are suficientă putere pentru a putea fi
folosit cu un difuzor de putere mai mare. Pentru amplificarea semnalului audio am folosit amplificatorul
LM386N-4 care poate fi alimentat la o tensiune între 5 și 24 V și oferă pe un singur canal la ieșire un semnal
amplificat pe care îl primește la intrarea neinversoare. Poate fi folosit cu un difuzor de 1-5W, care poate avea
diferite impedanțe: 2 ohmi , 4 ohmi, 8 ohmi și așa mai departe.
De ținut cont este faptul că dacă utilizăm amplificatorul cu tensiune de alimentare de mai mare de 9V trebuie
să îi asigurăm o răcire corespunzătoare deoarece crește foarte mult disiparea de căldură și ca urmare acestui
fapt, integratul LM386N-4 se poate distruge pe cale termică.
În schema noastră avem de alimentat două module importante: placa Arduino care va alimenta la rândul ei
celelalte module și amplificatorul de sunet, însă, conform datelor furnizate de producătorii acestor două
circuite, aceștia pot funcționa optim la o tensiune de 9V .
11

Despre modul de implementare a sistemului cu acest amplificator dar și mai multe detalii despre acesta voi
detalia în secțiunile următoare unde voi detalia mai multe lucruri despre fiecare componentă în parte.
12

CUPRINS
1. INTRODUCERE 1
1.1 SCOPUL 2
1.2 MOTIV AȚIA
2. DESCRIEREA PROIECTULUI ȘI DETALII DESPRE COMPONENTELE FOLOSITE
2.1. PLĂCUȚA ARDUINO
2.1.1 Breadboard-uri
2.1.2 Modulul de radio TEA5767
2.1.3 Dispozitivul de afișare cu cristale lichide
2.1.4 Butoane
2.1.5 Leduri
2.1.6 Potențiometru 10k
2.1.7 Codorul electromecanic rotativ
2.1.8 Potențiometrul digital
2.2 AMPLIFICATORUL DE SUNET
2.3 TRANSFORMATORUL DE CURENT ALTERNATIV
2.3.1 Diode redresoare
2.3.2 Regulatorul de tensiune
3. SCHEMA DE INTERCONECTARE A COMPONENTELOR PENTRU REALIZAREA SISTEMULUI
3.1 DIAGRAMA DE UTILIZAREA A RADIOULUI
3.2 DIAGRAMA DE STARE A PROCESULUI DE CITIRE A BUTOANELOR DE SETARE/MEMORARE
STAȚIE RADIO
3.3 DIAGRAMA DE STARE A PROCESULUI DE CITIRE ȘI SETARE A VOLUMULUI
3.3 DIAGRAMA DE STARE A PROCESULUI DE SETARE A MODULULUI DE RADIO
3.4 DIAGRAMA DE STARE A PROCESULUI DE AFIȘARE A INFORMAȚIILOR PE LCD
4. DESCRIEREA IMPLEMENTĂRII PROIECTULUI
4.1. IMPLEMENTAREA ȘI PROGRAMAREA MODULULUI DE RADIO
4.2. IMPLEMENTAREA FUNCȚIONĂRII BUTOANELOR
4.3. IMPLEMENTAREA FUNCȚIONĂRII CODORULUI
4.4. IMPLEMENTAREA LCD-ULUI
4.5. REALIZAREA AMPLIFICATORULUI DE SUNET
4.6. IMPLEMENTAREA POTENȚIOMETRULUI DIGITAL
4.7. IMPLEMENTAREA REDRESORULUI DE TENSIUNE ALTERNATIVĂ……………………..
5. CONCLUZII……………………………………………………………………………………………………………………..60
6. BIBLIOGRAFIE
7. REFERINȚE WEB
A. CODUL SURSĂ
B. CD / DVD
C. Anexe
13

1. LISTAREA FIGURILOR
Figura 2.0.1 O plăcuță Arduino (UNO) cu descrierile pinilor I/O
Figura 2.0.2 Breadboard
Figura 2.0.3 Conexiuni interne ale unui breadboard
Figura 2.0.4 Modul de radio Tea5767
Figura 2.0.5 Schema bloc a căii de semnal a tunerului
Figura 2.0.6 Transferul de date prin interfața I2C
Figura 2.0.7 Dispozitiv de afișare cu cristale lichide
Figura 2.0.8 Descrierea pinilor dispozitivului de afișare
Figura 2.0.9 chema interna de conectare la Arduino
Figura 2.1.0 Buton cu patru piciorușe
Figura 2.1.1 Led roșu
Figura 2.1.2 Simbol electric led
Figura 2.1.3 Potențiometru liniar
Figura 2.1.4 Schema internă a potențiometrului 10k
Figura 2.1.5 Codor electromecanic
Figura 2.1.6 Forma și relațiile de fază între cele două semnale ale codorului
Figura 2.1.7 Potențiometru digital DIP-8
Figura 2.1.8 Reprezentarea internă MCP41010
Figura 2.1.9 Descrierea pinilor pentru MCP41010
Figura 2.2.0 Amplificator LM386N-4 Dip8
Figura 2.2.1Configurație pini amplificator LM386N-4
Figura 2.2.2 Transformator de curent alternativ
Figura 2.2.3 Forma tensiunii în secundar
Figura 2.2.4 Forma semnalului tensiunii alternative după ce trece prin puntea redresoare .
Figura 2.2.5 Forma semnalului de la dioda redresoare cuplat la un condensator.
Figura 2.2.6 Regulator de tensiune pozitiv
Figura 2.2.7 Aplicația tipică a regulatorului LM78XX pozitiv de tensiune
Figura 3.1 Diagrama bloc de interconectare a sistemului de radio FM
Figura 3.2 Diagrama de utilizarea a sistemului de radio
Figura 3.3 Diagrama de stare a butoanelor de citire și/sau memorare
Figura 3.4 Diagrama de stare a a procesului de citire și setare a volumului
Figura 3.5 Diagrama de stare a a procesului de setare a modulului de radio
Figura 3.6 Diagrama de stare a a procesului de de afișare a informațiilor pe LCD
Figura 4.1 Conectarea modulului de radio la plăcuța Arduino
Figura 4.1 Conectarea modulului de radio la plăcuța Arduino
Figura 4.2 Conectarea butoanelor și a ledurilor la plăcuța Arduino
Figura 4.3 Conectarea codorului rotativ la plăcuța Arduino
Figura 4.4 Conectarea dispozitivului de afișare 16×2 cu conexiune I2C la plăcuța Arduino
Figura 4.5. Schema de conectare a amplificatorului de sunet
Figura 4.6 Schema de conectare a potențiometrului digital la plăcuța Arduino
Figura 4.7 Schema redresării curentului alternativ în curent continuu
14

2. LISTA TABELELOR
Tabelul 2.1 Frecvența de referință în funcție de frecvența oscilatorului
Tabelul 2.2 Semnificația biților în mod scriere
Tabelul 2.3 Semnificația biților în mod citire
Tabelul 2.4 Conectarea pinilor SPI pentru MCP41010 cu plăcuța Arduino
15

1. INTRODUCERE
1.1 Scopul
Scopul creării acestui proiect este acela de a implementa un sistem de radio FM folosind mediul de
dezvoltare Arduino. În acest fel, sistemul de radio FM folosind o plăcuță Arduino trebuie să aibă o
funcționalitate asemănătoare cu cea a unui aparat de radio simplu , adică, să recepționăm un post de radio,
să controlăm volumul audio, să afișăm banda aleasă și modul de transmisie al sunetului.
Pentru a realiza această lucrare avem nevoie de câteva shield-uri(module) pe care le vom folosi pentru a
finaliza această lucrare.
În aceasta schemă intră un receptor de radiofrecvență numit „TEA5767” cu ajutorul căruia vom reuși să
recepționăm stațiile de radio, un difuzor, un potențiometru digital, un amplificator prin intermediul căruia
vom reda pe cale sonoră informațiile recepționate, cinci butoane dintre care: un buton va fi folosit pentru
selectarea benzii, un buton va avea rol de tastă funcțională iar celelalte trei butoane vor fi folosite pentru a
citi și/sau memora anumite posturi de radio și o sursă de tensiune continuă stabilă de 6V .
Știind că tensiunea minimă recomandată pentru placa Arduino este de 6V și luând în calcul și faptul că
amplificatorul necesită mai mult curent decât ceea ce oferă placa Arduino, alimentarea întregii scheme de
montaj se va face de la o sursă de tensiune continuă pe care o vom implementa cu ajutorul unui transformator
de tensiune alternativă și cu alte piese necesare creării acestui alimentator.
Modul de alimentare de la sursa de tensiune continuă de 6V este în felul următor: de la această sursă vom
alimenta amplificatorul de sunet și tot de la această sursă vom alimenta și placa Arduino care la rândul ei are
un regulator de tensiune de 5V și 3.3V și va alimenta celelalte componente la tensiunea corespunzătoare de
5V sau 3.3V .
Scopul final al acestei lucrări de diplomă este să combin diverse cunoștințe acumulate atât din domeniu
programării limbajului C și C++ cât și din domeniul electronicii astfel încât în urma acestei munci să rezulte
un aparat de radio FM folosind Arduino.
1.2 Motivația
Motivația creării acestui proiect de diplomă a fost faptul că în timpul facultății mi-a plăcut în mod deosebit
să îmbin diverse cunoștințe de electronică cu limbajul de programare C, iar acest lucru m-a motivat să învăț
cât mai mult despre această platformă Arduino și să realizez cât mai multe lucruri cu această plăcuță. Mi-a
captat atenția în mod deosebit această platformă deoarece poți face lucruri interesante cu o viteză de calcul
suficientă pentru multe dintre aplicații și cu un efort financiar destul de mic în comparație cu alte sisteme sau
1

microcontrolere care sunt mai scumpe, dar, acestea la rândul lor sunt ceva mai complexe și au o forță de
calcul mult mai mare.
Aș fi avut posibilitatea să folosesc alte microcontrolere mult mai complexe cu diverse funcții încorporate,
însă, nu se justifica efortul financiar pentru ceea ce aveam de realizat : „Aparat de radio FM folosind
Arduino”. Plăcuța Arduino „UNO” este mai mult decât suficientă pentru a prelucra datele deoarece ne
asigură absolut tot ceea ce necesar realizării lucrării de licență.

Un alt motiv pentru care mi-am dorit să aprofundez această latură a programării și electronicii este acela că,
m-a atras faptul că prin aceste sisteme se pot face o mulțime de lucruri interesante pe care le putem utiliza în
viața de zi cu zi. În acest fel, o multitudine de aplicații își au o importanță majoră în viața oamenilor și
acestea continuă să fie folosite din ce în ce mai mult.
În capitolul 1 am prezentat scopul și motivele pentru care am ales această lucrare de licență. Ulterior am
specificat detaliile funcționale ale acestui proiect rezumând pe scurt principalele caracteristici funcționale ale
acestui sistem de radio.
În capitolul 2 voi prezenta partea teoretică în ceea ce privește modulele folosite și voi oferi detalii despre
modul de funcționare al acestor module ca uz general. V oi descrie caracteristicile și informațiile tehnice de
care vom avea nevoie pentru a pune în schemă un astfel de montaj.
În capitolul 3 voi ilustra schema de conectare generală a modulelor precum și a celorlalte circuite importante,
o diagramă de utilizare a sistemului de radio precum și diagrame de stare pentru principalele procese care au
loc prin intermediul plăcuței Arduino pentru a înțelege mai ușor modul de programare al sistemului de radio
FM. Acest capitol este creat pentru a vedea cu ușurință acțiunile și valorile pe care le produc aceste acțiuni
efectuate din exterior precum și modul de utilizare a valorilor obținute. Această metodă ne va ajuta să
implementăm și să programăm modulele într-un mod mult mai ușor și sigur.
În capitolul 4 vom implementa în mod fizic fiecare circuit în parte și vom oferi o schemă de conectare
detaliată precum și bucăți de cod sursă care vor ilustra modul de funcționare al fiecărui modul sau circuit în
schema de radio FM.
La finalul acestei lucrări voi relata concluziile mele în ceea ce privește acest sistem de radio și am să scot în
evidență atât părțile pozitive cât și ceea ce se mai putea face asupra acestui sistem de radio pentru a-l
imbunătăți într-un mod cât mai bine cu putință.
2

2. DESCRIEREA PROIECTULUI ȘI DETALII DESPRE
COMPONENTELE FOLOSITE
În cele ce urmează vom implementa un sistem de recepție radio FM folosind mediul de dezvoltare Arduino.
Acest sistem trebuie să realizeze următoarea sarcină: să aibă funcționalitatea unui receptor radio FM iar în
cele ce urmează voi detalia ce presupune acest sistem.
Sistemul de recepție radio FM trebuie să aibă următoarele caracteristici și funcționalități:
•inițial, sistemul de radio va porni pe frecvența anterior ascultată;
•afișarea pe LCD a frecvenței postului de radio, modul de transmisie al sunetului (mono sau stereo),
banda selectată (Japonia sau Europa) și volumul sonor;
•citirea din memoria EEPROM a frecvențelor anterior memorate;
•stocarea la cele trei adrese diferite în memoria EEPROM a frecvențelor anterior alese din codor;
•semnalarea operațiilor de citire/scriere din/în EEPROM sau eroare apăsare butoane cu ajutorul celor
trei leduri atașate fiecărui buton;
•transmiterea printr-un amplificator și un difuzor a sunetelor recepționat e de modulul de radio FM;
•selectarea manuală din codor a frecvenței dorite ;
•reglarea intensității volumului.
Pentru a realiza cele de mai sus enumerate vom avea nevoie de anumite piese și module importante pe care le
voi detalia în cele ce urmează din punct de vedere teoretic în capitolul doi, urmând ca în capitolele trei și
patru să expun prin diagrame de stare modul de funcționare apoi implementarea fizică a întregului sistem de
radio.
3

2.1. PLĂCUȚA ARDUINO
Conform informațiilor oferite de B_E_N 4, plăcuța Arduino are în spate o întreaga comunitate care se ocupă
cu crearea lor atât din punct de vedere hardware cât și din punct de vedere software. Aceste plăcuțe Arduino
sunt încorporate cu diverse microcontrolere ce au viteze diferite de lucru pentru a procesa informații din
lumea reală sau pentru a controla diverse activități.
De asemenea, tot în articolul menționat anterior, pentru a putea culege informații din mediul real aceste
plăcuțe, în funcție de modelul lor, au la dispoziție un număr de pini I/O care pot fi analogici și digitali și
aceștia pot fi conectați cu diverse circuite sau (shield-uri) care sunt special concepute pentru a oferi
informații prin intermediul pinilor.
În același articol scris de B_E_N(2013), mai regăsim că un lucru important la aceste plăcuțe este faptul că au
la dispoziție conectori standard pentru a putea utilizatorul să conecteze cu ușurință diverse shield-uri care se
pot conecta în moduri diferite în funcție de ce realizează fiecare în parte. Unele shield-uri utilizează pini
analogici, iar altele vor utiliza pini digitali în funcție de informația pe care trebuie să o ofere.
Programarea acestor plăcuțe se face folosind mediul de dezvoltare (IDE) bazat pe proiectul „Processing”
care include suport pentru limbajele de programare C și C++ și este folosit pentru programarea
microcontrolerelor. Plăcuța Arduino este compusă dintr-un microcontroler Atmel A VR de 8, 16 sau 32 de biți
(iar începând cu 2015 s-au folosit microcontrolere de la alți producători) cu componente complementare care
facilitează programarea și încorporarea în alte circuite .
Figura 2.0.1 O plăcuță Arduino (UNO) cu descrierile pinilor I/O5
Conform lui B_E_N, comunicarea cu Arduino a shield-urilor se face direct prin intermediul pinilor analogici
sau digitali, dar unele din acestea se pot adresa individual prin magistrala I2C folosind o adresă și astfel, pe
această magistrală se pot folosi mai multe module I2C în paralel. Pentru funcționarea plăcuțelor acestea au în
4. B_E_N, „What is an Arduino?”, https://learn.sparkfun.com/tutorials/what-is-an-arduino?
_ga=2.208558546.1554799887.1533640523-1988030013.1533640523 [consultat la data de 07 aug 2018]
5. https://www.robofun.ro/image/cache/data/produse/arduino/A000066-Arduino-Uno-TH-1front-
500×500.jpg
4

componența lor un regulator liniar de 5V și un oscilator cu cuarț de 16 MHz sau de 8 MHz în funcție de
model.
De asemenea, în acord cu informațiile oferite de B_E_N(2013), c eea ce face ca Arduino să fie o soluție
simplă și permite programarea de pe orice computer este faptul că acesta nu are nevoie de programatoare
externe spre deosebire de alte modele de plăcuțe și microcontrolerul instalat pe aceasta placă vine pre-
programat cu un bootloader care simplifică mult încărcarea programelor în memoria flash a cipului. Modul
de programare al plăcuțelor este prin conexiune serială (cablu USB) atunci când folosim mediul de
dezvoltare Arduino.
În această lucrare de diplomă vom folosi Arduino UNO , dar anumite modele de plăcuțe cum ar fi Diecimila,
Duemilanove au aceleași caracteristici la fel ca o plăcuță Arduino UNO și acestea oferă, conform
informațiilor oferite de B_E_N(2013), 14 pini digitali de intrare/ieșire, dintre care 6 pot fi folosite pentru a
primi și a trimite semnale PWM și 6 intrări analogice care și acestea pot fi programate să funcționeze ca
intrări/ieșiri digitale. Un semnal PWM este un semnal ce poate lua valori între 0 și 255, deoarece este o
valoare reprezentată pe 8 biți. O intrare analogică poate citi/scrie valori cuprinse în intervalul 0…1023 și este
reprezentată pe 10 biți.
Tot în acest articol scris de B_E_N(2013) observăm că l a acești pini analogici sau digitali se pot interfața
diverse shield-uri6 care au capacități de a face diverse lucruri cum ar fi: de a controla motoare, de a afișa
mesaje pe LCD, de a controla niște dispozitive prin intermediul rețelei Wi-Fi sau Bluetooth sau Ethernet sau
de a citi diverse informații din mediu real precum: luminozitatea, temperatura, presiunea sau de a detecta
anumite obiecte sau fenomene cum ar fi gazul, focul și exemplele pot continua.
Pentru proiectul nostru este suficientă o plăcuță Arduino UNO deoarece nu avem nevoie de mai mulți pini
analogici sau digitali. Programul sursă al acestui proiect va avea o rutină de „setup” care se va executa doar
o singură dată, unde vom inițializa toate porturile precum și câteva setări necesare modulului de radio,
potențiometrului digital și LCD-ului și o rutină „loop” unde instrucțiunile se execută tot timpul până în
momentul opririi alimentării cu energie electrică a plăcuței.
6. Shield-uri – diverse module care se conectează la placa Arduino și au anumite roluri.
5

2.1.1 Breadboard-uri
Pentru îndeplini cerințele de mai sus vom folosi un breadboard de 830 de puncte dar și alte modele de
breadboard-uri mai mici ca dimensiune pentru a realiza rapid un montaj fără a mai fi nevoie de alte
instrumente de lipit sau sudat. Pe aceste breadboard-uri vom conecta: un potențiometru, cinci butoane, trei
leduri, trei rezistențe atașate ledurilor precum și alte piese necesare implementării montajului .
De asemenea, pe aceste breadboard-uri vom intermedia și cele două conexiuni I2C folosite pentru LCD și
pentru modulul de radio, dar vom avea și alte conexiuni atât pentru porturile analogice ale plăcuței Arduino
cât și pentru cele digitale. Pe celelalte breadboard-uri vom implementa sursa de tensiune continuă,
amplificatorul și potențiometrul digital.
În funcție de modulele sau piesele folosite, conexiunile folosesc fire cu conectori tată-mamă, tată-tată,
etcetera, în funcție de design-ul și necesitățile apărute în realizarea montajului.
Trebuie luat în calcul faptul că montajul implementat pe un asemenea breadboard nu rezistă în timp și există
posibilitatea deconectării firelor odată cu transportarea sau manipularea acestora, de aceea, montajele care nu
mai necesită testări sau modificări asupra lor sunt sudate pe un suport fix și cositorite pentru a nu oxida în
timp.
De asemenea, unele breadboard-uri dispun pe de o parte și cealaltă de două magistrale pentru alimentarea
montajului așa cum se vede și în figura 2.0.3, iar comunicarea magistralelor se face în serie, fiind suficient să
conectam două fire(5V pe linia roșie și masa(GND) pe linia neagră) și putem alimenta din toate celelalte
puncte modulul sau piesa de pe această placă .
Figura 2.0.2 Breadboard7 Figura 2.0.3 Conexiuni interne ale
unui breadboard8
7. https://ardushop.ro/130-thickbox_default/breadboard-830.jpg
8.https://encrypted-tbn0.gstatic.com/
imagesq=tbn:ANd9GcRVLspwxREqFJkgBFnQe72c8VnTuzmKXq_lfqPAZZVxlStWJot
6

I/QmixerIFFilterLimiterDemodulator
AGC:2
LOSoftmute
StereodecoderGainstabi
IF CenterFreq.AdjustRFInputMPXout
Audioleft
AudiorightLNA2.1.2 Modulul de radio TEA5767
Conform informațiilor oferite de M. Moulay(2002)9 , TEA5767/68
este un receptor FM stereo care este încapsulat într-un singur cip.
Această generație nouă de radio FM de joasă tensiune are o
selectivitate și o demodulare complet integrată. Reglajul digital se
bazează pe conceptul PLL convențional.
Figura 2.0.4 Modul de radio Tea5 76710
De asemenea, conform notei aplicative scrise de M. Moulay, prin intermediul software-ului, radioul poate fi
reglat să funcționeze în benzile din Europa, Japonia sau USA. Consumul de energie al IC-ului este foarte
mic. Curentul este de aproximativ 13mA, iar tensiunea de alimentare poate fi variată între 2,5 și 5V . Radioul
își poate găsi aplicația în multe domenii, în special aplicații portabile, cum ar fi telefoanele mobile, CD-urile
și MP3-player-ele.
Circuitul integrat TEA5767/68 este alcătuit din trei mari blocuri: semnalul canalului, sistemul de căutare și
interfața magistralei. În cele ce urmează voi detalia câte puțin despre fiecare componentă care sunt părți
componente din acest circuit integrat.
Figura 2.0.5 Schema bloc a c ii de semnal a tunerului ă11
Circuitul primește un semnal de intrare RF de la antena care este compusă dintr-un condensator în serie, două
condensatoare paralele și o bobină(factor de calitate Q de minim 30).
În ceea ce privește sistemul de reglare, Moulay, prezintă faptul că TEA5767HN se bazează pe o tehnică
convențională PLL și este controlat prin intermediul mașinilor de stare. Conceptul tehnicii PLL este unul
destul de simplu în care divizorul programabil este incrementat sau decrementat pas cu pas până când
9. Moulay(2002), Low voltage FM stereo radio with TEA5767/68, pag. 9
10. http://rassoft.net/rassoftshop/334-large_default/tea5767-fm-stereo-radio-module-for-arduino-76-
108mhz.jpg
11. Idem, pag.14
7

semnalul este găsit. Acest lucru în care divizorul este incrementat sau decrementat se aplică doar în cazul în
care avem căutare automată a posturilor. În această lucrare nu vom folosi această modalitate de căutare a
posturilor deoarece vom utiliza căutarea în mod manual prin intermediul codorului rotativ și în funcție de
valoarea oferită vom vedea dacă am obținut sau nu un post de radio FM.
Conform lui Moulay, spre deosebire de majoritatea sistemelor de „tunere” care folosesc un IF(intermediate
frequency12) de 10.7MHz, TEA5767 / 68 utilizează un IF scăzut de 225KHz. Acest lucru are ca scop
reducerea costurilor totale ale sistemului și a puterii.
În plus, tunerul poate funcționa în două moduri: compensare laterală înaltă(din lb. engleză: high side
injection) sau compensare laterală joasă(din engleză: low side injection). În codul sursă bitul HILO(din lb.
Engleză: high side / low side) poate fi setat pe „1 logic” pentru a funcționa în mod „compensare laterală
înaltă ” sau pe „0 logic” pentru a funcționa în mod „compensare laterală joasă”
De asemenea, conform lui Moulay, pentru a căuta o frecvență dorită trebuie mai întâi să calculăm cuvântul
PLL corespunzător. Acesta este un cuvânt pe 14 biți care va fi trimis către divizorul programabil. Calcularea
cuvântului PLL se face diferit în funcție de cele două moduri de căutare.
Frecvența dorită este un număr în virgulă mobilă care poate lua valori cuprinse între 76.0 și 108.0. Formula
care convertește acest număr într-un întreg pentru a fi trimisă în registrul PLL este dependentă de mai mulți
factori: frecvența de referință a ceasului(Fref), frecvența intermediată(Fif) și de tipul de compensare
laterală: înaltă sau joasă.
Așa cum ne prezintă Moulay în nota sa aplicativă, dacă alegem calcularea cuvântului PLL cu compensare
laterală înaltă formula este următoarea:
NDEC=4∗(Fdes+Fif)
Fref.
NDEC = valoarea zecimala a cuvântului PLL;
Fdes = frecvența de căutare dorită;
Fif = frecvența intermediată;
Fref = frecvența de referință;
12. Intermediate frequency- înseamnă frecvența de imagine pe care o folosesc anumite module de radio în
funcție de frecvența cristalului(oscilatorului) local .
8

Din aceeași notă aplicativă a lui Moulay, REF[XTAL] = frecvența de referință este exprimată în Khz și
depinde de frecvența oscilatorului și poate lua următoarele valori:
XTALPLL REFFrecvența de referință Frecvența oscilatorului
0050000 Hz 13 MHz
0150000 Hz 6.5 MHz
1032768 Hz 32.768 kHz
1132768 Hz 32.768 kHz
Tabelul 2.1 Frecvența de referință versus frecvența oscilatorului.13
În cele ce urmează vom relata două exemple oferite de Moulay pentru a înțelege mai bine modul de calcul al
cuvântului „PLL” Având în vedere că frecvența ceasului de 32.768kHz și modul de calcul în „high side
injection” și dacă receptorul trebuie să fie reglat la o frecvență FM de 100MHz, cuvântul PLL va fi calculat
după cum urmează:
PLLDEC =aproximativ⟦4∗(100∗1000+225)
32768
1000⟧=12213.14
După ce am calculat această valoare în baza zece, aceasta trebuie convertită în baza 16 (hexazecimal) înainte
de a trimite cuvântul calculat către sistemul de căutare radio FM.
PLLHEX=2FB5;
Dacă are loc calcularea cuvântului în modul „low side injection” formulele sunt următoarele:
NDEC=4∗(Fdes−Fif)
Fref.
PLLDEC =aproximativ⟦4∗(100∗1000−225)
32768
1000⟧=12200.15
Din nou, după ce am calculat această valoare în baza zece, aceasta trebuie convertită în baza 16
(hexazecimal) înainte de a trimite cuvântul calculat către sistemul de căutare radio.
PLLHEX=2FA8.
Conform lui Moulay, TEA5767HN poate comunica cu controlerul extern printr-o interfață integrată pe
magistrală. Tunerul suportă atât interfața I 2C cât și cea cu 3 fire, selectabilă prin pinul BUS MODE.16
13. Moulay(2002), Low voltage FM stereo radio with TEA5767/68 , pag. 22
14. Idem, pag. 22
15. Idem, pag. 23
16. Idem, pag. 30
9

În această lucrare vom folosi modulul cu interfața I2C și vom conecta pinii SDA și SCL pe porturile
analogice A4 și A5 deoarece acestea sunt porturi care suportă funcția de comunicație I2C.
De asemenea, conform notei aplicative menționate anterior, interfața I2C este o interfață magistrală simplă
bidirecțională. Ea operează cu o frecvență maximă de 400KHz și are nevoie de doar două fire printre care
una este folosită pentru serializarea datelor (SDA) și cealaltă este folosită pentru serializarea ceasului(SCL).
Magistrala este pe 8 biți iar fiecare dispozitiv conectat la această magistrală este identificat printr-o adresă
unică.
Tot în cadrul aceleași prezentări, Moulay prezintă și faptul că transferul bidirecțional de date cu
TEA5767HN poate începe atunci când este creată o condiție de pornire. Acesta este cazul dacă apare o
tranziție de la HIGH la LOW pe linia SDA în timp ce SCL este HIGH. Primul octet transferat reprezintă
adresa IC plus direcția de date. Un LSB LOW de acest octet indică transmisia de date (WRITE) în timp ce un
HIGH LSB indică o cerere/citire de date (READ).17
În aceeași prezentare susținută de Moulay, acesta relatează că f iecare dată introdusă pe SDA trebuie să aibă o
lungime de 8 biți și fiecare octet trimis trebuie să fie recunoscut de un bit "ACK". În cazul în care un octet nu
este recunoscut, emițătorul trebuie să genereze o stare de oprire sau să repornească transmisia. La pornire,
bitul mut ( bit 7 de date al byte-ului 1) este setat. Toți ceilalți biți sunt setați la un nivel scăzut. Pentru a
inițializa IC toate octeții ar trebui transferați. Dacă se creează o condiție de oprire înainte ca întreaga
transmisie să fie finalizată, ceilalți octeți își vor păstra vechea setare.
De asemenea același Moulay, prezintă faptul că în cazul în care un octet nu este transferat complet, noii biți
se vor schimba dar un nou ciclu de reglare nu va fi pornit. Transferul de octeți de date ar trebui să fie
comandat de la tranziția „ low to high”. Mai întâi, adresa, apoi octetul 1, octetul 2, etcetera. MSB-ul fiecărui
octet va fi trimis primul. Adresa IC este 1100000. Aceasta înseamnă că primul octet care va fi transmis către
TEA5767HN ar trebui să fie "C0" pentru o operațiune WRITE sau "C1" pentru operația READ. O transmisie
poate fi terminată prin generarea unei condiții de oprire. Acesta este cazul când SDA trece de la LOW to
HIGH în timp ce SCL este HIGH.
17. Idem, pag. 31
10

Figura 2.0.6 Transferul de date prin interfața I2C 18
În cele ce urmează ne vom referi la modul de transfer al datelor. Așa cum observăm în nota aplicativa scrisă
de Moulay, ordinea de transfer a datelor este următoarea: octetul 1, octetul 2, octetul 3, octetul 4 și octetul 5.
În modul de scriere și semnificația biților este conform următorului tabel:
Bit 7 Bit 6 Bit 5 Bit 4Bit 3 Bit2 Bit 1 Bit 0
Data byte
1muteSearch
modePLL13PLL12PLL11PLL1
0PLL9PLL8
Data byte
2PLL7PLL6PLL5PLL4PLL3PLL2PLL1PLL0
Data byte
3Search
up/dow
nSearch stop
levelHiLo side
injectionMono/
stereoMute
leftMute
rightSW port1
Data byte
4SW
port 2Stand-byBand
limitsxtalSoft-
muteHCCSNCSearch
indicator
Data byte
5PLL refDeemphNot
usedNot usedNot
usedNot
usedNot
usedNot used
Data Description
Mute 1: L-, R-audio muted
0: Audio not muted
Tabelul 2.2 Semnificația biților în mod scriere19
18. Idem, pag. 31
19. Idem, pag. 58
11

Conform aceleași lucrări scrise de Moulay, în modul de citire al octeților semnificația este următoarea :
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
Data byte 1Ready flagBand limit
flagPLL13PLL12PLL11PLL10PLL9PLL8
Data byte 2PLL7PLL6PLL5PLL4PLL3PLL2PLL1PLL0
Data byte 3Stereo
indicationIF6IF5IF4IF3IF2IF1IF0
Data byte 4LEV3LEV2LEV1LEV0Chip ID2Chip ID1Chip ID0Not used
Data byte 5ReserveReserveReserveReserveReserveReserveReserveReserve
DataDescription
Ready flag1: Tuning completed or
BL reached 0: Busy
Band limit flag1: Band limit reached
0: Band limit not reached
PLL13…PLL0Setting of the synthesizer programmable counter
Stereo indication1: Stereo
reception
0: Mono
reception
IF6…IF0IF counter result
LEV3…LEV0Level ADC output
Tabelul 2.3 Semnificația biților în mod citire 20
20 Idem, pag. 59
12

2.1.3 Dispozitivul de afișare cu cristale lichide
Pentru afișarea informațiilor precum numărul postului de radio și frecvența folosită vom avea nevoie de un
dispozitiv de afișare iar pentru acest proiect am ales să folosesc un LCD cu organizarea 16 coloane și două
linii. Asta înseamnă că putem afișa până la 32 de caractere pe cele două rânduri ceea ce este suficient pentru
ceea ce avem de afișat.
Figura 2.0.7 Dispozitiv de afișare cu cristale lichide
Conform informațiilor oferite de site-ul oficial al celor de la comunitatea Arduino21, din punct de vedere al
conectării LCD-ului la placa Arduino există două tipuri de LCD 16×2: prima categorie care suportă
conexiune I2C, la care vom avea nevoie de doar două fire în afară de cele două fire de alimentare ale LCD-
ului și cea dea doua categorie cele tradiționale care pe lângă cele două fire de alimentare au nevoie de mult
mai multe 8 sau 11 fire pentru a funcționa.
Conform lui Goks_lf22 , librăria „LiquidCrystal” permite să controleze toate display-urile care sunt
compatibile cu driverul Hitachi HD44780. Avantajul acestor conexiuni I2C ale LCD-urilor este faptul că
aceștia dispun de 8 adrese distincte ceea ce înseamnă că folosind doar două fire putem comanda 8 LCD-uri
distincte. În codul sursă, în momentul declarării obiectului de tipul LCD-ului trebuie să specificăm ca
parametru adresa acestuia.
De asemenea, așa cum prezintă și Goks_lf în articolul său, modalitatea de conectare a LCD-ului la plăcuța
Arduino „UNO” este în felul următor: pinul SCL pe pinul analogic A5 și pinul SDA pe pinul analogic A4, iar
pinul de alimentare la pinul de 5V al plăcii Arduino și pinul GND al LCD-ului la pinul GND al plăcii
Arduino.
În spatele LCD-ului serial avem un potențiometru de unde putem regla contrastul afișajului în funcție de cât
de mult dorim să se vadă caracterele afișate.
21. https://www.arduino.cc/en/Reference/Wire , [accesat la data 08.08.2018]
22. Goks_lf, „Use 16×2 LCD With I2C”, https://www.instructables.com/id/LCD-With-I2C/ , [consultat la
08.08.2018]
13

Conform informațiilor oferite de site-ul oficial al celor de la Arduino, funcțiile de afișare ale LCD-ului sunt
numeroase: afișare caractere, deplasare la stânga sau la dreapta a caracterelor, aprinderea și stingerea LCD-
ului chiar și crearea caracterelor așa cum ne dorim noi.
Descrierea pinilor de pe plăcuța Arduino este dată în figura următoare:
Figura 2.0.8 Descrierea pinilor dispozitivului de afișare23
2.1.4 Butoane
Figura 2.0.9 Schema internă de conectare la Arduino Figura 2.1.0 Buton cu patru piciorușe
Conform informațiilor oferite de site-ul Arduino în secțiunea de tutorial în ceea ce privește funcționarea unui
buton24, așa cum observăm și în figura 2.0.9 buto anele sau comutatoare(switch-uri) conectează două puncte
într-un circuit atunci când le apăsam. Atunci când butonul este deschis (neapăsat) nu există nici o legătură
între cele două piciorușe ale comutatorului astfel încât pinul care citește legătura dintre cele două puncte este
conectat la GND (prin rezistor) și vom citi o valoare logică de ”LOW”. Când butonul este închis (apăsat), se
23. https://c.76.my/Malaysia/i2c-adapter-lcd-module-1602-2004-arduino-compatible-jfrtech-1705-24-
jfrtech@9.jpg,[consultat la 08.08.2018]
24. https://www.arduino.cc/en/Tutorial/Button , [consultat la data de 08.08.2018]
14
SW
5V
OUTGND4,7 k

face o legătură între cele două picioare, care leagă PIN-ul la 5 volți, astfel că vom citi un nivel logic
ridicat(HIGH).
De asemenea, pe aceeași secțiune menționată anterior a site-ului „arduino.cc”, se relatează și faptul că
prezența rezistenței conectate la GND are rolul de a filtra semnalele parazite existente în portul digital astfel
că dacă nu conectam această rezistență LED-ul poate clipi haotic. Acest lucru se datorează faptului că la
tensiunea de intrare este „plutitoare“ – adică, aceasta va lua la întâmplare fie o valoare mare fie o valoare
mică și din acest motiv avem un rezistor pentru a stabili tensiunea.
2.1.5 Leduri
Conform informaților oferite de site- ul eprofu.ro25, ledurile( din limba engleză: light-emitting diode) sunt
dispozitive semiconductoare ce transformă energia electrică într-o energie luminoasă. În funcție de materialul
din care este fabricat un led, acestea au o anumită culoare ( roșu, verde, galben și albastru ) și o tensiune de
deschidere diferită pentru fiecare tip de led.
De asemenea, pe același site menționat anterior, avem relatate niște informații referitoare la tensiunea de
deschidere a ledurilor în funcție de culoarea lor: ledul roșu are o tensiune de deschidere(Vf) de 1.6V , cel
verde și cel galben au o tensiune de deschidere între 2 – 2.4V , iar cel albastru în jur de 3.2V . Tensiunea de
deschidere înseamnă faptul că de la aceasta tensiune diodele încep să emită energie luminoasă.
Intensitatea curentului maxim care poate trece prin fiecare led este de 20 mA iar cea ideală este de 10
mA(Iled). Pentru a limita această intensitate a curentului electric vom avea nevoie de o rezistență.
De pe același site, eprofu.ro, la secțiunea indicată în note de subsol, avem niște datele de catalog ale ledului
observăm că Vf = 1,7V și If = 20mA. Dacă avem tensiunea de alimentare de 5V și vrem ca intensitatea
curentului să fie: Iled = 15 mA, atunci vom calcula rezistența „R” cu următoarea formulă:
R [Ω] = (Vcc – Vf) / Iled *1000 =
= ( 5 – 1,7 ) / 15 * 1000 =
= 220 Ω.
Așadar pentru aceasta schema vom avea nevoie de un led înseriat cu o rezistență de 220Ω.
25. https://eprofu.ro/docs/electronica/carte/led-afisaj-7-segmente.pdf ,[consultat la 08.08.2018]
15

Figura 2.1.1 Led roșu Figura 2.1.2 Simbol electric led
Așadar, cu ajutorul acestor leduri vom emite câte o semnalizare luminoasă diferită pentru fiecare dintre cele
trei acțiuni:
•citire din memoria EEPROM a unui post de radio;
•memorarea unui post de radio în memoria EEPROM a plăcuței Arduino;
•imposibilitatea de a selecta o frecvență care nu se află în limitele benzii selectate.
În cele ce urmează voi detalia celelalte componente care vor intra în alcătuirea sistemului de radio.
2.1.6 Potențiometru 10k
Figura 2.1.3 Potențiometru liniar 10 k Figura 2.1.4 Schema internă a potențiometrului
Conform fișei sale de documentație26, acestea sunt dispozitive electrice cu o rotație de aproximativ 280 grade
care pot funcționa în două moduri: ca o rezistență în serie sau ca un divizor de tensiune.
26. https://components101.com/sites/default/files/component_datasheet/potentiometer%20datasheet.pdf ,
[consultat la 08.08.2018]
16
1
2
3GND
5VOUTCatodAnodV+
GND

Modul de funcționare al potențiometrului este unul destul de simplu: pe o foiță de cupru avem un cursor pe
care dacă îl rotim determină la ieșire o valoare mai mare sau mai mică a tensiunii aplicate la intrare dacă este
folosită în mod divizor de tensiune, iar dacă îl folosim ca o rezistență serie variabilă atunci va trece un curent
mai mare sau mai mic în funcție de sensul de rotație al potențiometrului.
Așa cum vedem în fișa sa de documentație menționată anterior, acest potențiometru liniar de 10k are în
constituția sa trei pini. Pe modul divizor de tensiune, configurația pinilor este următoarea: pe pinul 1 vom
aplica masa, al doilea pin îl folosim pentru a citi valoarea de ieșire, iar la al treilea pin vom aplica semnalul
de intrare. În modul în care acesta vrem să funcționeze ca un element rezistiv variabil vom deconecta
semnalul GND.
În cele ce urmează voi detalia despre un dispozitiv asemănător ca design dar cu o funcționalitate complet
diferită și anume un codor electromecanic.
2.1.7 Codorul electromecanic rotativ
Conform informațiilor oferite de Dejan Nedelkovski27,codorul rotativ este un
dispozitiv electro-mecanic care convertește o anumită mișcare în impulsuri
logice la ieșirea sa.

Figura 2.1.5 Codor electromecanic28
Este deseori folosit pentru a controla viteza de rotație a motoarelor sau pur și simplu ca un cursor care se
rotește la infinit pentru că nu este dotat cu capăt de cursă așa cum este un potențiometru 10k liniar.
De obicei, așa cum am mai văzut și alte tipuri de codoare rotative, acestea au între 16 și 1024 de trepte de
rezoluție. Față de un potențiometru liniar analogic, atunci când citim datele oferite de cele două dispozitive,
într-o primă fază, trebuie să remarcăm că citirea acestora se face într-un mod diferit: codorul îl folosim
pentru a citi două impulsuri digitale și acestea se citesc prin intermediul pinilor digitali ai plăcuței Arduino
iar potențiometru 10k oferă un semnal liniar și acesta este citit prin intermediul pinului analogic al plăcuței.
27. Dejan Nedelkovski,”How Rotary Encoder Works and How To Use It with Arduino”,
https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduin o/ ,[consultat la
08.08.2018]
28. https://www.openimpulse.com/blog/products-page/product-category/rotary-encoder-module-arduino/ ,
[consultat la 08.08.2018]
17

Codorul mai dispune și de un mod de funcționare asemănător cu cel al unui buton, în sensul că prin acțiunea
de a apăsa pe axul codorului poate oferi la ieșire pe pinul SW un impuls electric ce poate fi folosit în anumite
moduri. În capitolul patru, unde vom detalia modul de implementare practică a aplicației voi detalia mai mult
cum voi folosi acest codor. Modul în care apar semnalele una față de cealaltă atunci când rotim codorul este
ilustrat în figura de mai jos:
Figura 2.1.6 Forma și relațiile de fază între cele două semnale ale codorului29
De pe același site scris de Dejan Nedelkovski, am preluat figura de mai sus și observăm că atunci când
codorul este rotit în sensul acelor de ceas cele două ieșiri sunt într-o anumită configurație una față de
cealaltă: dacă pinul A trece pe 0 logic și pinul B este pe 0 logic atunci codorul se rotește în sens descrescător
altfel dacă pinul B este pe 0 logic și pinul A trece pe 1 logic atunci codorul se rotește în sens crescător.
29. https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduino/ , [consultat la
08.08.2018]
18

2.1.8 Potențiometrul digital
Figura 2.1.7 Potențiometru digital DIP-830 Figura 2.1.8 Reprezentarea internă MCP41010
Aplicația noastră presupune printre altele să controlăm volumul sistemului de radio și să îl afișăm pe ecranul
LCD-ului, iar pentru acest lucru avem nevoie de un potențiometru digital.
Conform fișei sale de documentație31, potențiometrul MCP41010 este un dispozitiv cu un singur canal care
controlează semnalul de ieșire în funcție de valoarea înscrisă în registrul său intern. Mai exista o variantă de
potențiometru digital cu două canale de control al tensiunii dar pentru aplicația noastră am stabilit că vom
folosi transmisia în mod mono(cu un singur canal).
Acest dispozitiv MCP41010, conform fișei de documentație atașată anterior la nota de subsol a acestei
pagini, poate fi folosit în două moduri : mod reostat și potențiometru sau mod divizor de tensiune. În mod
potențiometru ( cu rol de divizor de tensiune ) toate cele trei terminale ale dispozitivului sunt legate de
diferite noduri din circuit.
Potențiometrul este utilizat pentru a asigura o tensiune variabilă prin ajustarea „ștergătorului” (din limba
engleză: wiper ) pe poziția dintre cele două puncte finale așa cum ilustrează și figura 2.1.8.
De asemenea în cadrul aceleași documentații menționate anterior, pentru a fi utilizat cu microcontroler-ul
plăcuței Arduino acesta dispune de un protocol de comunicare numit interfață serială periferică ( SPI ). Prin
acest protocol comunicarea se stabilește întotdeauna între un dispozitiv principal ( cum ar fi microcontroler-
ul ) și un sau mai multe dispozitive periferice.
Conform informațiilor oferite de site-ul arduino.cc 32 există 3 linii comune pentru toate dispozitivele SPI:
•MISO (Master In Slave Out) – Linia Slave pentru trimiterea datelor către master;
•MOSI (Master Out Slave In) – Linia Master pentru trimiterea de date către periferice;
30. http://cdn1.bigcommerce.com/server800/a8995/products/556/images/1354/
MCP41010_1760__66546.1382658843.500.500.jpg?c=2
31. https://pdf1.alldatasheet.com/datasheet-pdf/view/552923/MICROCHIP/MCP41010.html , pag. 1
consultat la data [08.08.2018]
32. https://www.arduino.cc/en/Reference/SPI , consultat la data [08.08.2018]
19

•SCK (ceas serial) – impulsuri de ceas care sincronizează
transmisia de date generate de master.
Figura 2.1.9 Descrierea pinilor
pentru MCP41010
Din aceeași sursă menționată anterior, constatăm că mai există și o linie specifică pentru fiecare dispozitiv:
•SS (Slave Select) – pinul de pe fiecare dispozitiv pe care masterul îl poate utiliza pentru a activa și
dezactiva anumite dispozitive.
Modul de conectare al acestor pini este diferită în funcție de versiunea plăcilor Arduino, însă, pentru plăcuța
Arduino „UNO” pe care o vom folosi în aceasta aplicație, conform specificațiilor referitoare la interfața SPI,
modul de conectare al acestor patru linii de comunicație este următoarea:
Placa ArduinoMOSIMISOSCKSSVcc
„UNO”111213105V
Tabelul 2.4 Conectarea pinilor SPI pentru MCP41010 cu plăcuța Arduino
Pentru programarea cipului MCP41010, așa cum am menționat anterior, o vom face prin interfața SPI iar
acesta, conform informațiilor oferite de fisa de documentație a acestui circuit integrat permite 3 comenzi33:
1.scrierea unei noi valori în registrul de date al potențiometrului;
2.modifică un canal să intre în mod de oprire cu consum de energie;
3.NOP (comandă de nu efectua nici o operație).
Conform documentației aferente potențiometrului digital, pentru a scrie o nouă valoare în registrul de date al
potențiometrului avem nevoie să știm câte canale există și valoarea pe care dorim să o adăugăm. Observăm
că modelul acesta de potențiometru MCP41010 dispune doar de un singur canal iar valoarea adăugată trebuie
să fie cuprinsă între 0 și 255 deoarece aceasta este rezoluția maximă a potențiometrului34. În capitolul patru
vom vedea cum vom programa acest potențiometru digital, însă, în continuare voi detalia amplificatorul de
sunet pe care l-am folosit în realizarea acestui sistem.
33. https://pdf1.alldatasheet.com/datasheet-pdf/view/552923/MICROCHIP/MCP41010.html , pag.17,
consultat la data [08.08.2018]
34. Idem, pag 18
20

2.2 AMPLIFICATORUL DE SUNET

Figura 2.2.0 Amplificator LM386N-4 Dip835 Figura 2.2.1Configurație pini amplificator LM386N-436
Pentru aceasta aplicație de radio vom folosi un cip de amplificare lm386n-4. Acesta va amplifica semnalul
primit la intrare de la ieșirea audio a modulului de radio.
Conform fișei sale de documentație cu numele „ Low V oltage Audio Power Amplifier ”37, intrarea de referință
2 si 4 sunt conectate la GND iar prin înserierea cu un condensator și o rezistență de la intrarea 1 la intrarea 8
putem seta câștigul de sunet oferit de amplificator. Conform fișei de documentație, dacă lăsăm acești pini
neconectați cipul oferă un câștig standard de 26 dB iar dacă unim aceste două intrări, câștigul ajunge până la
200 dB.
Utilizarea amplificatorului cu câștig maxim de semnal este utilă în alte scopuri în care semnalul de intrare
trebuie să fie foarte mic, de ordinul câtorva milivolți și tensiunea de alimentare trebuie să fie în jur de 12V
așa cum recomandă fișa de documentație anterior menționată a cipului.
Tot în cadrul acestei documentații menționată anterior, se relatează faptul că cipul LM386N-4 mai dispune de
o intrare pe pinul 7 unde putem conecta un condensator cu valori cuprinse între 1 µf și 2200 µf și aceasta
poate fi folosită pentru a amplifica sunetele de frecvență joasă. Pe pinul 5 avem semnalul de ieșire pe care îl
vom conecta în serie cu un condensator de 250µf așa cu este prezentă și în diagrama de folosire ca
amplificator de sunet în fisa sa de documentație.
Circuitul integrat LM386N-4 nu este un amplificator ideal în ceea ce privește distorsiunea armonică totală
deoarece așa cum scrie și în fisa de documentație a acestuia38 este în jur de 10 % ceea ce este cam mult în
comparație cu alte amplificatoare care este posibil ca acestea să aibă THD(din limba engleză: Total
Harmonic Distortion ) în jur de 1 sau 2% în condiții normale de utilizare.
35. https://www.component7.com/image/cache/catalog/product/semiconductors/LM386%20-%20Low
%20V oltage%20Power%20Amplifier-500×500.jpg , [consultat la 09.08.2018]
36. https://pdf1.alldatasheet.com/datasheet-pdf/view/509276/TI/LM386N-4.html , pagina 1, [consultat la
09.08.2018]
37. Idem, pag. 5 , [consultat la 09.08.2018]
38. Idem, pag 4, [consultat la 09.08.2018]
21

Totuși aplicația aceasta de radio FM folosind Arduino este creată în scop didactic și nu necesită o claritate
extraordinar de bună a sunetului și se acceptă ca pe alocuri să mai avem și mici distorsiuni insesizabile ale
sunetului oferit la ieșire ținând cont și de faptul că nu ne-am propus să facem amplificatorul ideal în cadrul
acestei lucrări de licență.
Să dăm un exemplu, observăm din fișa de documentație39că circuitul de amplificare LM386N-4 la o tensiune
de alimentare de 16V și o sarcina de 32 ohmi valoarea THD-ului are o valoare procentuală de 10%. De
asemenea și puterea de ieșire la aceasta tensiune este de aproximativ 1W.
2.3 TRANSFORMATORUL DE CURENT ALTERNATIV
Pentru a alimenta circuitul de amplificare a sunetului nu este suficientă o tensiune de 5V și un curent de 150
mA pe care îi oferă plăcuța Arduino mai ales că la această plăcuță se conectează și alți consumatori precum
modulul de radio și LCD-ul și din aceasta cauză resursele oferite nu sunt suficiente pentru cipului LM386N-
4.
La îndeplinirea acestei sarcini și anume: de a obține un semnal al sunetului cât mai puternic, curat și fidel
vom avea nevoie de tensiuni mai mari de 5V și acest lucru îl vom realiza cu un circuit de redresare a
curentului alternativ primit de la rețeaua de energie electrică.
Așa cum specifică fișa de documentație anterior menționată a circuitului integrat LM386N-4, acesta are
nevoie o tensiune minimă de 5V și o tensiune medie de 12V pentru a funcționa în parametri optimi.
Putem admite că majoritatea dispozitivelor electronice (TV-uri, monitoare, amplificatoare de sunet, leduri,
telefoane mobile, etcetera ) funcționează cu tensiuni continuu de anumite amplitudini. De exemplu,
telefoanele pot funcționa pe tensiuni de 5V , monitoarele pot funcționa pe 12V și așa mai departe. Este și
cazul circuitului integrat LM386N-4 care, de asemenea, a fost proiectat ca la bornele de alimentare să i se
aplice o tensiune continuă de o anumită valoare.
Tensiunea oferită de rețeaua de energie publică este alternativă și pentru a obține o tensiune continuă avem
nevoie de un transformator de curent alternativ pentru a obține o amplitudine mai mică a tensiunii de la
230Vac la 12Vac, diode redresoare pentru a transforma tensiunea alternativă în una continuă și anumite
condensatoare de diferite capacități pentru atenuarea semnalelor fluctuante.
Având deja la dispoziție un transformator care oferă la ieșirea secundar o tensiune de 12Vacc și un curent de
2A am implementat un circuit de redresare a tensiunii alternative în tensiune continuă. Mai multe detalii
39. https://pdf1.alldatasheet.com/datasheet-pdf/view/509276/TI/LM386N-4.html , pag. 2, [consultat la data
de 09.08.2018]
22

despre cum am conectat elementele în circuit dar și caracteristicile componentelor voi detalia în capitolul
patru.
În cele ce urmează voi detalia puțin despre ce este și rolul fiecărei componente pe care o folosim în realizarea
acestui alimentator.
Conform informațiilor oferite de V oncila_Ion40 un transformator este un dispozitiv electric care prin
intermediul celor două circuite ale sale transferă, prin legile inducției electromagnetice, energie electrică din
primul circuit în cel de-al doilea.
Cu alte cuvinte putem spune că acesta preia energie de la o anumită rețea care poate avea o anumită tensiune,
curent și rezistență și o transferă mai departe sub altă formă mai mare sau mai mică (curent, tensiune) dar
ținându-se seama de faptul că între cele două circuite trebuie să existe separare galvanică.
Astfel, în cazul apariției unor tensiuni periculoase pe rețeaua de linie electrică, dispozitivele electronice care
sunt conectate la aceste transformatoare sunt protejate.
Datorită acestui sistem de comunicație prin inducție electromagnetică și a separării galvanice formează o
barieră de protecție împotriva semnalelor de tensiune periculoase care pot apărea pe o durată de foarte mică
de timp pentru majoritatea dispozitivelor electronice care sunt utilizate în scop medical și nu numai, unde se
lucrează cu lichide sau trebuie să aibă o precizie foarte mare de calcul.

Figura 2.2.2 Transformator de curent alternativ 41
Așadar, acest semnal oferit de transformator este dependent de tensiunea de intrare, numărul de spire existent
pe primarul și secundarul circuitului iar tensiunea are o formă sinusoidală în timp și care se oscilează cu o
frecvență de 50 sau 60 Hz.
40. V oncila Ion, „TRANSFORMATORUL ELECTRIC -Mașini
electrice”,https://www.arthra.ugal.ro/bitstream/handle/123456789/3276/
V oncila_Ion_Masini_electrice_capitolul1.pdf?sequence=1&isAllowed=y , pag.2, [consultat la data
10.08.2018]
41. https://ro.wikipedia.org/wiki/Transformator#/media/File:Transformer_principle.png , [consultat la data
10.08.2018]
23

În imaginea de mai jos este prezentată forma tensiunii alternative:
Figura 2.2.3 Forma tensiunii în secundar
V om vedea în continuare cum reușim să liniarizam această formă de undă sinusoidală în subcapitolul
următor.
2.3.1 Diode redresoare
Conform informațiilor oferite de site-ul eprofu.ro la secțiunea „Diode redresoare”42, dioda redresoare este un
element electronic format din două joncțiuni( formate din material de siliciu sau germaniu) cu două
terminale: anod și catod. Acestea permit trecerea curentului ( intra în conducție ) dacă sunt polarizate direct,
însă, în polarizare inversă acestea nu permit deloc trecerea curentului. Polarizarea presupune aplicarea unei
tensiuni la bornele diodei și poate fi de două feluri: directă sau inversă.
De asemenea, așa cum se prezintă pe site-ul „eprofu.o”43 din punct de vedere al capsulelor diodelor, acestea
pot fi din diverse materiale: metal, sticlă sau plastic. În ceea ce privește tensiunea de prag a acestora, diodele
în polarizare directă, au nevoie de o anumită tensiune pentru a permite trecerea curentului și se numește
tensiune de prag, iar aceasta are o valoare de 0,6V pentru diodele fabricate din siliciu și o valoare de 0,2V
pentru diodele cu germaniu.
Știind faptul că tensiunea oferită de transformatorul de curent alternativ este una sinusoidală , acest lucru
însemnând că sensul curentului se face în două direcții iar pentru alimentarea amplificatorului de sunet avem
nevoie de curent doar în mod continuu iar acest lucru îl putem face cu aceste diode redresoare.
Conform site-ului menționat anterior44, la ieșirea punții redresoare semnalul sinusoidal nu va mai fi în ambele
sensuri ( pozitiv și negativ ) deoarece diodele sunt conectate în așa fel încât trecerea tensiunii să aibă loc doar
în sens pozitiv.
42. https://eprofu.ro/docs/electronica/carte/diode-redresoare.pdf , pag. 1, [consultat la 10.09.2018]
43. Idem, pag. 1, [consultat la 10.08.2018]
44. Idem , pag. 5, [consultat la 10.08.2018]
24

Mai jos este prezent forma semnalului după ce trece prin puntea redresoare .
Figura 2.2.4 Forma semnalului tensiunii alternative după ce trece prin puntea redresoare .
Conform lui Mihai P. Dincă 45 observăm că putem „netezi” această tensiune oscilantă în mod pozitiv cu
ajutorul unui condensator. În momentul când are loc o descreștere a semnalului variabil atunci are loc o
descărcare a condensatorului și în acest fel se mai semnalul devine mai puțin oscilant.
Forma semnalului va arăta asemănător ca în figura următoare:
Figura 2.2.5 Forma semnalului de la dioda redresoare cuplat la un condensator.
Așadar, după aplicarea condensatorului, forma semnalului s-a mai „netezit”, însă c u toate acestea, există așa
numită tensiune de riplu46 care oscilează cu o amplitudine de aproximativ 2V sau 3V . Pentru acest lucru vom
avea nevoie de un stab ilizator liniar de tensiune de tipul 78XX, unde xx reprezintă valoarea tensiunii de
stabilizare. Mai multe detalii despre funcționarea acestui circuit integrat în următoarea secțiune.
2.3.2 Regulatorul de tensiune
Conform fișei sale de documentație47 acesta este un dispozitiv pasiv de fixare a unei
tensiuni mai mari și variabile aplicată la intrare sa într-o tensiune mai mică dar fixă (
se apropie destul de mult de acest principiu ) la ieșire.

Figura 2.2.6 Regulator de tensiune pozitiv48
45. Mihai P. Dincă, „Manualul studentului”, http://old.unibuc.ro/prof/dinca_m/miha-p-dinc-elec-manu-stud/
docs/2011/sep/19_11_18_18cap_5_v3.pdf ,pag. 7, [consultat la 10.08.2018]
46. Riplu (tensiune care oscilează foarte rapid)
47. http://pdf1.alldatasheet.com/datasheet-pdf/view/222818/ESTEK/78XX.html , consultat la 10.08.2018
48. https://hobbytronica.ro/wp-content/uploads/2014/07/Figura-4.-Capsula-stabilizatoarelor-de-tensiune-
liniare-din-seria-78XX-si-79XX-Hobbytronica.jpg , pag. 1, consultat la 08.05.2018
25

În funcție de modelul regulatorului de tensiune poate fi de 5V , 6V , 8V , 9V , 10V , 12V sau și mai mari de atât.
De asemenea, conform aceleași fise de documentație menționate anterior, acest tip de regulator de tensiune
poate oferi un curent de maxim de un 1A sau 2A iar în caz de supra-sarcină acestea includ facilitați de
limitare internă și oprire în caz de supra-încălzire.
Tot în fișa de documentație care însoțesc aceste circuite integrate observăm că în funcție de tensiune de
stabilizare a fiecărui regulator de tensiune trebuie să ținem cont de următorii parametri:
•tensiunea minimă și maximă de intrare ;
•curentul minim și maxim de intrare;
•regulare tensiune de intrare;
•regulare tensiune de ieșire;
•respingerea fluctuațiilor;
•puterea de disipare;
•coeficientul de temperatura la tensiune a de ieșire;
•tensiune disipată;
•curentul de vârf la ieșire;
•tensiune de respingere (din limba engleză: dropout).
După cum observăm și în fișa de documentație în ceea ce privește eficiența energetică, trebuie ales un
regulator cu valoarea tensiunii reglate de cea mai apropiată valoare a tensiunii pe care o oferă puntea de
diode redresoare deoarece crește foarte mult puterea de disipare și nu avem un randament tocmai eficient.
Puterea se calculează în felul următor: (Vi – V o) * Io = P.
Vi – înseamnă tensiunea de intrare;
V o – înseamnă tensiunea de ieșire;
Io – înseamnă curentul de ieșire;
P- înseamnă puterea activă.
Din punct de vedere al pinilor acesta are un număr de trei pini așa cum observăm și în figura de mai jos, iar
acestea au următoarele semnificații:
1- intrarea;
2- GND;
3- ieșirea.
Figura 2.2.7. Aplicația tipică a regulatorului LM78XX pozitiv de tensiune 49
49. https://pdf1.alldatasheet.com/datasheet-pdf/view/222818/ESTEK/78XX.html , pag.9, [consultat la data
10.08.2018]
2678XX1
23
0.33 uF 0.1uF+VIN+VOUT

În principiu, așa cum prezintă și fisa sa de documentație, înaintea tensiunii de intrare a regulatorului de
tensiune vom folosi un condensator nepolarizat de 0.33µf și încă unul de 0.1µf la ieșirea sa pentru a mai
îmbunătăți stabilitatea regulatorului de tensiune. Mai multe detalii despre ce regulator de tensiune voi folosi
precum și modul de conectare a acestuia cu celelalte elemente voi descrie în capitolul patru.
27

3. SCHEMA DE INTERCONECTARE A COMPONENTELOR
PENTRU REALIZAREA SISTEMULUI
Figura 3.1 Diagrama bloc de interconectare a sistemului de radio FM
Placa Arduino „UNO” va fi folosită pentru programarea și controlarea întregului sistem de radio. Aceasta
dispune la rândul ei de niște porturi analogice și digitale prin intermediul cărora vom prelua și controla
anumite semnale în funcție de ceea ce avem de realizat. Așa cum observăm din diagrama bloc avem nevoie
să alimentăm de la aceeași sursă de tensiune două montaje electrice diferite :
1.placa Arduino împreună cu celelalte module interconectate la aceasta;
2. amplificatorul de sunet .
28Radio TEA5767
Arduino
UNO
MCP41010
Power Supply6VLCD 16x2Encoder
LM386N-4Butoane de citire/memorare și potențiometru 10k

Tensiunile de alimentare ale celor două dispozitive sunt comune în intervalul de 6V și 20 V . Ca urmare a
acestei condiții am ales să alimentez cele două montaje cu o tensiune de 6V pe care am obținut-o de la un
transformator de curent alternativ și pe care am transformat-o în tensiune continuă cu: regulator de tensiune
pozitiv de 6V , diode redresoare și condensatoare.
Despre această schemă voi detalia în capitolul patru unde voi prezenta detaliat cum am procedat pentru a
obține această tensiune. Așa cum știm din datele oferite de fișa de documentație a plăcuței Arduino aceasta
oferă un curent de aproximativ 40mA pe un port însă acest lucru este suficient doar pentru a alimenta
modulele cum ar fi: LCD-ul 16×2, TEA5767, codorul rotativ, potențiometrul digital MCP41010 precum și
butoanele.
Pentru alimentarea amplificatorului de sunet este nevoie de un curent mult mai mare față de ce oferă plăcuța
Arduino și astfel am implementat o sursă de tensiune continuă de 6V cu aproximativ 1A (mai exact 0.8 A)
ceea ce înseamnă că puterea totală a acestuia de aproximativ 5W ceea ce este suficient pentru a susține cele
două montaje diferite.
Modulul TEA5767 este un modul cu comunicație I2C așa cum este și LCD-ul 16×2 și vor fi alimentate cu 5V
iar din punct de vedere al comunicației, aceștia se vor conecta la aceeași pini A4 (SDA) și A5 (SCL) ai
plăcuței Arduino „UNO”.
Cele cinci butoane și un potențiometru liniar 10k vor fi alimentate cu 5V . Butoanele vor transmite câte un
semnal digital pe porturile digitale D1, D2, D3, D4, D5 și D6. Un semnal digital poate lua una din cele două
valori: „0” sau „1” logic. Când butonul este neapăsat portul va citi valoarea logica „0” iar când este apăsat va
citi valoarea logică „1”.
Codorul electromecanic va fi, de asemenea, alimentat de la placa Arduino la o tensiune de 5V și va oferi la
ieșirea sa pe cele două porturi digitale două semnale digitale care sunt cu 90 grade în fază una față de
cealaltă. Modul în care se interpretează rotația codorului este analizarea celor două semnale: dacă forma de
semnal a intrării A apare prima dată urmat de aceeași formă de semnal a celeilalte intrări B atunci rotația
este într-un sens, să presupunem trigonometric, altfel este în sens invers trigonometric. Codorul îl vom folosi
pentru a căuta posturi de radio în mod crescător sau descrescător.
Pe LCD vom afișa informațiile despre frecvența setată, banda aleasă, volumul radioului, precum și modul de
transmitere al sunetului.
Potențiometrul digital MCP41010 îl vom folosi pentru a regla semnalul oferit către amplificator de la
modulul de radio. Acesta va fi controlat de la un potențiometru liniar 10k prin intermediul plăcii Arduino.
Aceasta folosește interfața SPI și prin intermediul acestei interfețe vom scrie valoarea necesară pentru a seta
potențiometrul digital în așa cum este nevoie.
Amplificatorul de sunet LM386N-4 este un circuit integrat care poate fi alimentat cu o tensiune de minim 5V
și maxim 18V și oferă la ieșire un semnal amplificat cu cel puțin 20 dB. Conform fișei sale de documentație,
în funcție de tensiunea de alimentare, aceasta poate oferi la ieșire un câștig al semnalului de aproximativ 1W.
Acest dispozitiv își poate avea rolul în mai multe circuite, însă, în această lucrare îl vom folosi ca un
29

amplificator de sunet pentru sistemul de radio. În cele ce urmează voi detalia diagrama de utilizare a
radioului în sensul că voi descrie modul de funcționare și utilizare a acestuia.
3.1 DIAGRAMA DE UTILIZAREA A RADIOULUI
Figura 3.2 Diagrama de utilizarea a sistemului de radio
În acest subcapitol, voi prezenta modul în care am implementat sistemul de radio precum și modul de
folosire al acestuia.
După cum se observă și în figura de mai sus am descris pașii pe care îi urmăm pentru a seta în mod corect
radioul dar și ordinea în care acestea acestea trebuie să fie executate. Inițial, când vom alimenta cu energie
electrică sistemul de radio se va actualiza cu ultima frecvență de radio pe care am folosit-o anterior. Ulterior,
putem alege să păstrăm banda de frecvențe sau să o schimbăm.
Banda setată va începe întotdeauna pe „EU” , acesta reprezentând banda de frecvențe folosită în Europa.
Astfel, dacă ultima data am ascultat un post pe o frecvență care nu este valabilă pentru banda din Europa, în
momentul în care repornim întregul sistem, acesta va reseta frecvența la valoarea cea mai mică care se află în
gama de frecvențe din Europa, adică 87.5 MHz.
După ce am ales și banda de frecvențe putem seta radioul pe o altă frecvență prin două modalități : prima
modalitate este să citim o frecvență din memoria EEPROM pe care am memorat-o individual la cele trei
adrese diferite prin intermediul celor trei butoane, iar cea de-a doua modalitate este ca la frecvența deja
existentă a radioului să adăugăm sau să scădem cu 0.1 frecvența existentă în funcție de cum rotim codorul
electromecanic.
30Start radioSelectare banda
Alegere frecvență din encoder Reglare volumSelectare post „favorit”din EEPROM
Memorare stație în EEPROM

Reglarea volumului se poate face în orice moment deoarece nu afectează funcționalitatea radioului.
Următorul lucru pe care îl mai putem face după ce am ales deja o anumită frecvență este să o salvăm în
memoria EEPROM la una din cele 3 butoane implementate supra-scriind informația deja existentă la adresa
respectivă.
În subcapitolele următoare voi detalia fiecare funcționalitate a radioului prin intermediul diagramelor de
stare, astfel încât să ilustrez în mod cât mai clar etapele fiecărei acțiuni efectuate de un utilizator dar și
modul în care acesta este executată de programul sursă pe care l-am implementat.
31

3.2 DIAGRAMA DE STARE A PROCESULUI DE CITIRE A
BUTOANELOR DE SETARE/MEMORARE STAȚIE RADIO
Figura 3.3 Diagrama de stare a butoanelor de citire și/sau memorare
Figura de mai sus ilustrează modul în care am programat starea butoanelor care se ocupă cu operațiile de
citire/memorare post de radio din/în memoria EEPROM. În diagrama de mai sus am exemplificat procesul
de citire/memorare folosind doar un buton de citire/memorare(„R/M1”) , restul având aceeași funcționalitate
ca cel pe care l-am menționat anterior.
Modul de funcționare al acestor butoane este în felul următor: avem trei butoane denumite
„R/M1”(read/memory 1), „R/M2”, „R/M3” și un alt buton numit „Fn” .
Funcționalitatea celor 4 butoane este în felul următor:
1.dacă butonul „R/M1” este apăsat(„1 logic”) și butonul „Fn” este neapăsat(„0 logic”) – atunci avem
operația de citire a unui post de radio din memoria EEPROM a plăcuței Arduino pe care anterior am
înregistrat-o. Același lucru este valabil și pentru butoanele „R/M2” și „R/M3”, dacă acestea sunt
apăsate individual și tasta „Fn” nu este apăsată, atunci se execută doar operația de citire.
32Read Btn. „R/M1”
Read Btn. „Fn”Recording frequencyHIGH
LOWRead stationrecorded
HIGH
ExitExitLOW
Exit
start
Setting TEA5767Warning lightWarning lightStation value
Error lightHIGH
LOWHIGH
okWrong value
Setting TEA5767 withmin. value from every BandHIGH
ExitRead Btn. „Band”

După ce a avut loc citirea frecvenței din memoria plăcuței Arduino vom semnala cu ajutorul unor
leduri că operația a avut loc și cu valoarea pe care am obținut-o din memoria plăcuței Arduino vom
seta modulul de radio pentru a porni recepția pe această frecvență.
2.dacă butonul „Fn” este apăsat și butonul „R/M1” este apăsat -atunci se execută operația de
memorare post de radio în memoria EEPROM a plăcuței Arduino. De asemenea, și în acest caz, dacă
fiecare tastă de „R/M x” este apăsată simultan cu tasta „Fn”- atunci se execută instrucțiunea de
memorare frecvență radio la o anumită adresă în memoria non-volatilă a plăcuței Arduino.
După ce am executat instrucțiunea specifică pentru fiecare caz în parte, programul va relua activitatea
așteptând o nou eveniment.
Trebuie menționat că la implementarea acestui sistem mai există un buton de alegerea benzii de
radiofrecvență numit „Band”. Astfel, am implementat și următoarea funcționalitate: în funcție de banda
aleasă, să nu efectuăm o citire din memoria EEPROM a unei frecvențe a cărei valoare nu se încadrează în
limitele benzii respective. Același lucru fiind valabil și pentru incrementarea sau decrementarea valorii
frecvenței dorite din codor, dacă aceasta depășește limitele benzii în care este setat.
Așadar, am explicat care este rolul butoanelor ,însă, în continuare voi prezenta diagrama de stare în ceea ce
privește controlul volumului și voi detalia modul de implementare al acestuia.
33

3.3 DIAGRAMA DE STARE A PROCESULUI DE CONTROL AL
VOLUMULUI
Figura 3.4 Diagrama de stare a a procesului de citire și setare a volumului
În cadrul acestui subcapitol voi prezenta modul în care vom controla potențiometrul digital „MCP41010” și
la ce ne ajută acest montaj. Pentru ascultarea informațiilor oferite de modulul de radio am implementat un
amplificator folosind circuitul integrat LM386N-4.
Pentru acest amplificator am implementat controlul volumului oferit de modulul de radio folosind un
potențiometru digital pe care îl vom programa prin intermediul plăcuței Arduino. Am folosit datele pe care le
oferă un potențiometru liniar analog de 10k și le-am prelucrat în felul următor: valoarea minimă fiind 0 și cea
maximă am ales să fie 1000, cu ajutorul unei funcții din mediul de dezvoltare Arduino, am „tradus” aceste
valori de la 0 la 1000 la 0 și 255 și în acest fel putem programa potențiometrul digital cu valori de la 0 la 255,
deoarece, conform fișei sale de documentație, acestea sunt valorile acceptate de acest circuit integrat.
La fel cum se observă și diagrama de stare, pentru valori ale potențiometrului analogic care sunt mai mici de
17, vom programa potențiometrul digital cu valoarea 0 pentru a seta rezistența internă a acestuia la maxim iar
pentru valori care depășesc valoarea 255 vom programa dispozitivul cu valoarea maximă de 255.
34Read Potentiometer10k
Setting digital
potentiometer startMapping
values
X < 17
X = 0
X = 255X > 255
exitelse

Am ales să pun astfel de limite deoarece este posibil ca din cauza unor erori să primim valori mai mari de
255 și atunci potențiometrul digital se va comporta anormal, în sensul că nu va mai permite sunetului să
treacă la capacitate maximă prin acesta și atunci nu vom obține semnalul dorit de la modulul de radio.

Cu valorile mai mici de valoarea 17, oferite de potențiometrul analogic, am ales să programez integratul cu
valoarea 0 pentru a opri absolut orice ieșire a semnalului aplicată la intrarea sa, astfel când vom alege nivelul
de sunet „0” să nu mai existe nici un fel de semnal la ieșire.
Așadar, am implementat modul de programare al potențiometrului digital, iar în următorul subcapitol voi
prezenta și modul de programare sau setare a modulului de radio TEA5767.
3.3 DIAGRAMA DE STARE A PROCESULUI DE SETARE A
MODULULUI DE RADIO
Figura 3.5 Diagrama de stare a a procesului de setare a modulului de radio
În această diagramă de stare voi prezenta modalitatea în care modulul de radio „TEA5767” este setat cu o
anumită frecvență. La acest sistem mi-am propus ca alegerea postului de radio să se facă în mod manual și
nu automat.
Așa cum se observă din figura de mai sus, setarea circuitului integrat de radio se face din mai multe părți, dar
primă oară, când va rula programul se va seta cu ultima frecvență salvată anterior în memoria non-volatilă a
plăcuței Arduino.
35Read last Frequency from EEPROM
Setting TEA5767Read encoder
Read buttons „favorites”Read button „Band”
0 (EU)
Values: 87.5…108.0 MHz1 (JPN)
Values: 76.0…95.0 MHz
Exit

Un alt mod de setare al radioului este acela de a selecta una din cele trei frecvențe memorate anterior în
memoria EEPROM. Atunci când vom apăsa unul din cele trei butoane de „posturi de radio favorite”
programul va seta radioul pe respectiva frecvență și cu ajutorul unor leduri atașate fiecărui buton vom
semnala luminos faptul că a avut loc operația de citire din memoria EEPROM.
Și ultimul mod în care putem seta radioul este acela de a căuta în mod succesiv fiecare frecvență de radio iar
acest lucru îl putem realiza cu ajutorul unui codor digital. După ce au avut loc inițializarea radioului cu
frecvența anterior ascultată, codorul digital va avea următoarea funcționalitate: în funcție de sensul de rotație
al acestuia: la frecvența anterior aleasă se va adăuga sau se va scădea cu valoarea de 0,1.
Să presupunem următorul exemplu: modulul de radio a fost setat pe frecvența 99,0 MHz. Dacă vom roti
codorul în sensul acelor de ceasornic, atunci frecvența va crește cu 0,1 devenind astfel 99,1 MHz. Dacă vom
roti codorul în sensul invers acelor de ceasornic, atunci frecvența va scade cu 0,1 devenind astfel 89,9 MHz.
Valorile acestea nu pot fi aleatorii,ci în funcție de banda aleasă, pe care o vom alege folosind butonul de
„Band”, acestea se vor încadra în niște limite. Spre exemplu, dacă vom alege banda de frecvențe din Europa,
acestea se vor încadra între 87,5 MHz și 108,0 MHz, iar dacă vom alege banda de frecvențe din Japonia,
acestea se vor regăsi în intervalul 76,0 MHz și 91,0 MHz.
Așadar, am explicat și în acest caz care este rolul butoanelor, însă, în continuare voi prezenta diagrama de
stare în ceea ce privește afișarea informațiilor pe LCD și voi detalia modul de implementare al acestuia.
36

3.4 DIAGRAMA DE STARE A PROCESULUI DE AFIȘARE A
INFORMAȚIILOR PE LCD
Figura 3.6 Diagrama de stare a a procesului de de afișare a informațiilor pe LCD
În cadrul acestui subcapitol voi prezenta modalitatea de preluare a informațiilor oferite de piesele și modulele
interconectate în acest sistem și prelucrarea acestora pentru a fi afișate pe ecran LCD-ului. Am implementat
ca pe acest LCD să se afișeze patru informații distincte: frecvența de radio, banda FM, volumul și modul de
transmitere a sunetului.
Pentru afișarea frecvenței vom citi butoanele, codorul și memoria EEPROM pentru ultima frecvență
ascultată. În funcție de banda aleasă și de acțiunea efectuată asupra unui buton de citire sau asupra codorului
digital, în programul sursă vom actualiza frecvența în mod corespunzător cerințelor pe care le-am menționat
anterior. După calcularea frecvenței, vom seta modulul de radio cu aceasta și apoi vom actualiza și
dispozitivul de afișare.
Actualizarea LCD-ului cu banda FM aleasă se face într-un mod foarte simplu: vom citi butonul de „Band”
iar în cadrul programului sursă vom incrementa un contor. Valoarea contorului o vom salva într-o variabilă
apoi o vom calcula cu operația de modulo 2. Astfel, pe parcursul apăsărilor succesive, vom avea numai valori
de „0” și „1”, atribuind pentru fiecare număr par o bandă din cele două.
Asemănător afișării celor două informații de mai sus, va avea loc și afișarea volumului. Acesta va fi controlat
de un potențiometru analogic și va avea loc prima oară setarea potențiometrului digital apoi valorile
respective de la 0 la 255 le vom împarți la valoarea 17 pentru a crea 15 nivele de sunet. Totodată, valoarea
obținută prin împărțirea la 17 va fi actualizată și afișată pe ecranul LCD-ului.
37Setting MCP41010Digital potentiometerReturn „Mode sound” 1. „Encoder”, 2.Btn. „R/M1” , 3.Btn„R/M2”, 4.Btn „R/M3,”
Read potentiometer linear 10kThe Module „TEA5767”Display on LCD
ExitStartread
readread
Button „Band”76,0…108,0
0 or 1Return frequency FM
read Mono or stereo
( 0…255 ) / 17EU or JPN
0…255

Ultima informație pe care o afișăm pe ecranul LCD-ului va fi cea referitoare la modul de transmisie a
sunetului: sunetul se va transmite în mod „mono” (pe un singur canal) sau în mod „stereo”( pe două canale).
Transmisia în mod „stereo” va avea loc atunci când recepția postului va avea un semnal satisfăcător, altfel în
condiții de semnal slab modulul de radio va trece în mod automat pe modul de transmisie „mono” pentru a
atenua semnalele zgomotoase de fond.
Așa cum se observă și în diagrama de stare, aflarea modului de transmisie se face în felul următor: după ce
am setat modulul de radio pe o anumită frecvență îl vom interoga prin intermediul unei instrucțiuni pentru a
afla și modul de transmisie al sunetului pentru postul de radio setat. Prin intermediul unei variabile vom
actualiza și dispozitivul de afișare cu informația obținută anterior.
Așadar, am detaliat modul de actualizare a informațiilor pe afișajul cu cristale lichide iar în capitolul următor
voi detalia modul în care am implementat fizic montajele și modul în care am programat placa Arduino
pentru a îndeplini sarcinile pe care le-am propus la începutul acestei lucrări.

38

4. DESCRIEREA IMPLEMENTĂRII PROIECTULUI
4.1. IMPLEMENTAREA ȘI PROGRAMAREA MODULULUI DE RADIO
Conform fișei sale de documentație pe care am menționat-o în capitolul doi, acest circuit integrat
funcționează prin programarea regiștrilor interni prin intermediul interfeței de comunicație I2C și prin
intermediul acestei comunicații modulul poate fi setat sau citit. Așa cum se observă și în figura de mai jos
modul de conectare a modulului de radio este la fel ca oricare alt dispozitiv care respectă modul de conectare
a unui modul ce folosește o interfață I2C.
Referitor la modul de programare, modulul de radio folosește librăria „Wire.h” care este folosită la toate
modulele cu comunicație I2C, header-ul „TEA5767Radio.h” care include declarații și „define-uri”, iar pe
lângă acest fișier mai există și fișierul de tip „cpp” numit „TEA5767Radio.cpp” care conține definirea
funcțiilor declarate în header.
Figura 4.1 Conectarea modulului de radio la plăcuța Arduino
39Arduino UNOD0 D8D6D7D5D1D3D2 D11D9D10D12D13 D4
A5A4A3A2A1A0 5V3.3VGNDR
adio TE
A
5767 5V
S
C
LS
D
AG
N
D
Cablu tată-tatăAntena

În anexă, voi lista funcții și „define-uri” pe care le vom folosi în codul sursă principal(„main”). În fișierul
header am setat radioul să taie frecvențele înalte și să reducă zgomotul datorat de acestea deoarece acestea
ajută în situația în care semnalul radio nu are o intensitate foarte mare.
V om seta radioul în mod manual cu un codor rotativ iar pentru acest lucru vom citi valoarea calculată de
codor și o vom trimite modulului de radio .
Așa cum am menționat și în partea teoretică, pentru a seta modulul de radio pe o anumită frecvență este
necesar să calculăm noua frecvență pe care o vrem să o căutăm sub forma unui „cuvânt PLL”. Acest cuvânt
este format din 14 biți și pentru a-l calcula, în mod corect, conform fișei sale de documentație, trebuie să
ținem cont de frecvența de referință a oscilatorului, frecvența intermediară precum și de modul de
funcționare „HILO”.
Setarea modului de funcționare HILO presupune ca la frecvența dorită să adunăm sau să scădem cu dublul
valorii frecvenței intermediare(2*IF) după cum urmează:
•pe mod „HIGH” – adăugăm valoarea de 450 kHz;
•pe mod „LOW” – scădem valoarea de 450 kHz.
Conform fisei de documentație, algoritmul de setare „HILO” în mod optim este în felul următor: se alege
„HILO” pe mod „high” și se apelează funcția de calculare frecvență cu „hilo” setat anterior și apoi se
măsoară nivelul de intensitate al semnalului. Apoi, vom măsura nivelul semnalului și cu „HILO” setat pe
mod „low” și vom compara în ce situație am obținut un semnal mai bun și vom alege să setăm frecvența
radioului cu „HILO-ul” corespunzător semnalului mai bun.
După ce am stabilit modul de funcționare „HILO”, funcția de calculare frecvență va primi ca parametru o
variabilă numită „freq” care va avea o valoare sau alta în funcție de „HILO”. În continuare vom aplica
formula dată din fișa de documentație în care vom ține cont de parametrii frecvenței intermediare precum și
de frecvența de referință. În cazul nostru frecvența oscilatorului de cristal este de 32.768 kHz ceea ce
înseamnă că frecvența intermediară este de 225KHz și frecvența de referință este de 32768 Hz. În codul
sursă, am calculat cuvântul „PLL” în felul următor :
Frecv_de_calc = 4 * (freq * 1000000 + 225000) /32768, unde:
Frecv_de_calc – este cuvântul PLL de calculat;
frecq – este frecvența dorită și calculată cu „HILO” ;
După calcularea cuvântului „PLL”, vom seta radioul cu noua frecvență și după acest pas vom citi
informațiile despre modul de transmisie al sunetului. C itirea acestuia se face cu o funcție definită în fișierul
de tip „.cpp” care folosește o mască definită anterior în fișierul header pentru a testa dacă biții corespunzători
celor două tipuri de informații sunt pe „1 logic” sau „0 logic”.
40

Una dintre instrucțiuni care apelează funcția de setare a radioului pe o anumită frecvență este cea din
codorul rotativ iar instrucțiunile de cod sunt următoarele:
Parametrul pe care îi trimitem funcției de setare a radioului este aceeași și anume „last_post_set” iar această
variabilă își actualizează valoarea în funcție de ce evenimente apar, deoarece în programul nostru, noi putem
să setăm modulul de radio în mai multe feluri: setând cu frecvența din memoria EEPROM a plăcuței Arduino
sau din codorul electromecanic.
411. encoder_now = freq_encoder;
2. if(encoder_now != encoder_ante){
3. last_post_set = freq_encoder ;
4. radio.set_frequency( last_post_set );
5. }
6. encoder_ante = encoder_now ;

4.2. IMPLEMENTAREA FUNCȚIONĂRII BUTOANELOR
Figura 4.2 Conectarea butoanelor și a ledurilor la plăcuța Arduino
În această aplicație vom folosi butoanele pentru a controla sistemul nostru, astfel că vor exista cinci butoane:
•trei butoane de „READ” ( „Btn R1”, „Btn R2”, „Btn R3” ) pentru citire post de radio;
•un buton numit „FN” , rolul acestuia este că dacă îl vom folosi simultan cu fiecare buton de „READ”
nu se va mai executa operația de citire ci se va executa instrucțiunea pentru memorare post de radio;
•un buton numit „Band” pentru limitarea gamei de frecvențe radio.
42Arduino UNOD0 D8D6D7D5D1D3D2 D11D9D10D12D13 D4
A5A4A3A2A1A0 5V3.3VGNDFn4,7 K4,7 KBtn R34,7 K
Btn R2
4,7 K
4,7 K
BandBtn R1
220Ω
220Ω220Ω

Implementarea butonului de citire sau memorare constă în următoarea funcționalitate: dacă, de exemplu,
este apăsat doar butonul de „Btn R1” care este conectat pe portul digital D4 al plăcuței Arduino și butonul
„FN” este neapăsat, atunci vom primi un semnal de „1 logic” de la butonul „Read” și un semnal de „0 logic”
de la butonul FN si atunci vom executa doar operația de citire frecvență radio din memoria EEPROM a
plăcuței Arduino.
Dacă au loc două apăsări simultan de butoane dar, totuși, într-o anumită ordine și anume: prima dată apăsăm
butonul „FN” și nu se va întâmpla nimic până când nu este apăsat și butonul „Btn R1”, iar atunci vom
executa operația de memorare post de radio în memoria EEPROM pentru a putea schimba postul de radio
inițial salvat în memorie.
Butonul de bandă are rolul de a alege banda pe care o dorim. Am implementat pentru aceasta aplicație două
benzi : una care poate fi folosită în Europa și cealaltă care poate fi folosită în Japonia.
Butonul funcționează în felul următor: dacă butonul are un număr de apăsări pare, va alege banda
„EU”(Europa) altfel va alege banda „JPN”(Japonia). Totodată, în funcție de banda aleasă, în codul sursă, am
impus niște limite pentru fiecare regiune în parte, în sensul că, în Japonia, banda de frecvente începe de la 76
Mhz și se finalizează la 91 MHz iar cea din Europa începe de la 87.5 MHz și se oprește la 108.0 MHz.
Pentru a înțelege mai bine cum funcționează acest buton de alegere a benzii , vom simula un exemplu: să
presupunem că suntem pe banda „EU” pe frecvența 100.5 MHz și comutăm pe cealaltă bandă. În codul
sursă am condiționat ca radioul să aleagă frecvența maximă admisă în această bandă. În cazul acesta fiind 91
MHz. În al doilea caz am tratat și posibilitatea de a încadra corect gama de frecvente și în banda „EU” atunci
când trecem, de exemplu, din banda „JPN” de pe frecvența 80.7 MHz , știind că frecvența minimă în banda
europeană este de 87.5MHz.
Codul sursă care realizează această operație de citire și/sau memorare este următorul:
431.buttonStateRead1 = digitalRead(buttonRead1);
2. if ( buttonStateRead1 != lastButtonStateRead1 ) { // READ1 ….
3. if ( buttonStateRead1 == HIGH && buttonStateFn == LOW) {
4.
5. EEPROM.get(eeAddress1, read_fr1);
6. last_post_set = read_fr1 ;
7. if( ( last_post_set >= 91) && (counter_band % 2 == 1 ) )
8. {
9. freq_encoder = 91;
10 last_post_set = freq_encoder;
11. radio.set_frequency( last_post_set );
12. }
13.lastButtonStateRead1 = buttonStateRead1 ;

Semnalizarea operației de citire a unei frecvente radio din memoria EEPROM am implementat-o cu ajutorul
unui led care va emite o serie de energii luminoase iar un exemplu de program sursă este cel de mai jos.
Funcționalitatea ledului este în felul următor: de exemplu, dacă avem o eroare de citire a unui post de radio
din memoria EEPROM, ledul va lumina intermitent timp de aproximativ 1,5 secunde și apoi se va stinge, iar
dacă avem o operație de memorare post de radio, atunci ledul va lumina tot intermitent dar diferit față de
semnalizarea anterioară și apoi se va stinge. Acestea sunt conectate în serie cu o rezistență de 220 ohmi pe
porturile analogice A1, A2 și A3.
Cu ajutorul unei instrucțiuni repetitive vom repeta de trei ori seria de comenzi de aprindere și stingere a
ledului din cadrul celor două acolade ale instrucțiunii.
441. for(int iLEDR1 =0 ; iLEDR1 < 3 ; iLEDR1++){
2. digitalWrite(A1,HIGH);
3. delay(100);
4. digitalWrite(A1,LOW);
5. delay(400);
6. }

4.3. IMPLEMENTAREA FUNCȚIONĂRII CODORULUI
Schema de conectare a codorului la plăcuța Arduino este următoarea:
Figura 4.3 Conectarea codorului rotativ la plăcuța Arduino
Rolul codorului în această schemă este acela de a căuta un nou post de radio. Așa cum am prezentat în
capitolul precedent, codorul oferă un impuls de semnal pe care eu am ales să :
•incrementeze sau decrementeze frecvența FM în funcție de sensul în care este rotit.
După cum am mai descris anterior, se știe că posturile de radio din România încep de la frecvența de 87.5
MHz și se opresc la frecvența de 108.0 MHz. Modul de trecere prin aceasta bandă este în felul următor: 88.5,
88.6, … 108.0. De aici observăm că rezoluția de incrementare sau decrementare a benzii FM este de 0.1, deci,
în codul sursă am implementat următoarea funcționalitate și anume: la frecvența FM existentă se adaugă sau
se scade cu 0.1 în funcție de rotația codorului.
45Arduino UNOD0 D8D6D7D5D1D3D2 D11D9D10D12D13 D4
A5A4A3A2A1A0 5V3.3VGNDENCODERGND5VSWDTCLK

În implementarea codorului folosim pinii CLK și DT conectați la porturile digitale D7 și D8 ale plăcuței
Arduino pentru a citi impulsurile oferite de acesta. Primul și cel de-al doilea pin(„GND” și „+” ) constituie
pinii de alimentare și se vor conecta la pinul de 5V și pinul GND ai plăcuței Arduino.
Codul sursă care realizează citirea celor doi pini și adaugă sau scad cu valoarea pasului de incrementare
pentru căutarea frecvenței în mod crescător sau descrescător este următorul:
461. aState = digitalRead(outputA);
2. if ( aState != aLastState ){
3. if ( aState == HIGH ) {
4. if( digitalRead(outputB) != aState){
5. freq_encoder = freq_encoder – step_increm;
6. }
7. else{
8. freq_encoder = freq_encoder + step_increm;
9. }
10. }
11. }
12. aLastState = aState;

4.4. IMPLEMENTAREA LCD-ULUI
Schema conectării lcd-ului la plăcuța Arduino este următoarea :
Figura 4.4 Conectarea dispozitivului de afișare 16×2 cu conexiune I2C la plăcuța Arduino
Pentru acest proiect am ales un LCD cu comunicație I2C deoarece din punct de vedere al conectării fizice la
plăcuța Arduino este mult mai simplu fiind necesare numai 2 fire, însă, din punct de vedere software trebuie
să ștergem complet biblioteca „LiquidCrystal” existentă și trebuie să o înlocuim cu librăria compatibilă
pentru LCD I2C.
În program includem această bibliotecă „LiquidCrystal_I2C.h”, vom defini adresa și apoi în rutina de
„setup” vom iniția comunicarea cu display-ul.
Actualizarea informațiilor pe LCD a informațiilor în ceea ce privește frecvența, banda, volumul și modul de
transmisie al sunetului nu se va face de fiecare dată când ciclează bucla „loop” ci prin intermediul unor
variabile temporare vom actualiza LCD-ul numai dacă informația ce trebuie afișată este diferită față de
ceea ce se afișează în prezent și vom proceda astfel, deoarece setarea LCD-ului folosește aceeași interfață
serială de comunicare cu modulul de radio Tea5767, acesta în cele din urmă emite un zgomot de fiecare dată
când îl interogăm sau setăm. Același lucru se întâmplă și când setăm modulul de afișare LCD 16 x 2.
47Arduino UNOD0 D8D6D7D5D1D3D2 D11D9D10D12D13 D4
A5A4A3A2A1A0 5V3.3VGND
LCD 16x2SCL 5VGNDSDA

Acest zgomot este creat din cauza faptului că instrucțiunile de setare a modulului de radio sau de setare a
LCD-ului sunt instrucțiuni care produc o întârziere destul de importantă în ciclarea buclei „loop” și de aceea
orice mică întârziere pe care o avem în program se resimte și asupra sunetului de emis de modulul de radio.
Codul care afișează frecvența de radio pe display-ul LCD-ului este :
Codul care afișează banda de radio pe display-ul LCD-ului este :
Așa cum vedem în codul de mai sus, utilizăm două variabile în program pentru a citi numărul de apăsări de
la butonul de „Band” în momente diferite de timp și dacă acestea diferă, atunci vom actualiza cea de-a doua
variabilă la aceeași valoare și în funcție de numărul de apăsări vom actualiza display-ul cu informația
corespunzătoare în ceea ce privește banda aleasă.
481. freq_now = last_post_set ;
2. if(freq_now != freq_prev){
3. lcd.setCursor(0,0);
4. lcd.print(" ");
5. lcd.setCursor(0,0);
6. lcd.print("FM:");
7. lcd.print(freq_now );
8. }
9. freq_prev = freq_now;
1. counter_band_now = counter_band;
2. if (counter_band_now != counter_band_prev){

3. lcd.setCursor(10,0);
4. if( (counter_band_now % 2) == 0 )
5. lcd.print("B: EU ");
6. if( (counter_band_now % 2) == 1 )
7. lcd.print("B: JPN");
8. }
9. counter_band_prev = counter_band_now ;

Codul care afișează volumul sunetului radioului pe display-ul LCD-ului este :
Același principiu ca mai sus se aplică și în cazul acestui fragment de cod: în cadrul programului avem o serie
de instrucțiuni în care se calculează valoarea volumului ce trebuie afișat pe display și aceasta se calculează în
variabila „vol”.
Folosim alte două variabile pentru a detecta dacă s-a schimbat valoarea volumului ce trebuie afișat pe display
și dacă acest lucru se întâmplă vom actualiza display-ul cu informația corespunzătoare în ceea ce privește
volumul radioului.
491. vol_now = vol;
2. if( vol_now != vol_prev ){
3. lcd.setCursor(0,1);
4. lcd.print(" ");
5. lcd.setCursor(0,1);
6. lcd.print("V:");
7. lcd.print(vol_now);
8. lcd.print("/");
9. lcd.print("15");
10. }
11. vol_prev = vol_now;

4.5. REALIZAREA AMPLIFICATORULUI DE SUNET
Puterea de ieșire a semnalului audio oferit de modulul Tea5767 este una destul de mică, iar acesta este
suficientă doar pentru a conecta o pereche de căști. Deoarece vrem ca radioul să funcționeze cu un difuzor
am realizat un montaj astfel încât să putem conecta atât un difuzor de putere mai mare cât și o pereche de
căști. Schema de montaj a amplificatorului care va fi utilizat cu modulul de radio este următoarea:
Figura 4.5. Schema de conectare a amplificatorului de sunet
Amplificatorul primește la intrarea neinversoare (pinul 3) semnalul furnizat de ieșirea potențiometrului
digital MCP41010 de pe pinul PW0 prin intermediul unui soclu jack de 3.5 mm mono.
La soclul jack de intrare al potențiometrului digital unde am aplicat semnalul audio de la modulul de radio,
avem posibilitatea de a conecta și ale intrări de semnal furnizate de alte dispozitive audio cum ar fi: tablete,
telefoane, televizoare și așa mai departe. Ieșirea acestuia este transmisă mai departe la intrarea neinversoare a
amplificatorului integrat LM386N-4.
50LM386N-42
381
7
46
5Power supply 6 V6V
GND

+GND -+250 uF47 nf
Vcc
POTENȚIOMETRUMCP41010
PA0PB0X
XXXX10 k
+Difuzor

După cum se observă din schemă, amplificatorul va fi alimentat de la o sursă de tensiune continuă pe care o
voi descrie ulterior mai în detaliu în subcapitolul 4.7. Din documentația aferentă a acestui dispozitiv de
amplificare LM386N-4 observăm că tensiunea de intrare pe care o vom folosi pentru amplificare trebuie să
fie în jurul valorii de -0.4 …0.4V . Ceea ce nu știm, însă, cu exactitate este tensiunea de ieșire a modulului de
radio integrat, dar putem estima că aceasta ar fi în jurul valorii de 0.2V .
La intrarea 1 și 8 a amplificatorului am conectat un condensator nepolarizat de 47 nf pentru a obține un
câștig al frecvențelor înalte dar și o claritate mai bună a sunetului.
Ieșirea audio de pe pinul 5 este înseriată la difuzorul extern de 1W printr-un condensator de 250 µf pentru a
proteja cipul de efectele de câmp electric pe care le produce difuzorul atunci când este pus în funcțiune.
Lipsa condensatorului acestuia în schemă duce la distrugerea pe cale termică a cipului.
Trebuie menționat și faptul că dacă optam să alimentăm cipul cu o tensiune de 12V , puterea disipată creștea
la o valoare de aproximativ 1.2 W . Aceasta valoare este apropiată de nivelul maxim pe care îl suportă cipul
LM386N-4 și prin urmare trebui a în acest context să ne asigurăm că semnalul aplicat la intrarea
amplificatorului nu depășește o anumită tensiune și un anumit curent, iar din punct de vedere al încălzirii
circuitului integrat trebuia să aplicăm niște elemente de răcire care să preia căldura degajată de aceasta.
În cazul de față, nu este necesar aplicarea unui element de răcire deoarece la o tensiune de alimentare de 5
sau 6V , puterea disipată este destul de mică situându-se în jurul valorii de 250 mW, maximum fiind 1200
mW.
51

4.6. IMPLEMENTAREA POTENȚIOMETRULUI DIGITAL
Din punct de vedere al afișării și controlului volumului vom folosi dispozitivul electronic MCP41010.
Prin intermediul acestuia vom implementa două funcționalități:
•afișarea volumului pe display;
•controlul volumului pentru amplificatorul de sunet.
Figura 4.6 Schema de conectare a potențiometrului digital la plăcuța Arduino
52Arduino UNOD0D8D6D7D5D1D3D2 D11D9D10D12D13 D4
A5A4A3A2A1A0 5V3.3VGNDMCP41010Cs
SCK
SI
VssVDD
PA0PB0
PW0
Radio TEA5767 5V
SC
LSDAG
N
Dout5VGND
POT 10K
GNDOUT5V100 nf10 nf
10k10k
R1C1
C2R2

Dispozitivul MCP41010 poate fi programat prin intermediul interfeței SPI cu o valoare de la 0 la 255,
valoarea 0 însemnând valoarea cea mai mare a rezistenței iar 255 însemnând o valoare minimă a rezistenței.
Conectarea și modul de funcționare al dispozitivului va fi în mod divizor de tensiune. Plutitorul ( Wiper-ul )
intern se va „deplasa ” înainte și înapoi astfel încât să controlăm în mod liniar volumul sistemului.
Valorile pe care le vom furniza potențiometrului le vom prelua prin intermediul unui potențiometru 10k,
acesta fiind conectat pe portul analogic A0 și va oferi microcontrolerului valori cuprinse între 0 și 1023, dar,
prin intermediul programului de cod sursă vom folosi funcția de mapare care convertește întreaga gama de
valori de la 0 pana la 1023 într-o gamă pe care o poate folosi potențiometrul MCP41010 și anume între 0 și
255.
După cum se observă și în figura de mai sus semnalul primit de la modulul de radio trece printr-un filtru de
trecere a benzilor de frecvențe. Filtrele de trecere a celor două limite ale frecvențelor superioare și inferioare
permit trecerea frecvențelor care se află în aceste limite ale filtrului de trecere. Celelalte frecvențe care nu se
află în această limită de frecvențe sunt puternic atenuate.
Conform site-ului eprofu.ro50 acest filtru se numește filtru „trece bandă” și alcătuit dintr-un filtru trece – sus
și un filtru trece – jos. Formula cu care se calculează frecvența de tăiere superioară și inferioară este
următoarea:
Fts = 1
2∗Π∗R1∗C1=1
2∗Π∗10∗103∗10∗10−9= 1
0,000628= 1592 Hz;
Fti = 1
2∗Π∗R2∗C2=1
2∗Π∗10∗103∗100∗10−9= 1
0,00628= 159 Hz;
Fts = reprezintă frecvența de tăiere superioară;
Fti = reprezintă frecvența de tăiere inferioară.
Conform sursei menționată anterior putem calcula frecvența centrală a acestui filtru cu următoarea formulă:
F0 =√Fts∗√Fti= √1592∗√159= 39 * 12 = 468 Hz;
Lățimea de bandă, conform aceluiași site menționat anterior o putem afla cu următoarea formulă:
B = Fts – Fti = 1592 kHz – 159 kHz = 1433 kHz.
Pentru afișarea volumului pe LCD-ul 16×2 vom prelua acele valori ale potențiometrului digital cu care va fi
programat și le vom folosi în așa fel încât să obținem 15 nivele de sunet. Știind că valorile oferite de
potențiometrul analogic sunt foarte instabile vom folosi o metodă de calcul în așa fel încât să avem o citire
mai stabilă a potențiometrului.
50. https://eprofu.ro/docs/electronica/analogica/circuite/9filtre-pasive.pdf , pag. 4, [consultat la data
03.09.2018]
53

Folosind potențiometrul analogic, vom translata gama de valori de la 0 la 1023 la 0 și 255, apoi vom împărți
la 17 pentru ca numărul de nivele de sunet să fie într-un număr de 15. Prin acest mod potențiometrul digital
se va actualiza doar atunci când există o diferență de valori egală cu 17. Rezultatul operației anterioare o vom
înmulți din nou cu 17 astfel încât la treapta 15 a sunetului, potențiometrul digital să fie programat cu valoarea
15 * 17 = 255. Programarea dispozitivului MCP41010 va fi programată cu valori care sunt diferite cu 17
nivele cum ar fi: 1 * 17 = 17, 2 * 17 = 34 ,…14 * 17 = 238 și 15 * 17 = 255.
Codul sursă care implementează controlul volumului este următorul:
541. pot_digital_now = vol_MCP;
2. if( pot_digital_now != pot_digital_prev ){
3. MCP41010Write(vol_MCP);
4. }

5. pot_digital_prev = pot_digital_now ;

4.7 IMPLEMENTAREA REDRESORULUI DE TENSIUNE
ALTERNATIVĂ
Scopul acestei scheme este de a alimenta amplificatorul de sunet LM386N-4 și acesta conform fișei de
documentație solicită o tensiune pozitivă continuă de minim 5V și o tensiune maximă de 18V . Tot de la
această sursă de tensiune, vom alimenta și placa Arduino care la rândul ei va alimenta celeilalte componente
conectate la aceasta.
Având la dispoziție un transformator de tensiune alternativă de 12V , vom vedea cum vom proceda pentru a
obține o tensiune continuă și stabilă în vederea îndeplinirii cerințelor de alimentare ale amplificatorului dar
și a plăcuței Arduino.
Pentru a bloca trecerea curentului în semi-alternanță negativă și redirecționarea acestuia doar în sens pozitiv
vom folosi diodele redresoare 1N4007. V om folosi patru diode pentru a folosi cele două alternanțe ale
curentului alternativ și pentru a obține o tensiune de riplu la jumătate față de varianta cu o singură alternanță.
Figura 4.7 Schema redresării curentului alternativ în curent continuu
Conform fisei de documentație căderea de tensiune pe diodele 1N4001 la un consum de curent de 0.4 – 1 A
este de aproximativ 0.9V .
Tensiunea maximă o vom calcula știind tensiunea efectivă și o vom calcula cu formula :
Umax = Uef*√2 =>
=> Umax= 9*√2 = 12.72 V .
55Tr
12 VacLM78061
23+7V
GNDPunte redresoare
Filtru
oscilații10 nF 4400 uF+
GND

Conform lui manualului lui același Mihai P. avem o tensiune alternativă de aproximativ 12V în circuitul
secundar al transformatorului, însă, trebuie sa ținem cont și de căderile de tensiune prin diodele redresoare și
pentru a calcula tensiunea efectivă la ieșirea punții redresoare vom folosi următoarea formulă:
Usmax= U1ef*√2 – 2 * UCD , 51 unde :
Usmax = reprezintă tensiunea alternativă efectivă la ieșirea punții redresoare;
U1ef = reprezintă tensiunea efectivă din secundarul transformatorului;
UCD = reprezintă căderea de tensiune pe cele două diode redresoare;
Deci Usmax(tensiunea maximă) la ieșirea celor două redresoare este:
Usmax = U1ef * √2 – 2 * UCD =>
=>Usmax = ( 9Vef * √2 ) – ( 2 * 0.9 )=
= 12,72 V – 1.8V = 10.92 V .
Așadar, la ieșirea punții redresoare am obținut o tensiune alternativă de 10.92 V , însă, trebuie să
„netezim” adâncimea oscilației semnalului ( tensiunea de riplu ) . V om face acest lucru folosind niște
condensatoare de o anumită capacitate iar valoarea capacității folosite o vom determina utilizând formulele
pe care le voi detalia mai jos.
Conform autorului menționat anterior formula care determină tensiunea de riplu este următoarea:
∆U = I∗T
2Cf.
I= reprezintă curentul ce trece prin circuit;
T= reprezintă timpul ;
Cf =reprezintă capacitatea condensatorului.
Funcția condensatorului în această schema este acela de a asigura întotdeauna rezerve de energie atunci când
semnalul oscilează de la 10.92 V spre valoarea 0 pe o perioadă de 10 milisecunde. Am spus 10 milisecunde
deoarece frecvența rețelei noastre este de 50Hz iar perioada acestei rețele înseamnă: T = 1/50Hz = 0.02 s, iar
în cazul nostru, schema folosește două alternante pozitive, deci, frecvența se dublează și ia valoarea de
100Hz și prin urmare perioada devine: T = 1/100 = 0.01 s, ceea ce înseamnă 10 milisecunde. În acest caz,
timpul se reduce la jumătate pentru a putea încărca și descărca condensatorul, astfel am avea o perioadă de
20 ms în care trebuia să asigurăm aceeași tensiune de riplu, în cazul de față de 1V .
Pentru a determina valoarea condensatorului formula devine:
51. Mhai P.Dinca, http://old.unibuc.ro/prof/dinca_m/miha-p-dinc-elec-manu-stud/docs/2011/sep/
19_11_18_18cap_5_v3.pdf , pag. 7, [consultat la data 28.08.2018]
56

Cf = I∗T
2ΔU52 ;
Știind că în cadrul acestei scheme, am ales tensiunea de riplu de 1V , curentul maxim pe care dorim să îl
avem este de 0.8A, perioada de oscilație a semnalului este de 10 milisecunde, vom aplica formula de mai
sus pentru a afla capacitatea condensatorului:
Cf = I∗T
2ΔU= 0.8A∗10ms
2∗1V= 0.8A
2=4 mF = 4.000 µf.
Vom folosi la ieșirea diodelor redresoare două condensatoare de 2200µf fiecare, apoi vom conecta un
stabilizator de tensiune de tipul LM7806 de 6V .
Așadar, va trebui să asigurăm o tensiune de riplu de un volt. În acest fel tensiunea oscilând cu o amplitudine
de 1 volt, adică aceasta va avea valori de la aproximativ 10.92 V maxim și va coborî la minim 9.92 V . Știind
că trebuie să asigurăm cel puțin 2V în plus pentru stabilizare deoarece conform fișei de documentație a
regulatorului, aceasta are o cădere de tensiune de 2V la un curent de 1 Amper și atunci vom scădea din
tensiunea cea mai mica de riplu de 9.92V și vom obține:
9.92V – 2V = 7.92V ,deci aproximativ 8V .
La aceasta tensiune vom folosi un regulator de tensiune LM7806 cu stabilizare tensiune la 6V deoarece
aceasta cere ca valoarea minimă de intrare să fie de 8V . Tensiunea de 6V la ieșirea regulatorului este
potrivită atât pentru a alimenta placa Arduino cât și pentru a alimenta amplificatorul de sunet LM386N-4.
52. Idem, pag 8 , [consultat la data 28.08.2018]
57

Concluzii
În lucrarea de față am urmărit, așadar, realizarea unui aparat de radio folosind plăcuța Arduino.
Am folosit un modul de radio TEA5767 care este fabricat special pentru a fi programat de diverse
microcontrolere încorporate în diverse plăcuțe printre care și Arduino. Acesta este integrat într-un singur cip
și nu necesită alte modificări asupra lui. Consumul său redus, dimensiunea, de asemenea, redusă și tensiunea
de alimentare fiind continuu cuprinsă între 2.5 și 5V fac din acest modul o posibilitate ușoară de a-l integra
în diverse sisteme cum ar fi casetofoane, combine muzicale, telefoane mobile, etcetera.
Din fișa tehnică a acestuia, observăm că putem programa regiștrii modulului de radio să execute anumite
sarcini de citire sau scriere cum ar fi : tăierea frecvențelor slabe, inițializarea sau setarea radioului pe un
anumit post de radio prin calcularea cuvântului „PLL”, afișarea nivelului semnalului de recepție și afișarea
modului de transmisie(mono, stereo).
Reglarea și setarea frecvenței de radio am făcut-o folosind un codor rotativ dar și prin intermediul celor trei
butoane de citire din memoria EEPROM a plăcuței Arduino .
În programul de cod vom avea o variabilă care va fi inițializată cu 0 și vom implementa un control al
benzilor folosind tehnica calculării „modulo n”. Dacă va variabila va avea rezultatul 0 va fi aleasă prima
bandă care este cea europeană și care ia valori ale frecvențelor de la 87.5 MHz până la 108 MHz, iar dacă
rezultatul „modulo n” va fi 1, atunci va fi aleasă cea dea două bandă care este cea folosită în Japonia și
cuprinde valori ale frecvențelor între 76 MHz și 91 MHz.
Totodată, am implementat și posibilitatea de memora sau de a citi frecvențe ale posturilor de radio în
memoria non-volatilă a plăcuței Arduino. Căutăm frecvența dorită și prin apăsarea simultana celor două
butoane va avea loc memorarea frecvenței postului la o anumita adresă (adresa de memorare/citire este
diferită pentru fiecare buton în parte). În momentul memorării/citirii unui post am decis să semnalez cu
ajutorul unor leduri un semnal luminos continuu timp de două secunde. Tot în acest caz am implementat și
imposibilitatea de alege să citim o anumită frecvență din memoria plăcuței Arduino dacă nu se încadrează în
limitele benzii alese și sistemul de radio va emite și în acest caz un semnal luminos de eroare.
Memorarea posturilor în EEPROM are avantajul că odată cu oprirea sistemului de radio aceste frecvențe
rămân în memorie și la următoarea pornire a sistemului, acestea pot fi citite și setate pe radio fără a mai fi
necesară căutarea manuală a postului dorit. Folosind această facilitate a memoriei EEPROM am implementat
un număr de trei posturi „favorite”, iar acestea pot fi schimbate la rândul lor cu alte posturi pe care le dorim
să le memorăm.
58

Pe un dispozitiv de afișare cu organizarea de 2 linii și 16 coloane afișăm informații precum: banda aleasă
(„JPN” sau „UE”), frecvența căutată, modul de transmisie al sunetului (mono sau stereo) precum și nivelul
sonorului.
Pe parcursul studiului acestui proiect am întâmpinat o mică dificultate și anume am fost nevoit să afișez toate
cele 4 informații diferite pe un singur ecran pentru a evita multiple operații se setare și actualizare a
display-ului, deoarece acest lucru creează un mic zgomot la ieșirea modulului de radio . Astfel, a trebuit să
procedez în același mod cu modulul de radio sau display-ului și să reduc cât de mult posibil aceste
instrucțiuni de citire sau scriere.
Modul de realizare a proiectului se putea face însă și diferit utilizând, de exemplu, alte componente iar în
cele ce urmează voi detalia alternativele la care aș fi putut apela :
– pentru afișarea informațiilor – o interfață LCD de tipul Nokia5110, deoarece am avea mult mai
mult spațiu pentru afișarea informațiilor;
– pentru preluarea ieșirii audio a modulului de radio – un potențiometru stereo ;
– pentru ascultarea sunetului – două difuzoare pentru recepție stereo;
– pentru controlul radioului de la distanță – o placă de comunicare wireless;
Motivul pentru care nu am ales aceste alternative sunt de ordin funcțional și financiar iar în cele ce
urmează voi detalia de ce am ales unele module în defavoarea celorlalte:
-pentru afișarea informațiilor de la radio – am ales un LCD I2C cu organizarea 16 coloane și două
linii deoarece este suficient pentru ceea ce avem de afișat ;
-pentru controlul ieșirii audio a modulului de radio – am folosit un potențiometru digital cu controlul
sunetului pe un singur canal(mono) deoarece amplificatorul pe care l-am folosit oferă amplificarea
semnalului pe un singur canal;
-pentru ascultarea sunetului amplificat – un difuzor cu o putere medie de 2W deoarece pentru spațiile
închise este suficient și putem oricând schimba cu un alt difuzor dar trebuie să ținem cont și de puterea
debitată de amplificator, altfel, este inutil să folosim un difuzor cu o impedanță mai mică și o putere activă
mai mare dacă nu avem sursă (amplificare) puternică;
-pentru amplificarea sunetului – un amplificator LM386N-4 ce poate susține la o tensiune de
alimentare de 6V fără a fi nevoie de montarea unei piese de răcire pe aceasta;
-pentru căutarea posturilor de radio – un codor rotativ deoarece avem posibilitatea căutării manuale
a frecvențelor dorite și putem asculta și posturile de radio cu o recepție a semnalului mai slabă și acest lucru
nu se puteau realiza folosind căutarea automată ;
-pentru controlul volumului ieșirii audio din modulul de radio TEA5767- am folosit un
potențiometru 10k, însă, ar fi existat alternativa să folosim un buton deoarece controlul sunetului ar fi fost
mult mai stabil, astfel, un avantaj al potențiometrului este ușurința de manipulare a acestuia;
Ca urmare a experienței acumulate realizând această lucrare pot enumera avantajele și dezavantajele
acestui sistem de radio folosind Arduino.
59

Avantaje :
– folosirea unui modul cu interfață I2C atât pentru display cât și pentru modulul de radio face ușoară
conectarea firelor pe breadboard, acestea utilizând doar 4 fire fiecare în comparație cu alte module de același
tip dar cu alt tip de comunicație;
-posibilitatea căutării manuale a posturilor de radio folosind potențiometru este un alt avantaj
deoarece putem găsi un post cu o recepție slabă a semnalului dar putem ulterior să îmbunătățim această
recepție modificând poziția antenei sau a firelor de căști folosite în loc de antenă;
-posibilitatea reglării volumului astfel că putem conecta semnalul audio de ieșire din modulul de
radio direct la un alt amplificator care nu este dotat cu un potențiometru de volum, astfel, circuitul are o
posibilitate de integrare în mai multe aplicații;
-alimentarea întregului sistem folosind tensiunea alternativă de 230 Vac.
Dezavantaje:
-din cauza unei comunicări comune prin interfața I2C între plăcuța Arduino și modulul de radio
acestea emite un mic zgomot la fiecare actualizare a acestora;
-conectarea firelor pe breadboard nu este foarte stabilă și există posibilitatea deconectării ușoare a
firelor în timpul funcționării radioului;
-lipsa posibilității reglării sursei de tensiune continuă pentru a putea susține sistemul atunci când este
nevoie o sarcină de lucru mult mai mare.
Din punct de vedere al alimentării, mai exista o variantă simplă de a alimenta amplificatorul și placa Arduino
folosind o baterie de 9V sau de alte puteri mai mici astfel încât două sau mai multe baterii conectate în serie
să însumeze o putere de aproximativ 9V , însă, dar ar fi existat și unele dezavantaje: faptul că bateriile odată
descărcate vor trebui să fie înlocuite sau reîncărcate iar acest lucru este destul de costisitor dacă folosim
radioul pe o perioadă mai mare de timp la un volum ridicat, iar amplificatorul de sunet ar fi avut nevoie de
montarea unui răcitor pe acesta pentru a disipa căldura degajată în timpul funcționării sistemului.
Alimentarea întregului sistem se face direct de la rețeaua de energie publică iar pentru a adapta tensiunea de
alimentare la o tensiune conformă sistemului nostru am folosit un transformator de curent alternativ și alte
componente pentru a avea o tensiune continuă de 6 V olți.
Am ales schema de alimentare cu energie electrică în felul acesta deoarece am dorit să pun în practică o
schemă electronică în care să pot folosi energia de la rețeaua de energie electrică publică pentru a alimenta cu
tensiuni mici dispozitivele electronice, și, totodată, să îmi îmbunătățesc cunoștințele având în vedere faptul
că această variantă de alimentare este ceva mai complexă față de varianta cu conectarea unor baterii la
bornele dispozitivului de amplificare.
Acesta este lucrarea mea de diplomă în care am avut de realizat un sistem electronic numit „Aparat de radio
FM folosind Arduino”.
60

BIBLIOGRAFIE
[1]. Moulay M. (2002), Low voltage FM stereo radio with TEA5767/6 8
[2]. B_E_N, „What is an Arduino?”, https://learn.sparkfun.com/tutorials/what-is-an-arduino?
_ga=2.208558546.1554799887.1533640523-1988030013.1533640523
[3]. Dejan Nedelkovski, ”How Rotary Encoder Works and How To Use It with Arduino”
https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduin o/
[4]. Goks_lf, „Use 16×2 LCD With I2C”, https://www.instructables.com/id/LCD-With-I2C/
[5]. Mihai P . Dincă, „Manualul studentului”, http://old.unibuc.ro/prof/dinca_m/miha-p-dinc-elec-manu-
stud/docs/2011/sep/19_11_18_18cap_5_v3.pdf
[6]. V oncila Ion, „TRANSFORMATORUL ELECTRIC -Mașini electrice”,
https://www.arthra.ugal.ro/bitstream/handle/123456789/3276/V oncila_Ion_Masini_electrice_capitolul1.pdf?
sequence=1&isAllowed=y
REFERINȚE WEB
[7]. *** https://components101.com/sites/default/files/component_datasheet/potentiometer%20datasheet.pdf
[8]. *** https://eprofu.ro/docs/electronica/carte/led-afisaj-7-segmente.pdf
[9]. *** http://pdf1.alldatasheet.com/datasheet-pdf/view/166931/PHILIPS/TEA5767HN.html
[10]. *** http://pdf1.alldatasheet.com/datasheet-pdf/view/222818/ESTEK/78XX.html
[11]. *** https://pdf1.alldatasheet.com/datasheet-pdf/view/509276/TI/LM386N-4.html
[12]. *** https://pdf1.alldatasheet.com/datasheet-pdf/view/552923/MICROCHIP/MCP41010.html
[13]. *** https://www.arduino.cc/en/Reference/SPI
[14]. *** https://www.arduino.cc/en/Reference/Wire
[15]. *** https://www.arduino.cc/en/Tutorial/Button
[16]. *** https://www.openimpulse.com/blog/products-page/product-category/rotary-encoder-module-
arduino/
61

ANEXE
Codul sursă pentru aplicația aparat de radio FM folosind Arduino este următorul:
//Gaita Andrei Laurentiu
//Faculatea de Automatica Calculatoare si Electronica
//License :"Aparat de Radio FM folosind Arduino"
//update 27 aug 2018
#include <SPI.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <TEA5767Radio.h>
//–––––––––––––––––––––––––––––––––––––––––––
––––––––––––––––
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
TEA5767Radio radio ;
//===POT digital var.======

const int CS = 10;
int PotWiperVoltage = 1;
int RawVoltage = 0;
float Voltage = 0;
//============================

volatile byte counter_band = 0 ;
#define outputA 7
#define outputB 8
int aState = 0;
int bState = 0;
int aLastState = 1;
62

//===================================
const int buttonFn = 2;
const int button_band = 3;
const int buttonRead1 = 4;
const int buttonRead2 = 5;
const int buttonRead3 = 6;

const int pin_A = 7 ;
const int pin_B = 8 ;
const int read_volum_pin = A0 ;
//===================================

//============= EEPROM ====================

int buttonStateRead1 = 0;
int lastButtonStateRead1 = 0;
int buttonStateRead2 = 0;
int lastButtonStateRead2 = 0;
int buttonStateRead3 = 0;
int lastButtonStateRead3 = 0;
int buttonStateFn = 0;
int lastButtonStateFn = 0;
int state_btn_band = 0 ;
int last_state_btn_band = 0 ;
int PostEEPROM1 = 0 ;
int PostEEPROM2 = 0 ;
int PostEEPROM3 = 0 ;
//=========================//
float encoder_ante = 0;
63

float encoder_now = 0;
float station_now = 0 ;
float station_ante = 20 ;
int once_run= 10;
int timer = 0 ;
int timer_ante = 0 ;
int timer_now = 0 ;
//===================
float freq_prev = 0 ;
float freq_now = 0 ;
int vol_now = 0;
int vol_prev = 1;
int counter_band_prev = 1 ;
int counter_band_now = 0;
int mod_sound_now = 1;
int mod_sound_prev = 2;
//========================================================
//==============================================
int eeAddress1 = 0;
int eeAddress2 = 70;
int eeAddress3 = 90;
int ee_adr_last_post_listened = 140 ;

float read_fr1 = 0.0f ;
float read_fr2 = 0.0f ;
float read_fr3 = 0.0f ;
64

float last_crt_station_listened = 0 ;
float last_prev_station_listened = 0 ;
float freq_radio_init = 0;
//===================================================

int read_vol = 0 ;
float step_increm = 0.1 ;
int pot_digital_prev = 1000;
int pot_digital_now = 0 ;
int vol_MCP = 0 ;
int val_min = 0;
int val_max = 1000;
float freq_encoder = 0 ;
int vol = 0;
float last_post_set = 0;
unsigned char buf[5];
int stereo = 0;

//=====setup=====================
void setup() {
pinMode(button_band, INPUT);
pinMode(buttonRead1, INPUT);
pinMode(buttonRead2, INPUT);
pinMode(buttonRead3, INPUT);
pinMode(buttonFn, INPUT);
pinMode(outputA, INPUT);
pinMode(outputB, INPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(CS, OUTPUT);
lcd.begin(16,2);
radio.init();
65

SPI.begin();
Wire.begin();

}
//––––LOOP–––––––-
void loop() {
buttonStateFn = digitalRead(buttonFn);
buttonStateRead1 = digitalRead(buttonRead1);
buttonStateRead2 = digitalRead(buttonRead2);
buttonStateRead3 = digitalRead(buttonRead3);
state_btn_band = digitalRead(button_band);
aState = digitalRead(outputA);
read_vol = analogRead(read_volum_pin);
if(once_run == 10){
EEPROM.get( ee_adr_last_post_listened , freq_radio_init);
radio.set_frequency( freq_radio_init );

freq_encoder = freq_radio_init;
once_run = 0;
}
//===========
if ( state_btn_band != last_state_btn_band) {
if (state_btn_band == HIGH) {
counter_band++ ;
}
last_state_btn_band = state_btn_band;
}
66

//=============

if( counter_band % 2 == 0 ){

if(freq_encoder <= 87.5){
freq_encoder= 87.5 ;
exit;
}
else if (freq_encoder >= 108.0 ){
freq_encoder = 108.0 ;
exit;
}

}

if( counter_band % 2 == 1 ){

if(freq_encoder > 91.0) {
freq_encoder = 91.0 ;
exit;
}
else if( freq_encoder <= 76.0 ){
freq_encoder= 76.0 ;
exit;
}
}

//====================
if ( aState != aLastState ){
if ( aState == HIGH ) {
67

if( digitalRead(outputB) != aState){
freq_encoder = freq_encoder – step_increm;

}
else {
freq_encoder = freq_encoder + step_increm;

}
}
}

aLastState = aState;
//====================
last_crt_station_listened = last_post_set;
if ( last_crt_station_listened!= last_prev_station_listened ){
EEPROM.write(ee_adr_last_post_listened, 0);
EEPROM.put(ee_adr_last_post_listened, last_crt_station_listened);
Serial.println("Am incrementat 🙂 ") ;
Serial.println();
}
last_prev_station_listened = last_crt_station_listened ;

//======================
encoder_now = freq_encoder;
if(encoder_now != encoder_ante){
68

last_post_set = freq_encoder ;
radio.set_frequency( last_post_set );

}
encoder_ante = encoder_now ;

//=======================

if ( buttonStateRead1 != lastButtonStateRead1 ) { // READ1 ….
if ( buttonStateRead1 == HIGH && buttonStateFn == LOW) {

EEPROM.get(eeAddress1, read_fr1);
last_post_set = read_fr1 ;
if( ( last_post_set >= 91) && (counter_band % 2 == 1 ) )
{

for(int iLEDR1 =0 ; iLEDR1 < 3 ; iLEDR1++){
digitalWrite(A1,HIGH);
delay(100);
digitalWrite(A1,LOW);
delay(400);
}
freq_encoder = 91;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

else if( (last_post_set <= 87.5) && (counter_band % 2 == 0 ) )
{

for(int iLEDR1 =0 ; iLEDR1 < 3 ; iLEDR1++){
digitalWrite(A1,HIGH);
69

delay(100);
digitalWrite(A1,LOW);
delay(400);
}
freq_encoder = 87.5 ;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

else{
radio.set_frequency( last_post_set );
freq_encoder=last_post_set;
for(int iLEDR1 =0 ; iLEDR1 < 5 ; iLEDR1++){
digitalWrite(A1,HIGH);
delay(100);
digitalWrite(A1,LOW);
delay(50);
}
}
}
}
lastButtonStateRead1 = buttonStateRead1 ;

if(buttonStateFn == HIGH && buttonStateRead1 == HIGH ){
EEPROM.put(eeAddress1, last_post_set);
for(int iLEDM1 =0 ; iLEDM1 < 2 ; iLEDM1 ++){
digitalWrite(A1,HIGH);
delay(300);
digitalWrite(A1,LOW);
delay(300);
}
delay(50);
70

}
if ( buttonStateRead2 != lastButtonStateRead2 ) { // READ2 ….
if ( buttonStateRead2 == HIGH && buttonStateFn == LOW) {
EEPROM.get(eeAddress2, read_fr2);
last_post_set = read_fr2 ;
if( ( last_post_set >= 91) && (counter_band % 2 == 1 ) ){

for(int iLEDR2 =0 ; iLEDR2 < 3 ; iLEDR2++){
digitalWrite(A2,HIGH);
delay(100);
digitalWrite(A2,LOW);
delay(400);
}
freq_encoder = 91;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

else if( (last_post_set <= 87.5) && (counter_band % 2 == 0 ) ){

for(int iLEDR2=0; iLEDR2 < 3 ; iLEDR2++){
digitalWrite(A2,HIGH);
delay(100);
digitalWrite(A2,LOW);
delay(400);
}
freq_encoder = 87.5 ;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

71

else{
radio.set_frequency( last_post_set );
freq_encoder = last_post_set;
for(int iLEDR2 =0 ; iLEDR2 < 5 ; iLEDR2 ++){
digitalWrite(A2,HIGH);
delay(100);
digitalWrite(A2,LOW);
delay(50);
}
}
}
}
lastButtonStateRead2 = buttonStateRead2 ;
if(buttonStateFn == HIGH && buttonStateRead2 == HIGH ){

EEPROM.put(eeAddress2, last_post_set);
for(int iLEDM2 =0 ; iLEDM2 < 2 ; iLEDM2 ++){
digitalWrite(A2,HIGH);
delay(300);
digitalWrite(A2,LOW);
delay(300);
}
}

if ( buttonStateRead3 != lastButtonStateRead3 ) { // READ3……
if ( buttonStateRead3 == HIGH && buttonStateFn == LOW) {
EEPROM.get(eeAddress3, read_fr3);
72

last_post_set = read_fr3 ;
if( ( last_post_set >= 91) && (counter_band % 2 == 1 ) ) {
for(int iLEDR3 =0 ; iLEDR3 < 3 ; iLEDR3++){
digitalWrite(A3,HIGH);
delay(100);
digitalWrite(A3,LOW);
delay(400);
}
freq_encoder = 91;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

else if( (last_post_set <= 87.5) && (counter_band % 2 == 0 ) ) {
for(int iLEDR2=0; iLEDR2 < 3 ; iLEDR2++){
digitalWrite(A3,HIGH);
delay(100);
digitalWrite(A3,LOW);
delay(400);
}
freq_encoder = 87.5 ;
last_post_set = freq_encoder;
radio.set_frequency( last_post_set );
}

else{

radio.set_frequency( last_post_set );
freq_encoder = last_post_set;
for(int iLEDR2 =0 ; iLEDR2 < 5 ; iLEDR2 ++){
digitalWrite(A3,HIGH);
delay(100);
digitalWrite(A3,LOW);
73

delay(50);
}
}
}
}
lastButtonStateRead3 = buttonStateRead3 ;
if(buttonStateFn == HIGH && buttonStateRead3 == HIGH ){
EEPROM.put(eeAddress3, last_post_set);
for(int iLEDM3 =0 ; iLEDM3 < 2 ; iLEDM3 ++){
digitalWrite(A3,HIGH);
delay(300);
digitalWrite(A3,LOW);
delay(300);
}
}
//====== RADIO : Mode sound ===================
station_now = last_post_set ;
if( station_now != station_ante ){
timer = 0 ;
}
station_ante = station_now ;
timer_now = timer ;
if( (timer_now – timer_ante) == 30000 ){
74

timer = 0 ;
if(radio.read_status ( buf ) ){
stereo = radio.stereo(buf);
}
}
timer++;

//==============Read volum ==================================

vol = map(read_vol, val_min, val_max, 0, 15);
vol_MCP = vol *17;

if( vol_MCP > 255)
vol_MCP = 255 ;

if( vol_MCP < 17 )
vol_MCP = 0 ;

pot_digital_now = vol_MCP;
if( pot_digital_now != pot_digital_prev ){
MCP41010Write(vol_MCP);
}
pot_digital_prev = pot_digital_now ;

//========= LCD 2X16 =================
75

//1.Frequency
freq_now = last_post_set ;
if(freq_now != freq_prev){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("FM:");
lcd.print(freq_now );
}
freq_prev = freq_now;

//2.Band

counter_band_now = counter_band;

if (counter_band_now != counter_band_prev){
lcd.setCursor(10,0);
if( (counter_band_now % 2) == 0 )
lcd.print("B: EU ");
if( (counter_band_now % 2) == 1 )
lcd.print("B: JPN");

}
counter_band_prev = counter_band_now ;

//3.Mode sound: mono vs stereo
mod_sound_now = stereo;
if(mod_sound_now != mod_sound_prev) {
if( mod_sound_now ){
76

lcd.setCursor(8,1);
lcd.print(" ");
lcd.setCursor(8,1);
lcd.print("M:");
lcd.print("STEREO");
} else{
lcd.setCursor(8,1);
lcd.print(" ");
lcd.setCursor(9,1);
lcd.print(" M:");
lcd.print("MONO");
}
}
mod_sound_prev = mod_sound_now ;
//4.Display volume
vol_now = vol;
if( vol_now != vol_prev ){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("V:");
lcd.print(vol_now);
lcd.print("/");
lcd.print("15");
//Serial.println(vol_now);
}
vol_prev = vol_now;
} //end loop
77

void MCP41010Write(byte value)
{
digitalWrite(CS,LOW);
SPI.transfer(B00010001);
SPI.transfer(value);
digitalWrite(CS,HIGH);
}
78

Similar Posts