Tutorial de arduino: Creando un semáforo « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

Febrero 9, 2017

Tutorial de arduino: Creando un semáforo

Filed under: Arduino,c++,Programación — Etiquetas: , , , — jnavero @ 8:10 pm

En este post vamos a crear un semáforo con arduino, de esta forma, podremos ver como iluminar varios led de la misma forma que vimos en el post anterior pero, en este caso, usaremos un botón para hacer cambie el estado, de verde a rojo pasando por amarillo.

Crearé un código sencillito y comentaré brevemente algunos problemas que tendrá ese código, sin más veamos el proyecto:

Receta

Para nuestro proyecto usaremos:

  • 1 Arduino uno
  • 3 Leds (uno rojo, uno verde y otro amarillo)
  • 3 resistencias de 220 ohm.
  • 1 resistencia de 10K
  • 1 pulsador

Como en el anterior post, muestro el conexionado de nuestro prototipo:

semaforo arduino

Describo el conexionado de la placa:

  • Led rojo positivo E8 y pin 6 digital del arduino. En E9 negativo led rojo a resistencia de 220 ohm.
  • Led amarillo positivo en E12 y pin 5 digital del arduino. En E13 negativo del led amarillo a la resistencia de 220 ohm.
  • Led verde positivo en E15 y pin 4 digital del arduino. En E16 negativo del led verde a la resistencia de 220 ohm.
  • Pulsador en E22 positivo y en E24 negativo con la señal de arduino pin 3 y resistencia de 10K a negativo.

El código

Este código es muy poco más complejo que el anterior:

 C++ | 
 
 copy code |
?

01
02
void setup()
03
{
04
   pinMode(GREEN_LED_PIN, OUTPUT);
05
   pinMode(YELLOW_LED_PIN, OUTPUT);
06
   pinMode(RED_LED_PIN, OUTPUT);
07
   pinMode(SWITCH_PIN, INPUT);
08
 
09
   Serial.begin(9600);
10
}
11
 
12
void loop()
13
{
14
   digitalWrite(GREEN_LED_PIN, HIGH);
15
   digitalWrite(YELLOW_LED_PIN, LOW);
16
   digitalWrite(RED_LED_PIN, LOW);
17
 
18
   switchState = digitalRead(SWITCH_PIN);
19
 
20
   if(switchState == HIGH)
21
   {
22
      Serial.println("Boton pulsado");
23
      delay(2000);
24
      digitalWrite(GREEN_LED_PIN, LOW);
25
      digitalWrite(YELLOW_LED_PIN, HIGH);
26
      Serial.println("AMARIllO");
27
      delay(3000);
28
      digitalWrite(YELLOW_LED_PIN, LOW);
29
      digitalWrite(RED_LED_PIN, HIGH);
30
      Serial.println("ROJO");
31
      delay(5000);
32
      Serial.println(".FIN DE LA SECUENCIA.");
33
   }
34
   delay(100);
35
}
36

(Código en github)

En el código anterior podemos ver #define si no vienes del mundo de la programación, podríamos decir, que son como alias que hacemos.

En nuestro caso, los hemos usado para poder identificar los pines que conectan los leds y del switch con arduino.

Además tiene una gran ventaja y es que si deseamos cambiar el cable de sitio de pin en el arduino, solo tenemos que cambiar el número del pin y no tenemos que buscar por todo el código.

Posteriormente la linea int switchState declaramos una variable que nos indicará el estado del switch.

En la función setup, configuramos los pines de arduino como salidas y entradas (OUTPUT e INPUT) y además podemos ver la línea

Serial.begin(9600) lo que hace es que inicia el puerto serie de nuestro arduino para poder hacer un seguimiento de que va ocurriendo.

Para poder monitorizar las líneas siguientes, en el IDE de arduino, debemos ir a TOOLS y pulsar sobre Serial Monitor. Esto nos abrirá una ventana donde podremos ir viendo una traza (si deseamos) es bastante útil para ver que está ocurriendo con nuestro programa.

digitalWrite, es una función que vimos anteriormente, y sirve para “escribir” en el pin digital de arduino.

switchState = digitalRead(SWITCH_PIN); Realiza la lectura en el pin donde está el switch y se almacena en la variable que definimos previamente.

Después con  if(switchState == HIGH) comprobamos si el estado del switch (si se ha pulsado) iniciamos una secuencia.

Por ultimo comentar que con Serial.writeln(“Boton pulsado”); nos mostrará en el monitor el texto indicado.

Antes de terminar, quiero comentar algo sobre este código.

Aunque funciona a modo de semáforo, tiene un problema y es que cuando usamos la función delay()  hacemos que el flujo de nuestro programa se detenga. Por poner un ejemplo, imaginemos que además de los led que tenemos que nos hacen de semaforo debe funcionar junto con otro led que debe estar parpadeando todo el tiempo.

Iremos viendo este tipo de cuestiones y demás más adelante.

Espero que les haya gustado. Hasta pronto.

1 comentario »

  1. […] En los posts anteriores hemos visto como configurar el ide para usar arduino en Visual Studio también hemos visto un programa muy sencillo hola mundo y uno un poco más complicado haciendo un pseudo semáforo. […]

    Pingback by Tutorial de arduino: Conectando varios pulsadores en una salida « Devthisblog — Febrero 15, 2017 @ 8:15 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress