Robots #8 Датчики приближения


Датчики приближения робота Zumo 32U4

Получает показания от трех датчиков приближения (левый, передний и правый).

Программирование датчиков приближения

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

Используемые методы:
proxSensors.initThreeSensors(); // инициализация трёх датчиков
proxSensors.initFrontSensor(); // инициализация только переднего (фронтального) датчика

proxSensors.countsFrontWithLeftLeds(); // получить данные (цифру от 0 до 6) с фронтального датчика приближения, посланные левой лампочкой. 
printBar(proxSensors.countsFrontWithRightLeds()) // получить данные (цифру от 0 до 6) с фронтального датчика приближения, посланные правой лампочкой


Пример программы с датчиками

/* Робот показывает данные с сенсоров приближения */

#include <Wire.h>
#include <Zumo32U4.h>

Zumo32U4LCD lcd;
/* Объявляем объект для сенсоров приближения (proximity Sensors) */
Zumo32U4ProximitySensors proxSensors;

void setup()
{
   /* Инициализация 3 датчиков приближения (левый, передний и правый) */
  proxSensors.initThreeSensors();
}

void loop()
{
  /* Запустим прерывания при помощи millis() (см. занятие #7) */
  static uint16_t lastSampleTime = 0;

  if ((uint16_t)(millis() - lastSampleTime) >= 100)
  {
    lastSampleTime = millis();

    /* Каждую 0.1 секунду робот посылает инфракрасные лучи и датчик считывает количество отбитых от объектов излучения */
    proxSensors.read();

    // Отобразим на экранчике данные о приближении (смотри рисунок ниже)
      lcd.gotoXY(0, 0);
      lcd.print(proxSensors.countsLeftWithLeftLeds());
      lcd.print(proxSensors.countsLeftWithRightLeds());
      lcd.print(' ');
      lcd.print(proxSensors.countsFrontWithLeftLeds());
      lcd.print(proxSensors.countsFrontWithRightLeds());
      lcd.print(' ');
      lcd.print(proxSensors.countsRightWithLeftLeds());
      lcd.print(proxSensors.countsRightWithRightLeds());
  }
}

Результат выполнения примера: 

Задачи

Задача 1. Робот реагирует на приближение, зажигая лампочки: если объект приближается слева, загорается жёлтая лампочка, если прямо, то зелёная, если справа – то красная. Если объект удаляется, то соответствующая лампочка гаснет
Задача 2. Робот едет прямо. Если перед ним есть объект, он останавливается.
Задача 3. Лабиринт из коробок. Робот едет прямо. Если перед ним есть объект, он разворачивается вправо и продолжает движение.
Задача 4. "Пугливый робот" Робот едет прямо со скоростью 100. Если слева или справа от него есть объект (например, proxSensors.countsLeftWithLeftLeds передаёт 6), то он ускоряет скорость до 300. Если перед ним есть объект, робот останавливается.

Дополнительные задачи

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

Комментарии