Desarrollo del Proyecto: Maqueta de Cuatro Semáforos
Lo primero que hicimos fue realizar algunas pruebas utilizando una protoboard,
con el objetivo de darnos una idea de cómo podríamos construir el semáforo.
Empezamos probando con un solo semáforo, conectando tres LEDs (rojo, amarillo
y verde), cada uno con su resistencia correspondiente, para entender cómo
controlar el encendido y apagado desde el Arduino. Esto nos permitió
familiarizarnos con el uso de los componentes y detectar errores comunes, como
la mala conexión de los pines o la ausencia de resistencias.
Además, utilizamos la aplicación Tinkercad para diseñar virtualmente la
disposición de los componentes electrónicos. Esta herramienta fue clave para
prever cómo organizaríamos los elementos en el montaje final, y nos permitió
simular el código sin necesidad de armar el circuito físico desde el principio.
Gracias a Tinkercad, pudimos validar el funcionamiento de nuestro código y
optimizar el uso de los pines del Arduino.
Durante el proceso de diseño e implementación, también nos apoyamos en
videos, diagramas e imágenes como referencia, lo que nos ayudó a comprender
cómo funcionan los sistemas de semáforos reales, así como las mejores prácticas
en el manejo de Arduino. Estos recursos visuales fueron útiles para aclarar dudas
sobre la lógica de sincronización entre los diferentes semáforos.
Para la parte de programación, utilizamos el entorno de desarrollo Arduino IDE,
donde escribimos el código que define la lógica del semáforo. Inicialmente
programamos un semáforo simple, pero luego escalamos el proyecto para incluir
cuatro semáforos, como los que se encuentran en un cruce de cuatro vías.
(Foto de prueba en tinkercad)
Los materiales que utilizamos fueron los siguientes:
• 1 placa Arduino UNO
• 1 protoboard grande (o varias pequeñas)
• 12 LEDs (4 semáforos × 3 colores: rojo, amarillo y verde)
• 12 resistencias de 220 ohmios
• Cables de conexión (jumpers)
• Cable USB para alimentar el Arduino
• PC con Arduino IDE instalado
• Aplicación Tinkercad (para simulación previa)
Montaje y Conexión
Cada semáforo se compone de 3 LEDs. Los LEDs se conectan en serie con resistencias
para evitar que se quemen. Los pines digitales del Arduino controlan el encendido y
apagado de cada LED. El montaje se hace en una protoboard, y se pueden usar cables
de diferentes colores para diferenciar cada semáforo y facilitar el cableado.
Pruebas y Validación
Una vez que conectamos todos los componentes, realizamos diversas pruebas para
asegurarnos de que la lógica de los semáforos funcionara correctamente. Verificamos
los tiempos de encendido, las transiciones entre colores y que nunca hubiera conflicto
entre calles (es decir, que dos calles no tuvieran luz verde al mismo tiempo).
El código utilizado para la maqueta fue el siguiente:
int semaforo1[] = {2, 3, 4}; // Norte (Rojo, Amarillo, Verde)
int semaforo2[] = {5, 6, 7}; // Sur (Rojo, Amarillo, Verde)
int semaforo3[] = {8, 9, 10}; // Este (Rojo, Amarillo, Verde)
int semaforo4[] = {11, 12, 13}; // Oeste (Rojo, Amarillo, Verde)
creamos cuatro arreglos que representan los pines asignados a cada semáforo. Cada
arreglo tiene tres elementos que corresponden a las luces: Rojo, Amarillo y Verde.
void setup() {
for (int i = 2; i <= 13; i++) {
pinMode(i, OUTPUT);
El ciclo for recorre todos los pines del 2 al 13 y los configura como salida (OUTPUT).
Esto permite que esos pines envíen señales eléctricas para controlar las luces
void loop() {
// Fase 1: Norte-Sur en Verde, Este-Oeste en Rojo
cambiarSemaforo(semaforo1, semaforo2, true);
cambiarSemaforo(semaforo3, semaforo4, false);
delay(4000); // 4s luz verde
cambiarAmarillo(semaforo1, semaforo2);
delay(2000); // 2s luz amarilla
cambiarSemaforo(semaforo1, semaforo2, false); // Norte-Sur en Rojo
delay(4000); // 4s luz roja
// Fase 2: Este-Oeste en Verde
cambiarSemaforo(semaforo3, semaforo4, true);
delay(4000); // 4s luz verde
cambiarAmarillo(semaforo3, semaforo4);
delay(2000); // 2s luz amarilla
cambiarSemaforo(semaforo3, semaforo4, false); // Este-Oeste en Rojo
delay(4000); // 4s luz roja
En este bucle se repiten las fases del semaforo
void cambiarSemaforo(int sem1[], int sem2[], bool estadoVerde) {
if (estadoVerde) {
// Luz verde encendida
digitalWrite(sem1[0], LOW); // Rojo apagado
digitalWrite(sem1[1], LOW); // Amarillo apagado
digitalWrite(sem1[2], HIGH); // Verde encendido
digitalWrite(sem2[0], LOW);
digitalWrite(sem2[1], LOW);
digitalWrite(sem2[2], HIGH);
} else {
// Luz roja encendida
digitalWrite(sem1[0], HIGH); // Rojo encendido
digitalWrite(sem1[1], LOW); // Amarillo apagado
digitalWrite(sem1[2], LOW); // Verde apagado
digitalWrite(sem2[0], HIGH);
digitalWrite(sem2[1], LOW);
digitalWrite(sem2[2], LOW);
Esta función se encarga de encender la luz verde o la luz roja en función del parámetro
void cambiarAmarillo(int sem1[], int sem2[]) {
digitalWrite(sem1[2], LOW); // Apagar luz verde
digitalWrite(sem1[1], HIGH); // Encender luz amarilla
digitalWrite(sem2[2], LOW);
digitalWrite(sem2[1], HIGH);
apaga la luz verde y enciende la luz amarilla, avisando a los conductores que pronto
deben
detenerse.
FIN DEL CODIGO
Una vez que terminamos nuestro código seguimos con la realización de nuestra
maqueta a la cual le agregamos 2 intersecciones viales, ya cuando terminamos de
realizar nuestra maqueta comenzamos a soldar todos los componentes y a empezar a
crear los semáforos y acomodarlos en la posición que le corresponden
Proyecto: Puerta de Garaje Automatizada Controlada por Bluetooth con Arduino
Este proyecto consiste en automatizar la apertura y cierre de una puerta de garaje
utilizando un servo motor controlado remotamente desde un dispositivo móvil,
mediante conexión Bluetooth. El sistema es de bajo costo, fácil implementación y
escalable. Es ideal para aprender sobre automatización, comunicación inalámbrica y
programación con Arduino.
Fase 1: Preparación y Recolección de Materiales
Antes de comenzar la construcción del sistema, es importante contar con todos los
materiales necesarios:
Materiales y Componentes Electrónicos
Cantidad Componente Función
1 Arduino UNO Microcontrolador principal del sistema
Módulo Bluetooth HC-
1 Comunicación inalámbrica con el celular
05
1 Servo motor SG90 Simula la apertura y cierre de la puerta
2 LEDs (rojo y verde) Indicadores visuales del sistema
2 Resistencias de 220Ω Protección para los LEDs
1 Protoboard Conexiones sin soldadura
1 Cable USB Para alimentar y programar el Arduino
Fuente externa Si se necesita más potencia para motores
1
(opcional) reales
Varios Cables macho-macho Conexiones entre los componentes
Fase 2: Conexiones del Circuito
Conecta los componentes a la placa Arduino según el siguiente esquema:
Conexiones Eléctricas
Módulo Bluetooth HC-05
• VCC → 5V
• GND → GND
• TX → Pin 10 de Arduino
• RX → Pin 11 de Arduino
Nota: El RX del HC-05 trabaja con 3.3V, por lo que se recomienda usar un divisor de
voltaje entre el Pin 11 del Arduino (5V) y el RX del módulo.
Servo Motor SG90
• Señal (cable naranja) → Pin 5
• VCC (cable rojo) → 5V
• GND (cable marrón) → GND
LEDs
• LED rojo → Pin 3 (con resistencia de 220Ω a GND)
• LED verde → Pin 4 (con resistencia de 220Ω a GND)
Fase 3: Programación del Arduino
A continuación, se muestra el código necesario para controlar el sistema mediante
comandos enviados por Bluetooth:
Código Arduino
#include <Servo.h>
#include <SoftwareSerial.h>
Servo myServo;
SoftwareSerial miBT(10,11);
char dato;
void setup() {
[Link](9600);
[Link]("listo");
[Link](9600);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
[Link](5);
onOffLeds();
}
void loop() {
if([Link]()){
onOffLeds();
dato = [Link]();
if(dato == 'a')
abrirPuerta();
if(dato == 'c')
cerrarPuerta();
void onOffLeds(){
digitalWrite(3 ,HIGH);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(3 ,LOW);
digitalWrite(4,LOW);
delay(100);
digitalWrite(3 ,HIGH);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(3 ,LOW);
digitalWrite(4,LOW);
void cerrarPuerta(){
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
int angulo = 0;
do {
angulo += 1;
[Link](angulo);
delay(50);
} while(angulo < 90);
digitalWrite(3 ,LOW);
digitalWrite(4,LOW);
void abrirPuerta(){
digitalWrite(3 ,HIGH);
digitalWrite(4,LOW);
int angulo = 90;
do {
angulo -= 1;
[Link](angulo);
delay(50);
} while(angulo > 0);
digitalWrite(3 ,LOW);
digitalWrite(4,LOW);
}
Explicación del Código
• Se crea una comunicación serial con el módulo Bluetooth usando SoftwareSerial.
• Se configura el servo motor y los pines de los LEDs como salida.
• Cuando se recibe un dato por Bluetooth, se evalúa su contenido:
o Si es 'o', se abre la puerta moviendo el servo de 90° a 0°.
o Si es 'c', se cierra la puerta moviéndolo de 0° a 90°.
• La función onOffLeds hace parpadear los LEDs cada vez que se recibe un comando
como confirmación visual.
Fase 4: Aplicación Móvil con App Inventor
Se desarrolla una aplicación sencilla usando la plataforma MIT App Inventor.
Interfaz de Usuario
• Botón para conectarse al dispositivo Bluetooth HC-05.
• Botón para abrir la puerta.
• Botón para cerrar la puerta.
• Etiquetas de estado que indican conexión y comandos enviados.
Lógica de Funcionamiento
• Al iniciar la aplicación, se escanean los dispositivos Bluetooth disponibles.
• Al seleccionar el módulo HC-05, se establece la conexión.
• Al presionar el botón "Abrir", se envía el carácter 'o' por Bluetooth.
• Al presionar el botón "Cerrar", se envía el carácter 'c'.
Componentes Usados
• ListPicker para elegir el módulo Bluetooth.
• BluetoothClient para manejar la conexión.
• Botones para enviar comandos.
• Etiquetas para mostrar mensajes de estado.
Fase 5: Funcionamiento del Sistema
1. Se enciende el sistema y se activa el módulo Bluetooth.
2. El usuario abre la aplicación móvil y se conecta al módulo HC-05.
3. La aplicación envía un comando al Arduino ('o' para abrir, 'c' para cerrar).
4. El Arduino recibe el dato, hace parpadear los LEDs y mueve el servo en
consecuencia.
5. El sistema queda en espera de un nuevo comando.