1. Название работы
Драйвер L9110S, Ультразвуковые дальномеры, DC TT моторы, Camsense-X1 LIDAR, Mecanum колеса
2. Цель работы
Целью работы является приобретение практических навыков
3. Задачи работы
4. Состав лабораторного комплекта
L9110S (2шт.) | HC-SR04 (4шт.) | DC TT (4шт.) | Camsense-X1 LIDAR | Mecanum колесо (4шт.) |
!!! Внимание !!!
При использовании аналога Arduino Wavgat предварительно следует установить на компьютер соответствующий драйвер.
Ссылка 1. Ссылка 2
и драйвер USB порта для CH341
Ссылка
Схема подключения
L9110S (1) | L9110S (2) | HC-SR04 (1. левый) | HC-SR04 (2. передний) | HC-SR04 (3. правый) | HC-SR04 (4) | LIDAR |
B-1A -> 23 B-1B -> 25 GND -> GND VCC -> +5v A-1A -> 27 A-1B -> 29 | B-1A -> 31 B-1B -> 33 GND -> GND VCC -> +5v A-1A -> 35 A-1B -> 37 | VCC -> +5v Trig -> 41 Echo -> 39 GND -> GND | VCC -> +5v Trig -> 43 Echo -> 45 GND -> GND | VCC -> +5v Trig -> 49 Echo -> 47 GND -> GND | VCC -> +5v Trig -> 51 Echo -> 53 GND -> GND | TX -> 19 GND -> GND VCC -> +5v |
5. Исходные данные и материалы
Статья, посвященная работе с ультразвуковым датчиком HC-SR04
Статья, посвященная работе с L9110S
Ссылка 1, Ссылка 2 – демонстрация возможностей Mecanum-колес
Схема зависимости направления движения платформы от направления вращения колес.
Тестовый код для проверки работы моторов
// Драйвер двигателя L9110S
// определяем, какие порты будем использовать для управления мотором и светодиодами
#define FORWARDFR 23
#define BACKFR 25
#define FORWARDBR 27
#define BACKBR 29
#define FORWARDFL 35
#define BACKFL 37
#define FORWARDBL 31
#define BACKBL 33
#define TIME 1000
unsigned char Forward_Speed = 200;
unsigned char Back_Speed = 160;
unsigned char White_Light = 210;
unsigned char Red_Light = 220;
void setup() {
// объявляем пины управления мостом как выходы:
pinMode(FORWARDFR, OUTPUT);
pinMode(BACKFR, OUTPUT);
pinMode(FORWARDBR, OUTPUT);
pinMode(BACKBR, OUTPUT);
pinMode(FORWARDFL, OUTPUT);
pinMode(BACKFL, OUTPUT);
pinMode(FORWARDBL, OUTPUT);
pinMode(BACKBL, OUTPUT);
// Работа заднего левого мотора вперед
analogWrite(FORWARDFR, Forward_Speed);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, 0);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, 0);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, 0);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа переднего левого мотора вперед
analogWrite(FORWARDFR, 0);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, Forward_Speed);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, 0);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, 0);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа заднего правого мотора вперед
analogWrite(FORWARDFR, 0);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, 0);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, Forward_Speed);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, 0);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа переднего правого мотора вперед
analogWrite(FORWARDFR, 0);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, 0);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, 0);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, Forward_Speed);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа задних моторов вперед
analogWrite(FORWARDFR, Forward_Speed);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, 0);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, Forward_Speed);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, 0);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа передних моторов вперед
analogWrite(FORWARDFR, 0);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, Forward_Speed);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, 0);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, Forward_Speed);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Работа всех моторов вперед
analogWrite(FORWARDFR, Forward_Speed);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, Forward_Speed);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, Forward_Speed);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, Forward_Speed);
analogWrite(BACKBL, 0);
delay(TIME); // и немного подождать
// Все моторы остановить
analogWrite(FORWARDFR, 0);
analogWrite(BACKFR, 0);
analogWrite(FORWARDBR, 0);
analogWrite(BACKBR, 0);
analogWrite(FORWARDFL, 0);
analogWrite(BACKFL, 0);
analogWrite(FORWARDBL, 0);
analogWrite(BACKBL, 0);
}
void loop() {
}
Статья 1, Статья 2, посвященные работе LIDAR
6. Задания к лабораторным работам
Задание 1.
- Через 5 секунд после запуска тележка всеми колёсами движется вперёд
- Если передний датчик расстояния показывает меньше 5 см, то тележка должна остановиться.
- Если передний датчик расстояния показывает, что до препятствия больше 5 см, тележка должна продолжать двигаться вперед.
- Если передний датчик расстояния показывает, что до препятствия меньше 3 см, тележка должна двигаться назад.
Задание 15.1
По очереди запустить на вращение и остановить каждое колесо по отдельности.
Задание 15.2
Комбинируя вращение колес выполнить движение аппарата вперед, назад, вправо, влево не разворачивая аппарат вокруг вертикальной оси.
Задание 15.3
Комбинируя вращение колес выполнить разворот аппарата по и против часовой стрелки вокруг вертикальной оси, проходящей через центр аппарата, через середину каждой из четырех сторон аппарата, через каждый из четырех углов аппарата.
Задание 15.4
Для каждого из четырех ультразвуковых датчиков по очереди вывести на serial monitor расстояние от него до препятствия.
Задание 15.5
Написать программу, которая основываясь на данных от ультразвуковых датчиков спереди и сзади аппарата устанавливает аппарат на середину, относительно препятствий.
То же самое на основании ультразвуковых датчиков справа и слева.
Задание 15.6
Написать программу, выполнение которой позволит аппарату, основываясь на данных с ультразвуковых датчиков, двигаться вперед удерживая одинаковое расстояние относительно предметов, находящихся справа и слева.
7. Полученные результаты
Результатом выполнения каждого задания является:
- Блок-схема алгоритма работы программы в графическом редакторе (yEd).
- Код программы и результаты ее тестирования на лабораторном комплекте в среде разработки Arduino IDE.
- Отчет по лабораторной работе.
8. Форма и условия сдачи/приема работы.
Каждый этап принимается отдельно.
Задания выполняются последовательно, к выполнению следующего задания ученики приступают только после сдачи предыдущего.
Для сдачи каждого задания создается отчет по лабораторной работе в виде HTML-документа, сверстанный с помощью HTML и CSS по следующему макету:
Каждое задание оформляется отдельным документом. Все HTML-отчеты с графическими файлами объединяются в архив и передаются преподавателю указанным способом.