| Ваш IP: 18.212.92.235 | Online(13) - гости: 6, боты: 7 | Загрузка сервера: 1.71 ::::::::::::

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

На странице http://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

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

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

  • Преобразователи напряжения

    В связи с выключением электроэнергии возникла необходимость в других источниках питания. Я некоторое время работал с различными схемами преобразователей с 12 В АКБ в ~220 В, 50 Гц на различную мощность нагрузки, поэтому возникла возможность питать как лампы (свет в квартире), так и различную аппаратуру. Выключал автоматические пробки на счетчике, …Подробнее...
  • КЛАССИФИКАЦИЯ РАДИОИЗМЕРИТЕЛЬНЫХ ПРИБОРОВ СОГЛАСНО ГОСТ 15094-69

    КЛАССИФИКАЦИЯ РАДИОИЗМЕРИТЕЛЬНЫХ ПРИБОРОВ СОГЛАСНО ГОСТ 15094-69 Радиоэлектронные измерительные приборы (РИП) классифицируются по различным признакам (см. табл.) Классификация электронных радиоизмерительных приборов Признак классификации Разновидности измерительных приборов Выполняемые метрологические функции Эталоны, образцовые приборы, рабочие приборы Характер измерений, вид измеряемых величин, основные выполняемые функции, совокупность технических характеристик и очередность разработки Подгруппы, виды, типы …Подробнее...
  • Онлайн — калькулятор цветовой маркировки резисторов

    Онлайн — калькулятор цветовой маркировки резисторов

    Для резисторов с точностью 20 % используют маркировку с тремя полосками, для резисторов с точностью 10 % и 5 % маркировку с четырьмя полосками, для более точных резисторов с пятью или шестью полосками. Первые две полоски всегда означают первые два знака номинала. Если полосок 3 или 4, третья полоска означает …Подробнее...
  • Излучение и распространение радиоволн

    Излучение и распространение радиоволн

    Как известно, постоянный ток, проходящий по проводу создает вокруг него постоянное магнитное поле. Когда ток исчезает, то созданное им магнитное поле исчезая возвращает энергию в провод. При переменном токе вокруг провода создается переменное магнитное поле, напряженность которого меняется с частотой тока. Часть энергии магнитного поля возвращается в провод, другая часть …Подробнее...
  • Полицейская сирена на LM324

    Полицейская сирена на LM324

    Данная схема издает звук напоминающий полицейскую сирену. Схема основана на ОУ LM324 представляющий собой генератор ЗЧ. При нажатии на кнопку SA1 начнет быстро заряжаться С1, сирена начнет издавать звук. При размыкании контактов SA1  сирена будет работать до тех пор пока не разрядится через R2 конденсатор С1. Источник — http://www.eleccircuit.com/police-bicycle-siren-circuits/ скраб для …Подробнее...