Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Глава 1. Необходимое оборудование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1. Инвентаризация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Сделай лучше . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3. Техника безопасности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4. Что должно получиться по окончании курса . . . . . . . . . . . . . . . . 14
Глава 2. Платформа Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1. Платы Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2. Arduino Leonardo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3. Размеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4. Платы расширений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Глава 3. Моделируем шасси . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1. Модель колёс . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Модель рамы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3. Крепежи для остальных элементов . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4. Печать деталей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5. Пластик PLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Глава 4. Сборка робота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Глава 5. Краткое описание языка Arduino . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1. Среда Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2. Обязательная структура программы . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3. Типы переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
5.4. Арифметические операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.5. Операторы сравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.6. Логические операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.7. Управляющие операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.8. Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.9. Директива #define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.10. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.11. Несколько правил . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.12. ЦАП, АЦП, ШИМ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.13. Функции для работы с цифровыми сигналами . . . . . . . . . . . . . . 56
5.14. Функции для работы с аналоговыми сигналами . . . . . . . . . . . . . 57
5.15. Функции для работы со временем . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.16. Монитор последовательного порта . . . . . . . . . . . . . . . . . . . . . . . . 58
5.17. Некоторые математические функции . . . . . . . . . . . . . . . . . . . . . . . 58
5.18. Тернарный оператор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Глава 6. Программируем робота . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.1. Подключение платы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2. Поехали! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.3. Управляем касанием . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.4. Включаем/выключаем светодиод . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.5. Экономь память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Глава 7. Как ехать прямо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.1. Придумаем энкодер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.2. Управление по ошибке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Глава 8. Несколько исходных файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.1. Работаем с несколькими файлами . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.2. Создание своей библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Глава 9. Кегельринг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.1. Самое первое соревнование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.2. Сделаем бампер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.3. Укажем сантиметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.4. Движение по спирали . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Глава 10. Обнаружение объекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10.1. Ультразвуковой дальномер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10.2. Определение расстояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10.3. Скорость звука зависит от температуры . . . . . . . . . . . . . . . . . . 109
10.4. И снова кегельринг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Глава 11. Движение по линии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
11.1. Революция в автоматизации логистики . . . . . . . . . . . . . . . . . . 114
11.2. Движение вдоль линии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
11.3. Оптопара TCRT5000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11.4. Трасса и установка датчиков линии . . . . . . . . . . . . . . . . . . . . . 117
11.5. Регуляторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.6. ПИД-регулятор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
11.7. П-, ПИ-, ПД-регуляторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.8. Как подбирать коэффициенты . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.9. Пишем программу и тестируем . . . . . . . . . . . . . . . . . . . . . . . . . 127
11.10. Альфа-бета фильтр . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11.11. Снижение скорости на поворотах . . . . . . . . . . . . . . . . . . . . . . . . 134
Глава 12. Основы ООП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
12.1. Классы, свойства, методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
12.2. Четыре основных принципа . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
12.3. Создаём библиотеку правильно . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Глава 13. Движение по траектории . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.1. Описание задания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.2. Шаблон программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Глава 14. Остановка у препятствия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
14.1. ИК-дальномер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
14.2. Аппроксимация и фильтр . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Глава 15. Движение вдоль стены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
15.1. Есть проблемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
15.2. Десятичный логарифм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
15.3. Вертикальное крепление дальномера . . . . . . . . . . . . . . . . . . . . . 162
15.4. Примеры программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Глава 16. Зачётный проект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Информация для организаторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
1. Комплектующие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
2. Вариант хранения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
3. 3D-принтер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
4. Поля (трассы) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174