Este proyecto se trata de crear un metro digital con ayuda del sensor ultrasonico HC-SR04, y para ayudarnos de controlar usaremos el uC ATmega328p del Arduino Uno, debido a que fue fácil la prototipación, pero el algoritmo se puede ocupar en otras familias de microcontroladores.
- Asignamos el pin conectado a trigger como salida.
- Asignamos el pin conectado a echo como entrada
- Generamos un pulso alto de 10us en el pin trigger y despues lo apagamos.
- Esperamos 220us a obtener una respuesta del pin echo.
- mientras el pin echo este en estado bajo 0 (low), esperar en el punto 5, si no pasar al siguiente paso.
- Activar el Timer1 cambiando el prescalador a 64.
- mientras el pin echo este en estado alto 1 (high), esperar en el punto 7, si no pasar al siguiente paso.
- Detener el Timer1
En los uC de la familia AVR, el ciclo de instrucción es igual al periodo del oscilador, en este caso
Considerando que el máximo tiempo que debe de contar es 38 mseg, que nos indica que no detecto ningún objeto, debemos usar un prescalador que nos ayude a retardar el timer.
Al usar el timer0 obtenemos que
Como el prescalador debe ser mayor a 10 usaremos el prescalador 64, obteniendo un tiempo máximo de 262.14ms. Teniendo el valor del prescalador y el oscilador obtenemos el valor por el que tendremos que multiplicar nuestro registro de 16-bits (TCNT1).
El sensor utiliza la formula
Como queremos obtener la distancia el despeja de la formula quedaria como: