Sommario:
- Fase 1: Mini stazione meteorologica con Attiny85: il trasmettitore
- Passaggio 2: mini stazione meteorologica con Attiny85: il ricevitore
- Step 3: Mini Stazione Meteo Con Attiny85/45: il Display
- Fase 4: Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
- Passaggio 5: Mini stazione meteorologica: l'antenna
- Passaggio 6: aggiunta di un BMP180
Video: Mini stazione meteorologica con Attiny85: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
In una recente istruzione Indigod0g ha descritto una mini stazione meteorologica che funziona abbastanza bene, utilizzando due Arduino. Forse non tutti vogliono sacrificare 2 Arduino per ottenere letture di umidità e temperatura e ho commentato che dovrebbe essere possibile fare una funzione simile con due Attiny85. Immagino che parlare sia facile, quindi è meglio che metta i miei soldi dove è la mia bocca.
In effetti, se combino due istruttori precedenti ho scritto:
Interfaccia LCD a 2 fili per Arduino o Attiny e ricezione e invio di dati tra Attiny85 (Arduino IDE 1.06), quindi la maggior parte del lavoro è già stata eseguita. Ho solo bisogno di adattare un po' il software.
Ho scelto una soluzione lcd a due fili con un registro a scorrimento, piuttosto che un LCD I2C perché su Attiny il registro a scorrimento è più facile da implementare rispetto al bus I2C. Tuttavia… se ad esempio vuoi leggere un sensore di pressione BMP180 o BMP085, hai comunque bisogno di I2C per quello, quindi potresti anche usare un LCD I2C. TinyWireM è una buona libreria per I2C su Attiny (ma richiede spazio extra).
BOM Il trasmettitore: modulo trasmettitore DHT11 Attiny85 10 k resistore 433 MHz
Il ricevitore Attiny85 resistore 10k modulo ricevitore 433 MHz
Il display 74LS164 registro a scorrimento 1N4148 diodo 2x1k resistore 1x1k resistore variabile un display LCD 2x16
Fase 1: Mini stazione meteorologica con Attiny85: il trasmettitore
Il trasmettitore è una configurazione di base dell'Attiny85 con una resistenza di pull-up sulla linea di ripristino. Un modulo trasmettitore è collegato al pin digitale '0' e il pin dati DHT11 si collega al pin digitale 4. Collegare un cavo di 17,2 cm come antenna (per un'antenna molto migliore vedere il passaggio 5). Il software è il seguente:
//funzionerà su Attiny//RF433=D0 pin 5
//DHT11=D4 pin 3 // librerie #include //Da Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 //pin dove è collegato il trasmettitore //variabili float h=0; flottante t=0; int trasmettere_t = 0; int trans_h = 0; int broadcast_data = 0; void setup() { pinMode(1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } void loop() { int chk = DHT11.read11(DHT11PIN); h=DHT11.umidità; t=DHT11.temperatura; // Lo so, sto usando 3 variabili intere qui // dove potrei usare 1 // ma è così che è più facile seguire send_h=100* (int) h; trasmissione_t=(int)t; send_data=transmit_h+transmit_t; man.transmit(transmit_data); ritardo (500); }
Il software utilizza il codice Manchester per inviare i dati. Legge il DHT11 e memorizza la temperatura e l'umidità in 2 galleggianti separati. Poiché il codice di Manchester non invia float, ma un intero, ho diverse opzioni: 1- dividere i float in due interi ciascuno e inviarli2- inviare ciascun float come intero3- inviare i due float come un intero Con l'opzione 1 devo combinare gli interi in float di nuovo nel ricevitore e devo identificare quale intero è cosa, rendendo il codice prolisso Con l'opzione 2 devo ancora identificare quale intero è per l'umidità e quale per la temperatura. Non posso andare in sequenza da solo nel caso in cui un intero venga perso durante la trasmissione, quindi avrei bisogno di inviare un identificatore allegato all'intero. Con l'opzione 3, posso inviare solo un intero. Ovviamente questo rende le letture un po' meno accurate - entro 1 grado- e non si possono inviare temperature sotto lo zero, ma è solo un semplice codice e ci sono modi per aggirarlo. Per ora si tratta solo del principio. Quindi quello che faccio è trasformare i float in numeri interi e moltiplico l'umidità per 100. Quindi aggiungo la temperatura all'umidità moltiplicata. Dato che l'umidità non sarà mai 100% il il numero massimo che otterrò è 9900. Dato che anche la temperatura non sarà superiore a 100 gradi, il numero massimo sarà 99, quindi il numero più alto che invierò è 9999 ed è facile da separare dal lato del ricevitore. il mio calcolo in cui utilizzo 3 interi è eccessivo in quanto potrebbe essere facilmente eseguito con 1 variabile. Volevo solo rendere il codice più facile da seguire. Il codice ora viene compilato come:
Dimensione dello schizzo binario: 2, 836 byte (di un massimo di 8, 192 byte) in modo che si adatti a un Attiny 45 o 85 NOTA la libreria dht.h che uso è quella di Rob Tillaart. Quella libreria è adatta anche per un DHT22. Sto usando la versione 1.08. Tuttavia, l'Attiny85 potrebbe avere problemi a leggere un DHT22 con versioni inferiori della libreria. Mi è stato confermato che 1.08 e 1.14, sebbene funzionino su un normale Arduino, hanno problemi a leggere un DHT22 su Attiny85. Se vuoi usare un DHT22 su Attiny85, usa la versione 1.20 di questa libreria. Tutto ha a che fare con il tempismo. La versione 1.20 della libreria ha una lettura più veloce. (Grazie per questa esperienza utente Jeroen)
Passaggio 2: mini stazione meteorologica con Attiny85: il ricevitore
Anche in questo caso l'Attiny85 viene utilizzato in una configurazione di base con il pin di ripristino tirato in alto con un resistore da 10 k. Il modulo ricevitore è collegato al pin digitale 1 (pin 6 sul chip). Il display LCD è collegato ai pin digitali 0 e due. Collegare un cavo di 17,2 cm come antenna. Il codice è il seguente:
#includere
#include LiquidCrystal_SR lcd(0, 2, DUE_WIRE); #define RX_PIN 1 //= pin fisico 6 void setup() { lcd.begin(16, 2); lcd.home(); man.setupReceive(RX_PIN, MAN_1200); man.beginReceive(); }loop vuoto() { if (man.receiveComplete()) { uint16_t m = man.getMessage(); man.beginReceive(); lcd.print("Umido: "); lcd.print(m/100); lcd.setCursor(0, 1); lcd.print("Temp "); lcd.print(m%100); } }
Il codice è abbastanza semplice: l'intero trasmesso viene ricevuto e memorizzato nella variabile 'm'. Viene diviso per 100 per fornire l'umidità e il modulo di 100 fornisce la temperatura. Quindi supponiamo che l'intero ricevuto sia 33253325/100=333325 % 100 =25Questo codice viene compilato come 3380 byte e quindi può essere utilizzato solo con attiny85, non con 45
Step 3: Mini Stazione Meteo Con Attiny85/45: il Display
Per il display è meglio che mi riferisco al mio istruibile su un display a due fili. In breve, un comune display 16x2 utilizza un registro a scorrimento in modo che possa funzionare con due pin digitali. Ovviamente se preferisci utilizzare un display pronto per I2C, cioè possibile, ma poi è necessario implementare un protocollo I2C su Attiny. Il protocollo Tinywire può farlo. Sebbene alcune fonti dicano che si aspetta un clock da 1 Mhz, non ho avuto problemi (in un altro progetto) a usarlo su 8 Mhz Comunque non mi sono preoccupato qui e ho usato un registro a scorrimento.
Fase 4: Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
Come detto, ho reso questo istruibile per mostrare che si può creare una mini stazione meteorologica con due attiny85 (anche con un attiny85 + 1 attiny45). Invia solo umidità e temperatura, usando un DHT11. Tuttavia, Attiny ha 5 pin digitali da usare, 6 anche con qualche inganno. Quindi è possibile inviare dati da più sensori. Nel mio progetto - come si vede nelle foto su stripboard e su un PCB professionale (OSHPark) - invio/ricevo dati da un DHT11, da un LDR e da un PIR, il tutto utilizzando due attiny85'sLa limitazione nell'utilizzo di un attiny85 come ricevitore è la presentazione dei dati in uno stile appariscente. Poiché la memoria è limitata: testi come "Temperatura, umidità, livello di luce, soggetto in avvicinamento" riempiranno rapidamente spazio prezioso di memoria. Tuttavia, non c'è motivo di utilizzare due Arduino solo per inviare/ricevere temperatura e umidità. Inoltre, è possibile per far addormentare il trasmettitore e farlo svegliare solo per inviare dati diciamo ogni 10 minuti e quindi alimentarli da una cella a bottone. Ovviamente, non solo i dati di temperatura o umidità possono essere inviati, ma si può avere una serie di piccoli trasmettitori che inviano anche le letture dell'umidità del suolo o aggiungere un anemometro o un pluviometro
Passaggio 5: Mini stazione meteorologica: l'antenna
L'antenna è una parte importante di qualsiasi configurazione a 433 Mhz. Ho provato con l'antenna standard a "asta" da 17,2 cm e ho avuto un breve flirt con un'antenna a bobina. Quello che sembrava funzionare meglio è un'antenna caricata a bobina facile da realizzare. Il design è di Ben Schueler e apparentemente è stato pubblicato sulla rivista "Elektor". Un PDF con la descrizione di questa 'Antenna 433 MHz raffreddata ad aria' è facile da seguire. (Link scomparso, controlla qui)
Passaggio 6: aggiunta di un BMP180
Vuoi aggiungere un sensore di pressione barometrica come il BMP180? controlla il mio altro istruibile su questo.
Consigliato:
Stazione meteorologica professionale con ESP8266 e ESP32 fai da te: 9 passaggi (con immagini)
Stazione Meteo Professionale con ESP8266 ed ESP32 DIY: LineaMeteoStazione è una stazione meteo completa interfacciabile con i sensori professionali di Sensirion e con alcuni componenti dello strumento Davis (Pluviometro, Anemometro) Il progetto è pensato come stazione meteo fai da te ma richiede solo il
Stazione meteorologica semplice con ESP8266.: 6 passaggi (con immagini)
Stazione meteorologica semplice che utilizza ESP8266.: In questo Instructable condividerò come utilizzare ESP8266 per ottenere dati come temperatura, pressione, clima ecc. E dati di YouTube come abbonati e amp; Numero totale di visualizzazioni. e visualizzare i dati sul monitor seriale e visualizzarli su LCD. I dati saranno f
Stazione meteo fai-da-te e stazione sensore WiFi: 7 passaggi (con immagini)
Stazione meteo fai-da-te e stazione sensore WiFi: in questo progetto ti mostrerò come creare una stazione meteo insieme a una stazione sensore WiFi. La stazione sensore misura i dati di temperatura e umidità locali e li invia, tramite WiFi, alla stazione meteorologica. La stazione meteorologica visualizza quindi t
Stazione meteorologica completa fai-da-te Raspberry Pi con software: 7 passaggi (con immagini)
Completa la stazione meteorologica Raspberry Pi fai-da-te con il software: alla fine di febbraio ho visto questo post sul sito Raspberry Pi. http://www.raspberrypi.org/school-weather-station-…Hanno creato le stazioni meteorologiche Raspberry Pi per le scuole. ne volevo assolutamente uno! Ma a quel tempo (e credo ancora mentre scrivo
Stazione meteorologica con Arduino, BME280 e display per vedere la tendenza negli ultimi 1-2 giorni: 3 passaggi (con immagini)
Stazione meteorologica con Arduino, BME280 e display per vedere la tendenza negli ultimi 1-2 giorni: Ciao! Qui su istruibili le stazioni meteorologiche sono già state introdotte. Mostrano la pressione dell'aria, la temperatura e l'umidità attuali. Quello che mancava finora era una presentazione del corso negli ultimi 1-2 giorni. Questo processo avrebbe un