Espruino:Примеры/Bluetooth-робот, управляемый голосом: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 23: | Строка 23: | ||
Теперь скопируйте код ниже в левую часть [[Web IDE]]. В массиве '''MOTORS''' должны содержаться названия контактов, с помощью которых вы подключились к драйверу моторов [[L293D]]: | Теперь скопируйте код ниже в левую часть [[Web IDE]]. В массиве '''MOTORS''' должны содержаться названия контактов, с помощью которых вы подключились к драйверу моторов [[L293D]]: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
// Контакты для моторов: | // Контакты для моторов: | ||
var MOTORS = [B0,B1,A7,A6]; | var MOTORS = [B0,B1,A7,A6]; | ||
Строка 37: | Строка 37: | ||
Теперь напечатайте следующее (в этот момент колёса робота не должны касаться земли): | Теперь напечатайте следующее (в этот момент колёса робота не должны касаться земли): | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
move(0b1010, 500); | move(0b1010, 500); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 47: | Строка 47: | ||
Теперь у вас появится возможность написать следующее: | Теперь у вас появится возможность написать следующее: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
move(Go.FORWARD, 500); | move(Go.FORWARD, 500); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 59: | Строка 59: | ||
Теперь мы можем настроить беспроводное управление нашим роботом! Скопируйте и вставьте код ниже: | Теперь мы можем настроить беспроводное управление нашим роботом! Скопируйте и вставьте код ниже: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
Serial1.setup(9600); | Serial1.setup(9600); | ||
Serial1.on('data', function(command) { | Serial1.on('data', function(command) { | ||
Строка 79: | Строка 79: | ||
Просто скопируйте и вставьте код ниже: | Просто скопируйте и вставьте код ниже: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
Serial1.setup(9600); | Serial1.setup(9600); | ||
var command = ""; | var command = ""; | ||
Строка 104: | Строка 104: | ||
Примечание: После отключения [[Espruino]] от [[USB]] консоль (которая интерпретирует вводимые вами команды) автоматически переедет на '''Serial1''', в результате чего обработчик данных '''Serial1''' перестанет работать. Но это можно исправить следующим образом: | Примечание: После отключения [[Espruino]] от [[USB]] консоль (которая интерпретирует вводимые вами команды) автоматически переедет на '''Serial1''', в результате чего обработчик данных '''Serial1''' перестанет работать. Но это можно исправить следующим образом: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
function onInit() { | function onInit() { | ||
USB.setConsole(); | USB.setConsole(); | ||
Строка 114: | Строка 114: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 120: | Строка 120: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Espruino | {{Навигационная таблица/Портал/Espruino}} | ||
Текущая версия от 15:05, 20 мая 2023
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 будет по-прежнему работать как надо.
См.также
Внешние ссылки