====== Робот - лазер ======
====== Описание ======
Сделаем из минибота - робот лазер. Наделим его функцией перемещения в случайном направлении и добавим лазер - тогда получится робот, который может самостоятельно поиграть с котом. Или робот из звёздных войн, тут уже полёт фантазии не ограничивается.

===== Дополнительные модули =====
Предполагается что у Вас уже есть набор Минибот, и вы собрали его по инструкции в руководстве пользователя. Тогда дополнительно понадобится:

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[https://smartelements.ru/collection/moduli/product/modul-lazera-ky-008|Модуль лазера]]                |  1           |

===== Библиотеки =====
  * [[http://files.smartelements.ru/know_libs/robotSE.zip|Библиотека robotSE]]

===== Порядок действий =====
==== Шаг 1. Пересоберите робота ====
  - С помощью отвёртки, входящей в комплект набора, снимите с платформы модуль ИК-приёмника
  - С помощью отвёртки, входящей в комплект набора, прикрепите на место модуля ИК-приёмника - [[https://smartelements.ru/collection/moduli/product/modul-lazera-ky-008|Модуль лазера]]

==== Шаг 2. Установите библиотеки ====
Установите в Arduino IDE библиотеки, которые представлены по ссылкам выше. О том как устанавливаются библиотеки описано в руководстве пользователя, входящем в комплект, либо посетите соответствующий [[main:info:libs|раздел Базы Знаний]].

<WRAP center round important 60%>
Внимание! Подразумевается что библиотеки для входящих в набор модулей вы уже установили так как это описано в руководстве пользователя!
</WRAP>


==== Шаг 3. Загрузите скетч на контроллер ====
<file Arduino>
#include <robotSE.h>              //Подключение библиотеки для работы с платформой.
#include <NewPing.h>              //Подключение библиотеки для работы с дальномером.
#include <SevenSegmentTM1637.h>   //Подключение библиотеки для работы с дисплеем.

const int min_distance = 10;    //Минимальное расстояние в сантиметрах
const int PIN_LAZ = 10;         //Вывод для подключения модуля лазера

robotSE robot; //создание объекта робота

NewPing sonar(8, 9, 400); //Создание объекта дальномера. - (trig, echo, max_dist)

SevenSegmentTM1637    display(13, 12);       //Создание объекта дисплея. (CLK, DIO)

void setup() {
  pinMode(PIN_LAZ, OUTPUT);     //Установка вывода лазера как выходной
  display.begin();              //Инициализация дисплея.
  display.setBacklight(100);    //Установка яркости 100%.
  display.print("INIT");        //Вывод надписи INIT на дисплей.
  delay(1000);                  //Задержка величиной 1 с.
  display.clear();              //Очистка дисплея.
  digitalWrite(PIN_LAZ, HIGH);  //Включение лазера
}

void loop() {
  
  int cm = sonar.ping_cm();    //Получение расстояния с датчика.

  if (cm == 0) {               //Если получено нулевое значение,
    return;                      //измерить расстояние еще раз.
  }

  display.clear();             //Очистка дисплея.
  
  if (cm < min_distance) {    //Если расстояние меньше минимального,
    robot.move_stop();        //остановиться.
    robot.move_back();        //Немного отъехать назад.
    display.print("BACK");    //Вывести на дисплей данные о направлении движения.
    delay(1000);              //Задержка величиной 1 с.
    robot.move_left();        //Выполнить поворот.
    display.print("LEFT");    //Вывести на дисплей данные о направлении движения.
    delay(500);               //Задержка 200 мс.
  } 

  robot.randomMove();         //Движение в случайную сторону
  display.print("RAND");      //Вывести на дисплей данные о направлении движения.
  delay(1000);                //Задержка 1 сек.

}
</file>

==== Шаг 4. Робот вперёд! ====
Отсоедините кабель от контроллера, поставьте платформу на ровную поверхность и переведите переключатель питания в положение ON. Робот будет передвигаться в случайном направлении, проецируя впереди лазером красную точку.