Práctica 29. Encender y apagar varios LED dependiendo de la distancia que mida un sensor de ultrasonido HC-SR04

29.1 Objetivo General:

Encender y apagar  diferentes LED dependiendo de la distancia que mida un sensor de ultrasonido  HC-SR04. 

En la sección de Tutoriales->Arduino podrán encontrar todas las prácticas relacionadas con la tarjeta Arduino

IMPORTANTE:

La práctica 1 te enseña como encender y apagar un (1) solo LED. Consúltala antes de hacer esta práctica.

La practica 8 te enseña como controlar un dispositivo de ultrasonido HC-SR04 a.

29.2 Materiales y métodos:

  1. Siete LEDs
  2. Siete resistencias de 220Ω.
  3. Una tarjeta Arduino.
  4. Un cable USB impresora.
  5. Un computador.
  6. Cables para el montaje del circuito.
  7. Protoboard.
  8. Un sensor de ultrasonido HC-SR04 o PING de Parallax.

29.3  Montaje de la práctica:

     Antes de comenzar la realización del montaje del circuito electrónico, se debe realizar el circuito en el programa Fritzing o en tinkercad.  Se debe tener en cuenta el conocimiento de cuál es el cátodo y ánodo del LED. Se coloca el ánodo a los pin que queramos configurar como salidas y el cátodo a tierra (ground), recordemos usar una resistencia para protección de nuestro circuito y prevenir interferencias. Recordemos de la practica numero 8 como se realizaban las conexiones de un sensor de ultrasonido HC-SR04, el pin trigger que envía la señal y el pin echo que la recibe.

Figura 1. Montaje del circuito para el sensor HC-SR04.

     Se observa en la Figura 1 que se está utilizando el Arduino Uno, si se utiliza la tarjeta Arduino Uno-R3 o Arduino Mega el mismo procedimiento. Como se observa en la Figura 2, el Protoboard nos ayuda a insertar el LED e instalar el circuito a través de cables, al igual que la resistencia eléctrica y el sensor de ultrasonido. La línea que esta de color rojo que conecta el VCC a la tarjeta Arduino emite los 5V al estar conectado la tarjeta al computador (El computador es capaz de proveerle Arduino 5V). Para proteger el circuito y evitar que al que los pin que conectemos los leds no le llegue más de 5V, le colocamos al circuito unas resistencias eléctricas a cada led, la cual llevara en gran parte de esa señal a tierra.

HC-SR04: todo sobre el sensor de ultrasonidos | Hardware libre

Figura 2. Sensor de Ultrasonido utilizado en la práctica Imagen de https://www.hwlibre.com/hc-sr04/.

     Luego que tengamos armado el circuito en el programa Fritzing, se comienza con el desarrollo del programa en el IDE de Arduino.

29.4 IDE de Arduino para la práctica:

1. Se selecciona la tarjeta Arduino que se está utilizando sea Arduino Uno-R3 o Arduino Mega 2560.

2. Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el computador.

3. Se empieza a realizar el código:

  • Inicialmente debemos darle un nombre de qué consiste el código, esto se hace a través del símbolo //, se puede colocar el título de la práctica o del programa en sí. También se puede utilizar como comentarios dentro del programa.
  • Se deben declarar las variables que serán utilizadas en el programa. Pero primero se debe incluir  el paquete dentro de la IDE de Arduino llamado NewPing. El paquete carga los objetos que permiten usar el  dispositivo (HC-SR04). El comando para llamar al paquete es #include.
  • Se declaran las variables. Se debe declarar la variable de accionar el sensor con el comando  “int”, luego se le da el nombre coloca el trigger en el pin 10, la variable se le asignara el valor de 10. Luego se declara la variable de repetición “int”, echo en el pin 9  la cual  permitirá saber a qué distancia se encontrar con un obstáculo.
  • Por último, debemos definir a que distancia máxima podrá leer el sensor, para esto utilizaremos el comando #define MAX_DISTANCE, en este caso se indicará una distancia de 400 centímetros. Este comando es importante ya que es el que le dará a la señal la distancia de ir y venir para que el sensor pueda leer una respuesta.
  • Seguidamente se realiza la declaración de las configuraciones de las variables o la inicialización de la comunicación serie dentro de los corchetes que delimitan el bloque de programa void setup (). Para la realización de esta práctica se trabaja con la comunicación serie, es decir, la comunicación de datos con el computador. Para abrir el puerto serie se utiliza el comando Serial.Begin (9600); declaramos el pin 9 como salida pinMode (trigger, OUTPUT); posteriormente declaramose el pin 10 como la entrada pinMode (echo, INPUT);  indicando dentro de los paréntesis la velocidad de comunicación con el computador. Internamente del corchete se declara que la variable de salida para cada PIN que le coloquemos un led en los puertos PWM del Arduino serán (1,2,3..) y son de salida, esto se realiza a través del comando “pinMode”, este a su vez necesita como argumento la variable y el tipo de señal de la misma, es decir “pinMode(2,OUTPUT)”; en la que “OUTPUT” indica que la señal saldrá del pin 2 permitiendo encender el LED y así hasta completar hasta el pin  8 pinMode(8,OUTPUT)”;
  • Luego de inicializada la comunicación serie, se procede con el bloque de programación que se encuentra ubicado en el interior de los corchetes del comando void loop () el cual se ejecuta continuamente leyendo las entradas y generando las salida, a través del comando unsigned int uS = sonar.ping(), permite enviar la señal digital la cual se encarga de enviar el sonar y medir el tiempo en que tarda en retornar.
  • Posteriormente, se emplea la función Serial.print(); para mostrar el valor medido a través del monitor Si se quieren desplegar en el puerto serial palabras o frases estas deben ir delimitadas mediante los comillas, es decir, Serial.print (“distancia:    ”). Luego para que pueda convertir el tiempo en que la señal va y viene en distancia (cm) debemos utilizar el comando Serial.print (uS/ US_ROUNDTRIP_CM). Luego Serial.println(“cm:    ”) y luego un delay (1000). La práctica permite introducir otra estructura de programación la cual es “if”, la que significa si en español. La estructura “if” es un condicional que permite decidir en función del valor (uS/ US_ROUNDTRIP_CM) si este es >30 cm y <40 cm no encenderá ninguna luz, posteriormente entonces con el comando digitalWrite les decimos a nuestros pin que estarán en 0 digitalWrite(2,0) digitalWrite (3,0) y asi sucesivamente hasta 8 que significara que no encenderán, luego cerramos nuestro } y comenzamos otro { para indicar el siguiente <30 cm  y podremos configurar nuestro primer pin que encienda con el comando digitalWrite(2,1) este indica que el led conectado al pin 2 encenderá ya que se encuentra en uno y para asegurarnos que los demás no lo hagan se le indicara a los demás digitalWrite(3,0); digitalWrite (4,0);…; digitalWrite (8,0)   y así sucesivamente hasta completar la secuencia de encendido de nuestros pin dependiendo del rango de lectura.
  • Al terminar el desarrollo del programa se debe compilar para verificar si existen errores dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta Arduino para que lo ejecute.

NOTA: Para que el IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;).

