Categories
Robotica con arduino

Como montar tu propio robot arduino – parte 2 – Programacion

En esta parte continuamos con el robot arduino con la parte de programación.

El código lo que hace básicamente es comprobar continuamente la distancia del sensor ultrasonidos y si encuentra una pared gira un poco y sigue hasta que vuelva ha encontrase con otro obstáculo.

A continuación tenemos el código de un robot que esquiva objetos

/*variables globales para el numero de los pines*/ 
//pines para el driver de motores
int in1=13;
int in2=12;
int in3=9;
int in4=8;
int enA=11;
int enB=10;


//pines para el sensor ultrasonidos
int pinTrig=3;
int pinEco=4;

//pin del boton de encendido/apagado
int pinBoton=2;

/*variables globales para el encendido/apagado*/
int previousBoton=0;
int botonState=0;
int robotEnabled=0;

/*variables globales para el sensor de ultrasonidos*/
long distancia;
long tiempo;
 
/*funcion setup del arduino*/
void setup(){
 //inicializacion de los pines del motor a salida
 pinMode(in1,OUTPUT);
 pinMode(in2,OUTPUT);
 pinMode(in3,OUTPUT);
 pinMode(in4,OUTPUT);
 pinMode(enA,OUTPUT);
 pinMode(enB,OUTPUT);

// pinMode(13,OUTPUT);

//pines del sensor ultrasonidos 
pinMode(pinTrig,OUTPUT); 
 pinMode(pinEco,INPUT);
 
//pin del boton de encendido/apagado 
 pinMode(pinBoton,INPUT);
 
//con esto paramos los motores
 digitalWrite(in1,HIGH);
 digitalWrite(in2,HIGH);
 digitalWrite(in3,HIGH);
 digitalWrite(in4,HIGH);

// digitalWrite(13,LOW);

Serial.begin(9600);//el monitor de serie no es necesario


}

/*funcion loop del arduino*/
void loop(){
 //leemos el estado del boton de encendido y apagado 
 botonState=digitalRead(pinBoton);
 
//esto hace una lectura del sensor ultrasonidos y siempre es igual
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);

Serial.println(distancia);//imprime la distancia medida por el sensor de ultrasonidos 

if(botonState != previousBoton){ //si ha cambiado el boton de encendido/apagado o apagado/encendido 
 if(botonState==HIGH){ //si el boton esta pulsado
 robotEnabled=!robotEnabled; // cambiar a apagado si estaba encendido o a encendido si estaba apagado
 if(robotEnabled==true){ //aqui puedes hacer algo cuando enciendas el robot como una melodia
 tone(6,420);
 delay(200);
 noTone(6);
 delay(50);
 tone(6,420);
 delay(200);
 noTone(6);
 delay(50);
 tone(6,420);
 delay(200);
 noTone(6);
 }
 }
 }

if(robotEnabled){//a partir de aqui va el codigo importante que es cuando esta encendido
 
 
 if(distancia>30){ // si no detecta nada seguir
 analogWrite(enA,255);
 analogWrite(enB,240);
 _mright(in1,in2);
 _mright(in3,in4);
 // digitalWrite(13,HIGH);
 }
 else{//si detecta un objeto a menos de 30 dar la vuelta
 // digitalWrite(13,HIGH);
 _mright(in1,in2);
 _mleft(in3,in4);
 
 delay(800) ; 
 }

}else{//si el robot esta apagado parar los motores
 digitalWrite(13,LOW);
 _mstop(in1,in2);
 _mstop(in3,in4); 
 }

previousBoton=botonState; //esto es para saber si esta apagado o encendido
}

/*funciones para el manejo de los motores
//(motor left no mueve el robot a la izquierda, 
//para eso habria que mover dos motores, 
//solo un motor en sentido no horario)*/
void _mleft(int pin1,int pin2){ //activar un motor sentido no horario
 digitalWrite(pin1,HIGH);
 digitalWrite(pin2,LOW);
}
void _mright(int pin1,int pin2){ //activar un motor sentido horario
 digitalWrite(pin1,LOW);
 digitalWrite(pin2,HIGH);
}
void _mstop(int pin1,int pin2){ //parar un motor
 digitalWrite(pin1,HIGH);
 digitalWrite(pin2,HIGH);
}

si te perdiste la parte del montaje ver aquí

Leave a Reply

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