Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия Следующая версия справа и слева
main:upgkits:robolazer [2020/05/25 19:40]
smartadmin создано
main:upgkits:robolazer [2020/05/25 19:54]
smartadmin
Строка 1: Строка 1:
 ====== Робо-лазер ====== ====== Робо-лазер ======
 +====== Описание ======
 +Сделаем из робота - робот лазер. Наделим его функцией перемещения в случайном направлении и добавим лазер - тогда получится робот, который может самостоятельно поиграть с котом. Или робот из звёздных войн, тут уже полёт фантазии не ограничивается. Дополнительно,​ оставим функционал объезда препятствий для робота,​ чтобы он сам мог объезжать препятствия.
  
 +===== Дополнительные модули =====
 +Предполагается что у Вас уже есть набор СмартРОБО,​ и вы собрали его по инструкции в руководстве пользователя. Тогда дополнительно понадобится:​
 +
 +^ Что нужно ​                                                                                                              ​^ ​ Кол-во,​ шт  ^
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-lazera-ky-008|Модуль лазера]] ​               |  1           |
 +| [[https://​smartelements.ru/​collection/​aksessuary/​product/​komplekt-neylonovyh-krepleniy|Комплект нейлоновых креплений]] |  1           |
 +
 +===== Библиотеки =====
 +  * [[http://​files.smartelements.ru/​know_libs/​robotSE.zip|Библиотека robotSE]]
 +
 +===== Порядок действий =====
 +==== Шаг 1. Пересоберите робота ====
 +  - С помощью отвёртки,​ входящей в комплект набора,​ и нейлоновых креплений (одна гайка, один винт и одна стойка) прикрепите в свободное крайнее отверстие (справа от ИК-приёмника) - [[https://​smartelements.ru/​collection/​moduli/​product/​modul-lazera-ky-008|Модуль лазера]]
 +  - Присоедините модуль с помощью трёхпроводного шлейфа к цифровому выводу D10 мотор шилда
 +
 +==== Шаг 2. Установите библиотеки ====
 +Установите в Arduino IDE библиотеки,​ которые представлены по ссылкам выше. О том как устанавливаются библиотеки описано в руководстве пользователя,​ входящем в комплект,​ либо посетите соответствующий [[main:​info:​libs|раздел Базы Знаний]].
 +
 +==== Шаг 3. Загрузите скетч на контроллер ====
 +<file Arduino>
 +#include <​robotSE.h>​ //​Подключение библиотеки для работы с платформой.
 +
 +const int PIN_LAZ = 10; //​Вывод для подключения модуля лазера
 +const int R_SEN = A2; //​Вывод,​ к которому подключен правый датчик препятствия.
 +const int C_SEN = A1; //​Вывод,​ к которому подключен центральный датчик препятствия.
 +const int L_SEN = A0; //​Вывод,​ к которому подключен левый датчик препятствия.
 +boolean R_free = false; //​Свободен ли путь правого датчика.
 +boolean C_free = false; //​Свободен ли путь центрального датчика.
 +boolean L_free = false; //​Свободен ли путь левого датчика.
 +const int mindist = 100; //​Уровень срабатывания датчиков препятствия
 +
 +robotSE robot; //​создание объекта робота
 +
 +void scan_barrier_sensors() { //​Получение информации о наличии препятствий в заданных направлениях.
 +  R_free = (analogRead(R_SEN) > mindist) ? true : false; //​Правый датчик.
 +  C_free = (analogRead(C_SEN) > mindist) ? true : false; //​Центральный датчик.
 +  L_free = (analogRead(L_SEN) > mindist) ? true : false; //​Левый датчик.
 +  Serial.print(analogRead(L_SEN));​ //​Вывод значения с левого датчика
 +  Serial.print("​|"​);​ //​Вывод разделителя
 +  Serial.print(analogRead(C_SEN));​ //​Вывод значения с центрального датчика ​
 +  Serial.print("​|"​);​ //​Вывод разделителя
 +  Serial.println(analogRead(R_SEN));​ //​Вывод значения с правого датчика
 +}
 +
 +void setup() {
 +  pinMode(PIN_LAZ,​ OUTPUT); ​    //​Установка вывода лазера как выходной
 +  digitalWrite(PIN_LAZ,​ HIGH); ​ //​Включение лазера
 +  Serial.begin(9600);​ //​Инициализация Serial-соединения
 +}
 +
 +void loop() {
 +
 +  scan_barrier_sensors();​ //​Получение показания датчиков препятствия.
 +
 +  if (R_free && C_free && L_free) { //Путь впереди свободен.
 +    robot.randomMove(); ​        //​Движение в случайную сторону
 +    delay(1000);​ //​Задержка в 1 секунду
 +  }
 +  else if (R_free || L_free) { //​Свободен путь у правого или левого датчика.
 +    if (R_free) robot.move_right();​ //​Свободен путь у правого - двигаться вправо.
 +    else if (L_free) robot.move_left();​ //​Свободен путь у левого - двигаться влево.
 +  }
 +  else { //​Робот в тупике,​ ехать некуда,​ будем выбираться.
 +    robot.move_stop();​ //​Остановка робота.
 +    delay(500); //​Задержка полсекунды.
 +    robot.move_back();​ //​Робот немного отъезжает назад.
 +    delay(500); //​Задержка полсекунды.
 +    robot.move_stop();​ //​Остановка робота.
 +    delay(500); //​Задержка полсекунды.
 +
 +    robot.move_right();​ //​Поворот робота в сторону.
 +    delay(500); //​Задержка полсекунды.
 +    robot.move_stop();​ //​Остановка.
 +    delay(500); //​Задержка полсекунды.
 +  }
 +
 +}
 +</​file>​
 +
 +==== Шаг 4. Тестирование робота ====
 +Для того чтобы робот корректно объезжал препятствия,​ измените значение переменной **const int mindist** = 100; в скетче на своё. ​
 +Понять,​ какое значение лучше выбрать поможет следующий способ. Оставьте робота подключенным к компьютеру,​ после того как загрузили скетч и включите монитор порта (меню //​Инструменты - Монитор порта//​),​ для того чтобы видеть вывод отладочной информации. В мониторе порта вы увидите значения,​ которые получают датчики препятствия. Поднесите препятствие ближе (например руку или лист бумаги),​ затем отведите препятствие дальше. Этим экспериментальным путём, определите расстояние,​ на котором желательно срабатывание датчиков препятствия.
 +
 +==== Шаг 5. Робот вперёд! ====
 +Отсоедините кабель от контроллера,​ поставьте платформу на ровную поверхность и переведите переключатель питания в положение ON. Робот будет передвигаться в случайном направлении,​ проецируя позади лазером красную точку. При приближении к препятствию,​ робот попытается его объехать.