domingo, 7 de julio de 2013

Oruga controlada por bluetooth-arduino modulo HC05 driver L293B

Oruga controlada por bluetooth-arduino modulo HC05 driver L293B 
Esta el primera parte de nuestro proyecto agrónica y agrorobótica, queremos implementar robots que apoyen los procesos agropecuarios, este es el primero de muchos de ellos. Pronto publicaremos más detalles de su construcción, aquí pueden encontrar el programa en arduino y en app inventor.



//Robot Oruga versión 1 30 de junio de 2013
//Modificación de este robot para que pueda ser controlado por bluetooth
//4 de julio de 2013
//Arduino uno
//Mis primeros pasos con arduino
//José Noé Sánchez S.
//Programa para controlar el giro de dos motores


int led = 13;  //led en pin 13 del arduino uno
int motor1pin1 = 8; //motor uno adelante, me falta verificar las conexiones, para saber si debo trocarlas
int motor1pin2 = 9; //motor uno atrás.

int motor2pin1 = 3; //motor dos adelante
int motor2pin2 = 4; //motor dos atras

int btdato;      // a variable to read incoming serial data into



void setup() {                
  Serial.begin(9600);
  // initialize the digital pin as an output.
  //inicializo el pin 13 para el led como salida
  pinMode(led, OUTPUT);     
  //inicializo el pin 3 para el motor 1 como salida
  pinMode(motor1pin1, OUTPUT);
  //inicializo el pin 4 para el motor 1 como salida
  pinMode(motor1pin2, OUTPUT);
  //inicializo el pin 8 para el motor 2 como salida
  pinMode(motor2pin1, OUTPUT);
  //inicializo el pin 9 para el motor 2 como salida
  pinMode(motor2pin2, OUTPUT);
  parar();
}

void loop() {
  
  if (Serial.available()>0) 
    {        
      parar();  
      btdato= Serial.read();  
    

     switch(btdato)  
     {  
        case 'P'
//comienza primero este caso, pues al hacer las pruebas siempre que se conectaba 
//arracancaba hacia adelante, y adelante 
//era el primer case que había colocado, por eso supongo que al colocar el primero 
//parar() la oruga se quedará quieta.
        {
          parar();
          digitalWrite(led, LOW);   // turn the LED OFF (LOW is the voltage level)
          break;
        }    
       case 'A':  
          {  
            adelante();
            digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
            break;  
          }  
        case 'R':  
          {  
            reversa();
            digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
            break;
          }
        case 'D':
        {
          derecha();
          digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
          break;
          }  
        case 'I':
        {
          izquierda();
          digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
          break;
        }
            
     } //cierra el switch 
    }// cierra el if
}//cierra void loop


//las siguientes son las funciones que le dirán al l293 como funcionar
 
void adelante() {
  //motor 1
  digitalWrite(motor1pin1,HIGH); //gira motor uno a la derecha, en este caso hacia adelante, recuerde configurar las conexiones para que coincida
  digitalWrite(motor1pin2,LOW);
  //motor 2
  digitalWrite(motor2pin1,HIGH); //girar motor dos a la derecha
  digitalWrite(motor2pin2,LOW);
}

void reversa(){
  //motor 1
  digitalWrite(motor1pin1,LOW); //gira motor uno a la izquierda, en este caso hacia atrás, recuerde configurar las conexiones para que coincida
  digitalWrite(motor1pin2,HIGH);
  //motor 2
  digitalWrite(motor2pin1,LOW); //girar motor dos a la izquierda
  digitalWrite(motor2pin2,HIGH);
}

void izquierda(){
  //motor 1
  digitalWrite(motor1pin1,HIGH); //gira motor a la derecha, hacia adelante
  digitalWrite(motor1pin2,LOW);
  //motor 2
  digitalWrite(motor2pin1,LOW); //girar motor dos a la izquierda, gira motor hacia atras.
  digitalWrite(motor2pin2,HIGH);
}

void derecha(){
  //motor 1
  digitalWrite(motor1pin1,LOW); //gira motor a la IZQUIERDA, hacia atrás
  digitalWrite(motor1pin2,HIGH);
  //motor 2
  digitalWrite(motor2pin1,HIGH); //girar motor dos a la derecha, gira motor hacia adelante.
  digitalWrite(motor2pin2,LOW);
}

void parar(){
  //todos a nivel alto
  //motor 1
  digitalWrite(motor1pin1,HIGH); 
  digitalWrite(motor1pin2,HIGH);
  //motor 2
  digitalWrite(motor2pin1,HIGH);
  digitalWrite(motor2pin2,HIGH);
}