Как сделать робота на Ардуино своими руками: самодельный robot Arduino в домашних условиях

В сегодняшней статье я расскажу вам, как сделать робота, обходящего препятствия, на базе микроконтроллера Ардуино своими руками.

Чтобы сделать робота в домашних условиях вам понадобится собственно сама плата микроконтроллера и ультразвуковой сенсор. Если сенсор зафиксирует препятствие, сервопривод позволит ему обогнуть препятствие. Сканируя пространство справа и слева, робот выберет наиболее предпочтительный путь для обхода препятствия.

У робота есть индикаторный диод, зуммер, сигнализирующий об обнаружении препятствия, и функциональная кнопка.
Самодельный робот очень простой в исполнении.

Шаг 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 <=10){
			stop(); //Обнаружен объект! Останавливаемся и проверяем слева и справа лучший способ обхода!
			tone(buzzer,500); // издаём звук
			digitalWrite(led,HIGH); // включаем светодиод
			//Начинаем сканировать... 
			for(pos = 0; pos =0; pos-=1){     //идём от 180 градусов к 0                           
                myservo.write(pos);             // говорим серво пройти на позицию в переменной 'pos' 
                delay(10);                      // ждём 10 мс, пока сервопривод достигнет нужной позиции
            }
            
            checkRight= ultrasonic.Ranging(CM);
            
            myservo.write(90);                   // Датчик снова смотрит вперёд
            
            //Принимаем решение – двигаться влево или вправо?
            if (checkLeft  checkRight){
            	right();
            	delay(400); // задержка, меняем значение при необходимости, чтобы заставить робота повернуться.
            }
            else if (checkLeft <=10 && checkRight <=10){
            	backward(); //Дорога перекрыта... возвращаемся и идём налево;)
            	left();
            }
		}
	}

}


void forward(){
	digitalWrite(motorA1, HIGH);
	digitalWrite(motorA2, LOW);
	digitalWrite(motorB1, HIGH);
	digitalWrite(motorB2, LOW);	
}

void backward(){
	digitalWrite(motorA1, LOW);
	digitalWrite(motorA2, HIGH);
	digitalWrite(motorB1, LOW);
	digitalWrite(motorB2, HIGH);
}

void left(){
	digitalWrite(motorA1, HIGH);
	digitalWrite(motorA2, LOW);
	digitalWrite(motorB1, LOW);
	digitalWrite(motorB2, HIGH);
}

void right(){
	digitalWrite(motorA1, LOW);
	digitalWrite(motorA2, HIGH);
	digitalWrite(motorB1, HIGH);
	digitalWrite(motorB2, LOW);	
}

void stop(){
	digitalWrite(motorA1, LOW);
	digitalWrite(motorA2, LOW);
	digitalWrite(motorB1, LOW);
	digitalWrite(motorB2, LOW);
}

Нажав кнопку «Edit», вы можете редактировать скетч для своих нужд.

Например, изменив значение «10» измеряемого расстояния до препятствия в см, вы уменьшите или увеличите дистанцию, которую будет сканировать robot Arduino в поисках препятствия.

Если робот не двигается, может изменить контакты электромоторов (motorA1 и motorA2 или motorB1 и motorB2).

Шаг 7: Завершенный робот

Ваш самодельный робот, обходящий препятствия, на базе микроконтроллера Arduino готов.

Встретят как старого лучшего друга, проверенные индивидуалки Химок, приятное время провождение гарантировано. На самом деле, это еще далеко не все причины, по которым стоит хотя бы один раз побывать в гостях у проститутки. Очаровательные проверенные индивидуалки Химок, восхитительные и горячие, они такие заботливые и стройные, что мужчины тают под их чарами. Прелестницы ждут тебя.

Игорь Самоделов
Игорь Самоделов

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *