Sommario:

Mini stazione meteorologica con Attiny85: 6 passaggi (con immagini)
Mini stazione meteorologica con Attiny85: 6 passaggi (con immagini)

Video: Mini stazione meteorologica con Attiny85: 6 passaggi (con immagini)

Video: Mini stazione meteorologica con Attiny85: 6 passaggi (con immagini)
Video: REarduino4, Pollicino Pwm-QUBE driver arduino NANO per lampade LED 2024, Dicembre
Anonim
Mini Stazione Meteo Con Attiny85
Mini Stazione Meteo Con Attiny85
Mini Stazione Meteo Con Attiny85
Mini Stazione Meteo Con Attiny85
Mini Stazione Meteo Con Attiny85
Mini Stazione Meteo Con Attiny85

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

Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo con Attiny85: il trasmettitore
Mini stazione meteo 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

Mini Stazione Meteo Con Attiny85: il Ricevitore
Mini Stazione Meteo 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

Mini Stazione Meteo Con Attiny85/45: il Display
Mini Stazione Meteo Con Attiny85/45: il Display
Mini Stazione Meteo Con Attiny85/45: il Display
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

Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
Mini Stazione Meteo Con Attiny85/45: Possibilità/Conclusioni
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

Mini Stazione Meteo: l'Antenna
Mini Stazione Meteo: 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

Aggiunta di un BMP180
Aggiunta di un BMP180

Vuoi aggiungere un sensore di pressione barometrica come il BMP180? controlla il mio altro istruibile su questo.

Consigliato: