Sensor ultrasónico, Arduino y LCD
Otro artículo de una serie de ejemplos simples pero prácticos del uso de sensores con Ardunino.
En este artículo utilizamos un sensor ultrasónico US-020 (típico módulo para Arduino y otros microcontroladores que se puede adquirir en los sitios de venta de artículos DIY) para medir distancia y mostrar la medición en una pantalla de cristal líquido LCD. Para evitar implementar la lógica de cálculo de distancia y tratamiento del sensor de ultra sonido hacemos uso de la biblioteca de funciones New Ping.
En el video podemos observar cómo en la segunda línea del display LCD aparece la distancia medida. El máximo fue configurado a un metro. Al acercar la mano varía la medición, marcando infinito cuando no hay un objeto a menos de un metro de distancia.
|
|
En este programa implementamos una clase SmartLCD que deriva de la clase LiquidCrystal de la biblioteca. Y le agregamos dos buffers (screen y dbuff) para implementar una especie de double buffering y evitar escribir todo el tiempo sobre la pantalla aún cuando no hay cambios. Se agregó un método printf() a la clase que funcionar como el clásico printf() de C/C++. Esta función recibe como primer argumento la línea del display sobre la que se imprimirá el texto. Ambos arrays de caracteres están rellenos con espacios (0x20) desde el principio. Cuando se recibe una nueva cadena se procesa sobre el array screen (línea 66, previamente rellenada con espacios en la 65). Luego se recorre el array y se copian sólo los caracteres que cambiaron a dbuff. En ese proceso además se reemplaza el fin de cadena (valor 0) por un espacio. Y luego se imprime en la posición adecuada del LCD (línea 73).
El lazo principal tiene un retardo de 150ms, luego utiliza el método ping() de la biblioteca que retorna el tiempo de eco del ultrasonido en microsegundos. Luego se lo divide por la constante US_ROUNDTRIP_CM que tiene el tiempo del sonido ida y vuelta para un centímetro, expresado en microsegundos. Por lo que la variable distance tendrá la distancia en centímetros. Finalmente se decide si es infinito o no, para imprimir el valor apropiado (líneas 97 a 100).