Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

FM-радио

Компоненты и расходные материалы

Базовое решение для FM-тюнера SparkFun - Si4703
× 1
Динамик SparkFun - 0,5 Вт (8 Ом)
Отлично звучащий динамик для небольшого радиопроекта
× 1
Монохромный графический дисплей Adafruit 0.96 "128x64 OLED
Классный маленький дисплей с очень хорошей контрастностью
× 1
Texas Instruments LM386 - аудиоусилитель - DIP-8
Известный операционный усилитель для небольших аудиопроектов с питанием от батарей
× 1
Arduino Nano R3
× 1
Мембранная клавиатура Adafruit 1x4
× 2
4-канальный двунаправленный логический преобразователь уровня I2C Adafruit
Я не использовал его, но он должен работать
× 1
Телескопическая антенна FM для F-коннектора
× 1
kenable Винт типа F для крепления на панели
× 1

Об этом проекте

В детстве я строил радиоприемники AM, но так и не смог создать радиоприемники FM. Они были слишком сложными. В настоящее время вы можете получить полный FM-радиотюнер на микросхеме, но эти микросхемы являются компонентами для поверхностного монтажа, с которыми сложно работать любителю. К счастью, Sparkfun предлагает микросхему FM-тюнера Silicon Laboratories Si4703 (техническое описание), которая выламывает все контакты. Я покажу вам, как вы можете построить полноценное FM-радио на основе этого прорыва и использовать Arduino для управления функциями тюнера через встроенный двухпроводной интерфейс управления. Sparkfun предоставляет полную библиотеку, упрощающую программирование.

В то же время я добавил в проект крутой маленький OLED-дисплей с очень высокой контрастностью и очень низким энергопотреблением. И последнее, но не менее важное:я покажу вам, как можно собрать великолепно звучащий монофонический аудиоусилитель из минимума деталей. Готовая радиостанция работает от трех батареек АА много-много часов.

Sparkfun FM-тюнер Basic Breakout и последовательная шина I2C

С основным прорывом легко работать. Сначала припаяйте штыревой разъем, чтобы можно было использовать разрыв с макетной платой. См. Схему расположения выводов ниже. Припой на одном метре тонкой проволоки пока работает как антенна для ANT.

  • LOUT и ROUT - это левый и правый выходные каналы, которые мы подключим к нашему усилителю.

(Если вы не хотите создавать свой собственный усилитель, вы можете вместо этого купить оценочную плату, которую вы можете использовать непосредственно со своими наушниками).

  • Напряжение питания Vcc составляет +3,3 В.
  • GND - это масса или 0 вольт.

Si4703 имеет двухпроводной интерфейс, который представляет собой последовательную шину, которая позволяет управлять тюнером с Arduino по последовательной связи. Точнее, шина называется I2C (Межинтегральная схема; произносится как I-квадрат-C или I-два-C) и использует только две двунаправленные линии:

  • Последовательная линия передачи данных (SDA) и
  • Последовательная линия синхронизации (SCL).
  • Кроме того, имеется строка сброса (RST).

В Si4703 SDA называется SDIO, а SCL называется SCLK. Все Arduinos имеют встроенный I2C. Если вы хотите узнать больше о шине I2C, Том Иго и Джефф Феддерсен сняли отличное видео. На нашей шине I2C Arduino действует как ведущий, а Si4703 и OLED-дисплей - как ведомые.

Напряжение на шине I2C и выбор Arduino

Используемое напряжение Si4703 и OLED-дисплея на шине I2C составляет 3,3 В. По этой причине Sparkfun советует в своем руководстве по подключению использовать Arduino на 3,3 Вольт. Это означает использование Arduino Pro Mini, который немного сложнее запрограммировать, поскольку у него нет разъема USB и который должен быть запрограммирован с выходом FTDI. Но есть еще одна проблема:Arduino Pro Mini работает на частоте 8 МГц, что вдвое меньше, чем у Arduino Uno или Nano. Мое тестирование показало, что это слишком медленно для работы с OLED-дисплеем. Поскольку я действительно хотел сохранить дисплей, я решил использовать Arduino Nano (16 МГц), который имеет уровень сигнала 5 В на шине I2C, и использовать двунаправленные преобразователи логического уровня I2C (переключатели I2C) для подключения к сигналам шины 3,3 В. дисплея и радиочипа. У меня было несколько переключателей I2C с двумя сигналами каждый, которые я использовал в своем проекте. Нам нужно сдвинуть по уровню всего три сигнала:SDA, SCL и RST. Пришлось использовать два переключателя I2C. (В описании выше я связал I2C-шифтер с 4 сигналами, который может помочь вам сэкономить кабели).

