Está en la página 1de 14

https://www.google.com.co/url?

sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0ahUKEwiGtIHWhODSAhXMTS
YKHV9LBEoQFgg2MAQ&url=http%3A%2F%2Flearn.teslabem.com%2Fcomo-armar-un-sumobot
%2F&usg=AFQjCNFLqYLwzrLPiOTAfxyJh_SKVJU4_A

zumo

// Conexiones
int pwma = 3;
int pwmb = 5;
int ai1 = 2;
int ai2 = 4;
int bi1 = 6;
int bi2 = 7;
int LED = 13;
 
// Variables
int lectura_linea_derecha = 0;
int lectura_linea_izquierda = 0;
int lectura_distancia_derecha = 0;
int lectura_distancia_izquierda = 0;
 
// Inicialización
void setup() {
  pinMode(pwma,OUTPUT);
  pinMode(pwmb,OUTPUT);
  pinMode(ai1,OUTPUT);
  pinMode(ai2,OUTPUT);
  pinMode(bi1,OUTPUT);
  pinMode(bi2,OUTPUT);
  analogWrite(pwma,100);
  analogWrite(pwmb,100);
}
 
// Rutina
void loop() {
  lectura_linea_izquierda = analogRead(A0); // Lectura del sensor de
línea izquierdo
  lectura_linea_derecha = analogRead(A1); // Lectura del sensor de línea
derecho
  lectura_distancia_izquierda = analogRead(A2); // Lectura de sensor de
distancia izquierdo
  lectura_distancia_derecha = analogRead(A3); // Lectura de sensor de
distancia derecho
 
  // ¡Detección de línea por el lado izquierdo!
  if(lectura_linea_izquierda < 30){
    reversa();
    delay(500);
    derecha();
    delay(100);
    adelante();
  }
 
  // ¡Detección de línea por el lado derecho!
  if(lectura_linea_derecha < 30){
    reversa();
    delay(500);
    izquierda();
    delay(100);
    adelante();
  }
 
  // ¡Detección de objeto por el lado izquierdo!
  if(lectura_distancia_izquierda > 200){
    izquierda();
    delay(1000);
    adelante();
  }
 
  // ¡Detección de objeto por el lado derecho!
  if(lectura_distancia_derecha > 200){
    derecha();
    delay(1000);
    adelante();
  }
}
 
void adelante(){
  digitalWrite(ai1,HIGH);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,HIGH);
  digitalWrite(bi2,LOW);
}
 
void derecha(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,HIGH);
  digitalWrite(bi1,HIGH);
  digitalWrite(bi2,LOW);
}
 
void izquierda(){
  digitalWrite(ai1,HIGH);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,HIGH);
}
 
void reversa(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,HIGH);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,HIGH);
}
 
void detener(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,LOW);
}
/*Sumobot sobre suelo blanco y círculo negro
el valor de color negro en los sensores infrarrojos
es de 480 .Se usó la comunicación serial para obtener estos valores.
*/
//Declaración de los pines
int IN1 = 5;    // Input1 conectada al pin 5
int IN2 = 6;    // Input2 conectada al pin 6 MOTOR DERECHO
int ENA = 10;    // ENB conectada al pin 12 de Arduino

int IN4 = 3;    // Input3 conectada al pin 3


int IN3 = 4;    // Input4 conectada al pin 4 MOTOR IZQUIERDO
int ENB = 11;    // ENB conectada al pin 11 de Arduino

int sensFs = 7; //sensor frontal delantero salida del pulso trig 


int sensFe = 8; //sensor frontal delantero entrada del pulso

int sensTs = 9; // sensor trasero salida del pulso trig 


int sensTe = 12; //sensor trasero entrada del pulso

int sensDeli = 0; //sensor IR delantero


int sensDeld = 2; //sensor IR delantero

int sensTrasi = 1; //sensor IR trasero


int sensTrasd = 13; //sensor IR trasero

long distancia;
long tiempo;

