lunes, 4 de junio de 2018

LABORATORIO 16


                           CARRO CON ARDUINO


OBJETIVOS

  • El objetivo de este proyecto basado en arduino es implementar códigos de cada sensor y así poder obtener  un carro manejado por arduino y hacer optimo su funcionamiento.
  • emplear todos los conocimientos adquiridos dentro de los laboratorios y de los curzos de cursera.


TEORÍA DE MATERIALES UTILIZADOS

• ARDUINO UNO
• PUENTE H
• SENSOR ULTRASONICO HC_SR04
• BLUETOOH
• SERVOBO MOTOR DE 300RPM
• WHEELS
CABLES DE CONEXION
4 MOTORES PEQUEÑOS CON REDUCTOR
• 2 BATERIAS DE 9 V

EVIDENCIA DE LOS LABORATORIOS ANTERIORES



SENSOR ULTRASONICO HC_SR04"LAB 13"

CARACTERISTICAS DE UN SENSOR ULTRASONICO HC_SR04


  • Alimentación de 5 volts.
  • Interfaz de cuatro hilos (vcc, trigger, echo, GND).
  • Rango de medición: 2 cm a 400cm.
  • Corriente de alimentación: 1.5mA.
  • Frecuencia de pulso: 40Khz.
  • Apertura del pulso ultrasónico: 15°.
  • Señal de disparo: 10us.
  • Dimensiones del módulo: 45x20x15mm.
DIAGRAMA ESQUEMÁTICO  SENSOR DE DISTANCIA  ARDUINO



CÓDIGO DEL SENSOR DE DISTANCIA
long dis;
long tiem;
int led1 = 11;
void setup( ){
Serial.begin(9600);
pinMode(10, OUTPUT); //salida del pulso generado por el sensor ultrasónico
pinMode(9, INPUT);//entrada del pulso generado por el sensor ultrasónico
pinMode(11, INPUT);//alarma de la distancia(encenderá el led)
}
void loop(){
digitalWrite(10,LOW);//recibimiento del pulso.
delayMicroseconds(5);
digitalWrite(10, HIGH);//envió del pulso.
delayMicroseconds(10);
tiem=pulseIn(9, HIGH);//fórmula para medir el pulso entrante.
dis= long(0.017*tiem);//fórmula para calcular la distancia del sensor ultrasónico.
if(dis>10){ //comparativo para la alarma se ingresa la distancia en la que encenderá o apagara.
digitalWrite(11, HIGH);
}
else
{
digitalWrite(11,LOW);
}
Serial.println("LA DISTANCIA MEDIDA ES:");
Serial.println(dis);
Serial.println("cm");
delay(500);
}




DIRECCIONALES DEL CARRO CON EL PROGRAMA APP INVENTOR"LAB 14"





CARRO CON 3 RUEDAS(RUEDA LOCA)"LAB 15"





PROGRAMA ARDUINO


/* Arduino Control Car V2  By: El Profe Garcia
 ARDUINO   L293D(Puente H)        
 5          10
 6          15
 9          7
 10         2
 5V         1, 9, 16
 GND        4, 5, 12, 13

 El motor 1 se conecta a los pines 3 y 6 del Puente H
 El motor 2 se conecta a los pines 11 y 14 del Puente H

 La fuente de alimentacion de los Motores se conecta a tierra y
 el positivo al pin 8 del puennte H. 

 Conexion del Modulo Bluetooth HC-06 y el Arduino
 ARDUINO    Bluetooth HC-06 
 0 (RX)       TX
 1 (TX)       RX
 5V           VCC
 GND          GND
 !!Cuidado!! Las conexiones de TX y RX al modulo Bluetooth deben estar desconectadas
 en el momento que se realiza la carga del codigo (Sketch) al Arduino.

 Conexion Sensor Ultrasonido HC-SR04
 ARDUINO    Ultrasonido HC-SR04 
 2            Echo
 3            Trig
 5V           VCC
 GND          Gnd

 Conexion Servo SG90
 ARDUINO    Ultrasonido HC-SR04 
 11           Signal
 5V           VCC
 GND          Gnd
 */

#include <Servo.h>                // Incluye la libreria Servo
Servo servo1;                    // Crea el objeto servo1 con las caracteristicas de Servo

int izqA = 5; 
int izqB = 6; 
int derA = 9; 
int derB = 10; 
int vel = 255;            // Velocidad de los motores (0-255)
int estado = 'c';         // inicia detenido

int pecho = 2;            // define el pin 2 como (pecho) para el Ultrasonido
int ptrig = 3;            // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia;  // para Calcular distacia

