Robots #6 Управление моторами (motors)


Моторы Zumo 32U4

Робот Zumo 32U4 имеет два встроенных металлических микро мотор-редуктора, которые предлагают хорошее сочетание скорости, мощности и управляемости.
Редуктор - это устройство, предназначенное для преобразования высокой скорости вращения входного вала в более низкую скорость выходного вала. Мотор-редуктор - это конструкция, которая образуется, если соединить редуктор и электромотор.

Тип данных для задания скорости

Скорость для моторов находится в диапазоне от -400 до 400. Мы будем использовать целочисленные типы фиксированного размера int16_t (от -32 768 до 32 767).

Программирование моторов

Используемые объекты:
Zumo32U4Motors motors;

Используемые методы:
motors.setLeftSpeed(int16_t speed) // установить скорость для левого мотора
motors.setRightSpeed(int16_t speed) // установить скорость для правого мотора
motors.setSpeeds(int16_t leftSpeed, int16_t rightSpeed); // установить скорость для двух моторов

motors.flipLeftMotor(bool flip) // изменить направление движения левого мотора на противоположное
motors.flipRightMotor(bool flip) // изменить направление движения правого мотора на противоположное

Пример программы

/* Робот ждёт нажатия на кнопку А. После нажатия на неё он ждёт 2 секунды и начинает движение вперёд с начальной скоростью robotSpeed = 50*/
#include <Wire.h>
#include <Zumo32U4.h>

Zumo32U4Motors motors;
Zumo32U4LCD lcd;
Zumo32U4ButtonA buttonA;
Zumo32U4ButtonB buttonB;
Zumo32U4ButtonC buttonC;

// Объявим переменную и зададим начальную скорость
int16_t robotSpeed = 50;

void setup() {
  // Останавливаем оба мотора
  motors.setSpeeds(0,0);
  // Очистка экрана и вывод надписи
  lcd.clear();
  lcd.gotoXY(0,0);
  lcd.print("Press A");
  // Ждём нажатия кнопки А, ждём 2 секунды
  buttonA.waitForButton();
  delay(2000);
  // Запускаем оба мотора со скоростью robotSpeed
  motors.setSpeeds(robotSpeed ,robotSpeed );
}

void loop() {
  // Кнопка В останавливает моторы
  if(buttonB.getSingleDebouncedPress())
  {
    motors.setSpeeds(0,0);
  }
  // Кнопка А запускает моторы
  if(buttonA.getSingleDebouncedPress())
  {
    motors.setSpeeds(robotSpeed,robotSpeed);
  }
  // Кнопка С увеличивает скорость моторов и выводит новую скорость на экран
  if(buttonC.getSingleDebouncedPress())
  {
    robotSpeed = robotSpeed + 10;
    lcd.clear();
    lcd.gotoXY(0,0);
    lcd.print(robotSpeed);
    motors.setSpeeds(robotSpeed,robotSpeed);
  }
}

Задачи

Задача 1. Робот едет вперёд со скоростью 200 2 секунды, после едет назад с той же скоростью 1 секунду. После этого 1 секунду крутится вокруг своей оси.
Задача 2. Кнопка А включает моторы на ход вперёд. Кнопка В включает моторы на реверс – ход назад. Кнопка С останавливает моторы. Когда робот едет вперёд, он светит зелёной лампочкой. Когда назад – светит красной лампочкой. Когда стоит на месте, мигает жёлтой лампочкой
Задача 3. Написать программу движения робота по квадратной траектории.
Задача 4. Написать программу для прохождения роботом дистанции в 1 метр и остановки с точностью до 1 сантиметра. Найти зависимость между скоростью и временем для прохождения. Использовать эту программу для дистанций в 2 и 3 метра. Попробовать использовать эту программу на другой поверхности (например, на ковре).
Задача 5. Сделать из подручных средств устройство для рисования (например, карандаш), чтобы робот мог оставлять за собой след.

Комментарии