Início › Exercícios Intermédios › Estação Meteo
🔀 Multi-componente

🌤️ Estação Meteorológica

LM35 + LDR + LCD 16×2 + Alertas. Mostra temperatura e luz no ecrã em tempo real.

⏱️ Duração: 60 min
🧩 Componentes: LM35 + LDR + LCD + LEDs
📚 Pré-req: Temperatura + LDR + LCD

O Projeto

Uma estação meteorológica que mede temperatura (LM35) e luminosidade (LDR), apresenta os valores no LCD e acende LEDs de alerta para condições extremas.

🌡️

Linha 1 do LCD

Temperatura em °C medida pelo LM35.

☀️

Linha 2 do LCD

Luminosidade em percentagem medida pelo LDR.

🔴

LED Vermelho

Acende quando temperatura > 28°C.

🟡

LED Amarelo

Acende quando está muito escuro (luz < 20%).

Ligação Completa

🔌 Todas as ligações

Arduino→Componente
A0→LM35 (pino central / VOUT)
A1→LDR + Resistência 10kΩ → GND
Pino 12→LCD RS
Pino 11→LCD E
Pino 5→LCD D4
Pino 4→LCD D5
Pino 3→LCD D6
Pino 2→LCD D7
Pino 9→Resistência 220Ω → LED Vermelho
Pino 10→Resistência 220Ω → LED Amarelo
5V→LM35 (VCC) + LDR (pino 1) + LCD (VDD, pin15)
GND→LM35 (GND) + LCD (VSS, RW, pin16) + LEDs (−)
🔧Não te esqueças do potenciómetro de contraste do LCD (pino V0 do LCD ao cursor do pot).

Código

estacao_meteorologica.ino
#include <LiquidCrystal.h>

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

const int LM35    = A0;
const int LDR     = A1;
const int LED_HOT = 9;   // Vermelho
const int LED_DRK = 10;  // Amarelo

const float TEMP_MAX = 28.0;
const int   LUZ_MIN  = 200;   // em 0–1023

void setup() {
  pinMode(LED_HOT, OUTPUT);
  pinMode(LED_DRK, OUTPUT);
  lcd.begin(16, 2);
  lcd.print("Estacao Meteo");
  delay(2000);
  lcd.clear();
}

float lerTemperatura() {
  int leitura = analogRead(LM35);
  float tensao = leitura * (5000.0 / 1023.0);
  return tensao / 10.0;
}

int lerLuz() {
  return analogRead(LDR);
}

void loop() {
  float temp = lerTemperatura();
  int   luz  = lerLuz();
  int   luzPct = map(luz, 0, 1023, 0, 100);

  // Linha 1: Temperatura
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temp, 1);
  lcd.print((char)223);   // °
  lcd.print("C   ");

  // Linha 2: Luminosidade
  lcd.setCursor(0, 1);
  lcd.print("Luz:  ");
  lcd.print(luzPct);
  lcd.print("%     ");

  // Alertas LED
  digitalWrite(LED_HOT, temp > TEMP_MAX ? HIGH : LOW);
  digitalWrite(LED_DRK, luz  < LUZ_MIN  ? HIGH : LOW);

  delay(500);
}

🎯 Desafios

🔊

Alerta Sonoro

Adiciona um buzzer que toca quando a temperatura ultrapassa o limite.

📈

Gráfico Série

Envia dados pelo Monitor Série em formato CSV para criar um gráfico no computador.

Exercício Extra: Bluetooth → ← Todos os exercícios