DIY Si4730 All Band Radio (LW, MW, SW, FM)
Компоненты и расходные материалы
| | × | 1 | |
| | × | 1 | |
| Стандартный ЖК-экран Adafruit - 16x2, белый на синем | | × | 1 | |
| Поворотный энкодер с кнопкой | | × | 1 | |
| Плата для разработки, модуль усилителя звука класса D | | × | 1 | |
| | × | 1 | |
| феритовый стержень из старого радиомодуля MW | | × | 1 | |
| Ползунковый переключатель | | × | 1 | |
Приложения и онлайн-сервисы
Об этом проекте
Когда вы упоминаете радио Arduino, вы всегда думаете о современном FM-радио (88-108 МГц в Европе). Полосы LW, MW и SW покрывают диапазон от 0,2 до 30 МГц. SW особенно интересен. Радиоволны в коротковолновом диапазоне могут отражаться или преломляться от слоя электрически заряженных атомов в атмосфере, называемого ионосферой. Таким образом, коротковолновое радио можно использовать для связи на очень больших расстояниях, иногда на целых континентах или за их пределами.
Ниже я представлю вам разработку радио, которое охватывает все упомянутые выше диапазоны. «Сердце» этого радио - микросхема Si4730 от Silicon Labs, которую можно приобрести на AliExpress в виде небольшой платы для разработки за несколько долларов.
Эта плата управляется Arduino по протоколу I2C. Код написан Хулио К. Роза и основан на приведенной ниже библиотеке Si4735-I2C-R4 вместе с кодом и схемой. Хотя производитель заявляет, что этот чип (Si4730) предназначен только для AM / FM, на самом деле он работает и в ПО. Для аудиовыхода я использую плату мини-цифрового усилителя 2 * 3 Вт PAM8403 Class D, которая очень дешевая и функциональная.
Устройство собрано в подходящем корпусе и представляет собой полноценную небольшую радиостанцию World Band. В остальном я живу на первом этаже в относительно густонаселенном районе и использую антенну длиной десять метров, поэтому прием довольно слабый, но все же сравним с карманными радиоприемниками коммерческого качества, которые у меня есть.
И наконец, стоит упомянуть, что этот чип используется многими известными брендами портативных радиостанций, такими как TECSUN, DEGEN, SANGEAN и другими.
Код
Код C / C ++
/ ********************************************* ************************************************* ** Приемник JCR Si4730 / 5 LW / MW / SW / FM - версия для публикации. См. Схемы для деталей проводки. Автор Хулио К. Роза - The CesarSound - Май / 2019 Команды:radio.volumeUp (); radio.volumeDown (); radio.seekDown (); radio.seekUp (); radio.mute (); radio.unmute (); radio.setMode (FM); radio.tuneFrequency (9490); radio.getStatus (); radio.getVolume (); radio.getMode (); radio.getMute (); radio.toggleMute (); RSQMetrics rsq; radio.getRSQ (&rsq); (rsq.stereo); номер_печати (rsq.stereoBlend); номер_печати (rsq.SNR); (rsq.seekable); номер_печати (rsq.RSSI); print_mode (); print_station_freq (); print_volume (); print_mute (); print_home (); radio.getCallSign (callSign); printp (rds1); Serial.write (callSign); radio.getProgramTypeStr (programType); Serial.write (тип программы); (rds1); (rds2); (rds3); (rds4); (rds5); ********************************************* ************************************************* ***** /// Библиотека # include #include #include #include "Wire.h" // Настройки ввода / вывода Rotary r =Rotary (2, 3 ); LiquidCrystal lcd (12, 13, 7, 6, 5, 4); const byte band =A0; // Настройка переменнойunsigned int freq =880; unsigned int freqmax =10800; unsigned int freqmin =50; unsigned int fstep =10; unsigned int freqold; unsigned int buttonstate; unsigned int count =15; // Создание экземпляра Si4730 / 5 с именем radio.Si4735 radio; void setup () {lcd.begin (16, 2); PCICR | =(1 <>"); lcd.setCursor (3, 0); lcd.print (":"); lcd.setCursor (13, 0); lcd.print ("kHz");} // Прерывание кодировщика ISR (PCINT2_vect) {unsigned char result =r.process (); если (результат) {если (результат ==DIR_CW) {freq =freq + fstep; если (freq> =freqmax) {freq =freqmax; }} еще {freq =freq - fstep; если (freq <=freqmin) {freq =freqmin; }}}} void loop () {если (freqold! =freq) {tune (); } freqold =freq; lcd.setCursor (5, 0); lcd.print (частота); lcd.print (""); buttonstate =digitalRead (полоса); // Выбор бэнда if (buttonstate ==LOW) {inc_preset (); while (digitalRead (band) ==0); } // Medidor - S-Meter (dBu) e SNR (dB) - раскомментируйте, если хотите использовать RSQMetrics rsq; radio.getRSQ (&rsq); lcd.setCursor (0, 2); lcd.print ("dBu:"); lcd.print (rsq.RSSI); lcd.setCursor (9, 2); lcd.print ("дБ:"); lcd.print (rsq.SNR);} // Предустановки INCvoid inc_preset () {count ++; если (count> 15) count =1; bandpresets (); delay (100);} // Выбор предустановок Bandasvoid bandpresets () {lcd.setCursor (0, 0); переключатель (счетчик) {случай 1:частота =370; radio.setMode (LW); radio.tuneFrequency (freq); command_am (); fstep =5; lcd.print ("LW1"); ломать; случай 2:freq =620; radio.setMode (AM); radio.tuneFrequency (freq); fstep =5; lcd.print («MW1»); ломать; случай 3:freq =840; radio.setMode (AM); radio.tuneFrequency (freq); fstep =5; lcd.print («MW2»); ломать; случай 4:freq =3700; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print ("SW0"); ломать; случай 5:freq =4985; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW1»); ломать; случай 6:freq =6010; radio.setMode (SW); radio.tuneFrequency (freq); fstep =1; lcd.print («SW2»); ломать; случай 7:freq =7200; radio.setMode (SW); radio.tuneFrequency (freq); fstep =1; lcd.print («SW3»); ломать; случай 8:freq =10000; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW4»); ломать; случай 9:freq =11940; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW5»); ломать; случай 10:freq =13710; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW6»); ломать; case 11:freq =15400; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW7»); ломать; case 12:freq =17560; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW8»); ломать; case 13:freq =21505; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («SW9»); ломать; случай 14:freq =27015; radio.setMode (SW); radio.tuneFrequency (freq); fstep =5; lcd.print («CB1»); ломать; case 15:freq =9700; radio.setMode (FM); radio.tuneFrequency (freq); fstep =10; lcd.print («FM1»); ломать; }} // Sintonizador - tunervoid tune () {radio.tuneFrequency (freq);} // Команды мягкого отключения звука / максимальное усиление AVC command_am () {radio.setProperty (PROP_AM_SOFT_MUTE_MAX_ATTENUATION, 0); // 0 (ВЫКЛ) - 63 radio.setProperty (PROP_AM_AUTOMATIC_VOLUME_CONTROL_MAX_GAIN, 0x3A98); // 1000–7800}
Библиотеки C / C ++
Нет предварительного просмотра (только загрузка).