В первой части статьи мы подробно остановились на описании нашего проекта; на том, что необходимо приобрести или сделать самому, какие элементы и модули подобрать.
Во второй части речь идёт о порядке подключения всех модулей к Ардуино (Arduino).
Соавторы проекта:
Ербол Сармуханов и Владимир Мойсеенко.
Ербол Сармуханов и Владимир Мойсеенко.
Содержание статьи / Table Of Contents
↑ Шилд Ардуино
Обратите внимание на то, как устроен шилд Ардуино. Черные контакты это "минус", красные - "плюс" питания 5 Вольт. Желтым отмечены цифровые, а зелёным - аналоговые входы, оранжевым шина I2C.
↑ Энкодер
Всего пять контактов:
- Питание плюс.
- Питание минус.
- Контакт кнопки энкодера подключается к DigitalPin2 Arduino
- Контакт A энкодера подключается к DigitalPin3 Arduino
- Контакт В энкодера подключается к DigitalPin4 Arduino
↑ DS1307
Обратите внимание, что с пина 7 DS1307 нужно припаять перемычку на выходной разъём модуля.
Пять контактов:
- Питание плюс.
- Питание минус.
- Пин 7 DS1307(SQW/OUT)подключается к DigitalPin5 Arduino
- Два контакта шины I2C: SCL подключается к AnalogPin7 Arduino, SDA подключается к AnalogPin6 Arduino.
↑ ИК-приёмник
Три контакта:
- Питание плюс.
- Питание минус.
- Сигнал с ИК-приёмника подается на DigitalPin6 Arduino.
↑ Включение акустики или анодного питания
Питание на реле для включения акустики или анодного напряжения подается с DigitalPin7 Arduino на релейный модуль . См. рисунок.
Если нужно использовать два реле (левый, правый канал), то DigitalPin7 Arduino подается параллельно на IN1 IN2 релейного модуля.
Питание на реле для включения Блютуз подается с DigitalPin1 Arduino на IN4 релейного модуля, при выборе пультом или энкодером 3-го входа аудиопроцесора .
↑ TDA7318
Три контакта:- Питание минус.
- Шина I2C (два контакта) АП подключается соответственно к шилду Ардуино.
Включение реле для подключения питания АП на TDA7318 (9 Вольт) осуществляется с DigitalPin8 Arduino, соответственно на IN3 релейного модуля.
↑ Экран
Восемь контактов:
- Питание минус.
- Питание плюс.
- Контакт "Reset" подключен к "Reset" на шилде Ардуино.
- Контакт "Led" - подсветка TFT регулируется с DigitalPin9 Arduino.
- Пин CS TFT- подключается к DigitalPin10 Arduino.
- Пин DC TFT- подключается к AnalogPin0 Arduino.
- Пин CSK - подключается к DigitalPin13 Arduino.
- Пин SDA -подключается к DigitalPin11 Arduino.
↑ DS18B20
Три контакта:
- Питание минус.
- Питание плюс.
- Сигнал от DS18B20 подается на AnalogPin2 Arduino.
↑ Силовой мосфет-модуль
Три контакта:- Питание минус.
- Питание плюс.
- Сигнальный подключается к AnalogPin3 Arduino.
Или можно использовать оставшееся реле, тогда подключаем AnalogPin3 Arduino к IN4 релейного модуля.
↑ Компоновка устройства
Все компоненты занимают достаточно мало места в корпусе. Внешние элементы, которые устанавливаются на передней панели устройства, также компактные.
Поэтому компоновка совершенно свободная, на передней панели любого устройства отыщется подходящий уголок.
↑ Прошивка (скетч) для Ардуино
Теперь остановимся подробно на структуре скетча (прошивки) для Ардуино.Но сначала взгляните на фотографии экрана в некоторых режимах, это упростит понимание описания скетча.
Программа управления устройством написана в среде Arduino IDE 1.6.4 с подключением следующих библиотек:
• avr/pgmspace.h
• EEPROM.h
• SPI.h
• Adafruit_GFX.h
• TFT_ILI9163C.h
• Wire.h
• EEPROM.h
• OneWire.h
• IRremote.h
В бесконечном цикле осуществляется опрос состояния четырех флагов и, при нахождении какого-либо из них в состоянии SET, осуществляются, в зависимости от значения глобальных переменных, следующие действия:
• Флаг изменения режима. Обуславливает изменение текущего режима. Источник установки флага – нажатие соответствующих кнопок пульта или энкодера.
• Флаг изменения параметра. Установка этого флага приводит к изменению текущих параметров (например, громкости, тембра, входного канала, времени или даты). Устанавливается при нажатии кнопки «параметр +/-» пульта или повороте ручки энкодера.
• Флаг получения ежеминутного сигнала от часов. Данный флаг определяет следующие действия программы – обновление на дисплее значений даты и времени, опрос термодатчика и, при необходимости, включение/выключение кулера. Источник установки флага – прерывание от микросхемы часов ds1307.
• Флаг возврата в основной режим. Так же, как и в предыдущем случае, устанавливается прерыванием от часов ds1307. При этом происходит переход в основной режим MAIN.
Структура программы организована в виде отдельных функциональных модулей, взаимодействие между которым осуществляется посредством глобальных переменных и флагов.
Такая организация очень эффективна.
1. Позволяет повысить гибкость программы. В случае изменения типа имеющихся элементов устройства (дисплея, часов и т.д.) достаточно внести изменения в соответствующий модуль программы. Для подключения дополнительного элемента (к примеру, датчика влажности) понадобится добавить соответствующий программный модуль, оформленный отдельным файлом и прописать связи с имеющимися.
2. Позволяет облегчить написание и отладку программы. Каждый отдельный модуль программы является, по сути, готовым скетчем для управления тем или иным элементом устройства. Программа и писалась отдельными автономно работающими скетчами, которые лишь после удовлетворительной работы соответствующего элемента встраивались в общую структуру.
3. Позволяет использовать готовый код при создании других устройств.
Скетч (прошивку) АП вы найдете в конце статьи. Архив необходимо распаковать в папку с названием " audio_processor", без кавычек и запустить файл "audio_processor.ino".
Рассмотрим, для чего предназначен каждый программный модуль.
• [audio_processor] Стартовый модуль, в котором осуществляется инициализации пинов микроконтроллера и подключенной периферии (LCD, термодатчика, часов), чтение из EEPROM начальных параметров усилителя TDA7318, и запускается циклический опрос, описанный выше.
• [ap_display] В этом модуле содержатся функции для работы LCD – инициализация дисплея, отображение текущих данных (время, дата, режим, параметр).
• [ap_ds1307] Запуск тактирования ds1307, разрешение сигнала SQW, необходимого для вызова прерывания PCINT21 микроконтроллера Ардуино, определение текущих значений времени/даты и передача их в глобальные переменные.
• [ap_ds18b20] Определение адреса подключенного термодатчика, измерение температуры выходных транзисторов усилителя и, при необходимости, включение/выключение кулера.
• [ap_interrupts] Это модуль обработчиков прерываний. Для обеспечения своевременной реакции микроконтроллера на сигналы с ножек энкодера и их идентификации использованы прерывания INT0 и INT1. Для реализации функций, связанных с временными интервалами (отображение времени/даты, включая мигание точек-секунд), измерение температуры, возврат в режим MAIN – задействовано прерывание PCINT21. Результатом работы всех прерываний является изменение состояния и значений соответствующих флагов и переменных.
• [ap_ir] Определение кода нажатой кнопки пульта с последующим изменением состояния и значений соответствующих флагов и глобальных переменных.
• [ap_tda] В этом модуле прописаны функции для работы TDA7318 – инициализация усилителя, изменение текущих параметров (громкости, тембра, входного канала), их запись/чтение в EEPROM.
• [ap_main] В полном соответствии со своим названием это основной модуль. Образно выражаясь, здесь находится центр обработки информации и принятия решений, в котором анализируется состояние флагов и значение глобальных переменных, после чего устройство переводится в тот или иной режим. Всего предусмотрено 14 режимов устройства.
Звуковая часть (TDA7318, акустика) включены во всех режимах, кроме режима STANDBY. Во всех режимах текущие дата/время и название режима отражаются в соответствующих полях дисплея.
Вот некоторые особенности каждого из режимов.
1. STANDBY. Активируется при старте программы, а также при выключении звуковой части нажатием кнопки «Power» пульта или длительным нажатием кнопки энкодера. Во втором случае текущие значения усилителя (громкость, тембр, входной канал) сохраняются в EEPROM.
2. LOADING. В этот режим устройство переходит из режима STANDBY при включении звуковой части. При этом включается акустика, в TDA7318 загружаются считанные из EEPROM текущие параметры (громкость, тембр, номер входного канала и т.д.). Из этого режима устройство автоматически переходит в режим MAIN.
3. MAIN. Это основной режим, в котором работающий усилитель проводит большую часть времени. Переход в него происходит автоматически из всех остальных (кроме STANDBY и MUTE) режимов по прерыванию от часов в случае, если более 10 секунд не было манипуляций с пультом или энкодером. Надпись в поле режима дисплея – название текущего входного канала (AUX1, AUX2 или BT).
4. VOLUME. Режим регулировки громкости. Выбирается нажатием кнопки «режим +/-» пульта или энкодера. Уровень громкости меняется нажатием кнопки пульта «параметр +/-» или вращением ручки энкодера. Эти же действия вызывают автоматический переход из режима MAIN в режим VOLUME. Надпись в поле параметров дисплея – текущий уровень громкости.
5. BASS, TREBLE. В этих режимах регулируется тембр звука (низкие и высокие частоты, соответственно). Активируются, так же, как и режим VOLUME. Кроме того, на пульте предусмотрены кнопки быстрого вызова – красная (BASS) и зеленая (TREBLE). Надпись в поле параметров дисплея - текущий уровень низких (высоких) частот.
6. INPUTS. Выбор одного из трех входных каналов. Помимо аналогичных с режимом VOLUME способов активации предусмотрены кнопки пульта быстрого вызова – 1 (AUX1), 2 (AUX2), 3 (ВТ).
7. HOURS, MINUTES, YEAR, MONTH, DAY. Как понятно из названия режимов, они позволяют корректировать текущее время/дату. Сделать это можно как пультом, так и энкодером. Чтобы было понятно, какой именно параметр времени/даты меняется в данный момент, он выделяется рамкой. Выбор значения параметра зациклен, т.е. при достижении максимального значения (например, 12-й месяц года) осуществляется переход к минимальному значению (в нашем случае – на 1-й месяц года).
8. BRIGHTNESS. Этот режим, так же, как и следующий (MUTE) доступен только через пульт. Обеспечивает регулировку яркости дисплея. Данный режим доступен как во включенном, так и в выключенном состоянии звуковой части устройства. Кроме того, предусмотрена кнопка пульта (желтая) быстрого вызова режима регулировки яркости. Надпись в поле режима дисплея – «High», «Mid» или «Low», в зависимости от выбранного уровня яркости.
9. MUTE. Активируется нажатием одноименной кнопки пульта. Позволяет, при необходимости, быстро снижать уровень звука с текущего до минимального. Повторное нажатие указанной кнопки плавно возвращает громкость к текущему уровню. Надпись в поле режима дисплея – «Mute».
10. EQUALIZER. Этот режим, так же, как и MUTE доступен только через пульт. Обеспечивает переключение между предустановленными настройками эквалайзера. Кроме того, предусмотрена кнопка пульта (синяя) быстрого вызова. Надпись в поле режима дисплея – «Pop», «Jazz», «Cinema», «Digit», «Class», «Rock».
↑ Привязка ИК-пульта
С прошивкой разобрались, все собрали воедино, перепроверили соединения. Теперь нужно залить скетч в Ардуино и запустить все в работу.Но у каждого из вас свой пульт. Предварительно нужно считать коды кнопок. Давайте посмотрим вот это видео и станет понятно, что и как делать.
Нам нужны коды кнопок, которые обведены на рисунке оранжевым цветом.
Затем открываем вкладку " constants.h" нашего скетча и смотрим на раздел /*Константы для пульта*/. Понятно, что вы должны в каждой строчке заменить коды тестового пульта на полученные коды вашего.
Например: 0x10EF00FF //кнопка вкл/выкл, заменить код "0x10EF00FF" на код кнопки "Power" своего пульта.
Убедительно рекомендуем перед любыми изменениями скетча, сохранить оригинальный вариант!
Ещё хотим обратить ваше внимание на раздел /*Регулируемые константы*/. В каждой строке раздела есть подробный комментарий с описанием каждой константы. Вы сами можете настроить устройство "под себя". Время указывается в миллисекундах, температура в градусах.
↑ Файлы
Скетч, исходники:🎁audio_processor.7z 10.25 Kb ⇣ 228
Использованные библиотеки:
🎁biblioteki.7z 3.31 Mb ⇣ 178
Программа LCD Image Converter под Windows:
🎁lcd-image-converter.7z 13.89 Mb ⇣ 135
Полезная утилитка для подготовки картинок и шрифтов. К сожалению, проект заброшен, основной сайт автора закрыт, осталось только эта версия № 2 на Гитхабе: LCD Image Converter by Vladimir Riuson
Спасибо за внимание!
Вот пожалуй и всё. Будем рады ответить на ваши вопросы!
С уважением, Ербол и Владимир.
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.