Check the new version here

Popular channels

[Tutorial N# 1] Control de Leds Programación Arduino







Hola, este tuto va especialmente para los que estén interesados en aprender a programar para Arduino y no tengan idea sobre programación. Mientras avancemos, no se detallará tanto como en los primeros tutos.


El ejemplo mas fácil para empezar y para entender como funciona de a poco los microcontroladores, en este caso la placa arduino, es trabajar con las entradas y salidas digitales

Como ya dijimos vamos a dar los ejemplos sobre la placa Arduino Mega 2560, pero en otro Arduino debería funcionar sin problemas (caso contrario con alguna pequeña modificación de código)



Entradas/Salidas (E/S) [Input/Output (I/O)]

Solo pueden tener 2 valores : (son Equivalente)


1
- 0
Alto - Bajo
High - Low
Prendido - Apagado
Verdadero - Falso
5 Volt - 0 Volt





La placa Arduino tiene entradas y salidas digitales para conectar "dispositivos" como Leds, sensores, parlante, pulsadores, etc, etc. Es una forma en que el Arduino interactua con el "mundo exterior". 

Los lugares donde vamos a conectar todo esto, se llaman pines.  Estos pines vienen numerados en la placa. Como se ve en la figura los PINES DIGITALES están numerados del 0 al 53 (por lo tanto tenemos 54 pines digitales.) Estos pines cuando están en alto, están a 5 Voltios y entregan como máximo 40mA (suficientes para alimentar un led, pero no lo suficientemente grande para alimentar cargas mas grandes como motores o reles).





¿Qué debemos configurar de estos pines de E/S DIGITAL ?



Usamos estas instrucciones que son las mas fundamentales.

  • pinMode (Configuración del modo E/S del pin)

  • digitalWrite (Activa/desactiva la salida digital del pin (pone en "5 volt" o "0 volt" ) )


  • digitalRead (lee el estado de un pin digital "5 volt" o "0 volt" )


PINMODE:
En la parte de configuración (VOID SETUP) debemos especificar si al pin lo vamos a usar como entrada o como salida, indicando el numero del pin, con la instrucción pinMode de la siguiente forma.

(Por defecto los pines vienen configurados como entradas, por lo tanto no es necesario definirlos en caso de que vayan a trabajar como entradas, aunque es buena práctica si definirlos)

pinMode(numero del pin digital,INPUT/OUTPUT)

El código sería el siguiente:

void setup() 
{
pinMode(13,OUTPUT); // pin digital 13 configurado como salida(OUTPUT)
pinMode(12,INPUT);  // Pin digital 12 configurado como entrada(INPUT)
}


TODO LO QUE VA DESPUES DE "//" ES EN FORMA DE COMENTARIO PARA EL CÓDIGO


¿ Cuando Usamos ENTRADA y cuando SALIDA ?

Un pin digital lo vamos a usar como entrada, cuando conectamos dispositivos para que los lea el Arduino, como por ejemplo sensores, pulsadores.
Un pin digital lo vamos a usar como salida, cuando conectamos dispositivos como leds, motores, parlantes, cuando queremos que la placa nos de una salida.

DIGITALREAD:

Lee el valor de un pin digital dando un resultado HIGH (alto) o LOW (bajo). El pin se puede especificar ya sea como una variable o una constante (0-53). El valor leido lo tenemos que asignar a una variable. 


valor = digitalRead(13);  // lee el pin digital 13 y le asigna el estado a la variable "valor"

DIGITALWRITE:

Envía al ´pin´ definido previamente como OUTPUT el valor HIGH o LOW (poniendo en 1 o 0 la salida). El pin se puede especificar ya sea como una variable o como una constante (0-53).


digitalWrite(13, HIGH);   // activa (pone a 5 volt) el pin digital 13
digitalWrite(13,LOW);    // desactiva (pone a 0 volt) el pin digital 13

o en caso de que definamos el pin como una variable sería:

int pin = 13; //le asigna el valor "13" a la variable "pin" (definida tipo entera "int" )
int m = 12; // le asigna el valor "12" a la variable "m" (definida tipo entera "int" )

digitalWrite(pin,HIGH); // activa (pone a 5 volt) el pin digital 13
digitalWrite(m,LOW); // desactiva (pone a 0 volt ) el pin digital 12



Ya con toda esta información podemos empezar a hacer algún programa básico. Vamos a trabajar con el ejemplo por defecto para empezar, llamado BLINK. Lo que hace es prender y apagar un led, de tal modo que queda intermitente.

¿ Cómo se conecta un led ?





Se conecta el "polo negativo" (cátodo) a GND
El "polo positivo" (ánodo) a la salida digital, para activar o desactivar el paso de corriente.

Lleva una resistencia para limitar el paso de corriente que lo atraviesa y que no se queme.

CON UNA RESISTENCIA DE 120 OHM VA A ESTAR BIEN.

Nuestro esquema para el Arduino va a ser el siguiente...



Abrimos nuestro IDE de Arduino para empezar a programar...




CÓDIGO ARDUINO:


void setup() {
  
  pinMode(13, OUTPUT);
}


void loop() {

  digitalWrite(13, HIGH);   // Prende el led (HIGH es el nivel de voltaje)
  delay(1000);                    // espera un segundo 
  digitalWrite(13, LOW);    // apaga el led.
  delay(1000);                    // espera un segundo.
}


Lo que se encuentra dentro de VOID LOOP() se ejecutará repetidamente, por lo que el Led se prende, se queda un segundo prendido, se apaga, se queda un segundo apagado, se prende, etc etc...

Si quisieran que el led este mas tiempo prendido o apagado, modifican el valor del delay (retardo). Este se encuentra en miliSegundos.



¿ Cómo subo el programa a la placa ?



1. Seleccionar Modelo de placa





2. Seleccionar puerto serie.



3. Subir el programa.












Resultado. (GIF)





Otro ejemplo que podemos hacer es hacer distintas secuencias de encendido y apagado para un número determinado de leds.

Para esto podriamos repetir el mismo proceso del ejemplo anterior. 
Encender un LED (Mantenerlo encendido)
Apagar el Led
Prender el siguiente (Mantenerlo encendido)
Apagar el Led
Prender el siguiente (Mantenerlo encendido)
etc.


Esquema de conexión.









El código Arduino seria algo así:


void setup() {
    
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  pinMode(14,OUTPUT);

}

void loop() {
  
  digitalWrite(6,HIGH);
  delay(80);
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);
  delay(80);
  digitalWrite(7,LOW);
  digitalWrite(8,HIGH);
  delay(80);
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  delay(80);
  digitalWrite(9,LOW);
  digitalWrite(10,HIGH);
  delay(80);
  digitalWrite(10,LOW);
  digitalWrite(11,HIGH);
  delay(80);
  digitalWrite(11,LOW);
  digitalWrite(12,HIGH);
  delay(80);
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
  delay(80);
  digitalWrite(13,LOW);
  digitalWrite(12,HIGH);
  delay(80);
  digitalWrite(12,LOW);
  digitalWrite(11,HIGH);
  delay(80);
  digitalWrite(11,LOW);
  digitalWrite(10,HIGH);
  delay(80);
  digitalWrite(10,LOW);
  digitalWrite(9,HIGH);
  delay(80);
  digitalWrite(9,LOW);
  digitalWrite(8,HIGH);
  delay(80);
  digitalWrite(8,LOW);
  digitalWrite(7,HIGH);
  delay(80);
  digitalWrite(7,LOW);
}



