Una stazione meteo da 4 soldi (v 1.0)

 

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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *