| Ваш IP: 54.146.98.143 | Online(18) - гости: 4, боты: 14 | Загрузка сервера: 0.58 ::::::::::::

Простое FM — радио (Arduino)

На странице https://rcl-radio.ru/?p=53162 был показан пример создания FM — радио в котором использовался радио модуль RRD_102v 2.0 на чипе RDA5807M совместно с ИК-модуля VS1838B. На этой странице будет рассмотрен пример создания очень просто FM — радио который основан на тех же модулях и дополнительно применен миниатюрный усилитель на PAM8403 класса D. Особенность FM — радио в том, что он не имеет индикатора и кнопок, все управление осуществляется при помощи ИК — пульта, а частоты станций заранее указаны в скетче. Пульт позволяет переключать станции (10 каналов) при помощи кнопок 0-9 и вверх и вниз, регулировка громкости кнопки вправо и влево, кнопка # — MUTE.

Технические характеристики ИК-модуля VS1838B:

  • Потребляемый ток: 0,5 мА
  • Рабочая частота: 38 КГц
  • Расстояние приема сигнала: 20 м
  • Эффективный угол приема сигнала: 90˚
  • Рабочее напряжение (приемник): 2,7 — 5,5 В
  • Рабочее напряжение (модуль): 2,7 — 5,5 В

Технические характеристики FM тюнера RDA5807m:

  •  Напряжение питания — 3 вольта (от 1,8 до 3,6 вольт)
  • Максимальная полоса частот от 50 МГц до 115 МГц
  • Настраиваемый шаг между каналами – 200 кГц, 100 кГц, 50 кГц, 25 кГц
  • Температура окружающей среды — от -20 до +75 градусов Цельсия
  • Ток потребления в рабочем режиме — до 21 мА
  • Ток потребления в спящем режиме – 5 мкА
  • Коэффициент нелинейных искажений – 0,15 – 0,2 %
  • Максимальная частота I2C – 400 кГц

Технические характеристики усилителя PAM8403:

  • Напряжение питания: 2,5…5,5 В;
  • Ток потребления при отсутствии сигнала: 10 мА;
  • Выходная мощность при нагрузке 8 Ом: 1,5 Вт x2 канала;
  • Выходная мощность при нагрузке 4 Ом: 3,0 Вт x2 канала;
  • Разделение каналов: 60 дБ и более (при мощности 1 Вт и нагрузке 4 Ом);
  • Диапазон рабочих температур -40°C +85°C;
  • Встроенная защита от перегрева +120 °С;
  • Размеры устройства: ~21x18x3 мм;
  • Масса: 1,6 г.

 PAM8403

При сборке FM — радио следует учитывать, что радио модуль имеет напряжение питания 3,3 В которое снимается непосредственно с платы Arduino. Усилитель питается от напряжение 5В которое так же подается с платы Arduino.

На рисунке показано изображения пульта под команды которого написан скетч, но пульт можно применить другой, при этом коды кнопок будут соответственно другие. Даже если Вы будете использовать такой же пульт, то вероятней всего коды кнопок будут отличатся. Но в мониторе порта Вы сможете посмотреть коды кнопок и вписать в скетч свои значения.

Стоит обратить внимание на то, что в рассматриваемом пульте при удержании кнопки длительное время сначала следует код команды кнопки, а далее код 0xFFFFFFFF как код удержания нажатой кнопки, при этом код 0xFFFFFFFF подается при удержании любой кнопки. В других пультах для каждой кнопки код удержания кнопки может быть свой для каждой кнопки.

Значение громкости и номер канала сохраняются в энергонезависимой памяти если в течении 1 минуты ИК пульт был не активен.

#include <IRremote.h>
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
#include <EEPROM.h>
#define FIX_BAND    RADIO_BAND_FM   
IRrecv irrecv(9); // указываем вывод модуля IR приемника
decode_results ir;
RDA5807M radio; 
 
int i;
byte vol,g1,g2,mute,gk1,gk2,w,start;
long f;
//////////////////////////// ЧАСТОТЫ СТАНЦИЙ 101.5 мГЦ = 10510 /////////////
int k[10]={10100,10190,10300,10350,10390,10440,10620,10680,10730,10780};
////////////////////////////////////////////////////////////////////////////
unsigned long time;
float f_f;
 