El proceso se hace repetitivo, ya que la estructura del programa es la misma, solo que van cambiando el pin que se enciende y el que se apaga. Para esto podemos usar una estructura repetitiva para que haga la tarea de definir quien se prende y apaga por nosotros.



Estructura FOR



La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (, vemos el ejemplo de su sintaxis:

for (inicialización; condición; expresión)
{
Instrucciones;
}


La inicialización de una variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.

Si aplicamos esta estructura al ejemplo, el código sería:


int i=0;
void setup() {

  for(i=6;i<14;i++)
  {
    pinMode(i,OUTPUT);    // Configuro los pines del 6 al 13 como salidas
  }

}

void loop() {
  
    for (i=6;i<13;i++)      //"i" va desde 6 hasta 13, aumentando de a 1 cada vez que el bucle se repite.
  {   
    digitalWrite(i,HIGH);   // enciendo el led "i"
    delay(80);              // Retardo de 80 mS
    digitalWrite(i,LOW);    // apago el led "i"
  }
  for (i=13;i>6;i--)        // "i" va desde 13 hasta 6, disminuyendo en 1 cada vez que el bucle se repite.
  {                         // esto hace que vaya en una dirección y despues en la otra cuando llega a cada extremo.
    digitalWrite(i,HIGH);
    delay(80);
    digitalWrite(i,LOW);
  }
}


Que es mucho mas corto que el anterior.

El resultado: (GIF)

Simulación hecha en Proteus





Funcionando en la PLACA:




Bueno eso es todo por hoy.
+2
13
0
13Comments
      joker_125

      MUY BUENO!, cuando subes la numero 2?

      0
      charly_red_1970

      Excelente, a la espera de la parte 2ª... Saludos +10

      0
      Tonayanita

      Excelente post cuando sacas el próximo?

      0
      cindor99

      Buenisimo el post

      0
      luis251184

      exelente tutorial, veo que este es el numero #1, pero el #2 ¿donde esta? no tengo arduino sino el pic-pinguino pero el codigo y la estructura son similares este me podria servir para desarrollar proyectos con los pic... (ojo soy de venezuela y aqui esta dificil conseguir el arduino por eso me arme uno con un pic)

      0
      BrandnPz

      Excelente post, espero proximos tutoriales subiendo el nivel de programacion, muy bien explicado

      0
      lorenaaaa

      Excelente +10!

      0
      diegomorza

      gracias papu por la data espero pueda hacer funcionar mejor mi mochila de protones, tambien quiero ponerle sonido cuando pulso un boton eso se puede hacer?

      0
      eseloquito

      Muy bueno,ojala dieras mas clases.

      0
      cokie_clown

      Genial guachin! Te las podrías ingeniar para hacer unos LEDs audioritmicos? Es imposible de hacer con esta placa?

      0
      skaeps

      Genial , yo quiero estudiar Arduino, seguire tus clases jeje

      0
      charly_red_1970

      +10 - A Fav y Reco. Muy buena info. Mi pregunta es si van a haber más clases, estaría bueno eso maquinola. Saludos !!!

      0
      Angel_Miguel_

      Buen post estoy empezando con arduino y me viene genial

      0