Jump to content
  • Sign Up
  • Language

Archived

This topic is now archived and is closed to further replies.

Recommended Posts

energetik

Недорогой проект с голосовым управлением освещением

голосовое управление светом, освещением своими руками_1.jpg

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

Модуль распознавания речи VRBot был куплен на EBay, который является простым способом распознавания голосовых команд. Модуль имеет кучу встроенных динамиков и запрограммированных команд, а также позволяет записать до 32 двух пользовательских установок. В качестве реле используются беспроводные выключатели.

Для обеспечения беспроводной связи, был использован дешевый радио модуль на базе чипа AVR 433MHz.

Как оказалось, система работает довольно хорошо, несмотря на низкую стоимость компонентов. На видео ниже, вы можете увидеть систему голосового управления освещением в действии.

Сердцем схемы является модуль голосового распознавания речи Veear EasyVR , который управляет беспроводными реле, поставляемых в наборе, состоящего из пульта дистанционного управления и трех приемников. Стоимость набора сравнительно не велика и составляет около 10 евро. Использование радиоуправляемых реле, очень удобно в плане того, что модуль распознавания речи, никак не связан с высоким напряжением 230V.

Скрытый текст

голосовое управление светом, освещением своими руками_3.jpgголосовое управление светом, освещением своими руками_4.jpg

Идея состояла в том, чтобы модуль дистанционного управления реле, был непосредственно связан с модулем распознавания речи, но для этого, должен быть промежуточный интерфейс между ними. После изучения различной литературы, было выяснено, что многие дистанционные пульты управления работают на радиочастоте 433MHz, поэтому был придуман вот такой интерфейс для связи:

голосовое управление светом, освещением своими руками_5.png

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

Для того чтобы продублировать сигналы, передаваемые пультом управления, они были прочитаны с помощью логического анализатора  «Sniffer Logic Analyser», который сыграл очень большую роль в создании этого проекта. Ознакомиться с этим устройством можно по ссылке:

http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer 

Сначала дистанционный пульт был разобран, как показано на картинках ниже:

голосовое управление светом, освещением своими руками_6.jpgголосовое управление светом, освещением своими руками_7.jpgголосовое управление светом, освещением своими руками_8.jpg

После разборки, к нему были припаяны три провода: плюс, минус и сигнальный. Затем при помощи этих проводов, он был подключен к логическому анализатору и выполнена частотная синхронизация.

голосовое управление светом, освещением своими руками_9.jpg

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

Теперь записанные сигналы можно запрограммировать в микроконтроллер, но для начала надо определить параметры полученных сигналов:

1.       Определение примерных временных интервалов импульсов

На рисунке, с довольно низкой частотой дискретизации, отчетливо видны очереди импульсов. Таким образом, получилось определить временной интервал очереди импульсов, в этом случае он составил 16 миллисекунд. Для измерения надо использовать несколько одинаковых сигналов, чтобы убедится в чистоте сигнала, случайно не измерив,  различные шумы.

голосовое управление светом, освещением своими руками_10.png

2.       Определение точных временных интервалов импульсов

Увеличив частоту дискретизации, можно точно определить временной интервал одной очереди импульсов. В данном случае, он составляет 16,66 миллисекунд.

голосовое управление светом, освещением своими руками_11.png

3.       Временной интервал одного бита

Теперь пришло время, измерить временной интервал одного бита. Эта процедура должна быть выполнена как можно точнее. Для этого пришлось использовать очень высокую частоту дискретизации, при которой возможно рассмотреть импульс одного бита, в данном случае 5 МГц. После измерений, оказалось, что на один бит, приходится 171,4 микросекунды.

голосовое управление светом, освещением своими руками_12.png

4.       Измерение задержки между пакетами импульсов

Измерение времени между пакетами импульсов, является очень важным моментом. Дело в том, что приемник (реле) должен получить несколько одинаковых пакетов импульсов, со строго определенной задержкой, чтобы убедится в правильности сигнала. В данном случае, требуется отправить как минимум 3 пакета импульсов с задержкой между пакетами в 5,328 миллисекунды.

голосовое управление светом, освещением своими руками_13.png

5.       Проверка измерений

Это довольно простой этап, целью которого является проверка точности измерений. Для этого, надо посчитать количество бит в одном пакете импульсов. В данном случае, в одном пакете содержится 97 бит. Зная временной интервал одного пакета импульсов, и временной интервал одного импульса, делается простой расчет:

16666 / 171,4 = 97,23 бит

Полученное значение, достаточно близко к реальному количеству бит. Небольшая погрешность (в виде десятичной части) может легко быть прощена приемником. Вполне возможно, что измерения не точны на 100%, или же дистанционный пульт имеет незначительные погрешности в кристалле или генераторе тактовых импульсов.

6.       Обратная сборка протокола

Для перепроектирования протокола, были записаны сигналы от каждой из 10 кнопок дистанционного пульта. Сравнив сигналы от всех кнопок, выяснилось, что они различаются только по последним 57 битам, в которые и записаны сами команды для приемников (реле). Это означает, что первые 40 бит, являются стартовыми и содержат адрес приемника, который устанавливается на самом приемнике при помощи DIP-переключателей, и маркеры синхронизации. Затем была составлена таблица со значениями всех 10 кнопок содержащих по 97 битов. Используя эту таблицу, в дальнейшем можно без труда закодировать эти сигналы в программном коде для микроконтроллера.

Вот пример сигнала от одной кнопки, на первой картинке сигнал включения, на второй сигнал выключения:

голосовое управление светом, освещением своими руками_14.pngголосовое управление светом, освещением своими руками_15.png

7.       Создание ясной картины протокола

Для того чтобы преобразовать пакеты импульсов в программный код, требуется четкое понимание о том, как работает протокол. Ниже представлено изображение протокола:

Теперь у нас есть вся информация, необходимая для управления приемниками (реле)! Но эти команды надо как-то передать на приемники по радиосвязи. Для этого был приобретен радио трансивер, работающий на частоте 433МГц (радио модуль 433Mhz для Arduino / ARM / MCU), по очень низкой цене – около 5$.

голосовое управление светом, освещением своими руками_16.png

После этого, был написан тестовый программный код и библиотека для микроконтроллера AVR ATtiny2313.

Метод, который использовался для программирования импульсов в микроконтроллере, использует внутренний таймер самого микроконтроллера, генерируя прерывание каждые 171,4 микросекунды. С каждым прерыванием, читается определенный бит из массива с командами и выводится на контакт ввода-вывода.

Расчет времени

Для того чтобы таймер мог отсчитывать точное время прерывания, надо установить сравнительное значение. Это значение можно вычислить из нескольких переменных:

Значения,  которые известны:

  • Микроконтроллер работает на частоте 8 МГц
  • Время одного бита  171,4 мкс  = 0,0001714 секунды.

Это метод для расчета значения регистра:

1.       Расчет времени цикла микроконтроллера

Микроконтроллер работает на частоте 8 МГц, это означает, что каждый такт состоит из 0,000000125 секунды  (1/8000000 = 0,000000125).

2.       Расчет значения регистра

Время одного цикла составляет 0,000000125 секунды. Если разделить время одного бита на время одного тактового цикла получается  0,0001714 / 0,000000125 = 1371,2. Регистр может содержать только целое число, поэтому берется значение 1371. Теперь надо решить, какой использовать таймер, можно выбрать 8 или 16 битный таймер. Восьмиразрядный таймер отсчитывает 256 тактов, а 16-битный 65536 тактов. Если выбрать 8-разрядный таймер, то придется использовать делитель, который разделит время таймера на определенное число, доступное для делителя (см. техническую документацию).  В данном случае, делитель может делить на 1 (нет деления), 8, 64, 256, 1024. Если использовать 8-разрядный таймер, то делить надо будет на 8, но это вносит определенные неточности в вычисления. Поэтому, и было решено загрузить значение 1371 в регистр.

В прикрепленном к проекту коде, в регистр загружено немного другое значение, так как оно было скорректировано из-за неточности внутреннего генератора, которая была выявлена при помощи логического анализатора.

Память / оптимизация

Для того чтобы контролировать 10 приемников (реле) с одного микроконтроллера, надо сделать код как можно меньше, чтобы он мог поместиться в памяти микроконтроллера ATtiny2313, а для этого надо сделать «умный» код.

В каждом из 10 пакетов импульсов, надо отослать 97 бит, а это означает, что они должны храниться в массиве. Таким образом, потребуется отдельный массив для каждого пакета битов. Это не очень хорошо, поскольку минимальной ячейкой памяти является байт (8 бит), даже если значение объявлено логически, оно все равно занимает 1 байт.

Чтобы сэкономить память, пакет битов был разделен на байты (8 бит), это позволило сэкономить 87,5% памяти! Для этого был написан небольшой кусок кода, позволяющий выполнить эту операцию. Для простоты, создается 13 байт (104 бита), пакет состоит из 97 битов, это облегчает программирование, если используется целое количество байт. Последние 7 бит, в 13-ом байте равняются нулю, чтобы правильно выдержать временной интервал между пакетами. 

Чтобы сохранить больше флэш-памяти массивы хранятся в памяти RAM, что также реализовано в программном коде.

На этот момент, сделана большая часть работы кодирования, программа является достаточно полной и простой в использовании.  Теперь,  можно просто вызвать функцию, и  таким образом, отправить сигнал на радио трансивер, через контакт микроконтроллера.

Теперь надо связать модуль распознавания речи EasyVR с микроконтроллером. Это очень легко сделать, так как он работает с помощью последовательной связи. Подробно об этом можно почитать в технической информации на модуль EasyVR по ссылке:

http://www.veear.eu/Demos/ARDUINODemos.aspx 

Ниже представлена принципиальная электрическая схема и схема печатной платы:

голосовое управление светом, освещением своими руками_17.pngголосовое управление светом, освещением своими руками_18.png

Печатные платы были изготовлены при помощи фрезерного станка с ЧПУ, ниже представлены фотографии этого процесса:

голосовое управление светом, освещением своими руками_19.jpgголосовое управление светом, освещением своими руками_20.jpgголосовое управление светом, освещением своими руками_21.jpgголосовое управление светом, освещением своими руками_22.jpg

Таким образом, получилась вот такая собранная схема:

голосовое управление светом, освещением своими руками_23.jpg

Источник: jjshortcut

 

Share this post


Link to post
Share on other sites
ledlight

Голосовое управление светом, освещением через Apple HomeKit
позволяет использовать Siri для голосового управления отдельными группами освещения, подробнее:

 

Share this post


Link to post
Share on other sites
light77

Siri управляет wi-fi выключателями Sonoff
Использовался wi-fi реле Sonoff Basic и Sonoff Touch. Базовая прошивка позволяет управлять ими только из своего приложения на телефоне. Чтобы сделать управление освещением голосом необходимо менять прошивку. 

Используется прошивка Tasmota: https://github.com/arendst/Sonoff-Tasmota. Так же для удобства Domoticz, хотя можно обойтись и без него.
Обязательно нужен MQTT-брокер. Можно поставить классику Mosquitto или использовать облачные серверы типа cloudmqtt.com
Непосредственно для интеграции с Apple HomeKit используется HomeBridge: https://github.com/nfarina/homebridge


⚡ Инженер-светотехник

Share this post


Link to post
Share on other sites

×
×
  • Create New...