void setup() {
  vol=EEPROM.read(0);
  i=EEPROM.read(0);
  f=EEPROM.read(1)*100+EEPROM.read(2);
  Serial.begin(9600);
  irrecv.enableIRIn(); // запускаем модуль IR
  radio.init();
  radio.debugEnable();
  radio.setBandFrequency(FIX_BAND, f);
  radio.setVolume(vol);
  radio.setMono(false);// true - MONO
  radio.setMute(mute);
delay(400);
} 
 
void loop() {
  if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(400);start=1;}
  if ( irrecv.decode( &ir )) {delay(200);Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();}// IR приемник
 
///////////////////////////////// ГРОМКОСТЬ ///////////////////////////////////////////////////////
   kan();
   if(ir.value==0xFF5AA5){vol++;g1=1;g2=0;if(vol>15){vol=15;}radio.setVolume(vol);cl1();}// кнопка > 0xFF5AA5
   if(ir.value==0xFFFFFFFF and g1==1){vol++;g2=0;if(vol>15){vol=15;}radio.setVolume(vol);cl1();}// кнопка >>>>>>
   if(ir.value==0xFF10EF){vol--;g1=0;g2=1;if(vol>16){vol=0;}radio.setVolume(vol);cl1();}// кнопка < 0xFF10EF
   if(ir.value==0xFFFFFFFF and g2==1){vol--;g1=0;if(vol>16){vol=0;}radio.setVolume(vol);cl1();}// кнопка <<<<<<
 
////////////////////////////////// КАНАЛЫ //////////////////////////////////////////////////////////
    if(ir.value==0xFF18E7){i++;gk1=1;gk2=0;if(i>9){i=9;}f=k[i];info();cl();}// кнопка вверх 0xFF18E7
    if(ir.value==0xFFFFFFFF and gk1==1){i++;gk2=0;if(i>9){i=9;}f=k[i];info();cl();}// кнопка вверх >>>>>>
    if(ir.value==0xFF4AB5){i--;gk1=0;gk2=1;if(i<0){i=0;}f=k[i];info();cl();}// кнопка вниз 0xFF4AB5
    if(ir.value==0xFFFFFFFF and gk2==1){i--;gk1=0;if(i>9){i=9;}f=k[i];info();cl();}// кнопка вниз <<<<<<
 
////////////////////////////////// EEPROM /////////////////////////////////////////////////////////
 if(millis()-time>60000 && w==1){EEPROM.update(0,vol);EEPROM.update(3,i);EEPROM.update(1,k[i]/100);EEPROM.update(2,k[i]-(k[i]/100)*100);w=0;}
 
//////////////////////////////// ГРОМКОСТЬ НА МИНИМУМ ////////////////////////////////////////////
if(ir.value==0xFFB04F){ir.value=0;time=millis();vol=0;}// кнопка # 0xFFB04F
 
///////////////////////////////////// MUTE /////////////////////////////////////////////////////////
   if(ir.value==0xFF6897){mute++;ir.value=0;delay(200);// кнопка * 0xFF6897
   if(mute>1){mute=0;start=0;time=millis();}
   if(mute==1){radio.setMute(mute);}}
 
} // LOOP
 
void kan1(){ir.value=0;delay(200);f=k[i];w=1;time=millis();start=0;}
void cl(){ir.value=0;time=millis();start=0;w=1;delay(200);}
void cl1(){ir.value=0;time=millis();w=1;delay(200);}
void info(){ Serial.print("canal: ");Serial.print(i);Serial.print("  ");f_f=f;Serial.println(f_f/100);}
void kan(){
   if(ir.value==0xFF9867){i=0;kan1();}// канал 0 кнопка 0 0xFF9867
   if(ir.value==0xFFA25D){i=1;kan1();}// канал 1 кнопка 1 0xFFA25D
   if(ir.value==0xFF629D){i=2;kan1();}// канал 2 кнопка 2 0xFF629D
   if(ir.value==0xFFE21D){i=3;kan1();}// канал 3 кнопка 3 0xFFE21D
   if(ir.value==0xFF22DD){i=4;kan1();}// канал 4 кнопка 4 0xFF22DD
   if(ir.value==0xFF02FD){i=5;kan1();}// канал 5 кнопка 5 0xFF02FD
   if(ir.value==0xFFC23D){i=6;kan1();}// канал 6 кнопка 6 0xFFC23D
   if(ir.value==0xFFE01F){i=7;kan1();}// канал 7 кнопка 7 0xFFE01F
   if(ir.value==0xFFA857){i=8;kan1();}// канал 8 кнопка 8 0xFFA857
   if(ir.value==0xFF906F){i=9;kan1();}// канал 9 кнопка 9 0xFF906F
}

