Подключение RDA5807M к Arduino
FM радио модуль стерео RDA5807M для Ардуино - отличное решение для создателей интересных проектов, в которых понадобится FM-радиоприемник. Модуль имеет ряд преимуществ, которые выделяют его среди аналогов, да и мы именно потому им заинтересовались. Например, он легок в сборке, доступен по стоимости, практичен и достаточно функционален. В подтверждение последней характеристики отметим – устройство способно принимать станции на ультракоротких волнах, а также поддерживает различные полосы частот.
Если говорить о сфере применения, FM-модуль пригодится для применения в смартфонах ∕ планшетах ∕ ноутбуках, автомагнитолах, MP3 и MP4 аудио плеерах.
Об остальных технических параметрах расскажем коротко:
Используем следующую принципиальную схему сборки:
Для подключения наушников изменяем электрическую схему:
Напишем скетч (нам понадобится библиотека Wire для работы с интерфейсом):
В целом модуль совсем неплох и несомненно пригодится для экспериментов многим «ардуинщикам». На этом мы прощаемся! Удачных вам проектов!
Если говорить о сфере применения, FM-модуль пригодится для применения в смартфонах ∕ планшетах ∕ ноутбуках, автомагнитолах, MP3 и MP4 аудио плеерах.
Об остальных технических параметрах расскажем коротко:
- напряжение питания: 1.8 — 3.3 V;
- потребление тока в рабочем режиме: до 21 мА;
- -- в спящем режиме: 5мкА;
- тип шины: цифровой I2C;
- имеется индикатор уровня принимаемого сигнала + регулировка громкости;
- автопоиск станций;
- подавление шума + функция mute;
- настраиваемые шаги между каналами;
- рабочая температура: от -20 до +75 градусов Цельсия.
Подключение RDA5807M к Arduino
Нам понадобятся такие компоненты как: плата расширения Arduino Uno, модуль RDA5807M, соединительные провода, антенна.Используем следующую принципиальную схему сборки:
Для подключения наушников изменяем электрическую схему:
Напишем скетч (нам понадобится библиотека Wire для работы с интерфейсом):
#include <Wire.h>
#define DEBUG 0
int volumen=8,volumenOld=7;
int frecuencia,frecuenciaOld;
unsigned int z,z1;
byte xfrecu,xfrecuOld;
unsigned int estado[6];
int time,time1;
// int RDA5807_adrs=0x10; // I2C-Address RDA Chip for sequential Access
// int RDA5807_adrr=0x11; // I2C-Address RDA Chip for random Access
// int RDA5807_adrt=0x60; // I2C-Address RDA Chip for TEA5767like Access
char buffer[30];
unsigned int RDS[4];
char seg_RDS[8];
char seg_RDS1[64];
char indexRDS1;
char hora,minuto,grupo,versio;
unsigned long julian;
int mezcla;
char entrada[100];
int contador;
boolean stringComplete = true;
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.print("RADIO\n");
Serial.print("RADIO\n");
WriteReg(0x02,0xC00d); // write 0xC00d into Reg.2 ( soft reset, enable,RDS, )
WriteReg(0x05,0x84d8); // write ,0x84d8 into Reg.3
// frecuencia inicial
frecuencia=165; //103.5
// frecuencia=26; //89.6
canal(frecuencia);
clearRDS;
time=time1=100;
}
void loop()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
entrada[contador]=inChar;
if (inChar == '\n')
{
stringComplete = true;
entrada[contador]=0;
}
contador++;
}
if (stringComplete)
{
if(!strncmp(entrada,"RADIO1=",7))
{
Serial.println("OK");
goto salir0;
}
if(!strncmp(entrada,"buscar+",7))
{
Serial.println("buscar+_OK");
busqueda(0);
goto salir0;
}
if(!strncmp(entrada,"buscar-",7))
{
Serial.println("buscar-_OK");
busqueda(1);
goto salir0;
}
if(!strncmp(entrada,"volume+",7))
{
Serial.println("volume+_OK");
volumen++;
if(volumen>15)volumen=15;
goto salir0;
}
if(!strncmp(entrada,"volume-",7))
{
Serial.println("volume-_OK");
volumen--;
if(volumen<0)volumen=0;
goto salir0;
}
if(!strncmp(entrada,"ncanal=",7))
{
Serial.print("ncanalOK=");
strcpy(buffer,entrada+7);
z=atoi(buffer); Serial.println(z);
frecuencia=z;
goto salir0;
}
if(!strncmp(entrada,"volume=",7))
{
Serial.print("volumeOK=");
strcpy(buffer,entrada+7);
z=atoi(buffer); Serial.println(z);
volumen=z;
if(volumen>15)volumen=15;
if(volumen<0)volumen=0;
goto salir0;
}
Serial.print("ERROR "); Serial.println(entrada);
salir0:
contador=0;
stringComplete = false;
}
delay(1); time--; time1--;
if(time<1)
{
time=30000;
Visualizar();
}
if(time1<1)
{
time1=50;
ReadEstado();
//RDS
if ((estado[0] & 0x8000)!=0) {get_RDS();}
}
//Cambio de frecuencia
if( frecuencia!=frecuenciaOld)
{
frecuenciaOld=frecuencia;
Visualizar();
canal(frecuencia);
clearRDS();
}
//Cambio de volumen
if(volumen!=volumenOld)
{
volumenOld=volumen;
sprintf(buffer,"Volumen=%02d",volumen);
Serial.println(buffer);
WriteReg(5, 0x84D0 | volumen);
}
}
void visualPI(void)
{
}
void visualPTY(void)
{
}
void get_RDS()
{
}
void busqueda(byte direc)
{
byte i;
if(!direc) WriteReg(0x02,0xC30d); else WriteReg(0x02,0xC10d);
for(i=0;i<10;i++)
{
delay(200);
ReadEstado();
if(estado[0]&0x4000)
{
//Serial.println("Emisora encontrada");
frecuencia=estado[0] & 0x03ff;
break;
}
}
}
void clearRDS(void)
{
}
void Visualizar(void)
{
z=870+frecuencia;
sprintf(buffer,"Canal=%04i",frecuencia); Serial.println(buffer);
sprintf(buffer,"Frecuencia=%04i",z); Serial.println(buffer);
}
void canal( int canal)
{
byte numeroH,numeroL;
numeroH= canal>>2;
numeroL = ((canal&3)<<6 | 0x10);
Wire.beginTransmission(0x11);
Wire.write(0x03);
Wire.write(numeroH); // write frequency into bits 15:6, set tune bit
Wire.write(numeroL);
Wire.endTransmission();
}
//________________________
//RDA5807_adrr=0x11;
// I2C-Address RDA Chip for random Access
void WriteReg(byte reg,unsigned int valor)
{
Wire.beginTransmission(0x11);
Wire.write(reg); Wire.write(valor >> 8); Wire.write(valor & 0xFF);
Wire.endTransmission();
//delay(50);
}
//RDA5807_adrs=0x10;
// I2C-Address RDA Chip for sequential Access
int ReadEstado()
{
Wire.requestFrom(0x10, 12);
for (int i=0; i<6; i++) { estado[i] = 256*Wire.read ()+Wire.read(); }
Wire.endTransmission();
}
//READ RDS Direccion 0x11 for random access
void ReadW()
{
Wire.beginTransmission(0x11); // Device 0x11 for random access
Wire.write(0x0C); // Start at Register 0x0C
Wire.endTransmission(0); // restart condition
Wire.requestFrom(0x11,8, 1); // Retransmit device address with READ, followed by 8 bytes
for (int i=0; i<4; i++) {RDS[i]=256*Wire.read()+Wire.read();} // Read Data into Array of Unsigned Ints
Wire.endTransmission();
}
Управляется плата через последовательный порт. Открыть можно через меню Инструменты или при помощи сочетания клавиш Ctrl+Shift+M.В целом модуль совсем неплох и несомненно пригодится для экспериментов многим «ардуинщикам». На этом мы прощаемся! Удачных вам проектов!
Похожие новости
Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...
GSM модуль NEOWAY M590 – один из самых простых и бюджетных контроллеров, с помощью которого можно совершать звонки, принимать ∕ отправлять SMS-сообщения, а...
Цель нашей сегодняшней статьи - рассказать вам о всех нюансах подключения цифрового датчика освещенности BH1750 к Arduino. Данный модуль достаточно...
Сегодня рассматриваем подключение VL53L0X к Ардуино, а также основные особенности этого устройства. Датчик выбран нами для обзора не случайно – он вполне...
Инструкция, скетчи и библиотеки для создания радиостанции на базе TEA5767 и Ардуино...
2 комментария