Espruino:Примеры/Bluetooth-робот, управляемый голосом
Bluetooth-робот, управляемый голосом[1]
Espruino-powered Bluetooth Robot
В этом руководстве мы расскажем, как создать управляемого голосом Bluetooth-робота, которого можно наблюдать на видео выше.
Нам понадобятся
- Плата Espruino с поддержкой Bluetooth и припаянным драйвером моторов L293D
- Батарея
- Собранный робот с 2 моторами
Что надо сделать
Подключите 4 вывода драйвера моторов к 4 проводам, идущим от двух моторов. Порядок подключения не важен.
Подключите батарею, а также через USB подключитесь к компьютеру.
Теперь скопируйте код ниже в левую часть Web IDE. В массиве MOTORS должны содержаться названия контактов, с помощью которых вы подключились к драйверу моторов L293D:
// Контакты для моторов:
var MOTORS = [B0,B1,A7,A6];
// Значения, которые надо задать контактам:
var GO = { FORWARD: 0b1010, BACK : 0b0101, LEFT : 0b0110, RIGHT : 0b1001 };
function move(motorState, time) {
digitalWrite(MOTORS, motorState);
setTimeout("digitalWrite(MOTORS, 0);", 500);
}
Теперь напечатайте следующее (в этот момент колёса робота не должны касаться земли):
move(0b1010, 500);
В результате моторы начнут двигаться в течение полсекунды. Первый аргумент – это двоичное число, которое задаёт, какие выводы драйвера моторов нужно включить, а какие – выключить.
Продолжайте запускать команду выше, попутно экспериментируя с разным порядком нулей и единиц в аргументе 0b1010. Делайте так, пока оба мотора не начнут двигаться вперёд. Теперь несколько раз нажмите на клавишу «Вверх» , чтобы вернуться к строчке var GO = ..., и в свойстве FORWARD вбейте число, которое обнаружили выше (то есть то, что обозначает движение обоих моторов вперёд). Далее несколько раз нажмите на клавишу «Вниз» , чтобы переместить курсор к концу текста, а затем нажмите ↵ Enter .
Теперь у вас появится возможность написать следующее:
move(Go.FORWARD, 500);
И робот начнёт двигаться вперёд.
Теперь повторите всё то же самое для свойств BACK, LEFT и RIGHT – пока робот не начнёт двигаться так, как нужно.
Беспроводное управление
Теперь мы можем настроить беспроводное управление нашим роботом! Скопируйте и вставьте код ниже:
Serial1.setup(9600);
Serial1.on('data', function(command) {
if (command=="w") move(GO.FORWARD, 500);
if (command=="s") move(GO.BACK, 500);
if (command=="a") move(GO.LEFT, 500);
if (command=="d") move(GO.RIGHT, 500);
});
Этот код будет прослушивать Serial1 (это последовательный порт, к которому подключен Bluetooth), и если в нём будет обнаружена буква w, s, a или d, он переместит робота в соответствующем направлении.
Попробуйте подключить свой телефон/планшет к Espruino и запустите приложение терминала. Более подробно читайте в этой статье.
Теперь вы можете печатать на клавиатуре своего устройства буквы w, s, a или d, и таким образом управлять роботом!
Мы можем улучшить эту систему – если в вашем устройстве есть функция голосовой печати (она есть у большинства Android-устройств), то это также означает, что вы можете управлять этим роботом при помощи голосовых команд.
Просто скопируйте и вставьте код ниже:
Serial1.setup(9600);
var command = "";
Serial1.on('data', function(data) {
command += data;
if (command.indexOf(" ")>=0 || command.indexOf("\n")) {
command="";
} else {
print(command);
if (command=="forward") move(GO.FORWARD, 500);
if (command=="back") move(GO.BACK, 500);
if (command=="left") move(GO.LEFT, 500);
if (command=="right") move(GO.RIGHT, 500);
}
});
Этот код будет постоянно искать, не пришли ли через Buetooth разделённые пробелами слова «forward», «back», «left» или «right», и перемещать робота соответственно этим командам. Кликните на маленькую иконку микрофона на клавиатуре своего Android-телефона, чтобы начать голосовую печать и вперёд!
Возможно, придётся сделать несколько попыток, потому что функция голосовой печати в Android ожидает ввода больших предложений, а не отдельных команд, так что иногда могут быть ошибки.
Если USB по-прежнему подключен, вы увидите, как ваши слова передаются через Bluetooth. Вы также спокойно можете добавить в код собственные команды, чтобы с их помощью делать что-то другое.
Примечание: После отключения Espruino от USB консоль (которая интерпретирует вводимые вами команды) автоматически переедет на Serial1, в результате чего обработчик данных Serial1 перестанет работать. Но это можно исправить следующим образом:
function onInit() {
USB.setConsole();
}
Теперь, после того, как вы напечатаете save(), при каждом новом запуске Espruino консоль автоматически начнёт работать на USB, благодаря чему обработчик данных Serial1 будет по-прежнему работать как надо.
См.также
Внешние ссылки