Espruino:Примеры/Bluetooth-робот, управляемый голосом: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...») |
Нет описания правки |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Bluetooth-робот, управляемый голосом<ref>[https://www.espruino.com/Bluetooth+Robot www.espruino.com - Bluetooth Voice Controlled Robot]</ref>= | ||
[https://www.youtube.com/watch?v=2YLtu7l5CR8 Espruino-powered Bluetooth Robot] | |||
В этом руководстве мы расскажем, как создать управляемого голосом [[Bluetooth-робот]]а, которого можно наблюдать на видео выше. | |||
==Нам понадобятся== | |||
* Плата [[Espruino]] с поддержкой [https://www.espruino.com/Bluetooth Bluetooth] и припаянным драйвером моторов [https://www.espruino.com/L293D L293D] | |||
* [https://www.espruino.com/Battery Батарея] | |||
* Собранный [https://www.espruino.com/Robot робот] с 2 моторами | |||
== Что надо сделать == | |||
Подключите 4 вывода драйвера моторов к 4 проводам, идущим от двух моторов. Порядок подключения не важен. | |||
Подключите батарею, а также через [[USB]] подключитесь к компьютеру. | |||
Теперь скопируйте код ниже в левую часть [[Web IDE]]. В массиве '''MOTORS''' должны содержаться названия контактов, с помощью которых вы подключились к драйверу моторов [[L293D]]: | |||
<syntaxhighlight lang="javascript"> | |||
// Контакты для моторов: | |||
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); | |||
} | |||
</syntaxhighlight> | |||
Теперь напечатайте следующее (в этот момент колёса робота не должны касаться земли): | |||
<syntaxhighlight lang="javascript"> | |||
move(0b1010, 500); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
В результате моторы начнут двигаться в течение полсекунды. Первый аргумент – это двоичное число, которое задаёт, какие выводы драйвера моторов нужно включить, а какие – выключить. | |||
Продолжайте запускать команду выше, попутно экспериментируя с разным порядком нулей и единиц в аргументе '''0b1010'''. Делайте так, пока оба мотора не начнут двигаться вперёд. Теперь несколько раз нажмите на клавишу {{клавиша|«Вверх»}}, чтобы вернуться к строчке '''var GO = ...''', и в свойстве '''FORWARD''' вбейте число, которое обнаружили выше (то есть то, что обозначает движение обоих моторов вперёд). Далее несколько раз нажмите на клавишу {{клавиша|«Вниз»}}, чтобы переместить курсор к концу текста, а затем нажмите {{клавиша|Enter}}. | |||
Теперь у вас появится возможность написать следующее: | |||
<syntaxhighlight lang="javascript"> | |||
move(Go.FORWARD, 500); | |||
</syntaxhighlight> | |||
И робот начнёт двигаться вперёд. | |||
Теперь повторите всё то же самое для свойств '''BACK''', '''LEFT''' и '''RIGHT''' – пока робот не начнёт двигаться так, как нужно. | |||
== Беспроводное управление == | |||
Теперь мы можем настроить беспроводное управление нашим роботом! Скопируйте и вставьте код ниже: | |||
<syntaxhighlight lang="javascript"> | |||
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); | |||
}); | |||
</syntaxhighlight> | |||
Этот код будет прослушивать '''Serial1''' (это последовательный порт, к которому подключен [[Bluetooth]]), и если в нём будет обнаружена буква '''w''', '''s''', '''a''' или '''d''', он переместит робота в соответствующем направлении. | |||
Попробуйте подключить свой телефон/планшет к [[Espruino]] и запустите приложение терминала. Более подробно читайте в [https://www.espruino.com/Bluetooth этой статье]. | |||
Теперь вы можете печатать на клавиатуре своего устройства буквы '''w''', '''s''', '''a''' или '''d''', и таким образом управлять роботом! | |||
Мы можем улучшить эту систему – если в вашем устройстве есть функция голосовой печати (она есть у большинства [[Android]]-устройств), то это также означает, что вы можете управлять этим роботом при помощи голосовых команд. | |||
Просто скопируйте и вставьте код ниже: | |||
<syntaxhighlight lang="javascript"> | |||
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); | |||
} | |||
}); | |||
</syntaxhighlight> | |||
Этот код будет постоянно искать, не пришли ли через [[Buetooth]] разделённые пробелами слова '''«forward»''', '''«back»''', '''«left»''' или '''«right»''', и перемещать [[робот]]а соответственно этим командам. Кликните на маленькую иконку [[микрофон]]а на клавиатуре своего [[Android-телефон]]а, чтобы начать голосовую печать и вперёд! | |||
Возможно, придётся сделать несколько попыток, потому что функция голосовой печати в [[Android]] ожидает ввода больших предложений, а не отдельных команд, так что иногда могут быть ошибки. | |||
Если [[USB]] по-прежнему подключен, вы увидите, как ваши слова передаются через [[Bluetooth]]. Вы также спокойно можете добавить в код собственные команды, чтобы с их помощью делать что-то другое. | |||
Примечание: После отключения [[Espruino]] от [[USB]] консоль (которая интерпретирует вводимые вами команды) автоматически переедет на '''Serial1''', в результате чего обработчик данных '''Serial1''' перестанет работать. Но это можно исправить следующим образом: | |||
<syntaxhighlight lang="javascript"> | |||
function onInit() { | |||
USB.setConsole(); | |||
} | |||
</syntaxhighlight> | |||
Теперь, после того, как вы напечатаете save(), при каждом новом запуске [[Espruino]] консоль автоматически начнёт работать на [[USB]], благодаря чему обработчик данных '''Serial1''' будет по-прежнему работать как надо. | |||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 19: | Строка 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 будет по-прежнему работать как надо.
См.также
Внешние ссылки