Como Usar Sensor Ultrasonico HC-SR04
Como Usar Sensor Ultrasonico HC-SR04
Como Usar Sensor Ultrasonico HC-SR04
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
Ms
Siguiente blog
Crear un blog
Acceder
CAMPOS INVENTRONICA
VIERNES, 6 DE A BRIL DE 2012 A RCHIVO D EL BLOG
2013 (2) 2012 (6) diciembre (1) abril (2) vending control de acceso a sanitarios Como usar sensor ultrasonico HC-SR04 febrero (3) 2011 (2) 2008 (1)
Sensor ultrasonico de distancia basado en el principio del sonar. Caracteristicas: Alimentacion: 5V Angulo de sensado: 15 Rango de distancia: 2 a 500 cm Numero de pines: 4 (VCC,TRIG,ECHO,GND)
Dimensiones:
1 de 9 14/05/2013 01:59 p.m.
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
Modo de funcionamiento: Para hacer una lectura con el HC-SR04 basta con seguir estos pasos: 1) enviar un pulso de minimo 10us por el pin TRIG (disparo) para iniciar la lectura. 2) el sensor enviara 8 pulsos de ultrasonido y colocara su salida ECHO a alto, debes detectar este evento e iniciar un "conteo de tiempo" 3) la salida ECHO se mantendra en alto hasta recibir el eco reflejado por el obstaculo a lo cual el sensor pondra su pin ECHO a bajo, es decir, terminas de "contar el tiempo" 4) La distancia es proporcional a la duracion del pulso y puedes calcularla con las siguientes formulas: Distancia en CM = tiempo medido en us * 0.0167 Distancia en PULGADAS = tiempo medido en us * 0.00675 Nota: si la duracion del pulso es mayor a 30ms entonces asumes que no hay
2 de 9 14/05/2013 01:59 p.m.
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
EJEMPLO
Naturalmente usaremos un PIC para manejar el sensor, el compilador que utilizaresmos es PICC Compiler de CCS, el PIC utilizado puede ser cualquiera de tu preferencia, la cabecera del programa no la pondre porque puedes usar el PIC que tu quieras, esa es la ventaja de PICC, la portabilidad de codigo. Empezamos, lo mejor desde mi punto de vista es disear una funcion que se encargara de la lectura del sensor, esta funcion debera ir fuera y antes de la funcion MAIN. Lo primero es definir los pines de nuestro sensor #define trig pin_c6 #define echo input(pin_c7) Renombrar pines facilita el entendimiento posterior del codigo y ademas permite que cambies los pines que vas a usar con simplemente modificar las lineas de codigo anteriores en lugar de buscarlas y modificarlas dentro del codigo. Muy bien, sabemos que el sensor puede llegar a medir hasta 500cm, por lo cual nuestra funcion tendra un DATO DE SALIDA del tipo long unsigned ya que sobrepasa los 255 de una variable unsigned normal, asi que nuestra funcion comienza con un int16: int16 mide_distancia(void){ int16 centimetros; // creamos una variable local para los centimetros medidos //codigo para medicion de distancia... ahora comienza la secuencia, si recuerdas habremos de enviar un pulso de almenos 10us por el pin TRIG, yo le puse 50us para no fallar:
3 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
output_high(trig); // pulso de disparo delay_us(50); output_low(trig); luego hay que esperar el pulso del pin echo que de inicio esta en cero, asi que usaremos un while que espera mientras el pin echo este en cero y continuara cuando el pin este en 1:
while(echo==0); //espera flanco de subida Muy facil verdad, ahora comienza la medicion de la distancia, usaremos un ciclo while que incrementa cada 60us la variable centimetros mientras el pin echo sea = uno. Los 60us es el tiempo aproximado que tarda en viajar el sonido 2cm osea 1cm ida y vuelta: while(echo==1){ centimetros++; delay_us(58); } Este while termina cuando el pin echo a ido a cero, es decir ya termino la lectura, asi que terminamos con una demora de 50ms, tiempo sugerido por el datasheet del sensor y retornaremos con el valor de los centimetros medidos: delay_ms(50); return(centimetros); }// fin de la funcion "mide_distancia"
Nuestra funcion completa queda entonces de la siguiente manera: #define trig pin_c6 #define echo input(pin_c7) int16 mide_distancia(void){ int16 centimetros=0; //pulso de disparo: output_high(trig); delay_us(50); output_low(trig); //espera flanco de subida por el pin echo while(echo==0); //comienza a contar centimetros hasta que pin echo sea cero while(echo==1){ centimetros++; delay_us(58);
4 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
Recuerda que esta funcion habra de ir afuera y antes de la funcion MAIN, un ejemplo de uso seria asi: Hacer un medidor de distancia con sensor ultrasonico y un lcd que marque la distancia en CM y tenga un led que enciende cuando hay una lectura valida y apaga cuando no hay una lectura valida o no haya objeto:
//****************************************************************** ** // Cabecera del programa, depende del pic que uses //****************************************************************** ** //****************************************************************** ** // Funcion de mide distancia de sensor ultrasonico#define trig pin_c6 #define echo input(pin_c7) int16 mide_distancia(void){ int16 centimetros=0; //pulso de disparo: output_high(trig); delay_us(50); output_low(trig); //espera flanco de subida por el pin echo while(echo==0); //comienza a contar centimetros hasta que pin echo sea cero while(echo==1){ centimetros++; delay_us(58); } //demora de seguridad y retorna con el valor de centimetros contados delay_ms(50); return(centimetros); } //****************************************************************** **
5 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
//****************************************************************** ** // Funcion principal del programavoid main( void ){ int16 distancia; int8 i; lcd_init(); // inicializa lcd
while (true){ // lazo infinito distancia=mide_distancia(); // AQUI USAMOS NUESTRA PODEROSA FUNCION!!! lcd_gotoxy(1,1); if(distancia>500){ // si lectura > 500cm entonces no es valida, osea no hay objeto lcd_putc('\f'); // Borra LCD printf(lcd_putc,"NO DETECTED!"); output_low(pin_c0); } else{ // si distancia fue < 500cm es una distancia valida y la imprime en LCD printf(lcd_putc,"%03lucm ",distancia); output_high(pin_c0); } }// cierra lazo infinito }// cierra main //****************************************************************** ** ************************************************************* COMENARIOS SOBRE EL PROGRAMA DE EJEMPLO: Este codigo de ejemplo tiene sus ventajas y sus desventajas, la gran ventaja es que es todo por software por lo que no consume recursos de TIMERS del PIC. La desventaja es que el tiempo de medicion de centimetros puede variar ya que depende de la velocidad del PIC que estas trabajando, esto se refleja en que mide cm mas grandes, esto se resuelve disminuyendo el valor del DELAY_US(58); hasta el valor que se ajuste a los cm reales. **************************************************************
Costo del sensor $190 pesos mexicanos Envio a toda la republica Costo de envio $89
6 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
Pregunda o pidelo a:
[email protected] Tambien hemos desarrollado en base a este sensor el nuevo sensor FLEX-SONAR
Diseado para fcil uso, sin hacer "rutinas", visitale en el siguiente enlace: http://www.inventronica.blogspot.m x/2012/04/sensor-ultrasonicoflex-sonar.html costo $260
PU BL ICA DO PO R E L E C T R O SWA L DO E N 1 2 : 3 9
1 0 C O M E N TA R I O S : loui dijo... amigo, necesito tu ayuda, como puedo hacer ese programa con microcode, osea en basic 30 DE A BR I L DE 2012 18:28 ELECTROSWALDO dijo... Que tal, pues que yo recuerde hay un codigo de ejemplo en el datasheet del mismo sensor echo en basic. Saludos 30 DE A BR I L DE 2012 20:44 Jonbul dijo... Saludos, llevaba tiempo buscando una explicacin de este estilo respecto a este sensor. Mi duda es si es necesario que sean esos 2 pines o se pueden usar otros cualquiera. Gracias
7 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
22 DE M AYO DE 2012 06:58 Robotnias dijo... Excelente explicacin!, he seguido las instrucciones al pie de la letra y en 10 minutos mi sensor mide perfectamente! Muchas gracias por compartirla! 27 DE J U N I O DE 2012 23:51 William dijo... Hola, hace poco me regalaron un sensor de estos, pero la tarjeta que tengo es una pinguino, podras decir que pines seras los adecuados para conectar en esta tarjeta? 6 DE N OV I E M BR E DE 2012 13:11 Bachillerato de Xochiapulco dijo... Que tal ELECTROSWALDO, mi primo me regalo un sensor ultrasonico, me parece que lo compro contigo. ya realize el programa que pones de ejemplo y funciona bien pero ahora he intentado agregar al proyecto un sensor de temperatura LM35 pero no funciona. los codigos por si solos funcionan bien, es decir si pongo el puro codigo de sensor ultrasonico funciona bien, si pongo solo el codigo del sensor de temperatura tambien funciona correcto. pero al intentar juntar los dos sensores en el proyecto(los 2 codigos en conjunto)no mas no hace nada el prototipo, se atora.por tu respuesta desde ya gracias 16 DE N OV I E M BR E DE 2012 14:52 gilberto valenzuela dijo... disculpa esque puse el mismo codigo e un pic 18f4550 y no pude hacer que jalara :/ me podrias ayudar porfavor saber si no le hace falta algo mas alcodigo o algo se lo agradeseria 25 DE N OV I E M BR E DE 2012 23:42 Miguel Menndez Riera dijo... Mis Respetos, muy buen cdigo y simple ante todo. Muchas gracias por tu aporte. Saludos. 2 DE DI C I E M BR E DE 2012 10:29 Santiago Zambrana dijo... Amigo estoy usando el mismo codigo q brindas pero llega un momento en que el valor medido se queda pegado y no
8 de 9
http://campos-inventronica.blogspot.mx/2012/04/como-usar-sensor-ultr...
sigue midiendo..talvez tendras alguna idea d q podria ser.. 27 DE F E BR E R O DE 2013 09:33 Andrs Moreno dijo... Muchas gracias, muy bien explicado. Lo probar en un rato ms. 13 DE M AYO DE 2013 10:44 Publicar un comentario en la entrada Entrada ms reciente Pgina principal Entrada antigua
9 de 9