Автоматизация дома на Arduino с голосовым управлением


В данном проекте мы рассмотрим создание системы автоматизации дома (подобные системы также известны под названием "умный дом") на основе платы Arduino. Управление домашними устройствами в нем будет осуществляться с помощью голоса, преобразование голоса в текст будет осуществляться с помощью Android приложения. Прием данных от смартфона будет осуществляться с помощью Bluetooth модуля HC-05.

Внешний вид проекта автоматизации дома на Arduino с голосовым управлением

Принцип работы нашего проекта будет достаточно прост. Голосовые команды будет распознаваться и преобразовываться в текст с помощью Android приложения на смартфоне, после этого данный текст будет передаваться плате Arduino по протоколу Bluetooth. Для приема этих данных мы будем использовать хорошо зарекомендовавший себя во многих проектах Bluetooth модуль HC-05, который будет передавать эти данные плате Arduino через последовательный порт (UART). Мы будем использовать штатный последовательный порт платы Arduino Nano, однако вы при желании можете его организовать на любых двух цифровых контактах данной платы с помощью библиотеки software serial.

Ранее на нашем сайте мы уже рассматривали достаточно много различных проектов автоматизации дома на основе различных микроконтроллеров (плат), наиболее популярными среди которых являются следующие:

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Bluetooth модуль HC-05 (купить на AliExpress).
  3. Модуль источника питания Hi-link 5V 3W.
  4. Инфракрасный датчик VS1838 (купить на AliExpress).
  5. Инфракрасный светодиод 5MM.
  6. NPN транзистор S8050 – 4 шт. (купить на AliExpress).
  7. Реле 5V – 4 шт.
  8. Диод 1N4007 (купить на AliExpress).
  9. Светодиоды – 4 шт. (купить на AliExpress).
  10. Резисторы 1 кОм (5 шт.), 470 Ом (4 шт.) (купить на AliExpress).
  11. Двухпиновые терминалы на 10A – 5 шт.
  12. Перфорированная плата, соединительные провода.

Схема проекта

Схема проекта автоматизации дома на основе платы Arduino с голосовым управлением представлена на следующем рисунке.

Схема проекта автоматизация дома на основе платы Arduino с голосовым управлениемМодуль Hi-Link 5V AC-DC используется в качестве источника питания для схемы. В схеме присутствуют 4 отдельных реле со схемами их управления (драйверами реле), которые построены на основе транзисторов S8050. Контакты катушек реле подключены к линии 5V. Когда на базу транзистора будет подаваться импульс высокого уровня, он будет подавать на второй контакт катушки землю. Диод 1N4007 используется для защиты схемы от скачков напряжения. Светодиод в схеме каждого реле будет индицировать статус каждого реле (вкл/выкл).

Внешний вид платы проекта с обеих сторон показан на следующем рисунке.

Внешний вид платы проекта с обеих сторон

Bluetooth модуль подключен к плате Arduino с использованием последовательного порта, ему никакая дополнительная настройка не требуется, он будет взаимодействовать с платой Arduino на скорости по умолчанию. Можно использовать любой другой аналогичный Bluetooth модуль с поддержкой профиля SPP. Но в этом случае удостоверьтесь в том, что вы установили скорость 9600 бод.

Инфракрасный датчик VS1838 подключен к контакту D2 платы Arduino. Лучше использовать именно этот контакт поскольку обработку информации от инфракрасного датчика мы будем производить с использованием аппаратного прерывания. В режиме обучения при обнаружении инфракрасного сигнала мы будем использовать подпрограмму обработки прерывания для декодирования инфракрасных сигналов. Передающий инфракрасный светодиод будет управляться с помощью транзистора S8050, база которого подключена к контакту D3 платы. Этот контакт также желательно не менять поскольку от него зависит используемая нами библиотека. На выходе данного контакт мы будем формировать ШИМ сигнал (широтно-импульсная модуляция) чтобы управлять передающим инфракрасным светодиодом. Цветная RGB лента neopixel со светодиодами подключена к контакту D12 платы. Измените в коде программы количество светодиодов соответственно используемой вами светодиодной ленте. Если число светодиодов в ленте достаточно большое лучше ее запитать от отдельного источника.