Nano почти идентичен Uno, но занимает гораздо меньшую площадь. Если хотите, можете использовать вместо него Uno. Я сделал это для первого тестирования. Оба имеют разъемы USB и просты в использовании с Arduino IDE.

Схема подключения Arduino к радио и дисплею

Затем давайте посмотрим на проводку вокруг Nano и детали подключения шины I2C. (Если точки нет, провода просто перекрещиваются).

Как видите, проект питается от трех батареек АА (4,5 Вольт). Батареи подключаются напрямую к 5-вольтовому выводу Arduino Nano в обход регулятора напряжения. Таким образом, Nano будет работать от 3-х батареек AA. ВНИМАНИЕ! Всегда отключайте батареи перед подключением Nano к компьютеру через USB! В противном случае 5 Вольт от вашего компьютера будут замкнуты накоротко с вашими батареями. На первом этапе тестирования запустите схему от блока питания USB без батареек! Если вы хотите перестраховаться, используйте шесть батареек AA (9 вольт) и подключите положительный полюс к контакту VIN (вместо контакта 5 вольт) Nano . . Таким образом, система управления питанием Nano автоматически отключит батареи при подключении USB-кабеля. (Вместо этого вы можете использовать 9-вольтную блочную батарею, но ее хватит всего на несколько часов).

Arduino SDA (A4) и SCL (A5) подключаются к 5-вольтовой стороне переключателя I2C. Кроме того, мы используем D2 как сигнал RST. На стороне переключателя I2C на 3,3 В мы подключаемся к SDIO, SCLK и RST Si4703. Для OLED-дисплея достаточно подключения к SDA и SCL. (Я купил свой на banggood.com, потому что он был двухцветным:желтый (верхние ряды) и синий, и не было булавки RST).

Подключите все компоненты к выходу 3,3 В на Nano и к заземлению. Для переключателя I2C дополнительно требуется 5 вольт на стороне высокого напряжения.

Контакты ввода-вывода D5-D12 подключены к двум клавиатурам. Нажатие кнопки подключает вход к заземлению.

Усилитель звука низкого напряжения LM386

Я использовал микросхему LM386 для создания моно усилителя. LM386 существует с семидесятых годов. Это усилитель мощности, предназначенный для использования в низковольтных потребительских приложениях (техническое описание). Внутреннее усиление установлено на 20, чтобы количество внешних компонентов оставалось низким, но добавление внешнего резистора и конденсатора между контактами 1 и 8 увеличит усиление до любого значения от 20 до 200. Мы будем работать с наименьшим усилением 20, что более чем достаточно, если вы используете динамик на 8 Ом.

Схемы части проекта аудиоусилителя приведены ниже:

Давайте сначала посмотрим на Si4703. Слева показаны подключения сигналов I2C к Arduino. Каналы аудиовыхода подключаются следующим образом:резистор R4 подключается к LOUT, а R5 - к ROUT. Затем два сигнала объединяются в сигнал МОНО. На выходах коммутационной платы есть конденсаторы, поэтому нам не нужно их добавлять. R2 и R3 определяют делитель напряжения для уменьшения уровня входного сигнала в усилитель. Конечно, вы можете заменить R2 и R3 потенциометром и использовать его для регулировки громкости. Но мы хотим управлять громкостью в цифровом виде. Выходной уровень Si4703 может быть увеличен по I2C ступенчато от 1 до 15. С R2 / R3 вы можете согласовать его с усилителем, экспериментируя с различными сопротивлениями. Например, при увеличении R3 громкость увеличивается.

Схема взята прямо из даташита. C2 должен быть не менее 220 мкФ. Меньшие значения ослабят низкие частоты. Если вы хотите усилить басы, ознакомьтесь с таблицей данных. Постройте схему на макетной плате и поэкспериментируйте с добавлением / удалением компонентов:C3 должен быть размещен близко к микросхеме. C3 и C1 необязательны.

На YouTube много видео о проектах LM386 и многие жалуются на плохой звук. У большинства из них, вероятно, отсутствует правильная планировка земли. Если вы посмотрите на схемы, вы увидите, как я сохранил входное заземление отдельно от выходного заземления, что очень важно. Они встречаются на выводе 4, выводе заземления микросхемы. Если вы хотите узнать об этом больше, посмотрите это видео от JohnAudioTech (и это для полного проекта LM386).

LM386N-1 требует минимум 4 Вольт и выдает несколько сотен мВт. Я использую 3 батарейки АА (4,5 В) и могу регулировать громкость от 1 до 10, и это звучит очень хорошо. Однако при таком низком напряжении питания очень важно использовать динамик на 8 Ом (а не на 4 Ом). Если я увеличиваю громкость до 15, звук начинает искажаться. Если вы хотите, чтобы радио было очень громким, увеличьте напряжение питания до 9 вольт.

Создание прототипа

Я настоятельно рекомендую вам сначала собрать весь проект на двух макетах. Держите Arduino, I2C-переключатель и OLED-дисплей вместе на одном макете, в то время как у вас есть коммутационный модуль Si4703 и аудиоусилитель на другом макете, чтобы свести акустические искажения к минимуму. В моем первом прототипе Si4703 был рядом с Arduino с длинными сигнальными кабелями, идущими к аудиочасти (см. Рисунок), и это вызывало искажения.

Подайте питание на Arduino от USB с помощью регулируемого выходного напряжения 3,3 В от Arduino, питающего дисплей и радиочип. LM386 питается от батарей (4,5 - 9 В).

Программный код

Следующие библиотеки должны быть включены:

  #include  #include  #include  #include  #include   

Если вы не знаете, как устанавливать библиотеки, ознакомьтесь со следующим руководством. Здесь находится библиотека Sparkfun, которая предоставляет высокоуровневые функции для общения с Si4703, не заботясь обо всех мельчайших деталях. Библиотеки дисплеев Adafruit с обучающими материалами находятся здесь.

Далее нам нужно сделать несколько определений:

  // Кнопки ввода на радио #define volDown 9 #define volUp 10 #define channelDown 11 #define channelUp 12 // Радиочип Si4703 #define resetPin 2 #define SDIO A4 #define SCLK A5 Si4703_Breakout radio (resetPin, SDIO, SCLK); #define SI4703Address 0x10 // Si4703 I2C Address.  

Использование #define - это способ сделать исходный код более читабельным. После того, как вы раз и навсегда определили, что volDown относится к выводу 9, вы пишете volDown каждый раз, когда имеете в виду D9.

Далее смотрим раздел настройки:

  // Определение переменных int channel; int volume; void setup () {// Устанавливаем внутренние подтягивающие резисторы на входах pinMode (volDown, INPUT_PULLUP); pinMode (volUp, INPUT_PULLUP); pinMode (channelUp, INPUT_PULLUP); pinMode (channelDown, INPUT_PULLUP); // Инициализируем радио radio.powerOn (); канал =882; radio.setChannel (канал); объем =4; radio.setVolume (громкость); }  

Контакты 9-12 определены как входные. Параметр INPUT_PULLUP подключает внутренний подтягивающий резистор (внутри микросхемы ATmega) от +5 В к входному выводу. Как следствие, уровень сигнала пина будет ВЫСОКИМ, если вы не нажмете кнопку (нажатая кнопка =НИЗКИЙ).

Библиотека Sparkfun позволяет легко управлять радио через I2C с помощью основных функций powerOn (), setChannel () и setVolume ().

Основной цикл ожидает нажатия кнопки и затем принимает соответствующие меры:

  void loop () {// Уменьшение громкости if (digitalRead (volDown) ==LOW) {if (volume> 0) volume--; radio.setVolume (громкость); UpdateDisplay (); задержка (100); } // Увеличение громкости if (digitalRead (volUp) ==LOW) {if (volume <15) volume ++; radio.setVolume (громкость); UpdateDisplay (); задержка (100); } // Канал вниз if (digitalRead (channelDown) ==LOW) {channel =radio.seekDown (); UpdateDisplay (); задержка (100); } // Канал вверх if (digitalRead (channelUp) ==LOW) {channel =radio.seekUp (); UpdateDisplay (); задержка (100); }}  

Взгляните на полный исходный код ниже. Он включает в себя четыре кнопки для предустановленных станций (куда вы можете вставить свои любимые станции) и весь код, необходимый для обновления OLED-дисплея, который использует почти всю доступную оперативную память. Я отсылаю вас к отличному руководству по Adafruit, если вы хотите узнать о библиотеке SSD1306. Имейте в виду, что библиотека не может определить размер экрана вашего дисплея с помощью программного обеспечения. Вы должны указать его после установки Adafruit_SSD1306.h. Откройте файл библиотеки, прочтите инструкции в комментариях и отредактируйте файл соответствующим образом.

В исходном коде есть одна «расширенная» функция для измерения уровня заряда батареи путем сравнения его с внутренним значением 1,1 В внутри микросхемы AVR. Поскольку мы работаем от батарей, у нас нет постоянного эталонного напряжения 5 В для измерения напряжения батареи. Если вы хотите узнать больше, я отсылаю вас к следующим статьям:Secret Arduino Voltmeter и форум Gammon.

От макета до готовой радиостанции

Если вы зашли так далеко, у вас есть полнофункциональный прототип на двух макетных платах. Давайте перенесем схему на две монтажные платы и поместим всю радиостанцию ​​в красивую коробку для проекта. Если вы еще этого не делали, не бойтесь пробовать. Нет ничего, что вы могли бы сделать неправильно, и вы осваиваете необходимые навыки по мере продвижения. Коллин из Adafruit сделал два хороших вводных видео, которые вы можете посмотреть:Макеты и перфокарты и прототипы перфокарт.

Я решил собрать Nano вместе с переключателями I2C (мне пришлось использовать два переключателя, см. Выше) на одной монтажной плате:

Чтобы создать этот прототип монтажной платы, я следовал руководству, которое рекомендую изучить подробно:Как создать прототип без использования печатных плат. Особенно важен шаг 3:составьте план электромонтажа! Планирование - самый важный шаг и разница между неудачей и успехом. Еще несколько советов:я использовал черный провод 22 AWG, который был слишком толстым и с ним было трудно работать, как вы можете видеть на картинке. Вместо этого возьмите тонкий «провод для обертывания» (30 AWG) разных цветов. И используйте перфокарт большего размера! Я сделал разъемы для контактов и использовал перемычки Dupont, чтобы соединить разные части вместе.

Поместите Si4703 и аудиоусилитель вместе на вторую монтажную плату. Вот небольшой учебник для усилителя LM386, который вы можете использовать в качестве вдохновения:От схем до Veroboard. Однако я бы посоветовал вам использовать IC-разъем для LM386! В качестве альтернативы, JohnAudioTech сделал красивое видео для полного проекта усилителя LM386 с хорошей компоновкой, в которой заземление питания отделено от заземления сигнала.

Далее вам понадобится красивый проектный корпус для вашего радио. И снова Коллин показывает в этом видео, как это сделать. Особенно понравилась идея с малярным скотчем для разметки места сверления. Я купил малярный скотч, он не слишком липкий. Кроме малярного скотча и дрели, воспользуйтесь клеевым пистолетом. Просто приклейте динамик, монтажные платы, аккумулятор и т. Д. К корпусу, а затем соедините детали с помощью перемычек Dupont. Конечный продукт выглядит так:

Я был слишком оптимистичен и купил довольно маленькую коробку для проекта, как видите. Чтобы сделать квадратное отверстие для дисплея на передней панели, я вырезал лезвием Стэнли изнутри (чтобы не было уродливых следов снаружи). Не очень элегантно, но отлично работало. Затем приклеил дисплей в проем горячим клеем. Я отметил размер динамика на передней панели, просверлил много отверстий диаметром 3 мм для звука и приклеил динамик сзади.

На картинке все еще виден антенный провод. Затем я купил панельный разъем типа F и телескопическую FM-антенну. Хотя длина антенны составляет всего 50 см, прием очень хороший, а маленький динамик звучит на удивление хорошо. Но самым удивительным является тот факт, что я еще ни разу не менял батарейки, хотя уже много дней слушаю свое маленькое радио.

Другие радиопроекты

Первоначально я был вдохновлен на этот проект, когда я увидел видео Великого Скотта, который также построил красивую деревянную коробку для своего радио в более позднем видео. Тем не менее, гораздо ближе в деталях к моему радио есть карманное FM-радио Si4703 от Джона Оуэна, поскольку он использует прорыв Sparkfun, и вам следует внимательно изучить описание его проекта. Я использовал его исходный код для функции Mono и для измерения напряжения батареи.

Код

FM-радио
Репозиторий Github с исходным кодом для Arduino Nano https://github.com/Notthemarsian/FM-radio

Схема

Схемы Фритцинга FM-радио
И оригинальные файлы Fritzing, и изображения / PDF https://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

Производственный процесс

  1. Аудиоусилитель класса B
  2. Гистерезисный осциллятор 555
  3. Радиосхемы
  4. Принципы радио
  5. Радио
  6. Распространение радиоволн "земля-земля"
  7. UnifiedWater v1
  8. Интернет-радио Pi-Arduino
  9. FM-радио для душевой кабины на базе Arduino
  10. Атомная радиосвязь