Este instructable es interfaz un ATtiny84 con el sensor de distancia ultrasonido HC-SR04 usando sólo código C – hardware de Arduino ni bibliotecas.
La HC-SR04 funciona como sigue:
-Enviar un pulso de 10us alta en el pasador del gatillo.
-El sensor envía una "ráfaga sonic" de 8 ciclos.
-Escuchar el pin eco, y la duración de la próxima señal alta le dará el tiempo necesario por el sonido para ir y venir del sensor al objetivo.
Aquí, el pin PB0 se utiliza para enviar el 10 nos pulso. Para medir la anchura del pulso de eco, podemos utilizar una interrupción de cambio de pin y un temporizador. Esta es la idea:
-Configuración interrupción de cambio de pin PCINT0 para que cualquier cambio lógico en el pin causará una interrupción.
-Envíe a los e.e.u.u. 10 pulso al pin de disparo.
-Lazo hasta la interrupción de la PCINT0 establece una marca para indicar que se realiza la medición.
-En la interrupción de la PCINT0, iniciar un temporizador de 8 bits cuando veas un flanco ascendente, es decir., el pulso de echo ha pasado de baja a alto. El temporizador de 8 bits está configurado para utilizar la interrupción de desbordamiento.
-El contador de 8 bits se desborda cada vez que llega a 255, así que cuando que interrumpir el fuego, añadimos 255 a un valor de 32 bits contador corriente.
-En la interrupción de la PCINT0, parar el temporizador de 8 bits cuando vea un borde descendente, es decir., el pulso de echo ha pasado de alta a baja. Actualizar cuenta de 32 bits y establecido para indicar que se realiza la medición.
-El ancho de pulso medido es un valor de contador, y podemos convertir en segundos, ya que sabemos la velocidad de reloj. Este valor de tiempo entonces se utiliza para calcular la distancia.
La distancia entonces se envía mediante comunicación serial en el pin PB1 – he cubierto esta parte en un artículo separado. También por esta razón no podemos usar el temporizador de 16 bits para medir la anchura de pulso – ya está siendo utilizado para comunicaciones en serie. ¿Además de diversión para aprender a utilizar el temporizador de 8 bits para contar valores grandes, derecho? ;-)
Se unen las imágenes del esquema y el diseño de la placa.
Este es el Makefile que va junto con el código anterior:
https://GIST.github.com/electronut/5763929
Y aquí está el código de Python utilizado para trazar los datos:
https://GIST.github.com/electronut/5730160
El código de Python es una modificación menor a lo que publiqué antes sobre el tema.