Cuprins:

Mini stație meteo cu Attiny85: 6 pași (cu imagini)
Mini stație meteo cu Attiny85: 6 pași (cu imagini)

Video: Mini stație meteo cu Attiny85: 6 pași (cu imagini)

Video: Mini stație meteo cu Attiny85: 6 pași (cu imagini)
Video: Tiny Project - Countdown timer (Attiny85 , 64x32 OLED and datacute library) 2024, Iulie
Anonim
Mini stație meteo cu Attiny85
Mini stație meteo cu Attiny85
Mini stație meteo cu Attiny85
Mini stație meteo cu Attiny85
Mini stație meteo cu Attiny85
Mini stație meteo cu Attiny85

Într-un recent instructabil Indigod0g a descris o mini stație meteo care funcționează destul de bine, folosind două Arduino. Poate că nu toată lumea vrea să sacrifice 2 Arduino pentru a obține citiri de umiditate și temperatură și am comentat că ar trebui să fie posibil să faci o funcție similară cu două Attiny85. Cred că vorbirea este ușoară, așa că mai bine îmi pun banii acolo unde îmi este gura.

De fapt, dacă combin două instruiri anterioare, am scris:

Interfață LCD cu 2 fire pentru Arduino sau Attiny și Primirea și trimiterea de date între Attiny85 (Arduino IDE 1.06), atunci cea mai mare parte a muncii este deja realizată. Trebuie doar să adaptați puțin software-ul.

Am ales pentru o soluție LCD cu două fire cu un registru de schimbare, mai degrabă decât un LCD I2C, deoarece pe Attiny registrul de schimbare este mai ușor de implementat decât magistrala I2C. Cu toate acestea … dacă, de exemplu, doriți să citiți un senzor de presiune BMP180 sau BMP085, oricum aveți nevoie de I2C, așa că ar putea folosi și un ecran LCD I2C. TinyWireM este o bibliotecă bună pentru I2C pe un Attiny (dar necesită spațiu suplimentar).

BOM Transmițător: DHT11 Attiny85 10 k rezistor 433MHz module transmițător

Receptorul Attiny85 10k rezistor 433 MHz modul receptor

Afișaj 74LS164 registru de schimbare 1N4148 diodă 2x1k rezistor 1x1k rezistor variabil un afișaj LCD 2x16

Pasul 1: Mini stație meteo cu Attiny85: emițătorul

Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul
Mini stație meteo cu Attiny85: emițătorul

Transmițătorul este o configurație de bază a lui Attiny85, cu un rezistor de tragere pe linia de resetare. Un modul transmițător este atașat pinului digital '0', iar pinul de date DHT11 se atașează pinului digital 4. Atașați un fir de 17,2 cm ca antenă. (pentru o antenă mult mai bună, vezi pasul 5). Software-ul este după cum urmează:

// va funcționa pe Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // biblioteci #include // De la Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin unde este conectat transmițătorul // variabilele plutesc h = 0; plutitor t = 0; int transmite_t = 0; int transmit_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } bucla void () {int chk = DHT11.read11 (DHT11PIN); h = DHT11.umiditate; t = temperatura DHT11; // Știu, folosesc aici 3 variabile întregi // unde aș putea folosi 1 // dar asta este doar pentru a fi mai ușor de urmărit transmit_h = 100 * (int) h; transmit_t = (int) t; transmit_data = transmit_h + transmit_t; man.transmit (transmit_data); întârziere (500); }

Software-ul folosește codul Manchester pentru a trimite datele. Citește DHT11 și stochează temperatura și umiditatea în 2 plutitoare separate. Deoarece codul Manchester nu trimite flotante, ci un număr întreg, am mai multe opțiuni: 1- împărțiți flotoarele în două numere întregi fiecare și trimiteți-le pe aceștia2- trimiteți fiecare flotant ca număr întreg3- trimiteți cele două flotante ca un număr întreg Cu opțiunea 1 trebuie să combin numerele întregi plutesc din nou în receptor și trebuie să identific care este întregul, ceea ce face ca codul să fie lung cu opțiunea 2, încă trebuie să identific care este întregul pentru umiditate și care pentru temperatură. Nu pot merge doar după secvență în cazul în care un întreg este pierdut în transmisie, așa că ar trebui să trimit un identificator atașat întregului. Cu opțiunea 3, pot trimite doar un întreg. Evident, acest lucru face ca citirile să fie puțin mai exacte - în termen de 1 grad - și nu se pot trimite temperaturi sub zero, dar este doar un cod simplu și există modalități în acest sens. Deocamdată este vorba doar de principiu. Deci, ceea ce fac este să transform plutitorii în numere întregi și înmulțesc umiditatea cu 100. Apoi adaug temperatura la umiditatea înmulțită. Dat fiind faptul că umiditatea nu va fi niciodată de 100% numărul maxim pe care îl voi primi este 9900. Având în vedere faptul că și temperatura nu va depăși 100 de grade, numărul maxim va fi 99, prin urmare cel mai mare număr pe care îl voi trimite este 9999 și este ușor de separat de partea receptorului. calculul meu în care folosesc 3 numere întregi este excesiv, deoarece s-ar putea face cu ușurință cu o variabilă. Am vrut doar să fac codul mai ușor de urmărit. Codul se compilează acum ca:

Dimensiunea schiței binare: 2, 836 octeți (de maxim 8, 192 octeți), astfel încât să se potrivească într-un Attiny 45 sau 85 NOTĂ că biblioteca dht.h pe care o folosesc este cea de la Rob Tillaart. Biblioteca respectivă este potrivită și pentru un DHT22. Folosesc versiunea 1.08. Cu toate acestea, Attiny85 poate avea probleme la citirea unui DHT22 cu versiuni mai mici ale bibliotecii. Mi s-a confirmat că 1.08 și 1.14 - deși lucrează la un Arduino obișnuit - au probleme cu citirea unui DHT22 pe Attiny85. Dacă doriți să utilizați un DHT22 pe Attiny85, utilizați versiunea 1.20 a acestei biblioteci. Totul are legătură cu sincronizarea. Versiunea 1.20 a bibliotecii are o citire mai rapidă. (Vă mulțumim pentru această experiență de utilizare Jeroen)

Pasul 2: Mini stație meteo cu Attiny85: receptorul

Mini stație meteo cu Attiny85: receptorul
Mini stație meteo cu Attiny85: receptorul

Din nou, Attiny85 este utilizat într-o configurație de bază cu pinul Reset tras cu un rezistor de 10 k. Modulul receptor este atașat pinului digital 1 (pinul 6 de pe cip). LCD-ul este atașat pinilor digitali 0 și 2. Atașați un fir de 17,2 cm ca antenă. Codul este după cum urmează:

#include

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = pinul fizic 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Umid:"); imprimare lcd (m / 100); lcd.setCursor (0, 1); lcd.print ("Temp"); imprimare lcd (m% 100); }}

Codul este destul de simplu: întregul transmis este primit și stocat în variabila 'm'. Este împărțit la 100 pentru a da umiditatea și modulul de 100 dă temperatura. Să presupunem că numărul întreg primit a fost 33253325/100 = 333325% 100 = 25 Acest cod se compilează ca 3380 de octeți și, prin urmare, poate fi utilizat numai cu un atiny85, nu cu un 45

Pasul 3: Mini stație meteo cu Attiny85 / 45: afișajul

Mini stație meteo cu Attiny85 / 45: afișajul
Mini stație meteo cu Attiny85 / 45: afișajul
Mini stație meteo cu Attiny85 / 45: afișajul
Mini stație meteo cu Attiny85 / 45: afișajul

Pentru afișaj, cel mai bine este să mă refer la modul meu de afișare pe un afișaj cu două fire. Pe scurt, un afișaj comun de 16x2 folosește un shiftregister, astfel încât să poată funcționa cu doi pini digitali. Desigur, dacă preferați să utilizați un afișaj I2C, posibil, dar atunci trebuie să implementați un protocol I2C pe Attiny. Protocolul Tinywire poate face asta. Deși unele surse spun că se așteaptă un ceas de 1 Mhz, nu am avut probleme (într-un alt proiect) să-l folosesc pe 8Mhz Oricum, nu m-am deranjat aici și am folosit un registru de schimbare.

Pasul 4: Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii

Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii
Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii
Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii
Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii
Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii
Mini stație meteo cu Attiny85 / 45: Posibilități / Concluzii

După cum am spus, am făcut acest lucru instructiv pentru a arăta că se poate realiza o mini stație meteo cu două attiny85 (chiar și cu un attiny85 + 1 attiny45). Trimite doar umiditate și temperatură, utilizând un DHT11. Totuși, Attiny are 5 pini digitali de utilizat, 6 chiar și cu unele trucuri. Prin urmare, este posibil să trimit date de la mai mulți senzori. În proiectul meu - așa cum se vede în imaginile de pe bord și pe un PCB profesional (OSHPark) - trimit / primesc date de la un DHT11, de la un LDR și de la un PIR, toate folosind Limita în utilizarea unui attiny85 ca receptor este prezentarea datelor într-un stil strălucitor. Deoarece memoria este limitată: texte precum „Temperatură, umiditate, nivel de lumină, subiect care se apropie” vor umple destul de repede spațiul valoros de memorie. pentru a avea transmițătorul să doarmă și să-l trezească numai pentru a trimite date, spuneți la fiecare 10 minute și, astfel, să-l alimentați dintr-o celulă buton. citirea umidității solului, de asemenea, sau adăugați un anemometru sau un contor de ploaie

Pasul 5: Mini stație meteo: Antena

Mini stație meteo: Antena
Mini stație meteo: Antena

Antena este o parte importantă a oricărei configurări de 433Mhz. Am experimentat cu o antenă standard cu o tijă de 17,2 cm și am avut un flirt scurt cu o antenă cu bobină, ceea ce părea să funcționeze cel mai bine este o antenă încărcată cu bobină, care este ușor de realizat. Designul este de la Ben Schueler și se pare că a fost publicat în revista „Elektor”. Este ușor de urmărit un PDF cu descrierea acestei „antene răcite cu aer de 433 MHz”. (Link-ul a dispărut, verificați aici)

Pasul 6: Adăugarea unui BMP180

Adăugarea unui BMP180
Adăugarea unui BMP180

Doriți să adăugați senzor de presiune barometrică, cum ar fi BMP180? Verifică-mi și celelalte instructabile despre asta.

Recomandat: