ماژول TEA5767 یک رادیو FM دیجیتالی با قابلیت کنترل از طریق I2C می باشد . این ماژول توانایی دریافت باند فرکانسی 76MHz تا 108MHz را دارد . ما در این آموزش از برد راه انداز TEA5767 استفاده خواهیم کرد .برد راه اندای TEA5767 علاوه بر آنتن ، دارای جک 3.5 میلی متری خروجی صدا است که می توان آن را به یک آمپلی فایر متصل نمود . همچنین از یک LCD گرافیکی Nokia 5110 برای نمایش فرکانس استفاده می شود . با توسعه این پروژه می توانید به راحتی یک رادیو پرتابل با باتری بسازید.
در شکل زیر شماتیک پروژه نشان داده شده است :
در این پروژه از دو ولوم 10k برای تغیر فرکانس و همچنین حجم صدا استفاده شده است . در خروجی این مدار می توانید از هر آمپلی فایری استفاده کنید .
کد های آردوینو :
#include <TEA5767N.h> //https://github.com/mroger/TEA5767
#include <LCD5110_Graph.h> //http://www.rinkydinkelectronics.com/library.php?id=48
LCD5110 lcd(8,9,10,12,11);
TEA5767N radio = TEA5767N();
extern unsigned char BigNumbers[];
extern unsigned char TinyFont[];
extern uint8_t splash[];
extern uint8_t signal5[];
extern uint8_t signal4[];
extern uint8_t signal3[];
extern uint8_t signal2[];
extern uint8_t signal1[];
int analogPin = 0;
int val = 0;
int frequencyInt = 0;
float frequency = 0;
float previousFrequency = 0;
int signalStrength = 0;
void setup()
{
radio.setMonoReception();
radio.setStereoNoiseCancellingOn();
initScreen();
showSplashScreen();
Serial.begin(9600);
}
void loop() {
for(int i;i<30;i++)
{
val = val + analogRead(analogPin);
delay(1);
}
val = val/30;
frequencyInt = map(val, 2, 1014, 8700, 10700); //Analog value to frequency from 87.0 MHz to 107.00 MHz
float frequency = frequencyInt/100.0f;
if(frequency - previousFrequency >= 0.1f || previousFrequency - frequency >= 0.1f)
{
lcd.clrScr();
radio.selectFrequency(frequency);
printSignalStrength();
printStereo();
printFrequency(frequency);
previousFrequency = frequency;
}
lcd.clrScr();
printSignalStrength();
printStereo();
printFrequency(frequency);
delay(50);
val = 0;
}
void initScreen()
{
lcd.InitLCD();
lcd.setFont(BigNumbers);
lcd.clrScr();
}
void showSplashScreen()
{
lcd.drawBitmap(0, 0, splash, 84, 48);
lcd.update();
delay(3000);
lcd.clrScr();
lcd.update();
}
void printFrequency(float frequency)
{
String frequencyString = String(frequency,1);
if(frequencyString.length() == 4)
{
lcd.setFont(BigNumbers);
lcd.print(frequencyString,14,12);
lcd.update();
}
else
{
lcd.setFont(BigNumbers);
lcd.print(frequencyString,0,12);
lcd.update();
}
}
void printStereo()
{
boolean isStereo = radio.isStereo();
if(isStereo)
{
lcd.setFont(TinyFont);
lcd.print("STEREO",55,2);
}
}
void printSignalStrength()
{
signalStrength = radio.getSignalLevel();
String signalStrenthString = String(signalStrength);
if(signalStrength >=15)
{
lcd.drawBitmap(1, 1, signal5, 17 , 6);
}else if(signalStrength >=11 && signalStrength <15)
{
lcd.drawBitmap(1, 1, signal4, 17 , 6);
}
else if(signalStrength >=9 && signalStrength <11)
{
lcd.drawBitmap(1, 1, signal3, 17 , 6);
}
else if(signalStrength >=7 && signalStrength <9)
{
lcd.drawBitmap(1, 1, signal2, 17 , 6);
}
else if(signalStrength <7)
{
lcd.drawBitmap(1, 1, signal1, 17 , 6);
}
}
در این پروژه از کتابخانه های زیر استفاده شده است :
https://github.com/mroger/TEA5767/archive/master.zip
LCD5110_Graph.h


