Espruino:Примеры/Bluetooth-робот, управляемый голосом: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...»)
 
Нет описания правки
Строка 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" enclose="div">
// Контакты для моторов:
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" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
move(0b1010, 500);
</syntaxhighlight>
В результате моторы начнут двигаться в течение полсекунды. Первый аргумент – это двоичное число, которое задаёт, какие выводы драйвера моторов нужно включить, а какие – выключить.
Продолжайте запускать команду выше, попутно экспериментируя с разным порядком нулей и единиц в аргументе '''0b1010'''. Делайте так, пока оба мотора не начнут двигаться вперёд. Теперь несколько раз нажмите на клавишу {{клавиша|«Вверх»}}, чтобы вернуться к строчке '''var GO = ...''', и в свойстве '''FORWARD''' вбейте число, которое обнаружили выше (то есть то, что обозначает движение обоих моторов вперёд). Далее несколько раз нажмите на клавишу {{клавиша|«Вниз»}}, чтобы переместить курсор к концу текста, а затем нажмите {{клавиша|Enter}}.
Теперь у вас появится возможность написать следующее:


<syntaxhighlight lang="javascript" enclose="div">
move(Go.FORWARD, 500);
</syntaxhighlight>
</syntaxhighlight>
И робот начнёт двигаться вперёд.
Теперь повторите всё то же самое для свойств '''BACK''', '''LEFT''' и '''RIGHT''' – пока робот не начнёт двигаться так, как нужно.
== Беспроводное управление ==
Теперь мы можем настроить беспроводное управление нашим роботом! Скопируйте и вставьте код ниже:
<syntaxhighlight lang="javascript" enclose="div">
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" enclose="div">
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" enclose="div">
function onInit() {
  USB.setConsole();
}
</syntaxhighlight>
Теперь, после того, как вы напечатаете save(), при каждом новом запуске [[Espruino]] консоль автоматически начнёт работать на [[USB]], благодаря чему обработчик данных '''Serial1''' будет по-прежнему работать как надо.


=См.также=
=См.также=

Версия от 20:49, 17 июля 2021

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Bluetooth-робот, управляемый голосом[1]

Espruino-powered Bluetooth Robot

В этом руководстве мы расскажем, как создать управляемого голосом Bluetooth-робота, которого можно наблюдать на видео выше.

Нам понадобятся

Что надо сделать

Подключите 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 будет по-прежнему работать как надо.

См.также

Внешние ссылки