Arduino:Примеры/RobotRescue: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 184: | Строка 184: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:36, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Робот-спасатель[1]
В робототехнике существует задача, именуемая «rescue» (т.е. «спасение»), в рамках которой робот должен следовать некоторому маршруту, добраться до определенного места и выполнить там задание (гипотетически – спасти человека). В данном случае робот будет доезжать до «пострадавшего», выталкивать его из «опасной зоны» и продолжать движение.
Необходимое оборудование
- Arduino Robot;
- Большой кусок белой бумаги;
- Толстый черный маркер;
- Препятствия или «пострадавшие» (их роль могут сыграть пустые банки или не очень тяжелые игрушки);
Инструкция
- Чтобы подготовить трек, смотрите инструкции в примере «Следование за линией». Но для данного случая они будут немного отличаться.
- Нарисуйте несколько «стоп-линий» – т.е. линий, перпендикулярных основной линии (тут робот будет останавливаться). Также сделайте в главной линии пустые промежутки, внутри которых начертите прямоугольники (это своего рода «опасные зоны») размером с робота. Поместите «пострадавших» внутрь этих прямоугольников.
- Загрузите скетч, отключите USB и включите питание;
- Поставьте робота на главную линию;
- Робот начнет двигаться по линии и, подъезжая к «опасным зонам», начнет операцию «спасения» – будет выталкивать «пострадавших» из этих «опасных зон»;
- Если робот следует линии не так четко, как хотелось бы, откалибровать это действие можно в функции lineFollowConfig();
Пробуем
Сначала рисуем трек, а потом добавляем остановки (перпендикулярные линии), чтобы робот знал, где будут располагаться «пострадавшие».
Возьмите кусок бумаги и нарисуйте маркером трек
Разместите «пострадавших» внутри «опасных зон». Они должны быть не слишком тяжелыми. Робот способен сдвинуть объекты вроде пустых банок из-под газировки или маленьких пластиковых игрушек.
Разместите «пострадавших»
Поставьте робота на трек и включите. Посмотрим, сможет ли он справиться с поставленной задачей.
Поставьте робота на трек
Перед «пострадавшим» робот замедлит ход, сдвинет объект, отъедет назад и снова начнет движение.
Робот выталкивает «пострадавшего»
Код
/* Робот-спасатель
В этом скетче робот начинает следовать по линии (попутно проигрывая
музыку), пока не доезжает до «пострадавшего». Достигнув, он сдвигает
его со своего пути, а потом возвращается на трек и снова едет, пока не
добирается до нового «пострадавшего».
Если хотите, то робота можно запрограммировать на сдвигание любого
количества объектов – просто добавьте в код больше вызовов функции
«сдвигания» или добавьте больше этого кода в loop().
Цепь:
* Arduino Robot
* Несколько объектов, которые робот будет сдвигать
* Гоночный «трек»
Создан 1 мая 2013 Х. Янгом (X. Yang),
модифицирован 12 мая 2013 Д. Куартиллье (D. Cuartielles).
Этот код не защищен авторским правом.
*/
#include <ArduinoRobot.h> // подключаем библиотеку робота
#include <Wire.h>
#include <SPI.h>
void setup() {
// Инициализируем робота, SD-карту, дисплей и динамик:
Robot.begin();
Robot.beginTFT();
Robot.beginSD();
Robot.beginSpeaker();
// Рисуем на экране логотипы – «lg0.bmp» и «lg1.bmp»:
Robot.displayLogos();
// Показываем на экране картинку с инструкциями к примеру «Следование за линией»(с SD-карты):
Robot.drawBMP("lf.bmp", 0, 0);
// Проигрываем музыкальный файл «Chase»:
Robot.playFile("chase.sqm");
// Печатаем инструкции:
Robot.text("Rescue\n\n place the robot on\n the rescue track\n pushing the\n obstacles away", 5, 5); // "Робот-спасатель\n\n Поставьте робота\n на трек, после чего\n он начнет отталкивать\n препятствия"
Robot.text("Press the middle\n button to start...", 5, 61);
Robot.waitContinue(); // "Нажмите среднюю\n кнопку, чтобы\n начать..."
// Стартуем:
Robot.fill(255, 255, 255);
Robot.stroke(255, 255, 255);
Robot.rect(0, 0, 128, 80); // стираем предыдущий текст
Robot.stroke(0, 0, 0);
Robot.text("Start", 5, 5); // "Старт"
// Эта функция калибрует алгоритм следования по линии.
// Ниже один из вариантов калибровки спрятан от компилятора
// двумя слешами. Если считаете, что он подходит лучше,
// расскомментируйте его и закомментируйте
// (т.е. закройте двумя слешами) тот, который находится ниже него:
// Robot.lineFollowConfig(14, 9, 50, 10);
Robot.lineFollowConfig(11, 7, 60, 5);
// Запускаем «сдвигающую» последовательность:
rescueSequence();
// Снова находим линию:
goToNext();
// Еще раз запускаем «сдвигающую» последовательность:
rescueSequence();
// Здесь, если нужно, можем продолжать «сдвигание» еще и еще...
}
void loop() {
// в этом блоке ничего – программа запускается лишь единожды
}
// Функция для запуска последовательности спасающе-сдвигающих действий:
void rescueSequence() {
// Делаем так, чтобы моторная плата начала работать в режиме следования за линией:
Robot.setMode(MODE_LINE_FOLLOW);
while (!Robot.isActionDone()) { // ждем, пока робот не перестанет следовать за линией
}
delay(1000);
// Проделываем сдвигание объекта:
doRescue();
delay(1000);
}
// Функция с набором действий для сдвигания «пострадавшего»:
void doRescue() {
// Доезжаем до остановки, начинаем воздействовать на объект:
Robot.motorsWrite(200, 200);
delay(250);
Robot.motorsStop();
delay(1000);
// Поворачиваем робота:
Robot.turn(90);
Robot.motorsStop();
delay(1000);
// Едем вперед:
Robot.motorsWrite(200, 200);
delay(500);
Robot.motorsStop();
delay(1000);
// Едем назад, оставляем объект:
Robot.motorsWrite(-200, -200);
delay(500);
Robot.motorsStop();
}
void goToNext() {
// Поворачиваем робота:
Robot.turn(-90);
Robot.motorsStop();
delay(1000);
}
См.также
- Line Following example
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino