Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Come impostare un IP statico per Raspberry PI

    Novembre 10, 2023

    Le migliori rendite passive tecnologiche per guadagna soldi

    Novembre 4, 2023

    Guida all’Acquisto: I Migliori Router WiFi del 2023

    Settembre 13, 2023
    Facebook X (Twitter) Instagram
    Facebook X (Twitter) Instagram
    iSmanettoneiSmanettone
    Subscribe
    • Home
    • News
    • Programmazione
    • iPhone
    • Wifi e sicurezza
    • Backtrack
    • Arduino
    • Android
    • Apple
    • Raspberry
    • Altro
    iSmanettoneiSmanettone
    Home»Arduino»Lezione 15: Come realizzare una stazione meteo con Arduino
    Arduino

    Lezione 15: Come realizzare una stazione meteo con Arduino

    ismanettoneblogBy ismanettoneblogAprile 25, 20147 commenti6 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Come realizzare una stazione meteo professionale con Arduino

     

    Nelle scorse puntate abbiamo visto come è semplice collegare Arduino alle rete; questo è stato possibile sfruttando le schede Ethernet disponibili sul mercato.

    In questo articolo vedremo come realizzare una stazione meteo sfruttando un po’ di dispositivi che abbiamo visto precedentemente. Vediamo un po’ qual è l’occorrente per poter realizzare questo progetto.

     

     

    Requisiti per il progetto

     

    Hardware

     

    • 2 x Arduino Uno
    • Scheda Ethernet W5100
    • 2 x DHTXX (nel nostro caso DHT22)
    • Kit TX RX Wireless 433 MHz AMSK
    • 2 x Resistenza da 10 kOhm
    • Un po’ di cavi flessibili

    Software

    • Libreria DHT22 per leggere la temperatura e umidità https://github.com/adafruit/DHT-sensor-library
    • Libreria VirtualWire per trasmettere i dati http://bayesianadventures.wordpress.com/2013/09/20/arduino-rf-communications-data-encoder-for-virtualwire/
    • Libreria Xively https://github.com/xively/xively_arduino
    • I miei programmi per Arduino https://github.com/jackbell16/Arduino-Book-Code/tree/master/Capitolo%2015

     

    Come funziona il sistema

    guida-all-acquisto-stazione-meteorologica

     

    Il sistema è articolato da molti dispositivi, in quanto è necessario leggera la temperatura che c’è fuori di casa, inviarla in modalità  wireless ad un Arduino Uno connesso alla rete, che dovrà poi inviare i dati ad un servizio di archiviazione (Xively) per poter leggere e analizzare i dati.

    Come appena detto, fuori casa verrà posto un Arduino Uno a cui verrà collegato un trasduttore di temperatura/umidità, il quale invierà i dati sfruttando i trasmettitori wireless che abbiamo già visto nei scorsi progetti ad un altro Arduino Uno, che sarà dotato anch’esso di un trasduttore di temperatura/umidità per leggere i rispettivi valori presenti in casa ed inviarli ad un server, attraverso il cavo Ethernet e la connessione Internet di casa.

    Ovviamente sarebbe anche possibile far inviare i dati della temperatura/umidità fuori di casa, ma questo comporterebbe l’acquisto di una scheda Wireless per Arduino oppure l’acquisto di un Arduino Yun. Per ora vogliamo tenere il costo del progetto contenuto, ma prossimamente vedremo altri strumenti interessanti, che permetteranno di aumentare le funzionalità della stazione meteo.

     

    Come collegare i dispositivi

     

    Come detto in precedenza, il progetto si basa sull’utilizzo di due Arduino, di cui uno verrà collocato in casa e l’altro all’esterno.

     

    Arduino fuori casa (TX)

    DHT22

    Bildschirmfoto-2012-10-17-um-14.02.38

    PIN 1 -> VCC

    PIN 2 (Data) -> PIN 2 in pull-up con una resistenza da 10 kOhm

    PIN 3 -> Niente

    PIN 4 -> GND

     

    Wireless KIT 433 MHz

     txrx-433-pin

    PIN ATAD -> 12

    PIN VCC -> 5 V

    PIN -> GND

     

     

    Arduino in casa

     

    Per quanto riguarda il sensore di temperatura, il collegamento è il medesima, mentre per quanto riguarda il ricevitore wireless, è necessario collegare i cavi, nel modo che è riportato nell’immagine precedente. Inoltre, occorre ricordare, che questo Arduino dovrà avere la Ethernet Shield, per poter inviare i dati al servizio Xively.

     

    Passiamo alla parte dei codici

     

    Nella repo di Github sono presenti tre programmi di Arduino

     

    • DHT22_wireless_TX
    • DHT22_wireless_RX_Serial
    • Xively_DHT22

    Il primo programma è quello che verrà caricato sull’Arduino che verrà posto all’esterno e permetterà di inviare i dati che si riferiscono alla temperatura all’umidità, all’Arduino che si troverà in casa. Per testare il corretto funzionamento della sola comunicazione tra i due dispositivi, è possibile utilizzare l’applicazione DTH22_wireless_RX_Serial, che permetterà di far mostrare i valori letti all’esterno, sulla seriale di Arduino IDE.

    Mentre l’ultimo programma, Xively_DHT22, permette anche di caricare i dati su Xively. Per quest’ultimo è necessario registrarsi sul sito, per poter ottenere alcuni parametri, che devono essere sostituiti all’interno del codice.

     

     

    DHT22_wireless_TX

    /**
    Questo programma permette di inviare i valori della temperatura e dell'umidità fuori casa, ad un Arduino, che avrà il compito di caricare
    i dati su Xively
    Versione 1.0
    Autore Giacomo Bellazzi
    */
    #include "DataCoder.h"
    #include "VirtualWire.h"
    #include "DHT.h"
    #define DHTPIN 2 
    #define DHTTYPE DHT22
    
    int transmit_pin = 12;
    int led_pin = 13;
    int baudRate = 800;
    int delayTime = 10000;
    
    DHT dht(DHTPIN, DHTTYPE);
    
    void setup()
    {
      pinMode(led_pin,OUTPUT);
      Serial.begin(9600);
      SetupRFDataTxnLink(transmit_pin, baudRate);
      dht.begin();
    }
    
    void loop()
    {
      float outArray[2];
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      outArray[0] = t;
      outArray[1] = h;
      union RFData outDataSeq;
      EncodeRFData(outArray, outDataSeq); 
      TransmitRFData(outDataSeq);  
      delay(delayTime);//Tempo che passa tra l'invio dei dati
    }

     

     

    DHT22_wireless_RX_Serial

     

    /**
    Questo programma permette di ricevere i dati della temperatura e dell'umidità, che vengono inviati da Arduino posto fuori casa,
    sfruttando i sensori Wireless 433 MHz
    Versione 1.0
    Autore Giacomo Bellazzi
    */
    #include <DataCoder.h>
    #include <VirtualWire.h>
    
    const int rx_pin = 11;
    const int led_pin = 13;
    const int baudRate = 800;
    
    void setup()
    {
      delay(1000);
      Serial.begin(9600);
      pinMode(led_pin,OUTPUT);
      digitalWrite(led_pin,LOW);
      SetupRFDataRxnLink(rx_pin, baudRate);
    }
    
    void loop()
    {
      uint8_t buf[VW_MAX_MESSAGE_LEN];
      uint8_t buflen = VW_MAX_MESSAGE_LEN;
      union RFData inDataSeq;//To store incoming data
      float inArray[2];//To store decoded information
      if(RFLinkDataAvailable(buf, &buflen))
      {
            for(int i =0; i< buflen; i++)
            {
              inDataSeq.s[i] = buf[i];
            }
            DecodeRFData(inArray, inDataSeq);
            Serial.println("Temperature: ");
            Serial.print(inArray[0]);
            Serial.print(" ° Humidity: ");
            Serial.print(inArray[1]);
      }
    }

    Xively_DHT22 (OCCORRE INSERIRE I VALORI DEL PROPRIO ACCOUNT XIVELY)

    /**
    Questo programma permette di leggere la temperatura e l'umidità dentro e fuori casa e inviare i dati al servizio Xively
    Versione 1.0
    Autore Giacomo Bellazzi
    */
    #include "SPI.h"
    #include "Ethernet.h"
    #include "HttpClient.h"
    #include "DataCoder.h"
    #include "VirtualWire.h"
    #include "Xively.h"
    #include "DHT.h"
    
    #define DHTPIN 3    
    //#define DHTTYPE DHT11   // DHT 11 
    #define DHTTYPE DHT22   // DHT 22  (AM2302)
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)
    DHT dht(DHTPIN, DHTTYPE);
    int rx_pin = 11;
    int baudRate = 800;
    // MAC address for your Ethernet shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    // Your Xively key to let you upload data
    char xivelyKey[] = "INSERIRE IL PROPRIO VALORE";
    // Define the strings for our datastream IDs
    char tIN[] = "TemperaturaDentro";
    char hIN[] = "UmiditaDentro";
    char tOUT[] = "TemperaturaFuori";
    char hOUT[] = "UmiditaFouri";
    XivelyDatastream datastreams[] = {
      XivelyDatastream(tIN, strlen(tIN), DATASTREAM_FLOAT),
      XivelyDatastream(hIN, strlen(hIN), DATASTREAM_FLOAT),
      XivelyDatastream(tOUT, strlen(tOUT), DATASTREAM_FLOAT),
      XivelyDatastream(hOUT, strlen(hOUT), DATASTREAM_FLOAT),
    
     };
    // INSERIRE IL PROPRIO VALORE
    XivelyFeed feed(12345678, datastreams, 4 /* number of datastreams */);
    
    EthernetClient client;
    XivelyClient xivelyclient(client);
    
    void setup() {
      Serial.begin(9600);
      Serial.println("Starting single datastream upload to Xively...");
      Serial.println();
      dht.begin();
      while (Ethernet.begin(mac) != 1)
      {
        Serial.println("Error getting IP address via DHCP, trying again...");
        delay(15000);
      }
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());
      SetupRFDataRxnLink(rx_pin, baudRate);
    }
    
    void loop() {
      float hIN = dht.readHumidity();
      float tIN = dht.readTemperature();
      uint8_t buf[VW_MAX_MESSAGE_LEN];
      uint8_t buflen = VW_MAX_MESSAGE_LEN;
      union RFData inDataSeq;//To store incoming data
      float inArray[2];//To store decoded information
      if(RFLinkDataAvailable(buf, &buflen))
      {
            for(int i =0; i< buflen; i++)
            {
              inDataSeq.s[i] = buf[i];
            }
            DecodeRFData(inArray, inDataSeq);
            float tOUT = inArray[0];
            float hOUT = inArray[1];
            // Setting data to send to Xively
            datastreams[0].setFloat(tIN);
            datastreams[1].setFloat(hIN);
            datastreams[2].setFloat(tOUT);
            datastreams[3].setFloat(hOUT);
            Serial.println("Uploading it to Xively");
            int ret = xivelyclient.put(feed, xivelyKey);
            Serial.print("xivelyclient.put returned ");
            Serial.println(ret);
      }
    }

     

     

    Ed ecco il risultato finale:

    Xively

    Come sempre i miei codici sono disponibile a questo indirizzo https://github.com/jackbell16/Arduino-Book-Code/tree/master/Capitolo%2015

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    ismanettoneblog

    Related Posts

    Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

    Marzo 15, 2017

    Progetto rilevatore apertura garage con Arduino

    Gennaio 2, 2017

    C.H.I.P il nuovo PC low cost targato Linux da 9$

    Gennaio 1, 2017
    View 7 Comments

    7 commenti

    1. Ale on Febbraio 26, 2015 10:08 am

      Complimenti per il tutorial molto ben fatto.
      Ho cercato un po’ di info sulla libreria Datacoder.h ma vedo che è poco usata, in particolare mi chiedevo se è possibile utilizzare la funzione RFLinkDataAvailable per determinare se arduino ha perso il segnale della trasmittente.
      Ovvero se non sta ricevendo nulla.

      • ismanettoneblog on Febbraio 27, 2015 9:43 am

        Salve,
        il principale utilizzo della libreria Datacoder.h è per via della semplicità con cui è possibile inviare informazioni (int, string, float etc..). Per quanto riguarda una corretta verifica di ricezione, il consiglio è quello di installare un kit TX e RX sia su chi trasmette e su chi riceve, in modo da poter avere conferma del corretto invio del messaggio.

    2. Marcello on Gennaio 16, 2016 1:59 am

      Salve,
      complimenti per l’ottimo lavoro svolto in questo e negli altri progetti che hai pubblicato.
      Trovo utile l’idea dell’utilizzo di DataCoder per snellire un po’ le operazioni sui tipi di dato, tuttavia, provando il tuo sketch (senza modifiche), la IDE mi dà il seguente errore: ‘SetupRFDataRxnLink’ was not declared in this scope
      lo stesso avviene se utilizzo lo sketch del progetto simile su Bayesian Adventures.
      Cosa può essere che non va?

    3. stazione meteo on Ottobre 6, 2016 3:50 pm

      Davvero interessante applicazione! L’unico dubbio che ho riguarda i consumi, dal momento che è tutto sempre attivo quanto consuma il sistema?

      • ismanettoneblog on Ottobre 7, 2016 7:26 am

        Salve,
        il numero esatto non saprei dirlo perché nell’esempio dell’articolo l’alimentazione viene fornita da prese di correnti e quindi il consumo non è un problema. Facendo due conti non penso vengano superati i 100mA, ma è possibile ridurre notevolmente il consumo, mettendo il sleep mode l’Arduino. In alternativa esistono schede che contengono già una scheda Wireless, come Photon.

    4. federico on Ottobre 25, 2016 9:41 pm

      Buonasera, ho provato a seguire passo a passo quanto descritto ma non riesco a ricevere nulla di sensato, mi riceve i dati in continuo e da stampa seriale ottengo 0 per il vettore 0 e -8.04 per il secondo, oppure -0.00 per il primo e ovf per il secondo. Sai dirmi dove sbaglio?

      • ismanettoneblog on Ottobre 31, 2016 8:30 am

        Salve,
        ci sono tanti componenti in questo progetti e quindi diversi possibili motivi del malfunzionamento. Uno può essere che i due sensori wireless sono troppo distanti, oppure il sensore di temperatura non funziona bene. Proverei anche a verificare sul dispositivo che manda la temperatura, se tale valore è corretto

    Donazione PayPal
    Instructables
    Instructables
    Alla Scoperta di Backtrack
    Alla scoperta di Backtrack
    Raspberry PI
    Kali Linux
    Arduino
    Kali Linux
    Github Repo
    Instructables
    Chi sono e come contattarmi
    Instructables
    Email
    Blogroll
    • Blog di AlterVista
    • Come iniziare
    • Forum di Supporto
    • Guide WordPress
    Meta
    • Accedi
    • Feed dei contenuti
    • Feed dei commenti
    • WordPress.org
    Editors Picks
    8.5

    Apple Planning Big Mac Redesign and Half-Sized Old Mac

    Gennaio 5, 2021

    Autonomous Driving Startup Attracts Chinese Investor

    Gennaio 5, 2021

    Onboard Cameras Allow Disabled Quadcopters to Fly

    Gennaio 5, 2021
    Top Reviews
    9.1

    Review: T-Mobile Winning 5G Race Around the World

    By ismanettoneblog
    8.9

    Samsung Galaxy S21 Ultra Review: the New King of Android Phones

    By ismanettoneblog
    8.9

    Xiaomi Mi 10: New Variant with Snapdragon 870 Review

    By ismanettoneblog
    Advertisement
    Demo
    iSmanettone
    Facebook X (Twitter) Instagram Pinterest Vimeo YouTube
    • Home
    • News
    • Arduino
    • Raspberry
    © 2025 ThemeSphere. Designed by ThemeSphere.

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker rilavato
    Ad Blocker rilavato
    Il nostro sito web è reso possibile dalla visualizzazione di pubblicità online ai nostri visitatori. Ti preghiamo di supportarci disabilitando il tuo Ad Blocker