Crea, comparte, aprende y disfruta
Sensor de Ultrasonidos SR04
El sensor SR04 esta compuesto por dos elementos, un emisor de ultrasonidos y un micrófono capaz de «escuchar» esas frecuencias.
Ambos elementos apuntan en la misma dirección, por lo tanto si algún objeto se sitúa frente a él las ondas sonoras rebotarán y el sensor podrá escucharlas de vuelta. De esta manera sabrá que tenemos un objeto delante. Si además calculamos lo que ha tardado en volver y lo multiplicamos por la velocidad del sonido sabremos la distancia a la que está.
Pin | Función | Descripción |
---|---|---|
1 | Vcc | Alimentación (5V) |
2 | Trig | Entrada. Le indica al sensor que debe enviar un impulso ultrasónico. |
3 | Echo | Salida. Devuelve lo captado por el sensor. |
4 | GND | Conectado a tierra |
Funcionamiento
El SR04 funciona de forma similar a como lo hace el sonar de un un barco o un submarino.
Envía ondas ultrasónicas que no pueden ser escuchadas por los humanos – aun que si por otros animales, como los perros. Cuidad si hay mascotas cerca.- estas ondas sonoras de propagan y si encuentran un objeto chocan y regresan en forma de eco.
El sensor escucha este eco y manda la señal de que hay un objeto delante.
Pero no solo eso, ya que sabemos que el sonido se desplaza por el aire a una velocidad de 343 m/s es fácil calcular la distancia a la que se encuentra nuestro obstáculo simplemente multiplicando el tiempo que tardo el eco en volver por la constante de la velocidad del sonido.
Montajes con el SR04
Veamos algunos ejemplos de como usar el sensor SR04.
SR04 con Arduino
La conexión es muy simple:
Pin del Sensor | Pin del Pingüino |
Trig | 9 |
Echo | 8 |
Vcc | + |
GND | GND |
Y gracias a la librería Ultrasonic la programación es igual de simple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN) void setup() { Serial.begin(9600); //abrimos la comunicación serial } void loop() { Serial.print(ultrasonic.Ranging(CM));//mostramos la distancia Serial.println(" cm" ); delay(500);//Esperamos 500 milisegundos antes de tomar otra lectura } |
SR04 y Raspberry Pi
También podemos usar este sensor con Raspberry Pi, es igualmente sencillo:
Pin Sensor de Ultrasonidos | GPIO de Raspberry |
TRIGGER | 25 |
ECHO | 07 |
Vcc | 5V |
GND | GND |
El programa en Python que usaremos para leer los sensores también es sencillo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import time #Importamos time (time.sleep) GPIO.setmode(GPIO.BCM) #Ponemos la placa en modo BCM GPIO_TRIGGER = 25 #Usamos el pin GPIO 25 como TRIGGER GPIO_ECHO = 7 #Usamos el pin GPIO 7 como ECHO GPIO.setup(GPIO_TRIGGER,GPIO.OUT) #Configuramos Trigger como salida GPIO.setup(GPIO_ECHO,GPIO.IN) #Configuramos Echo como entrada GPIO.output(GPIO_TRIGGER,False) #Ponemos el pin 25 como LOW try: while True: #Iniciamos un loop infinito GPIO.output(GPIO_TRIGGER,True) #Enviamos un pulso de ultrasonidos time.sleep(0.00001) #Mantenemos el pulso durante un instante GPIO.output(GPIO_TRIGGER,False) #Apagamos el pulso start = time.time() #Guarda el tiempo actual mediante time.time() while GPIO.input(GPIO_ECHO)==0: #Mientras el sensor no reciba señal... start = time.time() #Mantenemos el tiempo actual mediante time.time() while GPIO.input(GPIO_ECHO)==1: #Si el sensor recibe señal... stop = time.time() #Guarda el tiempo actual mediante time.time() en otra variable elapsed = stop-start #Obtenemos el tiempo transcurrido entre envío y recepción distance = (elapsed * 34300)/2 #Distancia es igual a tiempo por velocidad partido por 2 D = (T x V)/2 print distance #Devolvemos la distancia (en centímetros) por pantalla time.sleep(1) except KeyboardInterrupt: #Si el usuario pulsa CONTROL+C... print "quit" #Avisamos del cierre al usuario GPIO.cleanup() #Limpiamos los pines GPIO y salimos |
SR04 y Pingüino
Por supuesto también podemos usar este sensor con Pingüino, bastará realizar el siguiente montaje:
Pin del Sensor | Pin del Pingüino |
Trig | 8 |
Echo | 9 |
Vcc | + |
GND | GND |
Y programarlo para que tome las lecturas, de una forma muy similar a la lógica empleada en Raspberry Pi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #define Trig 8 //Configuro el pin 8 como el Trig #define Echo 9 //Configuro el pin 9 como el echo int Lectura; void setup(){ pinMode(Trig, OUTPUT);//Configuro el pin 8 como una salida pinMode(Echo, INPUT);//configuro el pin 9 como una entrada Lectura=0;//inicializo la variable TRISB=0;//Configuro puerto B como salida } void loop() { while (digitalRead(Echo) == LOW) { digitalWrite(Trig, HIGH);//Envio un pulso de ultrasonido delayMicroseconds(50);//Duración del pulso digitalWrite(Trig, LOW);//Fin del pulso } while (digitalRead(Echo) == HIGH) {//Espero al eco de mi pulso ultrasonico Lectura++;//voy almacenando el tiempo que tarda en llegar el eco delayMicroseconds(58);//Tiempo en recorrer dos centimetros 1 de ida 1 de vuelta } PORTB=Dato;//Muestro dato por el puerto B delay(1000);//Espera un segundo para visualizar el dato Dato=0;//Reinicio dato a 0 } |
Deja una respuesta