void setup()  { 
  Serial.begin(9600);    // inicia el puerto serial para comunicacion con el Bluetooth
  pinMode(derA, OUTPUT);
  pinMode(derB, OUTPUT);
  pinMode(izqA, OUTPUT);
  pinMode(izqB, OUTPUT);
  
  pinMode(pecho, INPUT);   // define el pin 2 como entrada (pecho) 
  pinMode(ptrig,OUTPUT);   // define el pin 3 como salida  (ptrig) 
  pinMode(13,OUTPUT);

  servo1.attach(11,660,1400);    // Asocia el servo1 al pin 11, define el min y max del ancho del pulso  
                                 // eso depende del fabricante del servo

void loop()  { 

  if(Serial.available()>0){        // lee el bluetooth y almacena en estado
    estado = Serial.read();
  }
  if(estado=='a'){           // Boton desplazar al Frente
    analogWrite(derB, 0);     
    analogWrite(izqB, 0); 
    analogWrite(derA, vel);  
    analogWrite(izqA, vel);       
  }
  if(estado=='b'){          // Boton IZQ 
    analogWrite(derB, 0);     
    analogWrite(izqB, 0); 
    analogWrite(derA, 0);  
    analogWrite(izqA, vel);      
  }
  if(estado=='c'){         // Boton Parar
    analogWrite(derB, 0);     
    analogWrite(izqB, 0); 
    analogWrite(derA, 0);    
    analogWrite(izqA, 0); 
  }
  if(estado=='d'){          // Boton DER
    analogWrite(derB, 0);     
    analogWrite(izqB, 0);
    analogWrite(izqA, 0);
    analogWrite(derA, vel);  
  } 

  if(estado=='e'){          // Boton Reversa
    analogWrite(derA, 0);    
    analogWrite(izqA, 0);
    analogWrite(derB, vel);  
    analogWrite(izqB, vel);      
  }
  
  if (estado =='f'){               // Boton ON,  se mueve sensando distancia 
  
     digitalWrite(ptrig, HIGH);   // genera el pulso de trigger por 10us
     delay(0.01);
     digitalWrite(ptrig, LOW);
     
     duracion = pulseIn(pecho, HIGH);          // Lee el tiempo del Echo
     distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
     delay(10); 
     
     if (distancia <= 15 && distancia >=2){    // si la distancia es menor de 15cm
        digitalWrite(13,HIGH);                 // Enciende LED
        
        analogWrite(derB, 0);             // Parar los motores por 200 mili segundos
        analogWrite(izqB, 0); 
        analogWrite(derA, 0);    
        analogWrite(izqA, 0); 
        delay (200);
        
        analogWrite(derB, vel);          // Reversa durante 500 mili segundos
        analogWrite(izqB, vel); 
        delay(500);           
        
        analogWrite(derB, 0);            // Girar durante 1100 milisegundos   
        analogWrite(izqB, 0); 
        analogWrite(derA, 0);  
        analogWrite(izqA, vel);  
        delay(600);
        
        digitalWrite(13,LOW);
     }
     else{                             // Si no hay obstaculos se desplaza al frente  
         analogWrite(derB, 0);     
         analogWrite(izqB, 0); 
         analogWrite(derA, vel);  
         analogWrite(izqA, vel); 
     }
  }
  if(estado=='g'){                   // Boton SER, activa el Servomotor
    servo1.write(30);                // Gira el servo a 30 grados  
    delay(1000);                     // Espera 1000 mili segundos a que el servo llegue a la posicion

    servo1.write(90);                // Gira el servo a 90 grados  
    delay(700);                      // Espera 700 mili segundos a que el servo llegue a la posicion 

    servo1.write(150);               //Gira el servo a 150 grados 
    delay(700);  
  }

    if(estado=='h'){                 //Programacion de los botones 13-10-9-6-5
    digitalWrite(13,1);        
  }
      if(estado=='m'){           
    digitalWrite(13,0);        
  }
    if(estado=='i'){           
    digitalWrite(derB,1);        
  }
    if(estado=='n'){           
    digitalWrite(derB,0);        
  }
    if(estado=='j'){           
    digitalWrite(derA,1);        
  }
    if(estado=='o'){           
    digitalWrite(derA,0);        
  }
    if(estado=='k'){           
    digitalWrite(izqB,1);        
  }
    if(estado=='p'){           
    digitalWrite(izqB,0);        
  }
    if(estado=='l'){           
    digitalWrite(izqA,1);        
  }
    if(estado=='q'){           
    digitalWrite(izqA,0);        
  }
  
}

VÍDEO FINAL DEL PROYECTO



OBSERVACIONES Y CONCLUSIONES
OBSERVACIONES
  1. Nos dimos cuenta de si un cable esta  mal ubicado conectado fuera de lugar en nuestro protoboard no funciona, en cambio   conectado a 5 voltios si funcionaba con la ayuda de una batería de 9 V conectado al servomotor.
  2. Se vio que con una programación adecuada no hay problema en que los motores se muevan y el servomotor actue 

CONCLUSIONES

  1.  Se experimento con  este proyecto basado en arduino ademas de  implementar códigos de cada sensor y así poder obtener  un carro manejado por arduino y hacer optimo su funcionamiento.
  2. Empleamos todos nuestros  conocimientos adquiridos dentro de los laboratorios y de los curzos de cursera.

FOTO GRUPAL
´