Внешний вид собранной конструкции проекта представлен на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в коде программы установим все необходимые библиотеки и зададим настройки для библиотек IRMP (прием инфракрасных сигналов) и FastLED (для управления RGB светодиодной лентой). Вы можете установить эти библиотеки с помощью менеджера библиотек Arduino или скачать их с репозитория GitHub и установить вручную. Также задействуем все известные протоколы инфракрасной связи, их около 40. Если вы уверены что часть этих протоколов вам точно не понадобится, вы можете просто закомментарить их в приведенном коде – этим вы снизите объем используемой памяти. Также создадим с помощью библиотеки FastLED два объекта для работы с инфракрасными датчиками – один для приема сигналов, а другой для передачи. Затем объявим все необходимые нам глобальные переменные.

В функции void setup() мы инициализируем последовательную связь на скорости 9600 бод – это скорость по умолчанию для модуля HC-05. Если вы в настройках модуля HC-05 измените эту скорость не забудьте изменить ее и здесь, в программе. Также мы инициализируем библиотеку FastLED и установим режимы работы используемых контактов.

В функции void loop() мы создадим два дополнительных цикла. В них плата Arduino будет проверять присутствуют ли какие либо данные в буфере последовательного порта (UART). Если данные присутствуют, мы будем считывать их в переменную и завершать досрочно (break) цикл как только обнаружим конечный символ. После выхода из цикла мы будем вызывать функцию SerialDecoder для декодирования сообщения. После этого мы будем переходить в предыдущий цикл. Если поступила команда записать инфракрасный сигнал мы будем искать (прослушивать) новый инфракрасный сигнал с помощью вызова функции RDecoder.

В функции SerialDecoder мы будем осуществлять декодирование всех голосовых сообщений (преобразованных в текст) и исполнять содержащиеся в них команды. Для этого мы будем сравнивать приходящие сообщения с заранее определенными образцами сообщений и при обнаружении соответствия исполнять необходимую команду. Вы можете модифицировать эту функцию если хотите обрабатывать дополнительные голосовые команды.

Функция Rotary будет вызываться на исполнение при срабатывании прерывания на контакте D3, к которому подключен контакт CLK инкрементального энкодера. В данной функции будет устанавливаться в соответствующее положение флаг rotationdirection, показывающий направление вращения. Также будет устанавливаться флаг TurnDetected, который будет свидетельствовать о том, что обнаружено вращение ручки инкрементального энкодера.

Функция IRDecoder() будет обнаруживать новые инфракрасные сигналы и когда она обнаружит корректный сигнал она будет извлекать из него название протокола, адрес и команду. Затем она будет сохранять эти данные в EEPROM.

Функция handleReceivedIRData является функцией-обработчиком прерывания и отвечает за обнаружение инфракрасных сигналов. Функция работает в фоновом режиме и сохраняет принимаемый сигнал в буфере для его последующей обработки.

Обработка голосовых команд

Для данного проекта вам необходимо установить на свой смартфон приложение BT Voice Control for Arduino (AMR_voice). Вы можете установить его самостоятельно из Play Store или скачать с репозитория GitHub по ссылке, приведенной ниже. После установки данного приложения включите Bluetooth и установите связь (Pair) с модулем, после чего откройте приложение. В приложении в меню выберите опцию Connect Robot чтобы увидеть список всех подключенных Bluetooth устройств. Из этого списка выберите модуль HC-05 и приложение установит связь с данным модулем.

Работа с приложением AMR_voice

После этого вы можете нажать кнопку микрофона и произнести необходимую команду. В нашем проекте мы будем использовать команды, приведенные на следующем рисунке. При желании вы можете изменить эти команды и/или добавить новые.

Голосовые команды, используемые в нашем проекте автоматизации дома

Исходный код программы (скетча)

Все необходимые файлы для этого проекта вы можете скачать по следующей ссылке.

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
585 просмотров

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *