Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/RobotRemotecontrol

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


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

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

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

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

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

  • Arduino Robot;
  • Инфракрасный датчик;
  • Кабель (чтобы подключить этот датчик);
  • Пульт управления, совместимый с 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». Замените имеющиеся в этих строчках значения на те, что увидели на экране.

Пробуем

LottieLemon Remote 780.png

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

Код

  1. /* Удаленное управление
  2.  
  3. Если подключить к роботу инфракрасный ресивер, им можно будет
  4. управлять так же, как и радиоуправляемой машинкой. Используя
  5. пульт для дистанционного управления (идет в комплекте с набором
  6. датчиков), вы можете управлять роботом, даже не прикасаясь к нему!
  7.  
  8. Цепь:
  9.  * Arduino Robot
  10.  * Ресивер, подключенный к D2
  11.  * Пульт управления из набора датчиков Arduino
  12.  
  13. Основан на библиотеке IRremote от Кена Ширриффа
  14. (Ken Shirriff, http://arcfn.com).
  15.  
  16. Создан 1 мая 2013 Х. Янгом (X. Yang),
  17. модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).
  18.  
  19. Этот код не защищен авторским правом.
  20. */
  21.  
  22. // Подключаем необходимые библиотеки:
  23. #include <IRremote.h>
  24. #include <IRremoteTools.h>
  25. #include <ArduinoRobot.h>
  26. #include <Wire.h>
  27. #include <SPI.h>
  28.  
  29. // Задаем несколько команд для пульта управления:
  30. #define IR_CODE_FORWARD 284154405
  31. #define IR_CODE_BACKWARDS 284113605
  32. #define IR_CODE_TURN_LEFT 284129925
  33. #define IR_CODE_TURN_RIGHT 284127885
  34. #define IR_CODE_CONTINUE -1
  35.  
  36. boolean isActing = false; // переменная, которая определяет, выполняет ли робот команду, посланную пультом
  37. long timer;
  38. const long TIME_OUT = 150;
  39.  
  40. void setup() {
  41.   // Инициализируем робота, SD-карту и дисплей:
  42.   Serial.begin(9600);
  43.   Robot.begin();
  44.   Robot.beginTFT();
  45.   Robot.beginSD();
  46.  
  47.   // Выводим на экране немного текста:
  48.   beginIRremote(); // запускаем ресивер
  49. }
  50.  
  51. void loop() {
  52.   // Если получили команду, обрабатываем ее:
  53.   if (IRrecived()) {
  54.     processResult();
  55.     resumeIRremote(); // возобновляем работу ресивера
  56.   }
  57.  
  58.   // Если робот не получил никакой команды, останавливаем его:
  59.   if (isActing && (millis() - timer >= TIME_OUT)) {
  60.     Robot.motorsStop();
  61.     isActing = false;
  62.   }
  63. }
  64. void processResult() {
  65.   unsigned long res = getIRresult();
  66.   switch (res) {
  67.     case IR_CODE_FORWARD:
  68.       changeAction(1, 1); // двигаем робота вперед
  69.       break;
  70.     case IR_CODE_BACKWARDS:
  71.       changeAction(-1, -1); // двигаем робота назад
  72.       break;
  73.     case IR_CODE_TURN_LEFT:
  74.       changeAction(-0.5, 0.5); // двигаем робота влево
  75.       break;
  76.     case IR_CODE_TURN_RIGHT:
  77.       changeAction(0.5, -0.5); // двигаем робота вправо
  78.       break;
  79.     case IR_CODE_CONTINUE:
  80.       timer = millis(); // продолжаем последнее действие и сбрасываем таймер
  81.       break;
  82.   }
  83. }
  84. void changeAction(float directionLeft, float directionRight) {
  85.   Robot.motorsWrite(255 * directionLeft, 255 * directionRight);
  86.   timer = millis();
  87.   isActing = true;
  88. }

См.также

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

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

  1. Arduino - Remote Control