viernes, 8 de noviembre de 2013

CONTROL DE MOTORES USANDO EL ULTRASONIDO HC SR04

Hola a todos, en esta ocasión haré un pequeño tutorial sobre como usar el ultrasonido HC SR04 con un Arduino, y también haremos una aplicación controlando unos motores DC.
Bueno lo primero que vamos hacer es conocer un poco del sensor HC SR04, el cual posee cuatro pines (Vcc, Trigger, Echo, GND)
HCSR041RANGOTRAS
Ahora veremos el código en Arduino y un pequeño video de la demostración:

 ARDUINO  Colocamos Trigger(disparo) al pin 50 del Arduino y Echo al pin 52, una vez echo esto se declara dos variables del tipo float (distancia y tiempo) que nos ayudarán a calcular la ida y venida del ultrasonido que se emite y que se recibe luego de tocar algún objeto.  Para medir la distancia usaremos la consola serial del Arduino, para eso invocamos el comando “Serial.begin(9600)”, seguido de eso declaramos el pin Trigger como salida, ya que es el que hace el disparo de la señal ultrasónica y el pin Echo como entrada que es aquel que va recibir la señal luego de tocar un objeto.
El algoritmo que se muestra en el void Loop, es el que nos permite inicializar el ultrasonido mandando un pulso para luego recibirla y calcular la distancia a través del tiempo que ha tomado en regresar teniendo en cuenta que la velocidad del sonido es de 340 m/s.
El comando Serial.print es para imprimir en la consola la distancia calculada, ese pequeño delay de 500 ms es recomendable para que pueda ser recalculado el valor de la distancia.


DSC01866
DSC01865












Ahora haremos una aplicación donde controlaremos la velocidad de unos motores DC, para eso tenemos que usar un puente H, el que tengo usa un driver L298N, que tiene pines de habilitación y pines que controlan el giro de los motores; esto se puede replicar a cualquier puente H que tengan, solo basta reconocer los pines del PWM y los pines de giro.
Bueno la programación que tenemos es:
//Pines del puente H
int in1 = 22;
int in2 = 23;
int enA = 2;
int in3 = 24;
int in4 = 25;
int enB = 3;
//Pines del ultrasonido
int trigger = 50;
int echo = 52;
float distancia,tiempo;
void setup()
{
Serial.begin(9600);
//Configuración como salida a los pines de giro
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
//Configuración como salida a los pines del PWM
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
}
void loop()
{
//Algoritmo para el ultrasonido 
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
tiempo=pulseIn(echo,HIGH);
distancia=(tiempo/2)/29.1;
Serial.print(distancia);
Serial.print("cm");
Serial.println();
//Establecemos un sentido de giro
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
//Le damos un valor al PWM
analogWrite(enA,150);
analogWrite(enB,150);
//Colocamos el valor de distancia al PWM, se puede jugar con esto
if(distancia<5)
{
analogWrite(enA,254);
analogWrite(enB,254);
}
delay(500);
}
Inicialmente se puede definir el giro de los motores escribiendo un cero o un uno a los pines in1,2,3,4 y también podemos poner un valor al PWM, en mi caso yo le puse 150; lo haremos cambiar al acercarnos a una distancia menor de 5 cm colocando el PWM 254, un valor que puede ser cambiado al gusto.

10 comentarios:

  1. estimado, buen dia tiene imagen de la conexion de motor con el 298 y arduino?

    ResponderEliminar
  2. me puedes pasar la libreria??? pls

    ResponderEliminar
  3. me dice que hay una libreria no valida ayudaaa

    ResponderEliminar
  4. Tienen que descargar la librería del ultrasonido.
    Descarguenlo en Google

    ResponderEliminar
  5. Tiene el diagrama de la conexión con los motores???

    ResponderEliminar
  6. Tiene el diagrama de la conexión con los motores???

    ResponderEliminar
  7. disculpa pero este proyecto que tendría que hacer para realizarlo con el arduino uno

    ResponderEliminar