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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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


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

См.также

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