Монитор порта

Главной целью создания этого примера была миниатюризация уст-ва, с сохранением минимального функционала. На данном примере я собрал простое радио, для этого взял ненужную маленькую колоночку с динамиком 5 Вт 4 Ом в которую я разместил плату Arduino и все необходимые модули, в итоге получился компактный радиоприемник (моно).

В корпусе колонки на задней стенке сделано отверстие под USB порт Arduino и выведена антенна (кусок проволоки длиной 30 см), в передней части колонки размещен ИК датчик.

Библиотека Radio — radio или https://github.com/mathertel/Radio

Библиотека IRremote — IRremote

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Устройство защиты электродвигателя

    В качестве типовых элементов защиты электродвигателей чаще всего применяют электротепловые реле. Конструкторы вынуждены завышать номинальный ток этих реле, чтобы не было срабатываний при пуске. Надежность такой защиты невелика, и большой процент двигателей выходит из строя в процессе эксплуатации. Схема устройства защиты двигателей (см. рисунок) от неполнофазных режимов и перегрузки отличается …Подробнее...
  • Электрические вольфрамовые лампы накаливания

    Электрические вольфрамовые лампы накаливания

    В 1879 году Т.А. Эдисон создал лампу накаливания запустив ее в серийное производство, в качестве нити накаливания он использовал угольную нить, которую он получал обугливанием длинный и тонких бамбуковых волокон. Так же он ввел откачку воздуха из баллона. В 1890 году А.Н. Лодыгин продемонстрировал лампу с нитью накала из тугоплавкого …Подробнее...
  • К140УД1А-В, КР140УД1А-В, К140УД3А-В (справочные данные)

    К140УД1А-В, КР140УД1А-В, К140УД3А-В относятся операционным усилителям средней точности. Электрические параметры: Uпит. ном 2*6,3В (А), 2*12,6В (Б, В) I пот 6мА (А), 12мА(Б), 10мА(В) Ku 0,5…4*10³(А), 1…12*10³(Б), 8*10³(В) Iвх 5*10³нА(А), 8*10³нА(Б), 10*10³нА(В) ΔIвх 1,5*10³нА(А,Б), 2,8*10³нА(В) Кос.сф 60дБ f1 3МГц(А), 8МГц(Б), 5МГц(В) Vu 0,2В/мкс(А), 0,5В/мкс(В), 3,5В/мкс(В) Uвых.мах 2,5В(А), 5,7В(Б,В) Rвх 0,004МОм Предельные …Подробнее...
  • Универсальный контроллер балластов люминесцентных ламп — Трехступенчатая регулировка яркости

    Универсальный контроллер балластов люминесцентных ламп — Трехступенчатая регулировка яркости

    Трехступенчатые регуляторы яркости широко применяются в США. Система состоит из специального патрона лампы, четырехпозиционного переключателя и лампы с модифицированным контактным цоколем. Традиционная лампа в такой системе содержит две нити накаливания и три контакта на цоколе. IRPLCFL8U — это трехступенчатый регулируемый балласт для управления 32 Вт спиральной компактной люминесцентной лампой (CFL) от сети …Подробнее...
  • Типы корпусов микросхем

    Внешний вид корпусов типа ТСР, ВСС, DIP показаны на рис.1. В табл. 1-3 соответственно приведены их параметры и конструктивное исполнение, где А — металлокерамический корпус, С — керамический, М- пластиковый. Внешний вид разных типов корпусов изображен на рис.2. Литература Ж.Радиоматор 2002 №1Подробнее...