Autor: Julio César Sandria Reynoso
Fecha: 19 de octubre de 2024
En este artículo se presenta un proyecto en Tinkercad (www.tinkercad.com) haciendo un circuito para conectar 22 LEDs en un arreglo de 11 columnas y 2 filas, con encendido aleatorio de los LEDs.
Lo interesante de este proyecto es mostrar cómo, teniendo únicamente 20 pines de entrada/salida en Arduino UNO (14 digitales y 6 analógicos), podemos conectar 22, 30 ó 45 LEDs y controlarlos fácilmente mediante programación C++ en Arduino.
En la imagen se puede ver que en forma de columna, se conectan dos LEDs a cada uno de los pines digitales 0 a 10 de Arduino. Por ejemplo, viendo los LEDs de derecha a izquierda, en los primeros dos LEDs los ánodos (+) se conectan entre si, después a una resistencia de 220 Ohms y la resistencia se conecta al pin 0 de Arduino. Y así sucesivamente se conectan los demás LEDs.
En la primera fila de 11 LEDs (los de arriba), se conectan entre si sus cátodos (-), y todos ellos se conectan a la patilla C (colector) del transistor NPN de la derecha. La patilla E (emisor) se conecta a tierra (GND de Arduino) y la patilla B (base) se conecta a una resistencia de 1 KOhm y ésta al pin analógico A0 de Arduino.
De forma similar, la segunda fila de 11 LEDs se conectan sus cátodos (-) al transistor NPN de la izquierda y la patilla B (base) se conecta con una resistencia de 1 Ohm de por medio, al pin A1 de Arduino.
Para encender los primeros dos LEDs de la derecha, se activa el pin 0 de Arduino con digitalWrite(0,HIGH)
, pero esto por si solo no enciende ninguno de los dos LEDs. Para encender el primer LED de la derecha-arriba, se debe activar el pin A0 de Arduino con digitalWrite(A0,HIGH)
. Con esto, se envía el voltaje necesario a la base del transistor de la derecha, lo que cierra el circuito entre el colector y emisor de dicho transistor, permitiendo el flujo de corriente desde el pin 0 de Arduino, pasando por el LED (derecha-arriba), el transistor derecho, hasta el GND de Arduino.
El programa siguiente implementa el encendido de forma aleatoria de un LED durante 15 veces y después el encendido de dos LEDs de forma aleatoria durante 20 veces. Esto se repite mientras se ejecute la simulación en Tinkercad.
// Programa C++ para Arduino
// Arreglo de LEDs de 11 columnas X 2 filas,
// enciende un LED de forma aleatoria y
// después enciende dos LEDs de forma aleatoria
int Columnas[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int Filas[] = {A0, A1};
int columnas = 11;
int filas = 2;
void setup() {
for (int col = 0; col < columnas; col++)
pinMode(Columnas[col], OUTPUT);
for (int fila = 0; fila < filas; fila++)
pinMode(Filas[fila], OUTPUT);
}
void loop() {
// 15 veces encendemos un led de forma aleatoria
ledAleatorio(15);
// 20 veces encendemos dos leds de forma aleatoria
ledAleatorio2(20);
}
void ledAleatorio(int n) {
int aFila;
int aColumna;
for(int i=0; i<n; i++) {
aFila = random(0, filas);
aColumna = random(0, columnas);
digitalWrite(Filas[aFila], HIGH);
digitalWrite(Columnas[aColumna], HIGH);
delay(300);
digitalWrite(Filas[aFila], LOW);
digitalWrite(Columnas[aColumna], LOW);
delay(200);
}
}
void ledAleatorio2(int n) {
int aFila;
int aColumna;
int a2Fila;
int a2Columna;
for(int i=0; i<n; i++) {
aFila = random(0, filas);
aColumna = random(0, columnas);
a2Fila = random(0, filas);
a2Columna = random(0, columnas);
digitalWrite(Filas[aFila], HIGH);
digitalWrite(Columnas[aColumna], HIGH);
digitalWrite(Filas[a2Fila], HIGH);
digitalWrite(Columnas[a2Columna], HIGH);
delay(300);
digitalWrite(Filas[aFila], LOW);
digitalWrite(Columnas[aColumna], LOW);
digitalWrite(Filas[a2Fila], LOW);
digitalWrite(Columnas[a2Columna], LOW);
delay(200);
}
}
Si te interesa aprender más sobre programación en C++, Arduino, robótica u otros lenguajes de programación, visita el sitio web del Instituto de Robótica de Xalapa (www.irox.mx) y contáctanos. Si estás en una región cercana a Xalapa, como Veracruz, Boca del Río, Córdoba, Martínez de la Torre, etc., puedes visitar las instalaciones del iRoX entre semana o un sábado y hablar con nuestros profesores sobre proyectos de robótica o tecnología.