//Declaración de I/O's
void setup()
{

pinMode (IN1, OUTPUT);


pinMode (IN2, OUTPUT); //Motor derecho
pinMode (ENA, OUTPUT); 
pinMode (IN3, OUTPUT); 
pinMode (IN4, OUTPUT); //Motor izquierdo
pinMode (ENB, OUTPUT); 

pinMode (sensFs, OUTPUT);  /*activación del pin 7 como salida: para el pulso ultrasónico*/
pinMode (sensFe, INPUT);   /*activación del pin 8 como entrada: tiempo del rebote del
ultrasonido*/

pinMode (sensTs, OUTPUT);  /*activación del pin 9 como salida: para el pulso ultrasónico*/
pinMode (sensTe, INPUT);   /*activación del pin 10 como entrada: tiempo del rebote del
ultrasonido*/

pinMode (sensDeli, INPUT);  /*activación del pin 0 como salida*/


pinMode (sensDeld, INPUT);  /*activación del pin 2 como salida*/

pinMode (sensTrasi, INPUT); /*activación del pin 1 como salida*/


pinMode (sensTrasd, INPUT); /*activación del pin 13 como salida*/

void loop()
{

   // lectura del pin 0


 int buttonStateDi = digitalRead(sensDeli);
 
 // imprision del resultado
 Serial.println(buttonStateDi);
 delay(100);        // delay in between reads for stability
 
 if(buttonStateDi=0){
  
   blancodelanteizq();
  
}/*
else
{
 Buscar();
}*/

   // lectura del pin 0


 int buttonStateDd = digitalRead(sensDeld);
 
 // imprision del resultado
 Serial.println(buttonStateDd);
 delay(100);        // delay in between reads for stability
 
 if(buttonStateDd=0){
  
 blancodelanteder();
  
}/*
else
{
 Buscar();
}*/

{
   // lectura del pin 1
 int buttonStateTi = digitalRead(sensTrasi);
 
 // imprision del resultado
 Serial.println(buttonStateTi);
 delay(100);        // delay in between reads for stability
 
 if(buttonStateTi=1){
  
  blancoatrasizquierda();
  
}/*
else

{
 
Buscar();

}*/

{
   // lectura del pin 1
 int buttonStateTd = digitalRead(sensTrasd);
 
 // imprision del resultado
 Serial.println(buttonStateTd);
 delay(100);        // delay in between reads for stability
 
 if(buttonStateTd=1){
  
  blancoatrasderecha();
  
}/*
else

{
 
Buscar();

}*/

//----------- ACCIONES IMPACTO-------------

digitalWrite(sensFs,LOW); /* Por cuestión de estabilización del sensor*/


 delayMicroseconds(5);
 digitalWrite(sensFs, HIGH); /* envío del pulso ultrasónico trig*/
 delayMicroseconds(10);
 tiempo=pulseIn(sensFe, 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); /*fórmula para calcular la distancia obteniendo un valor entero*/
 /*Monitorización en centímetros por el monitor serial*/
 Serial.println("Distancia ");
 Serial.println(distancia);
 Serial.println(" cm");
 delay(100);
 
if(distancia< 25)
{
golpeFder(); 
}
else 
{
Buscar();
}

digitalWrite(sensTs,LOW); /* Por cuestión de estabilización del sensor*/


 delayMicroseconds(5);
 digitalWrite(sensTs, HIGH); /* envío del pulso ultrasónico trig*/
 delayMicroseconds(10);
 tiempo=pulseIn(sensTe, 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); /*fórmula para calcular la distancia obteniendo un valor entero*/
 /*Monitorización en centímetros por el monitor serial*/
 Serial.println("Distancia ");
 Serial.println(distancia);
 Serial.println(" cm");
 delay(1000);
 
 if(distancia< 25) 
 {
golpeTder(); 
 }/*
else 
{
Buscar();
}*/

/*
if(digitalRead (sensFizq)==HIGH)
{
golpeFizq(); 
}
else 
{
Buscar();
}
*/

/*
if(digitalRead (sensFizq)==HIGH)
{
golpeTizq();

else 
{
Buscar();
}
*/

}
}
}

//---------------MOVIMIENTOS--------------
int adelante () {
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW); //motor izquierdo
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
/*analogWrite(ENB,70);
 delay(2);
 analogWrite(ENB,120);
 delay(2);*/
 analogWrite(ENB,160);
 /*delay(2);
 analogWrite(ENB,255);
 delay(2000);*/

 digitalWrite (IN1, HIGH);


 digitalWrite (IN2, LOW); //motor derecho
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENA,70);
 delay(2);
 analogWrite(ENA,120);
 delay(2);*/
 analogWrite(ENA,160);
 /*delay(2);
 analogWrite(ENA,255);
 delay(2000);*/
 }

