Arduino:Примеры/RobotCompass

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

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


Компас [1]

Arduino Robot имеет компас-модуль, и этот прибор позволяет ему определять, в каком направлении он движется. Что касается этого скетч, то он позволяет роботу двигаться в строго определенном направлении. Если взять робота в руки и повертеть, экранный компас начнет показывать соответствующие изменения.

Внимание! Убедитесь, что рядом с роботом нет магнитов – они могут помешать работе компаса.

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

  • Arduino Robot;

Инструкция

  1. Загрузите скетч, отключите USB и включите питание;
  2. Поставьте робота на землю;
  3. После загрузочной картинки на экране появится картинка с компасом;
  4. Робот начнет двигаться в определенном направлении (в данном случае на юг). Если повернуть его, он развернется и снова начнет движение туда, куда ему было запрограммировано.
  5. Если вы хотите поменять это направление , найдите в коде строчку «int direc=180». Вместо «180» можно поставить любую цифру в диапазоне от «0» до «359». Если вписать «0», то робот будет двигаться на север, если «90» – на восток, если «180» – на юг, а если «270» – на запад. Куда бы вы хотели направить своего робота?

Пробуем

Проверяем, как работает компас

Код

/* Компас-модуль Arduino Robot

Робот оснащен встроенным компас-модулем, который подсказывает ему,
в каком направлении двигаться. Этот скетч делает так, чтобы робот
двигался в строго определенном направлении. 

Внимание, если рядом будут находиться магниты, они могут помешать
работе компаса.

Цепь:
* Arduino Robot

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

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

// Подключаем библиотеку робота:
#include <ArduinoRobot.h>
#include <Wire.h>
#include <SPI.h>

int speedLeft;
int speedRight;
int compassValue;
int direc = 180;  // направление, в котором будет двигаться робот

void setup() {
  // Инициализируем модули:
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSD();
  Robot.displayLogos();
}

void loop() {
  // Считываем данные от компаса:
  compassValue = Robot.compassRead();

  // Насколько градусов мы сбились с курса?
  int diff = compassValue - direc;

  // Модифицируем градусы:
  if (diff > 180) {
    diff = -360 + diff;
  } else if (diff < -180) {
    diff = 360 + diff;
  }

  // Подгоняем градусный диапазон к диапазону скорости колесиков робота:
  diff = map(diff, -180, 180, -255, 255);

  if (diff > 0) {
    // Делаем так, чтобы правое колесо вертелось со скоростью «255»,
    // а левое поменяло свою скорость, чтобы робот подстроился под нужный курс:
    speedLeft = 255 - diff;
    speedRight = 255;
  } else {
    // Делаем так, чтобы левое колесо вертелось со скоростью «255»,
    // а правое поменяло свою скорость, чтобы робот подстроился под нужный курс:
    speedLeft = 255;
    speedRight = 255 + diff;
  }
  // Передаем данные о скорости моторам:
  Robot.motorsWrite(speedLeft, speedRight);

  // Отображаем информацию о направлении на экране робота:
  Robot.drawCompass(compassValue);
}

См.также

  1. begin()
  2. beginTFT()
  3. compassRead()
  4. drawDire()
  5. motorsWrite()

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