⭐⭐ Principiante avanzato
⏱️ 20 minuti
Mini stazione meteo
Costruisci una mini stazione meteo. Il DHT11 misura la temperatura e l'umidità dell'aria. Lo schermino OLED le mostra.
🧰 Che cosa ti serve?
🔌
Cavo USB + Cavetti jumper🗺️ Schema di collegamento
Segui i fili dall'Arduino a ogni componente. Puoi scegliere tu i colori dei fili.
| Da | A |
|---|---|
Arduino UNO · D2 |
Sensore di temperatura DHT11 · DAT |
Arduino UNO · 5V |
Sensore di temperatura DHT11 · VCC |
Arduino UNO · GND |
Sensore di temperatura DHT11 · GND |
Arduino UNO · A4 |
Piccolo schermo OLED 0,91" · SDA |
Arduino UNO · A5 |
Piccolo schermo OLED 0,91" · SCL |
Arduino UNO · 5V |
Piccolo schermo OLED 0,91" · VCC |
Arduino UNO · GND |
Piccolo schermo OLED 0,91" · GND |
🛠️ Così lo costruisci
- Collega il DHT11: DAT al pin 2, VCC a 5V e GND a GND.
- Collega lo schermo OLED: SDA a A4, SCL a A5, VCC a 5V e GND a GND.
- Consiglio: due pezzi hanno bisogno di 5V e GND. Usa le strisce + e − della tua breadboard.
💻 Il codice
// Mini stazione meteo
// Il DHT11 misura la temperatura e l'umidità dell'aria. Lo schermino OLED lo mostra.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
const int DHT_PIN = 2; // DAT del DHT11 è sul pin 2
DHT dht(DHT_PIN, DHT11);
Adafruit_SSD1306 schermo(128, 32, &Wire, -1); // OLED da 128 x 32 pixel (SDA = A4, SCL = A5)
void setup() {
Serial.begin(9600);
dht.begin();
if (!schermo.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C è l'indirizzo dello schermo
Serial.println(F("Schermo non trovato. Controlla i fili di SDA e SCL."));
while (true); // Stop: senza schermo non serve
}
schermo.setTextColor(SSD1306_WHITE);
}
void loop() {
float temperatura = dht.readTemperature(); // In gradi Celsius
float umidita = dht.readHumidity(); // In percentuale
schermo.clearDisplay();
schermo.setTextSize(2);
schermo.setCursor(0, 0);
if (isnan(temperatura) || isnan(umidita)) { // La misura non riesce?
schermo.setTextSize(1);
schermo.print(F("DHT11 non trovato"));
} else {
schermo.print(temperatura, 1);
schermo.print((char)247); // Il simbolo dei gradi
schermo.println(F("C"));
schermo.print(umidita, 0);
schermo.print(F("% umid"));
Serial.print(F("Temperatura: "));
Serial.print(temperatura);
Serial.print(F(" C Umid: "));
Serial.print(umidita);
Serial.println(F(" %"));
}
schermo.display(); // Solo ora tutto appare davvero sullo schermo
delay(2000); // Il DHT11 può misurare solo ogni 2 secondi
}
🧠 Che cosa fa il codice?
- Il DHT11 è sul pin 2. Con
readTemperature()ereadHumidity()leggiamo i valori. - Lo schermo OLED comunica via SDA (A4) e SCL (A5). Con
print()mettiamo il testo sullo schermo. - Ogni 2 secondi arriva una nuova misura. La misura non riesce? Allora vedi un messaggio.
🎯 Prova anche…
- Mostra anche la temperatura in Fahrenheit
- Fai accendere un LED se fa più caldo di 25 gradi
- Ricorda la temperatura più alta di oggi e mostra anche quella
🚀 Costruisci questo progetto con Codey: apri codey.online/it/starter-kits/uno/projects/weather-station e clicca su FAI QUESTO. Così il codice e lo schema di collegamento sono subito pronti.
Codey Online è un prodotto di OTRONIC