Proyecto final, estación de alerta

Junta temperatura, luz, pantalla, botón y alerta en un solo sistema, y documenta cómo lo pruebas.

Qué vas a construir

Una estación de alerta que:

  • Lee la temperatura y la luz.
  • Muestra ambos valores y el umbral activo en una pantalla LCD.
  • Enciende una alerta cuando la temperatura supera el umbral.
  • Cambia el umbral cada vez que presionas un botón.

Lo que aprendes

  • Cómo combinar varias entradas y salidas en un solo programa.
  • Cómo leer un LDR con un divisor de voltaje.
  • Cómo detectar un solo pulso de botón, sin que se repita.
  • Cómo documentar y probar un sistema con varias partes.

Materiales en Tinkercad

  • Arduino Uno R3
  • Sensor TMP36
  • LDR (fotorresistencia)
  • Resistencia de 10 kΩ, para el LDR
  • Pulsador
  • LED y resistencia de 220 Ω
  • LCD 16×2 y potenciómetro de 10 kΩ para el contraste
  • Protoboard y cables

Paso 1: Mapa de conexiones

Componente Arduino
TMP36 (salida) A0
LDR y resistencia de 10 kΩ (divisor) A1
Pulsador pin 7 y GND
LED de alerta pin 8, con resistencia de 220 Ω a GND
LCD pines 12, 11, 5, 4, 3, 6 (como en Mostrar datos en una pantalla LCD)

El LDR: conecta una pata a 5V y la otra a A1. Entre A1 y GND pon la resistencia de 10 kΩ. Así A1 lee un voltaje que cambia con la luz.

Paso 2: Escribe el código

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 6);

const int SENSOR_TEMP = A0;
const int SENSOR_LUZ = A1;
const int BOTON = 7;
const int ALERTA = 8;

float umbrales[] = {25.0, 30.0, 35.0};
int indiceUmbral = 1;  // empieza en 30 °C
int ultimoEstadoBoton = HIGH;

float leerCelsius() {
  int lectura = analogRead(SENSOR_TEMP);
  float voltaje = lectura * 5.0 / 1024.0;
  return (voltaje - 0.5) * 100.0;
}

void setup() {
  lcd.begin(16, 2);
  pinMode(BOTON, INPUT_PULLUP);
  pinMode(ALERTA, OUTPUT);
}

void loop() {
  // Detecta solo el momento en que el botón se presiona
  int estado = digitalRead(BOTON);
  if (estado == LOW && ultimoEstadoBoton == HIGH) {
    indiceUmbral = (indiceUmbral + 1) % 3;  // 0, 1, 2 y vuelve a 0
    delay(200);                              // evita contar dos pulsos
  }
  ultimoEstadoBoton = estado;

  float celsius = leerCelsius();
  int luz = analogRead(SENSOR_LUZ);
  float umbral = umbrales[indiceUmbral];

  lcd.setCursor(0, 0);
  lcd.print("T:");
  lcd.print(celsius, 1);
  lcd.print("C L:");
  lcd.print(luz);
  lcd.print("   ");

  lcd.setCursor(0, 1);
  lcd.print("Umbral:");
  lcd.print(umbral, 0);
  lcd.print("C ");

  if (celsius >= umbral) {
    digitalWrite(ALERTA, HIGH);
  } else {
    digitalWrite(ALERTA, LOW);
  }

  delay(300);
}

Dos partes del código merecen atención:

  • ultimoEstadoBoton guarda el estado anterior. Así el cambio de umbral ocurre una sola vez por pulsación, no mientras mantienes el botón.
  • (indiceUmbral + 1) % 3 vuelve a 0 después del último valor. El operador % es el residuo de la división.

Paso 3: Documenta tres pruebas

Este es el entregable de la clase. Haz tres pruebas y anótalas en una tabla:

Prueba Qué haces Qué esperas Qué pasó
1. Umbral Presiona el botón una vez El umbral pasa de 30 a 35 °C
2. Alerta Sube la temperatura por encima del umbral El LED y la línea “Umbral” reflejan la alerta
3. Luz Cambia la intensidad de luz del LDR El valor “L:” de la pantalla cambia

Completa la última columna con lo que realmente observaste. Si algo no coincide, anota qué crees que causó la diferencia.

Cómo sabes que lo lograste

  • Los tres valores de la pantalla cambian como lo describe la tabla.
  • El LED de alerta se comporta según el umbral activo.
  • Tienes el circuito compartido y la tabla completa.

Qué salió mal

El botón cambia el umbral varias veces seguidas. Tu botón rebota. Sube el valor de delay(200) a 300 o 400.

El valor de luz siempre es 0 o 1023. Revisa el divisor: la resistencia de 10 kΩ debe ir entre A1 y GND, no entre A1 y 5V.

La pantalla muestra el texto cortado. Cada línea tiene 16 caracteres. Si algo no cabe, acorta la etiqueta.

Después de este curso

Con esta clase terminas el curso de Arduino Uno en Tinkercad. El siguiente paso natural es probar las mismas ideas en una placa real: el voltaje de los pines, la resistencia y las lecturas analógicas se comportan igual, pero con ruido real.