Arduino:Примеры/RobotRemotecontrol: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
 
Нет описания правки
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


==Удаленное управление<ref>[https://www.arduino.cc/en/Tutorial/RobotRemoteControl Arduino - Remote Control]</ref>==
=Удаленное управление<ref>[https://www.arduino.cc/en/Tutorial/RobotRemoteControl Arduino - Remote Control]</ref>=


''Этот пример создавался как экспериментальный – для его работы на вашей IDE необходимо установить библиотеку '''IR-Remote от Кена Ширриффа (Ken Shirriff)'''.''
''Этот пример создавался как экспериментальный – для его работы на вашей [[IDE]] необходимо установить библиотеку '''IR-Remote от Кена Ширриффа (Ken Shirriff)'''.''


Чтобы узнать о ней более подробно, смотрите сам код.
Чтобы узнать о ней более подробно, смотрите сам код.


При помощи инфракрасного ресивера роботом можно управлять как телевизором – с пульта управления. В этом примере мы возьмем пульт управления, совместимый с '''Sony''', и назначим некоторым его кнопкам определенные действия. Благодаря этому мы сможем управлять роботом, даже не прикасаясь к нему.
При помощи [[инфракрасного ресивера]] [[робот]]ом можно управлять как телевизором – с пульта управления. В этом примере мы возьмем пульт управления, совместимый с [[Sony]], и назначим некоторым его кнопкам определенные действия. Благодаря этому мы сможем управлять [[робот]]ом, даже не прикасаясь к нему.


==Необходимое оборудование==
==Необходимое оборудование==


* '''Arduino Robot''';
* [[Arduino:Продукты/Продукты Arduino/Arduino Robot|Arduino Robot]] - 1 шт.
* Инфракрасный датчик;
* [[Инфракрасный датчик]] - 1шт.
* Кабель (чтобы подключить этот датчик);
* Кабель (чтобы подключить этот датчик) - 1шт.
* Пульт управления, совместимый с '''Sony''';
* Пульт управления, совместимый с [[Sony]] - 1шт.


==Инструкция==
==Инструкция==


# При помощи кабеля подключите датчик к контакту '''TKD2''' (на верхней плате);
# При помощи кабеля подключите [[датчик]] к контакту TKD2 (на верхней плате);
# Зафиксируйте датчик на плате;
# Зафиксируйте [[датчик]] на плате;
# Загрузите скетч, отключите '''USB''' и включите питание;
# Загрузите скетч, отключите USB и включите питание;
# После того, как робот покажет загрузочную картинку, возьмите пульт и начните давать роботу те или иные команды, нажимая на запрограммированные вами кнопки;
# После того, как [[робот]] покажет загрузочную картинку, возьмите пульт и начните давать [[робот]]у те или иные команды, нажимая на запрограммированные вами кнопки;
# Если робот распознает посылаемые вами сигналы и команды, то будет показывать их на своем экране;
# Если [[робот]] распознает посылаемые вами сигналы и команды, то будет показывать их на своем экране;
# Если хотите перенастроить команды, то проделайте следующее. Нажимайте на кнопки на пульте – благодаря этому на экране начнут появляться определенные значения. Запишите их куда-нибудь. Затем найдите в коде следующие строчки: '''«#define IR_CODE_FORWARD 0x2C9B»''', '''«#define IR_CODE_BACKWARDS 0x6C9B»''', '''«#define IR_CODE_TURN_LEFT 0xD4B8F»''' и '''«#define IR_CODE_TURN_RIGHT 0x34B8F»'''. Замените имеющиеся в этих строчках значения на те, что увидели на экране.
# Если [[хотите]] перенастроить команды, то проделайте следующее. Нажимайте на кнопки на пульте – благодаря этому на экране начнут появляться определенные значения. Запишите их куда-нибудь. Затем найдите в коде следующие строчки: «#define IR_CODE_FORWARD 0x2C9B», «#define IR_CODE_BACKWARDS 0x6C9B», «#define IR_CODE_TURN_LEFT 0xD4B8F» и «#define IR_CODE_TURN_RIGHT 0x34B8F». Замените имеющиеся в этих строчках значения на те, что увидели на экране.


==Пробуем==
==Пробуем==


[[File:LottieLemon_Remote_780.png]]
[[File:LottieLemon_Remote_780.png|center|frame|Рис. 1. |alt=]]


Дистанционное управление роботом
Дистанционное управление роботом

Версия от 13:45, 5 февраля 2023

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


Удаленное управление[1]

Этот пример создавался как экспериментальный – для его работы на вашей IDE необходимо установить библиотеку IR-Remote от Кена Ширриффа (Ken Shirriff).

Чтобы узнать о ней более подробно, смотрите сам код.

При помощи инфракрасного ресивера роботом можно управлять как телевизором – с пульта управления. В этом примере мы возьмем пульт управления, совместимый с Sony, и назначим некоторым его кнопкам определенные действия. Благодаря этому мы сможем управлять роботом, даже не прикасаясь к нему.

Необходимое оборудование

Инструкция

  1. При помощи кабеля подключите датчик к контакту TKD2 (на верхней плате);
  2. Зафиксируйте датчик на плате;
  3. Загрузите скетч, отключите USB и включите питание;
  4. После того, как робот покажет загрузочную картинку, возьмите пульт и начните давать роботу те или иные команды, нажимая на запрограммированные вами кнопки;
  5. Если робот распознает посылаемые вами сигналы и команды, то будет показывать их на своем экране;
  6. Если хотите перенастроить команды, то проделайте следующее. Нажимайте на кнопки на пульте – благодаря этому на экране начнут появляться определенные значения. Запишите их куда-нибудь. Затем найдите в коде следующие строчки: «#define IR_CODE_FORWARD 0x2C9B», «#define IR_CODE_BACKWARDS 0x6C9B», «#define IR_CODE_TURN_LEFT 0xD4B8F» и «#define IR_CODE_TURN_RIGHT 0x34B8F». Замените имеющиеся в этих строчках значения на те, что увидели на экране.

Пробуем

Рис. 1.

Дистанционное управление роботом

Код

/* Удаленное управление

Если подключить к роботу инфракрасный ресивер, им можно будет
управлять так же, как и радиоуправляемой машинкой. Используя
пульт для дистанционного управления (идет в комплекте с набором
датчиков), вы можете управлять роботом, даже не прикасаясь к нему!

Цепь:
 * Arduino Robot
 * Ресивер, подключенный к D2
 * Пульт управления из набора датчиков Arduino

Основан на библиотеке IRremote от Кена Ширриффа 
(Ken Shirriff, http://arcfn.com).

Создан 1 мая 2013 Х. Янгом (X. Yang),
модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).

Этот код не защищен авторским правом.
*/

// Подключаем необходимые библиотеки:
#include <IRremote.h>
#include <IRremoteTools.h>
#include <ArduinoRobot.h>
#include <Wire.h>
#include <SPI.h>

// Задаем несколько команд для пульта управления:
#define IR_CODE_FORWARD 284154405
#define IR_CODE_BACKWARDS 284113605
#define IR_CODE_TURN_LEFT 284129925
#define IR_CODE_TURN_RIGHT 284127885
#define IR_CODE_CONTINUE -1

boolean isActing = false; // переменная, которая определяет, выполняет ли робот команду, посланную пультом
long timer;
const long TIME_OUT = 150;

void setup() {
  // Инициализируем робота, SD-карту и дисплей:
  Serial.begin(9600);
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSD();

  // Выводим на экране немного текста:
  beginIRremote(); // запускаем ресивер
}

void loop() {
  // Если получили команду, обрабатываем ее:
  if (IRrecived()) {
    processResult();
    resumeIRremote(); // возобновляем работу ресивера
  }

  // Если робот не получил никакой команды, останавливаем его:
  if (isActing && (millis() - timer >= TIME_OUT)) {
    Robot.motorsStop();
    isActing = false;
  }
}
void processResult() {
  unsigned long res = getIRresult();
  switch (res) {
    case IR_CODE_FORWARD:
      changeAction(1, 1); // двигаем робота вперед
      break;
    case IR_CODE_BACKWARDS:
      changeAction(-1, -1); // двигаем робота назад
      break;
    case IR_CODE_TURN_LEFT:
      changeAction(-0.5, 0.5); // двигаем робота влево
      break;
    case IR_CODE_TURN_RIGHT:
      changeAction(0.5, -0.5); // двигаем робота вправо
      break;
    case IR_CODE_CONTINUE:
      timer = millis(); // продолжаем последнее действие и сбрасываем таймер
      break;
  }
}
void changeAction(float directionLeft, float directionRight) {
  Robot.motorsWrite(255 * directionLeft, 255 * directionRight);
  timer = millis();
  isActing = true;
}

См.также

  1. begin()
  2. motorsWrite()
  3. https://github.com/shirriff/Arduino-IRremote

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