// Medir distancia con sensor ultrasonido HC-SR04 y encender Led
#include<NewPing.h>
int trigger = 10; // declaramos la palabra trigger como un tipo entero y al mismo tiempo reemplaza al pin 9
int echo = 9; // declaramos la palabra echo como un tipo entero y al mismo tiempo reemplaza al pin 8
#define  max_distance 400
NewPing sonar(trigger, echo, max_distance); // NewPing setup of pins and maximum distance.
void setup() {
  Serial.begin (9600);   // establemos la comucicacion serial
  pinMode (trigger, OUTPUT); // declarmos el pin 9 como salida
  pinMode (echo, INPUT);   // declaramos el 8 como entrada
  pinMode(2,OUTPUT);
   pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
     pinMode(5,OUTPUT);
      pinMode(6,OUTPUT);
       pinMode(7,OUTPUT); 
        pinMode(8,OUTPUT);
}
void loop() {
unsigned int  uS=sonar.ping (); 
{
  Serial.print("distancia: "); // escribe los datos enviados
  Serial.print(uS/US_ROUNDTRIP_CM); //Convierte el tiempo de ping a la distancia en cm y el resultado de la impresin 
  Serial.print("cm"); // muestra los datos en cm
}
delay (1000);
if (uS/US_ROUNDTRIP_CM>=30 && uS/US_ROUNDTRIP_CM<=400) // Todos los leds apagados
{
  digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=26 && uS/US_ROUNDTRIP_CM <=30)// Todos los leds apagados
{
  digitalWrite (2,1); // enciende el pin 2
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=23 && uS/US_ROUNDTRIP_CM <=26){
  digitalWrite (2,0);
  digitalWrite (3,1); // enciende el pin 3
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=20 && uS/US_ROUNDTRIP_CM <=23){
  digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,1); // enciende el pin 4
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=17 && uS/US_ROUNDTRIP_CM <=20){
 digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,1); // enciende el pin 5
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=14 && uS/US_ROUNDTRIP_CM <=17){
  digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,1); // enciende el pin 6
  digitalWrite (7,0);
  digitalWrite (8,0);
}
if (uS/US_ROUNDTRIP_CM>=11 && uS/US_ROUNDTRIP_CM <=14){
  digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,1); // enciende el pin 7
  digitalWrite (8,0);
}
  if (uS/US_ROUNDTRIP_CM>=8 && uS/US_ROUNDTRIP_CM <=11){
  digitalWrite (2,0);
  digitalWrite (3,0);
  digitalWrite (4,0);
  digitalWrite (5,0);
  digitalWrite (6,0);
  digitalWrite (7,0);
  digitalWrite (8,1); // enciende el pin 8
}
}

Algoritmo 1: Encender y apagar varios LED dependiendo de la distancia que mida un sensor de ultrasonido HC-SR04

  • Al terminar el desarrollo del programa, se debe compilar el programa para verificar si existen errores dentro del código. Luego si no existen errores se puede cargar el código en la tarjeta Arduino para que esta lo ejecute.

Implementación del algoritmo 1 en el simulador TinkerCad:

https://www.tinkercad.com/things/hsVbekzhiql

29.5 Conclusión:

En esta práctica se ha introducido un sistema de control por medio de leds mediante la ayuda de la librería Newping de Arduino. Con un sensor también se pueden activar el encendido de uno o varios LED y con el mismo apagarlo. Esto es muy útil si necesitamos no solamente sensores auditivos ya que donde se produce mucho ruido, podríamos utilizar para ver en un control de un robot o dispositivo móvil que este próximo a impactar o rozar contra un objeto, recordando aun así la limitante y los puntos ciegos que tienen los sensores de ultra sonido, pero la gran capacidad de percibir cualquier objeto independientemente de su tamaño, color y forma.