Para interactuar con los pines digitales de Arduino ya conocemos las funciones que nos ofrece Arduino: pinMode(), delay(), y digitalWrite().
Recordaremos que una señal digital puede variar únicamente entre dos valores, que denominamos -Vcc y +Vcc. Una salida digital es un dispositivo que permite variar su tensión a uno de estos dos valores mediante programación, y por tanto nos permite realizar acciones con el entorno.
En Arduino, en general, los voltajes -Vcc y +Vcc corresponden con 0V (GND) y 5V
La intensidad máxima que puede dar un pin es de 40 mA, si bien el valor recomendado es de 20mA. Además, hay restricciones adicionales en cuanto a la potencia, como que la suma total de todas las salidas debe ser inferior a 300 mA, y a su vez no pueden superar 150 mA por puerto.
Esta potencia es suficiente para encender un led, un pequeño servomotor de 9g, o encender algún sensor, pero no es suficiente para alimentar cargas mayores.
Si queremos mover una carga superior, como un motor de corriente continua, un servo, o incluso un relé, tendremos que emplear una etapa de amplificación, como un transistor BJT. No es conveniente forzar los límites de potencia de forma prolongada, la placa podría calentarse y dañarse. El límite de 20 mA por salida significa que, para un voltaje de 5V, la resistencia del dispositivo que queramos alimentar no debe ser inferior a 200 ohmnios
Para hacer la secuencia de luces el código es similar al usado en la clase anterior, usando las mismas funciones y alterando el orden podremos realizar el proyecto.
Primero debemos asignar los puertos digitales correspondientes como salida, para ello en el bloque Setup, y utilizando la función “pinMode();”, definiremos los puertos como salida (OUTPUT).
Alternando las funciones y variando sus valores podremos realizar el código necesario.
Una vez definidos los puertos como salida, podremos emplear las funciones digitalWrite();y delay(); en el bloque Loop para que se ejecuten continuamente.
void setup () {
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
}
Bloque Setup
void loop () {
digitalWrite (5, HIGH);
delay(1000);
digitalWrite (6, HIGH);
}
Bloque Loop
Para entender la diferencia entre la parte de programa que incluiríamos dentro de la función void setup() y lo que incluiríamos en la función void loop() podemos pensar qué pasos damos cuando montamos en una bicicleta. Algunos movimientos se hacen solo una vez mientras que otros se repiten uno tras otro.
Primero nos montamos en la bicicleta ( es algo que solo hacemos una vez y nos sitúa con los pies sobre los pedales) y después pedaleamos (algo que hacemos constantemente para avanzar y no caernos).
La primera parte, que solo ocurre una vez, representaría lo que ocurre dentro de la función void setup() y aparece en este diagrama de flujo en color rojo; la segunda parte, que se repite un número indefinido de veces, representaría lo que ocurre en la función void loop() y aparece en este diagrama de flujo en azul. Para representarla utilizamos una flecha que vuelve al punto a partir del cual repetir acciones.
El circuito propuesto consta de un Arduino que hará encender y apagar una secuencia de luces conectadas en los puertos: 5,6 7, 8, para ello usaremos:
• 1 Arduino uno
• 1 Protoboard
• 4 Leds rojo
• 4 Resistencias 330 Ω
Circuito: Secuencia de luces
#define LED_5 5
#define LED_6 6
#define LED_7 7
#define LED_8 8
void setup() // Función Setup
{ // llave de apertura del bloque Setup
pinMode (LED_5, OUTPUT); //Asignación de puertos como salida
pinMode (LED_6, OUTPUT);
pinMode (LED_7, OUTPUT);
pinMode (LED_8, OUTPUT);
} //llave de cierre del bloque Setup
void loop() //Función Loop
{ // llave de apertura del bloque Loop
digitalWrite (LED_5, HIGH); //Puerto 5 en estado alto
delay(1000); // retardo de 1000 millisecond(s)
digitalWrite (LED_6, HIGH);
delay(1000);
digitalWrite (LED_7, HIGH);
delay(1000);
digitalWrite (LED_8, HIGH);
delay(1000);
digitalWrite (LED_8, LOW); //Puerto 8 en estado bajo
delay(1000);
digitalWrite (LED_7, LOW);
delay(1000); // retardo de 1000 millisecond(s)
digitalWrite (LED_6, LOW);
delay(1000);
digitalWrite (LED_5, LOW);
delay(1000);
}