Categories
Robotica con arduino

Como hacer un un robot sigue-paredes – parte 1

En esta ocasión vamos a programar nuestro robot para que siga las paredes.

Para el montaje de nuestro robot necesitamos que el sensor de ultrasonidos esté fijo apuntando hacia el lado de la pared que queramos que siga. Si tuviéramos tres sensores iguales podríamos comprobar los lados y en frente, pero lo vamos a hacer con uno sólo.

La programación lo que hace es regular la velocidad de cada rueda para que siga la pared acercándose y alejándose

Código para el robot arduino 



#include <Servo.h>

 int in1=13;
 int in2=12;
 int in3=9;
 int in4=8;
 int enA=11;
 int enB=5;

int pinTrig=3;
 int pinEco=4;

int pinServo=6;

int pinBoton=2;
 int previousBoton=0;
 int botonState=0;
 int robotEnabled=0;

long distancia;
 long tiempo;

Servo myServo;

int limit=50;

unsigned long previousTime=0;

//int notes[]={262,294,330,349};

void setup(){
 pinMode(in1,OUTPUT);
 pinMode(in2,OUTPUT);
 pinMode(in3,OUTPUT);
 pinMode(in4,OUTPUT);

// pinMode(13,OUTPUT);

pinMode(pinTrig,OUTPUT);
 pinMode(pinEco,INPUT);

pinMode(pinBoton,INPUT);

digitalWrite(in1,HIGH);
 digitalWrite(in2,HIGH);
 digitalWrite(in3,HIGH);
 digitalWrite(in4,HIGH);

//digitalWrite(13,LOW);

//Prueba servo
 myServo.attach(pinServo);


 
 }
 int left=0,front=0;
 int leftd,rightd; // to store distances towards left and right
 int dist() // to find the distance via the ultrasonic sensor
 {
 // long duration, distance;
 digitalWrite(pinTrig,LOW);// Por cuestión de estabilización del sensor
 delayMicroseconds(5);
 digitalWrite(pinTrig, HIGH); //envío del pulso ultrasónico
 delayMicroseconds(10);
 tiempo=pulseIn(pinEco, HIGH); // Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío   del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que   deja de hacerlo, LOW, la longitud del pulso entrante
 distancia=int(0.017*tiempo);


 return distancia;
 }
 int turn;
 
 void loop(){
 unsigned long currentTime= millis();
 botonState=digitalRead(pinBoton);



if(botonState != previousBoton){
 if(botonState==HIGH){
 robotEnabled=!robotEnabled;
 myServo.write(30);
 delay(300);
 
 }
 }
 if(robotEnabled){

left=dist();

if(left>30 && left<35) {
 analogWrite(enA,255);
 analogWrite(enB,247);
 _mright(in1,in2);
 _mright(in3,in4);
 }
 else if(left<30){
 //turn right
 analogWrite(enA,135);
 analogWrite(enB,255);
 _mright(in1,in2);
 _mright(in3,in4);
 }
 else if(left>35){
 //turn left
 analogWrite(enA,255);
 analogWrite(enB,135);
 _mright(in1,in2);
 _mright(in3,in4);
 }

}

else{
 //digitalWrite(13,LOW);
 _mstop(in1,in2);
 _mstop(in3,in4);
 }

previousBoton=botonState;
 }
 void _mleft(int pin1,int pin2){
 digitalWrite(pin1,HIGH);
 digitalWrite(pin2,LOW);
 }
 void _mright(int pin1,int pin2){
 digitalWrite(pin1,LOW);
 digitalWrite(pin2,HIGH);
 }
 void _mstop(int pin1,int pin2){
 digitalWrite(pin1,HIGH);
 digitalWrite(pin2,HIGH);
 }

Ver montaje del robot

Ver programación robot esquiva obstaculos

Leave a Reply

Your email address will not be published. Required fields are marked *