Система создавалась для голосового управления приборами домашней автоматизации X10, которых у меня имеется в количестве, достаточном для полного управления освещением одной комнаты. После того как сгорел контроллер домашней автоматизации и таймер, управление осуществлялось с пульта X10. Захотелось сделать управление приборами с помощью голосовых команд.
Использовалось следующее оборудование:
Компьютер (нетбук ASUS Aspire One) с операционной системой Linux
Достаточно хороший микрофон (желательно направленный)
Микроконтроллер Arduino
Приборы X10
Прибор PSC05 (двусторонний модуль обмена данными между сетью X10 и другими системами)
Коротко системе домашней автоматизации X10
X10 является самой первой системой домашней автоматизации. X10 использует для передачи данных метод частотного уплотнения в обычной электросети квартиры. Плюсы данной технологии:
легка в установке;
никаких дополнительных проводов в квартире;
распространенный стандарт, много исполнительных элементов;
система может управляться дистанционно;
система может программироваться;
относительно низкая стоимость и простота компонентов;
не требует дополнительного электропитания.
В системе X10 есть два основных компонента:
модуль – принимает сигналы от X10 трансивера через электропроводку и управляет устройством, подключенным к нему;
контроллер – посылает сигналы модулям.
Модули бывают разными. Вот стандартный модуль для управления светом.
Модули также могут быть также вмонтированы в электропроводку или встроены в прибор.
Существует три типа контроллеров:
трансивер – подключается к розетке сети переменного тока, принимает сигналы от беспроводного пульта дистанционного управления и отправляет команды модулям.
настольные контроллеры – подключаются к настенной розетке сети переменного тока – посылает команды модулям по сети.
универсальный пульт дистанционного управления – способен посылать как обычные инфракрасные сигналы, так и беспрводные сигналы формата X10.
У каждого модуля есть два настроечных параметра: код группы (A-P) и код устройства (1-16). Существуют следующие правила конфигурации системы X10:
все модули, управляемые одним трансивером или контроллером, должны использовать одинаковый код группы, переключатель кода группы имеет позиции A – P;
трансивер или контроллер должны быть сконфигурированы так, чтобы использовать тот же самый код группы, что и модули, которыми они управляют;
пульт дистанционного управления должен использовать тот же самый код группы, который использует трансивер и модули;
каждый модуль, которым вы хотите управлять отдельно от остальных, должен иметь уникальный код устройства 1 – 16 (эти коды не обязательно должны быть последовательными).
Управлять системой X10 можно дистанционно, например с помощью телефонного контроллера или компьютерного интерфейса. Для объединения системы X10 c другими системами служит контроллеры TW523 или PSC05. Мы будем использовать для управления приборами X10 с помощью Arduino.
Двусторонний интерфейс PSC05
Отдельное направление развития технологий x10 – создание сторонними разработчиками и ОЕМ-производителями собственных устройств (микрокомпьютерных систем) дляуправления модулями x10. Такие устройства подключаются к системам x10 с помощью специальных интерфейсных модулей. Пример такого модуля – . PSC05 вставляется в обычную электророзетку, а внешние устройства подключаются к нему через оптически развязанный интерфейс с разъемом RJ11. Модуль PSC05 преобразует генерируемые управляющим устройством команды в сигналы, передаваемые по электропроводке к модулям x10. Этот модуль может передавать сигналы и в обратном направлении – от устройств x10 к управляющим компьютерам.
Подключение PSC05 к Arduino
Для взаимодействия Arduino и PSC05 будем использовать библиотеку arduino-X10, которая позволяет отправлять команды в сеть x10. На сайте arduino.cc предлагают эту библиотеку. Были проблемы, выдавались ошибки в тестовых примерах, но удалось победить. Подключение к модулю PSC05 по кабелю RJ11.
В библиотеке пока не реализована отправка сообщений из сети X10, один из средних выводов поэтому пока не используется. Паяем и подключаем к Arduino. Получилось так.
Схема
Скачиваем библиотеку, копируем в папку libraries, запускаем Arduino IDE. Выбираем пример X10_Multi, исправляем ошибки, немного модифицируем (делаем для приборов с кодами A2 и A4) переключение каждые 5 сек.
Вот код данного проверочного скетча.
// include the X10 library files: #include "x10.h" #include "x10constants.h" #define zcPin 2 // the zero crossing detect pin #define dataPin 4 // the X10 data out pin #define repeatTimes 1 // how many times each X10 message should repeat // in an electrically noisy environment, you can set this higher. // set up a new x10 library instance: x10 myHouse = x10(zcPin, dataPin); void setup() { // begin serial: Serial.begin(dataRate); // Turn off all lights: myHouse.write(HOUSE_A, ALL_UNITS_OFF,repeatTimes); } void loop() { // Turn on first module: myHouse.write(HOUSE_A, UNIT_2,repeatTimes); myHouse.write(HOUSE_A, ON,repeatTimes); // Turn off second module: myHouse.write(HOUSE_A, UNIT_4,repeatTimes); myHouse.write(HOUSE_A, OFF,repeatTimes); delay(5000); // Turn off first module: myHouse.write(HOUSE_A, UNIT_2,repeatTimes); myHouse.write(HOUSE_A, OFF,repeatTimes); // turn on second module: myHouse.write(HOUSE_A, UNIT_4,repeatTimes); myHouse.write(HOUSE_A, ON,repeatTimes); delay(5000); }
Во второй части — Преобразование голоса в текст