В сегодняшней статье я расскажу вам, как сделать робота, обходящего препятствия, на базе микроконтроллера Ардуино своими руками.
Чтобы сделать робота в домашних условиях вам понадобится собственно сама плата микроконтроллера и ультразвуковой сенсор. Если сенсор зафиксирует препятствие, сервопривод позволит ему обогнуть препятствие. Сканируя пространство справа и слева, робот выберет наиболее предпочтительный путь для обхода препятствия.
У робота есть индикаторный диод, зуммер, сигнализирующий об обнаружении препятствия, и функциональная кнопка. Самодельный робот очень простой в исполнении.
Шаг 1: Необходимые материалы
Также вам понадобится одна большая металлическая скрепка и бусина (для заднего опорного колеса).
Для изготовления каркаса робота использован кусок плексигласа (оргстекла) 12х9,5 см. Можно сделать каркас из дерева или металла, или даже из компакт-дисков.
Инструменты:
Дрель
Суперклей
Отвертка
Клеевой пистолет (опционально)
Питание:
Для питания робота используется батарейка 9В (крона), она достаточно компактная и дешевая, но разрядится уже примерно через час. Возможно, вы захотите сделать питание от аккумулятора на 6 В (минимум) или 7 В (максимум). Аккумулятор мощнее батарейки, но и дороже и больше по габаритам.
Шаг 2: Делаем каркас робота
Положите всю электронику на плексиглас и маркером отметьте места, где нужно будет просверлить монтажные отверстия (фото 1).
На нижней стороне пластины плексигласа приклейте на суперклей электромоторы. Они должны быть параллельны друг другу, с помощью линейки-угольника проверьте их положение прежде чем клеить (фото 2). Затем приклейте на суперклей отсек для батарейки.
Можно также просверлить отверстия под провода электромоторов и питания.
Шаг 3: Монтируем электронику
Закрепите на каркасе плату контроллера и драйвер двигателей, используя стойки для печатных плат, винты и гайки. Миниатюрная макетная плата клеится на липкий слой (уже есть на нижней стороне) (фото 1).
Теперь делаем заднее опорное колесо из скрепки и бусины (фото 2). Концы проволоки закрепите на нижней стороне каркаса суперклеем или термоклеем.
Шаг 4: Устанавливаем «глаза» робота
На передней части каркаса приклейте на суперклей миниатюрный сервопривод. Рассмотрите на первом фото, как крепится плата ультразвукового датчика к сервоприводу с помощью маленького вала. На втором фото показано, как выглядит завершенное соединение датчика и сервопривода.
Шаг 5: Схема подключений
Теперь приступаем к подключению электронных компонентов. Подключение компонентов происходит согласно схеме на рисунке 1.
На макетную плату устанавливайте только диод, зуммер и кнопку, это упрощает схему и позволяет добавить дополнительные устройства в дальнейшем.
Шаг 6: Код
Код, который приведен ниже, сделан с помощью Codebender.
Codebender – это браузерный IDE, это самый простой способ программировать вашего робота из браузера. Нужно кликнуть на кнопку «Run on Arduino» и все, проще некуда.
Вставьте батарейку в отсек и нажмите на функциональную кнопку один раз, и робот начнет движение вперед. Для остановки движения нажмите на кнопку еще раз.
/* Arduino Obstacle Avoiding Robot
with a servo motor and an ultrasonic sensor HC-SR04
LED and buzzer */
//Библиотеки
#include
#include "Ultrasonic.h"
//Константы
const int button = 2; //Пин кнопки на пин 2
const int led = 3; //Пин светодиода (через резистор) на пин 3
const int buzzer = 4; //Пин пищалки на пин 4
const int motorA1= 6; //позитивный (+) пин мотора A на пин 6 (PWM) (от модуля L298!)
const int motorA2= 9; //негативный пин (-) мотора A на пин 9 (PWM)
const int motorB1=10; // позитивный (+) пин мотора B на пин 10 (PWM)
const int motorB2=11; // негативный пин (-) мотора B на пин 11 (PWM)
Ultrasonic ultrasonic(A4 ,A5); //Создаем объект ultrasonic(trig pin,echo pin)
Servo myservo; //Создаём объект Servo, чтобы контролировать сервоприводы
//Переменные
int distance; //Переменная для хранения дистанции до объекта
int checkRight;
int checkLeft;
int function=0; //Переменная для хранения функции робота: '1' – движение или '0' - остановлен. По умолчанию остановлен
int buttonState=0; //Переменная для хранения состояния кнопки. По умолчанию '0'
int pos=90; //переменная для хранения позиции серво. По умолчанию 90 градусов- датчик будет смотреть вперёд
int flag=0; //полезный флаг для хранения состояния кнопки, когда кнопка отпущена
void setup()
{
myservo.attach(5); //Серво-пин соединён с пином 5
myservo.write(pos); // говорит сервоприводу идти на позицию в переменной 'pos'
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(motorA1,OUTPUT);
pinMode(motorA2,OUTPUT);
pinMode(motorB1,OUTPUT);
pinMode(motorB2,OUTPUT);
}
void loop()
{
//Проверка состояния кнопки
buttonState = digitalRead(button);
unsigned long currentMillis = millis(); //считаем...
//Меняет главную функцию (остановлен/двигается) когда кнопка нажата
if (buttonState == LOW) {//Если кнопка нажата единожды...
delay(500);
if ( flag == 0){
function = 1;
flag=1; //меняем переменную флага
}
else if ( flag == 1){ //Если кнопка нажата дважды
function = 0;
flag=0; //меняем переменную флага снова
}
}
if (function == 0){ //Если кнопка отжата или нажата дважды, то:
myservo.write(90); //установить для серво 90 градусов – датчик будет смотреть вперёд
stop(); //робот остаётся неподвижным
noTone(buzzer); //пищалка выключена
digitalWrite(led, HIGH);// и диод горит
}
else if (function == 1){//Если кнопка нажата, то:
//Считываем дистанцию...
distance = ultrasonic.Ranging(CM); //Совет: Используйте 'CM' для сантиметров и 'INC' для дюймов
//Проверяем на наличие объектов...
if (distance > 10){
forward(); //Всё чисто, двигаемся вперёд!
noTone(buzzer);
digitalWrite(led,LOW);
}
else if (distance
Нажав кнопку «Edit», вы можете редактировать скетч для своих нужд.
Например, изменив значение «10» измеряемого расстояния до препятствия в см, вы уменьшите или увеличите дистанцию, которую будет сканировать robot Arduino в поисках препятствия.
Если робот не двигается, может изменить контакты электромоторов (motorA1 и motorA2 или motorB1 и motorB2).
Шаг 7: Завершенный робот
Ваш самодельный робот, обходящий препятствия, на базе микроконтроллера Arduino готов.