| Ваш IP: 54.173.237.152 | Online(17) - гости: 6, боты: 11 | Загрузка сервера: 3.78 ::::::::::::

Простое 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

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

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

  • УМЗЧ на микросхеме TDA1552Q

    УМЗЧ на микросхеме TDA1552Q

    Усилитель при высоком качестве звучания очень прост в изготовлении и не нуждается в налаживании. Он имеет универсальный вход с плавной регулировкой чувствительности. Это практически «полный» усилитель, но без входов для микрофона и звукоснимателя. Усилитель мощности реализован на МС фирмы Philips TDA1552Q. Схема его включения позаимствована из [1]. Предварительный усилитель собран …Подробнее...
  • Испытатель транзисторов на микросхемах

    Схема простого испытателя маломощных биполярных транзисторов показана на рисунке. Основа испытателя 2-а генератора, первый на низкую частоту, другой на частоту 5кГц. Инверторы DD1.4 DD2.4 позволяют согласовать выходные сопротивления генераторов с сопротивлениями цепей нагрузок, а так же получить нужные полярности напряжения питания проверяемых транзисторов обеих структур. Соответственно при проверке транзистора будет …Подробнее...
  • Драйвер для люминесцентной лампы 12В

    Драйвер для люминесцентной лампы 12В

    Схема драйвера для питания люминесцентной лампы выполнен на недорогих и широко доступных элементах. Основа драйвера таймер на TLC555 (генератор 50Гц). Силовой транзистор IRF510 нагружен обычным сетевым трансформатором, к первичной обмотке (240В) которого подключена люминесцентная лампа 4Вт. Первичная обмотка может быть от 6 до 10В. Транзистор VT1 должен быть установлен на небольшой трансформатор. …Подробнее...
  • Измеритель емкости конденсаторов до 15000мкФ

    Прибор способен производить измерения емкостей от единиц микрофарады до 15000мкФ, измеритель имеет восемь пределов: 3, 15, 30 ,150, 300, 1500, 3000, 15000 мкФ. Показания контролируются по стрелочному прибору — микроамперметр с 30-ю делениями шкалы. В исходном состоянии Сх и накопительный конденсатор С3 разряжены через замкнутые контакты SB1. При нажатии на …Подробнее...
  • Простой FM приемник на транзисторах

    Простой FM приемник на транзисторах

    На рисунке показана схема простого FM приемника на 4-х транзисторах. Приемник имеет малые габариты и питается от напряжения 1,5В. Звук выводится на головные телефоны. VT1 = BF199, VT2-VT4 = BC547 Катушка L1 состоит из 8 витков медного изолированного провода диаметром 1 мм. Катушка бескаркасная имеет диаметр 6 мм и длину …Подробнее...