Questo e’ il primo articolo riguardante una sfida (tra me e me) riguardante la costruzione di tante piccole stazioni meteo (economicissime) da posizionare in punti chiave di una rete hiperlan. Con alcuni amici abbiamo configurato una rete a 5 Ghz vasta quasi 100km…perchè non sfruttarla per fornire informazioni meteo delle zone più interessanti?
Unico requisito…funzionante via ethernet e super economica.
La testa va subito ad Arduino…ne avevo in casa uno “pluriusato”…aveva la ethernet shield…perfetto! A questo c’e’ da sommare pero’ dei sensori per rilevare le condizioni climatiche. Iniziamo con quelle basilari….Temperatura, Umidità e Luminosità.
I primi due valori si rilevano con un sensore solo…il DHT 11 , per la luminosità basta una fotoresistenza su un piedino analogico.
Se ci orientiamo sul mercato orientale…non arriviamo a 5 Euro di spesa 🙂
Iniziamo….
Come al solito mi scuso per le foto…ma sono progetti che nascono al momento e le foto sono scattate con il cellulare.
Il DHT ha una sua libreria per leggere i valori…e si collega ad un piedino digitale.
La fotoresistenza e’ in serie ad una resistenza da 100k e la lettura punta su un piedino analogico. Alimentata da un pin digitale (portato a HIGH) non fa altro che variare la tensione…e quindi restituire un valore da 0 (buio totale) a 1023 (piena luce).
Assemblo il tutto in un contenitore di recupero e inizio a scrivere il codice.
Inizio prima a provare i sensori singoli e poi passo alla connettività….cosi da non incorrere in problematiche di scrittura.
Questi dati pero’ devono essere acquisiti, lavorati e resi utilizzabili per i visitatori.
Mi avvalgo quindi THINGSPEAK … e in 10 min ho i dati trasformati in grafici …ONLINE 🙂
Per i più smanettoni allego il codice…modificabile…convertibile….condivisibile.
#include "DHT.h" #include "ThingSpeak.h" #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetClient client; #define DHTPIN 2 // Pin connessione DHT11 #define DHTTYPE DHT11 // modello di sensore temperatura DHT 11 DHT dht(DHTPIN, DHTTYPE); unsigned long myChannelNumber = XXXXXXXX; // aggiungere qui il numero del canale const char * myWriteAPIKey = "YYYYYYYYYYYYYYY"; // aggiungere qui l'api key void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); pinMode(7, OUTPUT); digitalWrite(7 , HIGH); // questo pin e' usato solo per alimentare il sensore di luminosità ThingSpeak.begin(client); connectToInternet(); } void connectToInternet() { if (client.connected()) { client.stop(); } Serial.println("Connecting to the internet via ethernet..."); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); for(;;){ ; } } Serial.println(Ethernet.localIP()); } void loop() { delay(2000); int sensorValue = analogRead(A0); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } ThingSpeak.setField(1, t); ThingSpeak.setField(2, h); ThingSpeak.setField(3, sensorValue); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); Serial.print("Umidità: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *C "); Serial.print(" Luminosità: "); Serial.println( sensorValue); delay(480000); }
….a breve la seconda versione con ESP8266 🙂
Buon divertimento!