Proyecto final, red de sensores
Junta dos sensores en un bus I2C, muéstralos en una pantalla LCD y documenta las pruebas del enlace.
Qué vas a construir
Un maestro que pide datos a dos esclavos cada 2 segundos. Muestra ambos valores en una pantalla LCD y enciende una alerta cuando algún esclavo no responde.
Lo que aprendes
- Cómo combinar I2C con una pantalla y una alerta en un solo sistema.
- Cómo detectar un fallo de enlace y reaccionar a él.
- Cómo documentar un sistema de comunicación con pruebas repetibles.
Materiales en Tinkercad
- Tres Arduino Uno R3 (un maestro y dos esclavos)
- Dos potenciómetros de 10 kΩ, uno por esclavo
- LCD 16×2 y potenciómetro de 10 kΩ para el contraste, en el maestro
- LED y resistencia de 220 Ω, en el maestro
- Cables
Paso 1: Mapa de conexiones
Bus I2C: todos los dispositivos comparten A4 (SDA), A5 (SCL) y GND.
Esclavos: cada potenciómetro va a A0, con 5V y GND.
Maestro, pantalla: pines 12, 11, 5, 4, 3 y 6, como en Mostrar datos en una pantalla LCD del curso de Arduino.
Maestro, alerta: LED en el pin 7, con resistencia de 220 Ω a GND.
Paso 2: Código de cada esclavo
Usa el mismo programa en los dos esclavos. Cambia solo la dirección:
#include <Wire.h>
const int DIRECCION = 8; // en el segundo esclavo, cambia esto a 9
int valor = 0;
void setup() {
Wire.begin(DIRECCION);
Wire.onRequest(responder);
}
void loop() {
valor = analogRead(A0) / 4;
delay(100);
}
void responder() {
Wire.write(valor);
}
Paso 3: Código del maestro
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 6);
const int ALERTA = 7;
int pedir(int direccion) {
if (Wire.requestFrom(direccion, 1) == 0) {
return -1; // sin respuesta
}
if (Wire.available()) {
return Wire.read();
}
return -1;
}
void setup() {
Wire.begin();
lcd.begin(16, 2);
pinMode(ALERTA, OUTPUT);
}
void loop() {
int a = pedir(8);
int b = pedir(9);
lcd.setCursor(0, 0);
lcd.print("S8:");
lcd.print(a);
lcd.print(" S9:");
lcd.print(b);
lcd.print(" ");
lcd.setCursor(0, 1);
if (a < 0 || b < 0) {
lcd.print("ERROR de enlace ");
digitalWrite(ALERTA, HIGH);
} else {
lcd.print("Enlace OK ");
digitalWrite(ALERTA, LOW);
}
delay(2000);
}
Paso 4: Ejecuta las tres pruebas
Completa esta tabla mientras pruebas. Es el entregable de la clase.
| Prueba | Qué haces | Qué esperas | Qué pasó |
|---|---|---|---|
| 1. Operación normal | Inicia la simulación | Ambos valores aparecen y dice “Enlace OK” | |
| 2. Cambio de valor | Gira el potenciómetro del esclavo 9 | Solo cambia “S9” | |
| 3. Fallo de enlace | Quita el cable de SDA de un esclavo | Dice “ERROR de enlace” y se enciende la alerta |
Cómo sabes que lo lograste
- La pantalla muestra ambos valores y “Enlace OK” con el circuito completo.
- Al girar un potenciómetro, cambia solo su valor en pantalla.
- Al quitar un cable, aparece el error y se enciende la alerta.
- La tabla de pruebas está completa, con lo que realmente observaste.
Qué salió mal
Los dos valores son iguales. Los esclavos tienen la misma dirección. Revisa DIRECCION en cada uno.
La pantalla muestra texto cortado o restos. Revisa los espacios al final de cada print(). Son los que borran los caracteres anteriores.
El maestro no muestra error al quitar un cable. Detén la simulación antes de cambiar el circuito y vuelve a iniciarla.
Después de este curso
Con esta clase terminas el curso de redes por cable. El siguiente paso es llevar la misma lógica a una red inalámbrica con MQTT, donde los mensajes viajan por WiFi en lugar de por un cable. Ese tema requiere una placa con WiFi y se cubrirá en otro curso.