int atras()
{
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH); //motor izquierdo
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENB,70);
 delay(2);
 analogWrite(ENB,120);
 delay(2);*/
 analogWrite(ENB,160);
 /*delay(2);
 analogWrite(ENB,255);
 delay(2000);*/

 /*digitalWrite (IN1, LOW);


 digitalWrite (IN2, HIGH); //motor derecho
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
  analogWrite(ENA,70);
 delay(2);
 analogWrite(ENA,120);
 delay(2);*/
 analogWrite(ENA,160);
 /*delay(2);
 analogWrite(ENA,255);
 delay(2000);*/
}

int izquierda()
{

delay(100);
 digitalWrite (IN3, LOW);
 digitalWrite (IN4, HIGH); //motor izquierdo
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENB,70);
 delay(2);
 analogWrite(ENB,120);
 delay(2);*/
 analogWrite(ENB,100);
 /*delay(2);
 analogWrite(ENB,255);
 delay(2000);*/

 digitalWrite (IN1, HIGH);


 digitalWrite (IN2, LOW); //motor derecho
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENA,70);
 delay(2);
 analogWrite(ENA,120);
 delay(2);*/
 analogWrite(ENA,100);
 /*delay(2);
 analogWrite(ENA,255);
 delay(2000);*/
}
int derecha()
{
 digitalWrite (IN3, HIGH);
 digitalWrite (IN4, LOW); //motor izquierdo
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENB,70);
 delay(2);
 analogWrite(ENB,120);
 delay(2);*/
 analogWrite(ENB,100);
 /*delay(2);
 analogWrite(ENB,255);
 delay(2000);*/

 digitalWrite (IN1, LOW);


 digitalWrite (IN2, HIGH); //motor derecho
 // Aplicamos PWM al pin ENB, haciendo girar el motor, cada 0.2 seg aumenta la velocidad
 /*analogWrite(ENA,70);
 delay(2);
 analogWrite(ENA,120);
 delay(2);*/
 analogWrite(ENA,100);
 /*delay(2);
 analogWrite(ENA,255);
 delay(2000);*/
}

Francesc



 Newbie
 Posts: 2
 Karma: 0  [add]

Re: Robot de lucha (sumo)


#1

May 27, 2015, 12:30 pm 


La programación continua aquí:

//--------------GOLPES-------------------

int Buscar()
{
izquierda();
delay(2000);
adelante();
delay(2000);
}

int golpeFder()
{
adelante();
delay(2000);
/*adelante();
delay(2000);
atras();
delay(2000);*/

}
/*
int golpeFizq()
{
atras();
delay(1000) ;
izquierda();
delay(300);
adelante();
}*/

int golpeTder()
{
atras();
delay(2000);
/*atras();
delay(2000);
adelante();
delay(2000);*/
}

/*
int golpeTizq()
{
adelante();
delay(1000);
derecha();
delay(300);
atras();
}*/

int blancodelanteizq()
{
atras();
delay(1000);
derecha();
delay(2000);
adelante();
delay(1000);
}

int blancodelanteder()
{
atras();
delay(1000);
izquierda();
delay(2000);
adelante();
delay(1000);
}

int blancoatrasizquierda()
{
adelante();
delay(1000);
derecha();
delay(2000);
adelante();
delay(1000);
}

int blancoatrasderecha()
{
adelante();
delay(1000);
izquierda();
delay(2000);
adelante();
delay(1000);
}

También podría gustarte