В данной статье мы рассмотрим управление светодиодами с помощью голосовых команд, подаваемых с помощью смартфона. Данные голосовые команды со смартфона будут поступать на модуль Bluetooth, подключенный к плате Raspberry Pi, которая будет выполнять задачи в соответствии с поступившими командами. В этом проекте светодиоды можно заменить на реле и с помощью этого реализовать любой из проектов автоматизации дома, ранее рассмотренных на нашем сайте.
Необходимые компоненты
- Плата Raspberry Pi (купить на AliExpress).
- Bluetooth модуль HC-06 (купить на AliExpress).
- Резистор 100 Ом – 3 шт. (купить на AliExpress).
- Светодиоды (синий, красный, зеленый) (купить на AliExpress).
- Источник питания.
- Смартфон с операционной системой Android.
- Ethernet кабель.
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Bluetooth модуль
Bluetooth модуль состоит из модуля последовательного интерфейса Bluetooth и Bluetooth адаптера (переходника). Модуль последовательного интерфейса Bluetooth используется для преобразования последовательного порта в Bluetooth.
Вы можете использовать Bluetooth модуль сразу после того как вы купили его в магазине, не изменяя его настройки по умолчанию, в этом случае его скорость работы будет равна 9600 бод. Вам будет необходимо просто соединить его контакты rx и tx с соответствующими контактами микроконтроллера и подать на него питающее напряжение 5 В постоянного тока.
Bluetooth модуль может работать в двух режимах: режим ведущего (master mode) и режим ведомого (slave mode). Вид его режима работы можно выбрать с помощью AT команд.
При ручном конфигурировании Bluetooth модуля первым делом необходимо задействовать AT режим со скоростью 38400 бод при помощи нажатия кнопки EN на модуле или при помощи подачи уровня HIGH на его контакт EN. После этого после подачи каждой AT команды он должен отвечать вам OK.
Примечание: все команды, подаваемые на Bluetooth модуль, должны заканчиваться символами \r\n (0x0d и 0x0a) или нажатием клавиши ENTER на клавиатуре.
К наиболее часто используемым AT командам можно отнести следующие:
AT+ROLE=0 – выбор режима ведомого (Slave Mode select)
AT+ROLE=1 – выбор режима ведущего (Master Mode select)
AT+NAME=xyz – установка имени для Bluetooth-соединения
AT+PSWD=xyz – установка пароля для Bluetooth-соединения
AT+UART=<value1>,<value2>,<value3> – установка бодовой скорости
Eg. AT+UART=9600,0,0
Назначение контактов (распиновка) Bluetooth модуля HC-06:
- EN — управление питанием;
- VCC — питание от 3,6 до 6 В;
- GND — земля;
- RX, TX — интерфейс UART;
- STATE — индикация работы;
- KEY — активация режима управления с помощью AT-команд.
Объяснение работы проекта
Принцип работы нашего проекта голосового управления достаточно прост. В проекте мы использовали светодиоды трех разных цветов: красного, зеленого и синего. Bluetooth модуль HC-06 используется для приема голосовых команд от смартфона в виде строк. Плата Raspberry Pi будет принимать эти приходящие строки от Bluetooth модуля и сравнивать их с заранее определенными (хранящимися в памяти) образцами строк. На основе результата сравнения она будет выполнять соответствующие задачи.
Для передачи голосовых команд с помощью смартфона мы будем использовать приложение AMR Voice (Android Meets Robots: Voice Recognition), доступное для смартфонов на операционной системе Android.
Приложение AMR Voice можно непосредственным образом скачать и установить из Google Play Store. Также для этого проекта вам необходимо будет установить приложение Google Voice. На вход приложения AMR Voice поступает голос, который она преобразует в строку текста используя встроенные в смартфон внутренние способы распознавания речи (приложение Google Voice) и передает эту строку текста последовательно с помощью протокола Bluetooth.
После скачивания и установки приложения AMR voice зайдите в его меню настроек и подключите его к Bluetooth модулю нажав на кнопку ‘Connect Robot’ как показано на следующем рисунке.
После этого пользователь может нажать на значок микрофона на экране приложения и начать говорить заранее определенные голосовые команды для управления светодиодами:
1. “blue light on” (включить светодиод синего цвета)
2. “blue light off” (выключить светодиод синего цвета)
3. “red light on” (включить светодиод красного цвета)
4. “red light off” (выключить светодиод красного цвета)
5. “green light on” (включить светодиод зеленого цвета)
6. “green light off” (выключить светодиод зеленого цвета)
7. “all lights on” (включить все светодиоды)
8. “all lights off” (выключить все светодиоды)
9. “blink” (все светодиоды начнут мигать с задержкой 100 мс)
После этого приложение AMR voice будет записывать ваш голос и передавать его приложению Google Voice чтобы преобразовать его в формат текстовой строки. Эта текстовая строка будет передаваться плате Raspberry Pi с помощью Bluetooth модуля. Плата Raspberry Pi будет считывать эту строку с помощью своего последовательного порта (UART port) и сохранять ее в строковой переменной. После этого она будет сравнивать ее с заранее определенными образцами строк. Если фиксируется совпадение строк, то плата Raspberry Pi выполняет соответствующие действия.
Схема проекта
Схема подключения Bluetooth модуля HC-06 к плате Raspberry Pi для голосового управления светодиодами представлена на следующем рисунке.
Схема содержит плату Raspberry Pi 3 (можно использовать любую другу плату Raspberry Pi), светодиоды и Bluetooth модуль HC-06. Плата Raspberry Pi будет считывать информацию с Bluetooth модуля и управлять светодиодами. Светодиоды синего, красного и зеленого цвета подключены к контактам GPIO 17, 27 и 22 плату Raspberry Pi. Контакты Rx и Tx Bluetooth модуля подключены к контактам Tx и Rx платы.
Настройка Raspberry Pi для данного проекта
Для написания программы для данного проекта (полный ее текст приведен в конце статьи) мы будем использовать язык программирования Python. Подробнее о работе с ним можно прочитать в статье про мигание светодиода с помощью Raspberry Pi.
После этого необходимо загрузить последние обновления для операционной системы Raspberry Pi OS с помощью команд:
sudo apt-get update
sudo apt-get upgrade
После этого необходимо установить Raspberry Pi GPIO development tool, это можно сделать с помощью следующих команд:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
Далее необходимо сконфигурировать последовательный порт Raspberry Pi. В этом проекте мы использовали плату Raspberry Pi 3 и поэтому настройку последовательного порта произвели на ее примере – для других плат настройка может немного отличаться.
Для платы Raspberry Pi 3 пользователю необходимо отключить логин консоли (console login) через последовательный порт, при помощи инструмента RPi Software Configuration Tool. Откройте его с помощью следующей команды:
sudo raspi-config
Затем зайдите в ‘Advance Options’ (продвинутые настройки), выберите ‘Serial’, а потом ‘Disable’ (отключить).
После этого нам необходимо отключить встроенный Bluetooth платы Raspberry Pi 3 при помощи добавления инструкции dtoverlay=pi3-miniuart-bt в конец файла /boot/config.txt:
sudo nano /boot/config.txt
После добавления данной строки необходимо перезагрузить плату Raspberry Pi при помощи соответствующей команды sudo reboot.
И, наконец, снова залогиньтесь в Raspberry Pi и сконфигурируйте файл /boot/comline.txt.
sudo nano /boot/comline.txt
Отредактируйте данный файл следующим образом:
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
После этого можно запускать нашу программу на Python и проект будет работать. В дальнейшем вы можете усовершенствовать данный проект, заменив светодиоды на реле, с помощью которых вы сможете управлять другими устройствами, подавая им команды со смартфона.
Исходный код программы на Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import serial import RPi.GPIO as GPIO import os, time led1=17 led2=27 led3=22 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(led1, GPIO.OUT) GPIO.setup(led2, GPIO.OUT) GPIO.setup(led3, GPIO.OUT) GPIO.output(led1 , 0) GPIO.output(led2 , 0) GPIO.output(led3 , 0) Serial = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=2) data1="" data='' while 1: while data != '#': data = Serial.read(1) data1+=data print data1 if data1.find("blue light on")>0: GPIO.output(led1 , 1) print "Blue Light on" if data1.find("blue light off")>0: GPIO.output(led1 , 0) print "Blue Light Off" if data1.find("red light on")>0: GPIO.output(led2 , 1) print "Red Light on" if data1.find("red light off")>0: GPIO.output(led2 , 0) print "red Light Off" if data1.find("green light on")>0: GPIO.output(led3 , 1) print "Green Light on" if data1.find("green light off")>0: GPIO.output(led3 , 0) print "Green Light Off" if data1.find("all lights on")>0: GPIO.output(led1 , 1) GPIO.output(led2 , 1) GPIO.output(led3 , 1) print "All Lights on" if data1.find("all lights off")>0: GPIO.output(led1 , 0) GPIO.output(led2 , 0) GPIO.output(led3 , 0) print "All Light Off" if data1.find("blink")>0: for k in range (100): GPIO.output(led1 , 1) GPIO.output(led2 , 1) GPIO.output(led3 , 1) time.sleep(0.1) GPIO.output(led1 , 0) GPIO.output(led2 , 0) GPIO.output(led3 , 0) time.sleep(0.1) Serial.flush(); data=""; data1=""; |