sábado, 14 de julio de 2012

Sensor de proximidad por ultrasonidos con Arduino

Donde quedó aquella practica hecha en abril del sensor de proximidad mediante infrarrojos... pues nada aquí tenemos la evolución de aquella práctica, obteniendo un resultado bastante bueno.
El objetivo era un sensor de proximidad por ultrasonidos con aviso luminoso, y si ya podíamos mostrarlo en un LCD, mejor que mejor no?


Los componentes empleados en la practica son un emisor-receptor de ultrasonidos,un LCD I2c 1602 y un micro por un Arduino UNO. Podemos encontrarlo todo en Aliexpress o Ebay  por menos de 10€.
(Abajo os dejo unos links directos de lo que podéis necesitar)


El sensor de ultrasonidos empleado es el modelo HC-SR04, está formado por un emisor(T) y receptor(R) de ondas de ultrasonidos. El emisor envía una cantidad de pulsos ultrasónicos de 40khz y el receptor esta continuamente esperando al eco o rebote de pulsos en el momento que chocan contra algún objeto.




Datasheet:




La distancia medida es proporcional a la amplitud del eco de la señal enviada.
Para obtener la distancia se utiliza una función dentro de la libreria Ultrasonic.h, que en este caso lo almacenaremos en la variable sonar.


Pues nada aquí tenemos el resultado...







Me despido dejando el código que he desarrollado, y unos links directos a los módulos que he utilizado.

-Módulo sensor ultrasonidos HC-SR04

https://s.click.aliexpress.com/e/_oCPFDAA 



Si necesitas ayuda no dudes en escribirme y estaré encantado de echarte un cable.

¡Un abrazo electrónico!


SKETCH:
//Sensor por ultrasonidos con aviso lumínico e indicador en serie
/*By RedFox*/
#include "Ultrasonic.h"     // Libreria del sensor
Ultrasonic ultrasonic(6,7); // Trigger, Echo
int ledpin=13;
int sonar;                  //Declaramos la variable sensor
void setup()
{
   Serial.begin(9600);    //Inicio de la comunicacion serie a 9600 baudios
   pinMode(ledpin,OUTPUT);
}
void loop()
{
   sonar = ultrasonic.Ranging(CM);   //Leemos la distancia                  
                                   /*La funcion ultrasonic.ranging(cm), calcula la distancia a la que rebota la señal enviada, basandose en el tiempo que tarda en recorrer la distancia, almacenando la distancia en la variable sonar.     */
   while (sonar < 200 )             //Distancia sea menor a 200 cm
   {   
          delay(sonar*10);            //Delay dependiente del valor del sensor. Si la distancia se reduce el tiempo es menor pues se reduce el delay, aumentando la frecuencia de aviso.                                       
          digitalWrite(ledpin,LOW);
          delay(100);  
          digitalWrite(ledpin,HIGH); 
      if(sonar>1)
       {
         Serial.print ("Distancia:");
         Serial.print (sonar);
         Serial.print (" cm");
         delay(2000); 
         Serial.print(0xFE, BYTE);  
         Serial.print(0x01, BYTE);              
       } 
      while (sonar < 15)          //Si la distancia es menor que 15 cm
       {
       digitalWrite(ledpin,HIGH); 

         sonar = ultrasonic.Ranging(CM); //calculo de la distancia  

     if(sonar>1)
           {
                Serial.print ("Distancia:");
                Serial.print (sonar);
                Serial.print (" cm");
                delay(500); 
                Serial.print(0xFE, BYTE);   
                Serial.print(0x01, BYTE);            
         } 
       }         
       sonar = ultrasonic.Ranging(CM);  //Leemos la distancia del sonar para volver a empezar
   }  
}

2 comentarios: