Introducción: ‘Oort’, el robot que evita obstáculos

Este es un robot que usa el telémetro ultrasónico para trazar y encontrar obstáculos y moverse alrededor de ellos. Es uno de los robots más prácticos que pueden construir los jóvenes fabricantes y aficionados.

Paso 1: BoM

* Arduino

* L293D IC

* Sensor ultrasónico

* Servo motor

* Motor

* Ruedas

* Alambres

* Tablero de pruebas

* Tablero de espuma

Paso 2: hacer chasis

* Corta una tabla de espuma del tamaño del robot que te guste (pero no demasiado pequeña para que el Arduino y la placa de pruebas no quepan)

* Pegue los dos motores a las esquinas traseras del marco.

* Pegue una rueda giratoria al frente.

* Encaja perfectamente en las dos ruedas de los motores de CC

Paso 3: cableado

  1. Conecte el primer motor a los pines 3 y 6. Y conecte el segundo motor a los pines 11 y 14.
  2. Conecte los pines 2, 7, 10 y 15 a los pines 3, 5, 6 y 9 en la placa Arduino.
  3. Conecte los pines 4, 5, 12 y 13 todos a una tierra común al riel azul de la placa de pruebas. Luego, conecte el riel rojo a 5V y el riel azul a GND en el Arduino con cables de puente.
  4. `Conecte los pines 1, 8, 9 y 16 a una fuente de voltaje común, VCC, en el riel de alimentación rojo de la placa de pruebas.

Paso 4: Monte el sensor ultrasónico

* Pegue el sensor ultrasónico en la bocina del servo

* Monte el servo en la parte delantera del robot.

Paso 5:

#include  
#include "Ultrasonic.h"
//Constants
const int button = 2;		  //Button pin to pin 2
const int led 	 = 3;		  //Led pin (throught resistor) to pin 3
const int buzzer = 4;		  //Buzzer pin to pin 4
const int motorA1= 6;		  //motor A positive (+) pin to pin 6 (PWM) (from L298 module!)
const int motorA2= 9;         //motor A negative (-) pin to pin 9 (PWM)
const int motorB1=10;		  //motor B positive (+) pin to pin 10 (PWM)
const int motorB2=11;		  //motor B negative (-) pin to pin 11 (PWM)
Ultrasonic ultrasonic(A4 ,A5); //Create Ultrsonic object ultrasonic(trig pin,echo pin)
Servo myservo;  			  //Create Servo object to control a servo
//Variables
int distance;				  //Variable to store distance from an object
int checkRight;
int checkLeft;
int function=0;				  //Variable to store function of robot: '1' running or '0' stoped. By default is stoped
int buttonState=0;            //Variable to store the state of the button. By default '0'
int pos=90;    				  //Variable to store the servo position. By default 90 degrees - sensor will 'look' forward
int flag=0;					  //Useful flag to keep the button state when button is released 
void setup()
{
    myservo.attach(5);  	  //Servo pin connected to pin 5
    myservo.write(pos);        // tell servo to go to position in variable '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()
{
	//Check button state
	buttonState = digitalRead(button);
	unsigned long currentMillis = millis(); //counting...
	//Change main function (stoped/running) when button is pressed 
  	if (buttonState == LOW) {//If button is pressed once...
  		delay(500);
    	if ( flag == 0){
      		function = 1;
        	flag=1; //change flag variable
    	}
    	else if ( flag == 1){	 //If button is pressed twice
    		function = 0;
	    	flag=0; //change flag variable again 
    	}    
  	}
  	
	if (function == 0){ 	//If button is unpressed or pressed twice then:
		myservo.write(90);  	//set servo 90 degress - sensor will look forward
		stop();					//robot remain stoped
		noTone(buzzer);			//buzzer off
		digitalWrite(led, HIGH);// and led on
		
	}
	else if (function == 1){//If button is pressed then:
		//Read distance...
		distance = ultrasonic.Ranging(CM); //Tip: Use 'CM' for centimeters or 'INC' for inches
		//Check for objects...
		if (distance > 10){
			forward(); //All clear, move forward!
			noTone(buzzer);
			digitalWrite(led,LOW);
		}
		else if (distance <=10){
			stop(); //Object detected! Stop the robot and check left and right for the better way out!
			tone(buzzer,500); // play a tone
			digitalWrite(led,HIGH); // turn the led on
			//Start scanning... 
			for(pos = 0; pos < 180; pos += 1){  //goes from 0 degrees to 180 degrees 
                myservo.write(pos);             //tell servo to go to position in variable 'pos' 
                delay(10);                      //waits 10ms for the servo to reach the position 
            } 
            
            checkLeft = ultrasonic.Ranging(CM);		//Take distance from the left side
            
            for(pos = 180; pos>=0; pos-=1){     //goes from 180 degrees to 0 degrees                           
                myservo.write(pos);             //tell servo to go to position in variable 'pos' 
                delay(10);                      //waits 10ms for the servo to reach the position   
            }
            
            checkRight= ultrasonic.Ranging(CM);
            
            myservo.write(90);                   // Sensor "look" forward again
            
            //Finally, take the right decision, turn left or right?
            if (checkLeft < checkRight){
            	left();
            	delay(400); // delay, change value if necessary to make robot turn.            
            	}
            else if (checkLeft > checkRight){
            	right();
            	delay(400); // delay, change value if necessary to make robot turn.
            }
            else if (checkLeft <=10 && checkRight <=10){
            	backward(); //The road is closed... go back and then left ;)
            	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);
}
Concurso Makerspace 2017

Participo en el
Concurso Makerspace 2017

Sé el primero en compartir

    Comentarios