Despre baie - Tavan. Băi. Ţiglă. Echipamente. Reparație. Instalatii sanitare

Cum să faci o stație meteo cu propriile mâini. Stație meteo DIY (stație meteo). Schema generală a stației meteo

Privind prin diverse proiecte stații meteo, am observat o tendință. Acesta este fie un senzor de temperatură și umiditate, cel mai adesea îndrăgitul chinezesc DHT-11 sau DHT-22, la care se adaugă fie un senzor de lumină (stație meteo pe Arduino cu vizualizare de date) fie un senzor de presiune (stație meteo Ethernet), fie unul elegant, achiziționat cu multe sute de dolari (Stație meteo automată la dacha)

Deoarece pentru mine personal, o stație meteo fără măsurarea direcției și vitezei vântului nu este o stație meteo și nu sunt gata să cheltuiesc aproximativ 700 USD practic pe o jucărie, s-a decis să fac ceva asemănător cu „scumpul și unul sofisticat, dar la un preț mic.

Electronică


Acum despre măsurarea direcției vântului. Au existat multe opțiuni, de la codificatoare optice - fabricate din fabrică (scump) sau făcute în casă sub formă de mai multe perechi de LED-uri și fotodiode și un disc cu cod Gray (complex și multe componente), până la un magnet și 4-8 întrerupătoare cu lame (prea simple și inexacte). Drept urmare, alegerea a căzut pe AS5040 - un encoder magnetic. Deoarece nu este necesară o precizie specială, ieșirea analogică a codificatorului este conectată la ADC-ul microcontrolerului.

Microcontroler - PIC16F88. Ieșire - RS485 către rețeaua internă casă inteligentă, despre care este vorba în această serie de articole. Întreaga componentă electronică este asamblată pe trei plăci.

Asta e tot cu electronica, fără nuanțe, nimic interesant, totul este conform fișelor tehnice. Să trecem la mecanică.

Mecanica

Din păcate, nu este posibil să imprimați o carcasă pe o imprimantă 3D și aproape toate carcasele din fabrică au probleme cu rezistența la apă. În plus, rulmenții și orice altceva sunt corpuri de rotație, ceea ce înseamnă că o carcasă rotundă ar fi cea mai logică alegere. A trebuit să-mi îndrept atenția către alte domenii - spre alimentarea cu apă. Luat ca un corp cuplare„32” pentru canalizare și două țevi pentru plasarea unităților de rulment în ele. Două dopuri au fost prelucrate din alamă, în care au fost presați doi rulmenți 626.

Magneți... Aproape orice magnet pentru un senzor de viteză va funcționa, dar cu un senzor de direcție a fost mai dificil. Are nevoie de un magnet rotund cu magnetizare de la o margine la alta

În timp ce cea mai mare parte a celor care vând au poli diferiți pe părți diferite.

Dar s-a dovedit că magneții necesari sunt amplasați pe fusurile motoarelor CD/DVD.

Când sunt asamblate, unitățile de rulmenți arată astfel:

După fabricarea și asamblarea plăcilor, senzorii de viteză și direcție a vântului iau forma finală

Deoarece stația meteo este încă făcută din materiale vechi, tăiem mingi de tenis pentru rotor și facem și o giruetă din orice putem pune mâna. Îl vopsim radical în negru și se dovedește așa.

Ca senzor de ploaie folosim și o jumătate de minge de tenis, în care două contacte sunt situate între două straturi de geotextil

Asamblam, conectăm și înșurubam mai sus

Interfață

După cum v-am spus deja (O altă casă inteligentă, în trei părți. Partea a treia, interfața cu utilizatorul) există două tipuri de interfețe. Prima vizualizare, în care aproape toate datele de pe dispozitiv sunt afișate pe ecran, arată astfel

Temperatura actuală, minimă, maximă, direcția schimbării. Presiunea este aceeași. Umiditate. Vântul - direcția și roza vântului. Cifrele sunt necesare mai mult pentru depanare; ele arată cât de lungă a fost girueta în ce sector. Viteza vântului, timpul, citirile senzorului de lumină (fără calibrare, ce a măsurat ADC) și senzorul de ploaie. Toate datele și procesarea sunt efectuate în microcontrolerul stației meteo.

Al doilea tip de interfață este bazat pe widget-uri. Există mai puține date aici: temperatură, umiditate, presiune, viteza și direcția vântului

Și unde am fi fără Android Wear - la ceas?

Datorită faptului că, o dată pe minut, toate controlerele sunt interpelate și înregistrate în baza de date, orice date meteorologice sunt disponibile pentru analiză sau afișare sub formă de grafice

În timpul liber mi-am amintit de un produs simplu de casă pe care l-am văzut în revista „Tânărul Naturalist” și făcut în anii optzeci ai secolului trecut.

Cu ajutorul acestuia, a fost interesant să prezicem vremea și să observăm acuratețea citirilor a doua zi.

Desigur, acest design nu merită comparat cu instrumentele metrologice, dar ca prognoză aproximativă este destul de funcțional.

În plus, un astfel de sistem permite copiilor să-și dezvolte abilități de observare și analiză a fenomenelor naturale.

Prin urmare, îl descriu în articol ca un sfat meșteșug acasă despre realizarea unui barometru simplu dintr-un bec și modalități de descifrare a informațiilor primite. Materialul text este completat cu imagini explicative, fotografii și video.


Cum funcționează un barometru de casă

Pentru a prezice vremea, se folosește un spațiu acoperit cu sticlă a unui bec cu o mică gaură în partea de sus. Acest recipient este umplut cu apă curată. Este afectat de:

  • presiunea atmosferică printr-o fantă din sticlă;
  • umiditatea aerului;
  • temperatura ambientala.

Sub acțiunea complexă a acestor factori, stratul de suprafață se evaporă cu condensarea vaporilor în interiorul becului de sticlă fără a ieși prin orificiu. Pe baza naturii condensului format, a formei și a densității acestuia, ei judecă vremea viitoare și prezic starea atmosferei pentru următoarele 12-24 de ore sau puțin mai mult.

Instrumente necesare

Cu siguranta vei avea nevoie de:

  • lampă cu incandescență arsă sau întreagă;
  • manusi de protectie;
  • pilă cu ac sau cu burghiu cu diamant;
  • un cristal de permanganat de potasiu sau o bucată de plumb dintr-un creion chimic - nu întotdeauna.

Pentru a face o montură pentru barometru, veți avea nevoie fie de lipici cu un suport.

Tehnologia de fabricație

Mănușile de protecție sunt puse pe mâini. Acestea vor proteja pielea de tăieturi și mici fragmente de sticlă. Becul este fragil; sub o forță excesivă accidentală, se poate destrăma în fragmente mici. Ar trebui să lucrați cu ea foarte atent.

În partea superioară a balonului, lângă bază, este necesar să se facă un orificiu traversant cu o secțiune transversală de la unu la câțiva mm pătrați, nu mai mult. Acesta va comunica cavitatea internă a cilindrului cu aerul atmosferic.

Modalități de a crea o gaură

Dosar de lucru

Marginea laterală de ultimă oră, Tăiați cu grijă o gaură în paharul balonului.

Cantitatea de forță trebuie controlată: este foarte ușor să șlefuiți un gol mare sau să deteriorați sticla fragilă. Efectuați lucrul peste un recipient în care vor cădea pilitura de sticlă. Acest lucru va face curățarea locului de muncă mai sigură.

Găurirea unei gauri în sticlă

Această metodă vă permite să faceți o gaură strict calibrată forma rotunda. Cu toate acestea, necesită abilități practice în prelucrarea sticlei cu burghie de diametre mici. Puteți lucra cu un burghiu sau o șurubelniță.

Un burghiu obișnuit pentru metal trebuie să fie bine ascuțit și zona de găurire marcată și curățată. Becul trebuie să fie bine fixat, iar burghiul trebuie folosit la viteze medii și redus treptat valoarea acestora. Abaterea burghiului de la verticală, precum și presiunea, nu este permisă. Chiar dacă aceste cerințe sunt îndeplinite, există o mare probabilitate de deteriorare a balonului.

Prin urmare, burghiele speciale cu vârfuri acoperite cu diamant sunt selectate pentru găuri. Lucrează cu ei foarte atent.

Umplerea balonului cu apă

Puțin mai puțin de o treime din volumul său intern trebuie turnat în bec prin orificiul tăiat.

Un barometru de casă realizat dintr-un bec este practic gata de utilizare. Dar pentru ușurință în utilizare puteți:

  • colorați apa din dispozitiv, de exemplu, cu o soluție de permanganat de potasiu. Condensul va deveni mai vizibil;
  • Furnizați un dispozitiv de agățat sau un suport.

Despre montarea unui barometru de casă

Unitatea de montare a dispozitivului este realizată pentru funcționare într-una dintre cele două opțiuni:

  1. agățat de un mâner sau cârlig;
  2. instalare permanentă pe un pervaz.

Bucla de suspendare

Utilizați o bucată de sârmă de cupru, îndoiți-o într-o buclă și lipiți capetele libere în interiorul contactului de bază.

Tot ce rămâne este să atârnați barometrul de casă pe cârligul sau mânerul pregătit.

Stand

Puteți folosi un capac cu un diametru adecvat dintr-o sticlă de cosmetice sau detergenți.

Un bec este lipit în el sau este atașat într-un alt mod accesibil, de exemplu, pe plastilină sau chit. ca aceasta design de casă Este convenabil să plasați dispozitivul pe un pervaz în orice loc liber.

Principala condiție de siguranță este limitarea accesului la dispozitiv pentru copiii mici și animalele de companie, care pot răsturna sau sparge cu ușurință balonul de sticlă.

Cum să descifrezi informațiile și să folosești dispozitivul

Monitorizarea condensului

Următorul tabel vă va ajuta să analizați starea de umiditate din balon și să preziceți vremea folosindu-l.

Stare de condensPrognoza meteo
Formarea de mici picături de condens pe pereții interiori ai balonului.Va fi o zi înnorată. Nu sunt de așteptat precipitații.
Picături medii de condens aderă pe pereți. Între ele, dungi uscate situate vertical sunt clar vizibile.Se prognozează cer parțial înnorat.
Pe pereții balonului rămân picături mari de condens.Sunt așteptate perioade scurte de ploaie.
Picături mari de condens curg din pereți.Vor fi ploi și furtuni.
Jumătatea superioară a becului barometrului este uscată și s-au adunat picături mari de condens lângă apa de dedesubt.Frontul de ploaie va trece la distanță fără a ne afecta teritoriul.
Pereții becului sunt uscați, dar afară plouă.Mâine ne așteptăm la o schimbare a vremii cu cer frumos însorit.
Picături umede de condens s-au concentrat pe peretele de nord al barometrului.Ploi sunt așteptate după-amiază.

Acest tabel poate fi imprimat pe o imprimantă și plasat lângă dispozitivul de casă. Nu este necesar să ne amintim toate aceste informații. Copiii, atunci când sunt implicați într-un joc de meteorologie, vor începe foarte repede să păstreze toate informațiile în minte.

Caracteristici de funcționare

Va trebui să folosești doar un barometru de casă într-o cameră încălzită. La temperaturi negative, apa și condensul vor îngheța pur și simplu. Așezați-l pe o fereastră sau pe pervaz. Este recomandabil ca acesta să fie instalat pe partea de nord a clădirii. Se crede că aceasta oferă citiri mai precise.

Acest lucru se poate explica doar prin faptul că o astfel de fereastră este mai puțin expusă la căldură de la razele soarelui, funcționează într-o parte mai rece a casei și modelează mai precis condițiile meteorologice de afară.

Despre acuratețea citirilor

Corpul nostru, ca toate ființele vii, reacționează la schimbările meteorologice. Este influențată în special de presiunea aerului și umiditate. Deoarece ele nu se schimbă instantaneu, ci treptat, devine posibil să se prevadă.

Pentru a le urmări, meteorologii folosesc:


Denaturăm semnificativ toate aceste procese.

Din punct de vedere istoric, oamenii au început să înțeleagă termenul „barometru” ca un dispozitiv care permite cuiva să prezică vremea schimbând presiune atmosferică. Acest lucru a fost facilitat de aplicarea pe scara aneroidă a unor denumiri precum „Clear”, „Uscat”, „Ploaie” și alte fenomene naturale.

Aceasta este o idee destul de simplificată de prognoză a evenimentelor meteorologice, dar chiar și acest nivel dispozitivul nostru de casă nu va putea acoperi pe deplin:

  • presiunea atmosferică din balon se modifică ușor pe măsură ce trece prin el constructia unei cladiriși găuri;
  • Citirile sunt afectate de condițiile mediului umed al încăperii, care sunt create de sistemul de ventilație.

În plus, recent au devenit utilizate pe scară largă în viața de zi cu zi. Și, de asemenea, reglează umiditatea interioară și afectează funcționarea unui barometru de casă.

Cu toate acestea, chiar și ținând cont de aceste condiții în timpul verii, este posibil să se prezică cu încredere comportamentul vremii cu o precizie de până la 70%. Iarna, din cauza efectului încălzirii, această cifră scade, dar nu critic.

În orice caz, poate fi întotdeauna comparat cu calculele profesionale ale programelor meteorologice postate pe internet și poate fi folosit pentru a insufla copiilor abilități de observare și pentru a dezvolta înclinația spre analiza fenomenelor naturale complexe.

Acest lucru nu trebuie neglijat, deoarece realizarea unui barometru de casă nu este dificilă, durează aproximativ zece minute. Copiii vor aprecia munca ta atunci când vor primi o bază de jucării educaționale sub forma unei stații meteo de acasă care să dezvolte atenția.

Acum vă sugerez să vizionați videoclipul proprietarului MrSam0delkin „Barometrul de la un bec”.

Urmărirea vremii este o activitate foarte interesantă. Am decis să-mi construiesc propria stație meteo pe baza popularului .

Prototipul stației meteo arată astfel:

Funcțiile stației mele meteo:

  • măsurarea și afișarea temperaturii camerei și exterioare;
  • afișarea orei curente (ore și minute);
  • afișarea fazelor lunii curente și a zilei lunare;
  • transferarea rezultatelor măsurătorilor către un computer printr-o conexiune serială;
  • transmiterea rezultatelor măsurătorilor prin protocol MQTT folosind o aplicație de pe computer.


Hex
-fişier
firmware pentru (versiunea din 9 mai 2018) - .
Cum să flash hex-dosar la bord Arduino, am descris.

Microcontroler Arduino Nano 3.0

„Inima” stației mele meteo este un microcontroler eBay):

Pentru a controla afișarea și sondarea senzorilor, folosesc temporizatorul 1 Arduino, provocând întreruperi cu o frecvență de 200 Hz (perioada - 5 ms).

Indicator

Pentru a afișa citirile măsurate ale senzorului și ora curentă, m-am conectat la Arduino indicator LED din patru cifre Foryard FYQ-5643BH cu anozi comuni (se combină anozi din segmente identice ale tuturor descărcărilor).
Indicatorul conține patru cifre cu șapte segmente și două puncte de separare (ora):

Anozii indicatori sunt conectați prin rezistențe de limitare a curentului la bornele Arduino:

deversare 1 2 3 4
concluzie A3 A2 D3 D9

Catozii segmentelor sunt conectați la pini Arduino:

segment A b c d e f g p
concluzie D7 D12 D4 D5 D6 D11 D8 D13

Segmentul indicator se aprinde dacă există un potențial ridicat la anodul descărcării corespunzătoare (1) și un potențial scăzut la catod (0).

Folosesc afișajul dinamic pentru a afișa informații pe indicator - doar o cifră este activă la un moment dat. Descărcările active alternează cu o frecvență de 200 Hz (perioada de afișare 5 ms). În același timp, pâlpâirea segmentelor este invizibilă pentru ochi.

Senzor de temperatura DS18x20

Pentru a putea măsura temperatura de la distanță, am conectat un senzor , care oferă măsurarea temperaturii exterioare pe o gamă largă. Senzorul este conectat la magistrală 1-Firși are trei ieșiri - putere ( VCC), date ( DAT), Pământ ( GND):

ieșirea senzorului VCC DAT GND
concluzie Arduino 5V A1 GND

Între ace VCCȘi DAT Am inclus un rezistor pull-up de 4,7 kOhm.

Pentru a converti între grade Celsius și Fahrenheit, puteți utiliza următorul tabel:

Am plasat senzorul în afara ferestrei casei într-o cutie de pix din plastic:

\

Stațiile meteo profesionale folosesc un ecran Stevenson pentru a proteja termometrul de lumina directă a soarelui și pentru a asigura circulația aerului. ecran Stevenson):

Senzor de presiune și temperatură BMP280

Barometrele cu mercur și barometrele aneroide sunt folosite în mod tradițional pentru a măsura presiunea atmosferică.

ÎN barometru cu mercur presiunea atmosferică este echilibrată de greutatea unei coloane de mercur, a cărei înălțime este utilizată pentru măsurarea presiunii:

ÎN barometru aneroid compresia și expansiunea cutiei la presiunea atmosferică se utilizează:

Pentru a măsura presiunea atmosferică și temperatura camerei în stația meteo de acasă folosesc un senzor - mic SMD-dimensiunea senzorului 2 x 2,5 mm, bazat pe tehnologie piezoresistiva:

Eșarfa cu senzor a fost achiziționată pe platforma de tranzacționare eBay:

Senzorul este conectat la magistrală I2C(detalii de contact - SDA/SDI, contact de sincronizare - SCL/SCK):

ieșirea senzorului VCC GND SDI SCK
concluzie Arduino 3V3 GND A4 A5

Adafruit- dosare Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

Unități de presiune atmosferică

Senzor prin funcție citestePresiune afișează presiunea atmosferică în pascali. Unitatea de bază de măsură a presiunii atmosferice este hectopascal(hPa) (1 hPa = 100 Pa), al cărui analog este unitatea nesistemică " milibar" (mbar) (1 mbar = 100Pa = 1hPa). Pentru conversia între unitățile de presiune în afara sistemului utilizate în mod obișnuit " milimetru Mercur „(mmHg) și hectopascali se folosesc următoarele rapoarte:
1 hPa = 0,75006 mm Hg. Artă. ≈ 3/4 mmHg; 1 mmHg =1,3332 hPa ≈ 4/3 hPa.

Dependența presiunii atmosferice de altitudinea deasupra nivelului mării

Presiunea atmosferică poate fi prezentată atât în ​​formă absolută, cât și în formă relativă.
Presiune absolută QFE(Engleză) presiune absolută) este presiunea atmosferică actuală, care nu ține cont de corecția deasupra nivelului mării.
Presiunea atmosferică scade cu aproximativ 1 hPa cu o creștere a altitudinii cu 1 m:

Formula barometrică vă permite să determinați corectarea citirilor barometrului pentru a obține presiunea relativă (în mmHg):
$\Delta P = 760 \cdot (1 - (1 \over (10^ ( (0,0081350 \cdot H) \over (T + 0,00178308 \cdot H) ))))$ ,
unde $T$ este temperatura medie a aerului pe scara Rankin, ° Ra, $H$ - altitudine deasupra nivelului mării, picioare.
Conversia grade Celsius în grade Rankine:
$^(\circ)Ra = (^(\circ)C \cdot 1,8) + $491,67
Formula barometrică este utilizată pentru nivelarea barometrică - determinarea înălțimilor (cu o eroare de 0,1 - 0,5%). Formula nu ține cont de umiditatea aerului și de modificarea accelerației gravitaționale cu înălțimea. Pentru diferențe mici de înălțime, această dependență exponențială poate fi aproximată cu suficientă precizie printr-o dependență liniară.
Presiune relativă QNH(Engleză) presiunea relativa, Q-code Înălțime nautică) este presiunea atmosferică ajustată la nivelul mediu al mării. Nivelul mediu al mării, MSL) (Pentru ISA si temperatura 15 grade Celsius) si este setata initial tinand cont de altitudinea la care se afla statia meteo. Poate fi aflat din datele serviciului meteo, citiri de la instrumente calibrate din locuri publice, aeroporturi (din rapoarte METAR), de pe internet.
De exemplu, pentru aeroportul Gomel din apropiere ( UMGG) Pot vedea raportul meteo real METAR la ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
Unde Q1014- presiune QNH la aerodrom este 1014 hPa.
Istoricul rapoartelor METAR disponibil la aviationwxchartsarchive.com/product/metar.
Pentru presiunea relativă normală a aerului QNH se presupune o presiune de 760 mm Hg. Artă. sau 1013,25 hPa (la o temperatură de 0ºС, la o latitudine de 45º din emisfera nordică sau sudică).
Am setat presiunea pentru barometrul aneroid QNH folosind șurubul de reglare a sensibilității:

Prognoza meteo

Analiza schimbărilor de presiune vă permite să construiți o prognoză meteo, iar acuratețea acesteia este mai mare, cu atât presiunea se schimbă mai brusc. De exemplu, o veche regulă generală pentru marinari este că o cădere de presiune de 10 hPa (7,5 mm Hg) pe o perioadă de 8 ore indică apropierea vântului puternic.

De unde vine vântul? Aerul curge spre centrul zonei de joasă presiune, creând vânt- deplasarea orizontală a aerului din zonele de presiune ridicată în zonele de presiune scăzută (presiunea atmosferică ridicată stoarce masele de aer în zonele de presiune atmosferică scăzută). Dacă presiunea este foarte scăzută, vântul poate ajunge puternic furtunile. În același timp, în zonă redus presiune (scăderea presiunii sau ciclon), aerul cald se ridică și formează nori, care adesea aduc ploaie sau zăpadă.

În meteorologie, direcția vântului este considerată direcția din care bate vântul:

Această direcție se reduce la opt puncte.

Un algoritm este adesea folosit pentru a prezice vremea pe baza presiunii barometrice și a direcției vântului. Zambretti.

Senzor de umiditate

Pentru a determina umiditatea relativă a aerului folosesc modulul DHT11(achizitionat de pe piata eBay):

Senzor de umiditate DHT11 are trei iesiri - alimentare ( + ), date ( afară), Pământ ( - ):

ieșirea senzorului + afară -
concluzie Arduino 5V D10 GND

Pentru a lucra cu senzorul folosesc biblioteca din Adafruit- dosare DHT.h, DHT.cpp.

Umiditatea aerului caracterizează cantitatea de vapori de apă conținută în aer. Umiditate relativă arată procentul de umiditate din aer raportat la cantitatea maximă posibilă la temperatura curentă. Folosit pentru a măsura umiditatea relativă :

Pentru oameni, intervalul optim de umiditate a aerului este de 40 ... 60%.

Ceas în timp real

Am folosit modulul ca un ceas în timp real RTC DS1302(esarfa cu ceasul a fost achiziționată pe platforma de tranzacționare eBay):

Modul DS1302 se conectează la autobuz 3 fire. Pentru a utiliza acest modul împreună cu Arduino bibliotecă dezvoltată iarduino_RTC ( din iarduino.ru).

Placa cu modul DS1302 are cinci pini pe care i-am conectat la pinii plăcii Arduino Nano:

concluzie RTC VCC GND RST CLK DAT
concluzie Arduino 5V GND D2 D1 D0

Pentru a menține citirile corecte ale ceasului atunci când alimentarea este oprită, am introdus o baterie în slotul de pe placă CR2032.

Precizia modulului meu de ceas sa dovedit a nu fi foarte mare - ceasul este rapid cu aproximativ un minut în patru zile. Prin urmare, am resetat minutele la „zero” și ora la cea mai apropiată ținând apăsat butonul conectat la pinul A0 al Arduino după pornirea stației meteo. După inițializare, pinul A0 este folosit pentru a transmite date printr-o conexiune serială.

Transferarea datelor pe un computer și lucrul prin protocolul MQTT

Pentru a transfera date printr-o conexiune serială către Arduino conectează USB-UART convertor:

Concluzie Arduino folosit pentru a transmite date în format 8N1(8 biți de date, fără paritate, 1 bit de oprire) la 9600 bps. Datele sunt transmise în pachete, lungimea pachetului fiind de 4 caractere. Transferul de date se efectuează în „ bit-bang", fără a utiliza un port serial hardware Arduino.

Formatul datelor transmise:

Parametru primul octet al 2-lea octet al 3-lea octet al 4-lea octet
temperatura exterioara o spațiu sau minus zeci de grade sau spațiu unități de grade
temperatura camerei i spațiu sau minus zeci de grade sau spațiu unități de grade
Presiunea atmosferică p sute de mm r. Artă. zeci de mmHg unități mmHg Cu.
umiditate relativă h spaţiu zeci de procente sau spațiu unități de procente
ora curentă zeci de ore unități de oră zeci de minute unități de minute

MQTT

Golang aplicație client de protocol MQTT, trimiterea informațiilor primite de la stația meteo către server ( MQTT-agent) :

Serviciu vă permite să creați un cont cu un plan tarifar gratuit" " (limită: 10 conexiuni, 10 Kb/s):

Pentru a monitoriza citirile stației meteo, puteți utiliza Android-aplicatie :

Nutriție

Pentru alimentarea stației meteo pe care o folosesc Încărcător din vechime telefon mobil Motorola, producând o tensiune de 5 V cu un curent de până la 0,55 A și conectat la contacte 5V(+) și GND (-):

De asemenea, puteți utiliza o baterie de 9 V conectată la contactele pentru alimentare. VIN(+) și GND (-).

Funcționarea stației meteo

La pornire, senzorii sunt inițializați și testați.

În lipsa unui senzor DS18x20 eroarea „E1” este afișată atunci când nu există niciun senzor - eroare "E3".

Apoi începe ciclul de lucru al stației meteo:

  • măsurarea și afișarea temperaturii exterioare;
  • măsurarea și afișarea temperaturii camerei;
  • măsurarea și afișarea presiunii atmosferice și tendința acesteia;
  • măsurarea și afișarea umidității relative a aerului;
  • afișarea orei curente;
  • afișarea fazei lunii și a zilei lunare.


Un videoclip cu stația mea meteo în funcțiune este disponibil pe my -canal: https://youtu.be/vVLbirO-FVU

Afișarea temperaturii

La măsurarea temperaturii, sunt afișate două cifre de temperatură și pentru o temperatură negativă un semn minus (cu simbolul gradului în cifra din dreapta);
pentru temperatura exterioară semnul gradului este afișat în partea de sus:


pentru temperatura camerei - mai jos:

Afișarea presiunii

La măsurarea presiunii, sunt afișate trei cifre ale presiunii în mmHg (cu simbolul " P"în locul extrem de potrivit):

Dacă presiunea scade brusc, atunci în loc de simbolul " P„simbolul” este afișat în cifra din dreapta L„dacă a crescut brusc, atunci” H". Criteriul pentru claritatea modificării este de 8 mm Hg în 8 ore:

Deoarece stația mea meteo afișează presiune absolută ( QFE), atunci citirile se dovedesc a fi oarecum subestimate în comparație cu informațiile din raport METAR(Care oferă QNH) (14 UTC 28 martie 2018):

Raportul de presiune (conform ATIS) s-a ridicat la $(1015 \over 998) = $1,017. Altitudinea aeroportului Gomel (cod ICAO UMGG) deasupra nivelului mării este de 143,6 m. Temperatura conform ATIS a fost de 1 ° C.

Citirile de la stația mea meteo aproape au coincis cu presiunea absolută QFE conform informatiilor ATIS!

Presiune maxima/minima ( QFE), înregistrată de stația mea meteo pentru întreaga perioadă de observație:

Afișarea umidității relative

Umiditatea relativă a aerului este afișată ca procent (simbolul procentului este afișat în cele două cifre din dreapta):

Afișează ora curentă

Ora curentă este afișată pe indicator în formatul „HH:MM”, ​​cu două puncte de separare clipind o dată pe secundă:

Afișarea fazelor lunii și a zilei lunare

Primele două cifre ale indicatorului afișează faza lunară curentă, iar următoarele două - ziua lunară curentă:

Luna are opt faze (sunt date nume în engleză și rusă (în albastru - inexacte)):

Fazele sunt afișate pe indicator prin pictograme:

fază pictogramă
seceră în creștere (semiluna)
secera în scădere (semiluna)

Transferarea datelor pe un computer

Dacă conectați o stație meteo cu USB-UART convertor (de exemplu, bazat pe un microcircuit CP2102), conectat la USB- port computer, puteți utiliza un program terminal pentru a observa datele transmise de stația meteo:

Am dezvoltat într-un limbaj de programare golang un program care păstrează un jurnal al observațiilor meteo și trimite date către serviciu , și poate fi vizionat pe Android-smartphone folosind aplicația :

Conform jurnalului de observare a vremii, puteți, de exemplu, să construiți un grafic al modificărilor presiunii atmosferice:
exemplu de grafic cu o presiune minimă vizibilă


exemplu de grafic cu o ușoară creștere a presiunii

Îmbunătățiri planificate:

  • adăugarea de senzori de direcție și viteză a vântului

În stațiile meteo, un anemometru cu trei cani (1) este utilizat pentru a măsura viteza vântului, iar o giruetă (2) este utilizată pentru a determina direcția vântului:

De asemenea, folosit pentru a măsura viteza vântului anemometre cu fir fierbinte(Engleză) anemometru cu fir fierbinte). Ca fir încălzit, puteți folosi un filament de tungsten dintr-un bec cu sticlă spartă. În anemometrele cu fir fierbinte produse industrial, senzorul este de obicei amplasat pe un tub telescopic:

Principiul de funcționare al acestui dispozitiv este că căldura este îndepărtată din elementul de încălzire datorită convecției prin fluxul de aer - vânt. În acest caz, rezistența filamentului este determinată de temperatura filamentului. Legea modificării rezistenței filamentului $R_T$ în funcție de temperatură $T$ are forma:
$R_T = R_0 \cdot (1 + (\alpha \cdot (T - T_0)))$ ,
unde $R_0$ este rezistența filamentului la temperatura $T_0$, $\alpha$ este coeficientul de temperatură al rezistenței (pentru wolfram $\alpha = 4,5\cdot(10^(-3) (^(\circ)( C^( -1))))$).

Odată cu schimbarea vitezei debitului de aer, temperatura se modifică la un curent de filament constant (anemometru cu curent constant, engleză. CCA). Dacă temperatura elementului de încălzire este menținută constantă, atunci curentul prin element va fi proporțional cu viteza fluxului de aer (anemometru cu temperatură constantă, engleză). CTA).

Va urma

GHID PENTRU CREAREA O STAȚIE METEORICA SIMPLUĂ A CASĂ PE PROPRIU

Dacă computerul este pornit toată ziua sau chiar non-stop, îl puteți folosi pentru a opera stația meteo de acasă. Scopul este de a crea o stație meteo simplă și ieftină, care va folosi un computer personal (PC). PC-ul acționează ca cititor, procesor și expeditor al datelor meteorologice măsurate către site-ul web Meteopost. Comunicarea între computer și unitatea de măsură se va realiza printr-o rețea cu 1 fir.

Compoziția complexului de măsurare
1. Computer personal cu sistemul de operare Windows XP sau o versiune ulterioară și un port COM liber.
2. Adaptor pentru portul COM (1 fir - convertor RS232)
3. Cablu Ethernet cu perechi răsucite cu 4 fire, lungimea ar trebui să fie suficientă de la portul COM la unitatea de măsură
4. Sursă de alimentare 5V DC cu o reglare bună a tensiunii
5. Unitate de masura (instalata in exterior)
6. Software PC - aplicație „Stație meteo”.

OPTIUNEA Nr. 1 - UN SINGUR

În primul rând, să luăm în considerare cea mai simplă opțiune - o stație meteo cu un singur senzor de temperatură. Acest lucru nu necesită o sursă de alimentare suplimentară (articolul 4). Iar sistemul este foarte simplificat. Adaptorul pentru portul COM (articolul 2) poate fi realizat conform acestei scheme. Adaptorul este format din două diode zener la 3,9V și 6,2V, două diode Schottky și un rezistor.

Diagrama adaptorului pentru portul COM


Adaptor în carcasă D-SUB

Locul în care cablul și senzorul de temperatură sunt lipiți, inclusiv bornele senzorului, trebuie să fie bine protejat de umiditate. Cel mai bine este să folosiți lipici pe bază de poliuretan.


Cabluri senzor de impermeabilizare

Acest sistem va asigura monitorizarea temperaturii cu o precizie de zecimi de grad. În acest caz, un grafic al temperaturii aerului în funcție de timp va fi vizibil în fereastra aplicației, iar pictograma tavă va afișa întotdeauna temperatura curentă. Aplicația vă permite să setați intervalul de măsurare.

COSTUL PIESELOR RADIO - nu mai mult de 50 UAH.

OPTIUNEA Nr. 2 - PATRU SENSORI

O stație meteo mai complexă, cu patru senzori: temperatură, umiditate, lumină, presiune. Deoarece doar senzorul de temperatură va fi digital, iar restul va fi analog, sistemul folosește un ADC ds2450 cu patru canale. Acest ADC acceptă protocolul cu 1 fir. Circuitul necesită o sursă de alimentare suplimentară. Sursa de alimentare trebuie să asigure stabilitate de înaltă tensiune. Dar, deoarece circuitul adaptorului descris mai sus are un dezavantaj - incapacitatea de a se conecta la senzori sursă externă alimentare din cauza lipsei de masă reală (-), folosim un circuit adaptor diferit. Acest adaptor se potrivește și în carcasa conectorului portului COM D-SUB. Acum există trei fire în cablu: masă (-), +5V și date.


Circuit adaptor pentru portul COM cu alimentare externă

Circuitul unității de măsură poate fi realizat cu ușurință chiar și pe o placă. Trebuie doar să acordați o atenție deosebită impermeabilizării contactelor. Cel mai simplu mod este să topești parafina și să o aplici cu o perie pe toate punctele goale de pe tablă. Dacă placa nu este protejată de apă, vor exista scurgeri de tensiune și vor exista multe erori de măsurare. În cazul nostru, chiar și sutimi de volt afectează în mod semnificativ rezultatele.


Diagrama bloc de măsurare

Unitatea de măsurare trebuie plasată într-o carcasă astfel încât placa și senzorii să fie protejate de expunerea directă la precipitații și radiațiile solare. O cutie din plastic dens din spumă este potrivită pentru aceste scopuri. În pereții cutiei (partea de jos și peretele din partea umbră) trebuie să faceți mai multe găuri pentru aerisire. Este recomandabil să acoperiți pereții interiori ai cutiei cu folie de aluminiu pentru protecție suplimentară împotriva radiațiilor infraroșii, altfel va exista o eroare la măsurarea temperaturii. Toți senzorii, cu excepția luminii, sunt plasați direct pe placă. Senzorul de lumină (fotorezistor) este scos de pe placă pe fire și instalat în orificiul din partea de jos a carcasei de spumă. Astfel încât suprafața senzorului să fie orientată în jos. În acest caz, precipitațiile nu vor cădea pe senzor și, mai ales iarna, acest lucru îl va proteja de înghețare. Pentru impermeabilizare, senzorul de lumină trebuie tratat, de exemplu, cu adeziv transparent pe bază de poliuretan ( izolant de silicon testul a eșuat, era curent de scurgere). Tratați inclusiv (!) zona fotosensibilă a fotorezistorului. Umpleți cablurile senzorului cu lipici și plasați-le într-un tub izolator. Lipiți capetele cablurilor la o placă mică. Și lipiți firele de la unitatea de măsură la această placă. Umpleți zonele de lipit cu parafină. În caz contrar, atunci când sunt ploi abundente și vânt, stația meteo poate deveni inoperabilă și va trebui să o dezasamblați și să uscați totul. Unitatea poate fi conectată la cablu folosind un conector. Dar trebuie să utilizați un conector special rezistent la umiditate - sistemul va funcționa în condiții meteorologice dificile.

Dacă trebuie să plasați carcasa în afara ferestrei unei clădiri înalte (nu este posibil să o instalați pe un suport lângă pământ), atunci cutia trebuie îndepărtată de peretele casei pe cât posibil, pe o paranteză. În caz contrar, încălzirea aerului din perete oferă date de temperatură foarte distorsionate. Într-o casă privată, este mai bine, desigur, să faci o cabină de vreme adevărată. Trebuie să avem grijă ca carcasa să fie bine fixată, altfel rafale puternice de vânt ne pot rupe structura.


Unitate de măsură pe suport

Tensiunea de ieșire a sursei de alimentare (PSU) ar trebui să fie între 4,8-5,3 V. Încărcarea de la un telefon vechi va funcționa și ea. Cu toate acestea, dacă sursa de alimentare nu are un stabilizator, trebuie să-l adăugați la sursa de alimentare, deoarece Pentru precizia măsurării, prezența unei tensiuni stabile este foarte importantă. Puteți verifica cel puțin cu un tester dacă se modifică zecimi sau sutimi de volți la ieșirea sursei de alimentare. Nu sunt permise sărituri de zecimi de volt. Schemă simplă Stabilizatorul de 5V este prezentat mai jos. Intrarea sursei de alimentare poate fi de la 7 la 17V. Ieșirea va fi de aproximativ 5V. După aceasta, trebuie să ne conectăm cablul (care merge la unitate de masura) la sursa de alimentare și măsurați tensiunea cu un tester la celălalt capăt al cablului. Această tensiune poate fi puțin mai mică decât cea directă la ieșirea sursei de alimentare din cauza rezistenței cablului. Această tensiune măsurată trebuie introdusă în setările aplicației ca „Tensiune de alimentare senzor”.


Circuitul regulator de tensiune tipic

COSTUL COMPONENTELOR PENTRU STAȚIA METEO

Costul aproximativ al componentelor radio (prețuri 2015 în magazin).
1. Senzor de temperatura ds18b20 - 25 UAH
2. ADC ds2450 - 120 UAH
3. Fotorezistor LDR07 - 6 UAH
4. Senzor de umiditate HIH-5030 - 180 UAH
5. Senzor de presiune MPX4115A - 520 UAH.
TOTAL: 850 UAH sau 37$

Elementele rămase în total nu costă mai mult de 50 UAH; sursa de alimentare poate fi luată, de exemplu, de la un „încărcător” vechi pentru telefonul dvs.


Marcarea elementelor radio

SOFTWARE PENTRU STAȚIA METEO

Am dezvoltat o aplicație pentru Windows pe care o vom pune la dispoziție gratuit oricui dorește să construiască o astfel de stație meteo. Vă va permite să monitorizați vremea pe computer.


Fereastra aplicației PC

Tava de sistem afișează temperatura aerului

Aplicația poate trimite toate datele măsurate către serverul nostru „Meteopost” și pe o pagină specială (exemplu) puteți vizualiza toate datele meteo dintr-un browser de PC. Pagina este adaptată și pentru browserul unui telefon mobil.


Captură de ecran din browserul telefonului mobil

CONCLUZIE
Puteți economisi costul pieselor dacă le cumpărați de la chinezi de pe AliExpress. Este posibilă asamblarea unei stații meteo fără niciunul dintre senzori, cu excepția senzorului de temperatură. ADC-ul nostru are o intrare liberă rămasă, astfel încât poate primi și un semnal de la senzorul de vânt. Dar, din moment ce suntem în oraș, pur și simplu nu avem unde să instalăm și să testăm un astfel de senzor. În zonele urbane nu va exista măsurarea adecvată a vitezei și direcției vântului. Metode făcut singur Senzorii de viteza vântului sunt descriși în detaliu de mulți pasionați de pe net. Senzorul din fabrică este destul de scump.

Un radioamator cu abilități medii poate asambla o astfel de stație meteo. Pentru a face lucrurile și mai simple, nu trebuie să diluați placă de circuit imprimat, și asamblați prin montare montată pe o placă. Testat - funcționează.

Am încercat să creăm o stație meteo accesibilă, ieftină. În special, un computer este utilizat în sistem în acest scop. Dacă îl excludeți, atunci trebuie să faceți o unitate de afișare suplimentară, o unitate de transmisie a datelor în rețea etc., ceea ce va crește semnificativ prețul. De exemplu, acum populara „Stație Meteo Netatmo” cu parametri măsurați similari costă aproximativ 4.000 UAH (200 USD).

Suntem pregătiți să ajutăm pe oricine dorește să realizeze o astfel de stație meteo cu consultații. De asemenea, vom furniza software-ul necesar și vă vom conecta stația la site-ul nostru web.

Stație meteo DIY.

Era seară, nu mai era nimic de făcut după Anul Nou. Ca de obicei, în timpul sărbătorilor de iarnă de Anul Nou vreau să-mi ocup capul și mâinile cu ceva util și creativ. În aceste sărbători de Anul Nou am decis să fac o stație meteo cu propriile mele mâini. Am început pregătirile din timp, am achiziționat și asamblat toate componentele înainte de Anul Nou și am făcut programarea principală în perioada sărbătorilor.

(Sunt o mulțime de fotografii sub tăietură!)

În primul rând, voi trece peste componente; nu voi da link-uri, deoarece produsele de pe eBay (în contul meu personal) au fost arhivate. Am cumpărat multe componente pe îndelete de pe eBay. Am încercat o licitație pentru prima dată; înainte am cumpărat întotdeauna „cumpără-l acum”. Ce pot să spun, dacă nu te grăbești să faci cumpărături, poți cumpăra unele componente mai ieftine (diferența este uneori de două ori mai mare).

Senzor de presiune VMR085
Acesta este senzorul principal. Când l-am văzut pe eBay, am știut că vreau să construiesc o stație meteo acasă.
Senzorul a sosit într-un plic obișnuit, acoperit cu folie cu bule în interior.

În interiorul plicului se afla cartea de vizită a vânzătorului și un senzor, ambalate într-o pungă antistatică și învelită într-un alt strat de folie cu bule.

Punga antistatică a fost sigilată astfel încât umiditatea din timpul zborului să nu amenințe senzorul

Scoatem senzorul. Pe o parte există o linie lipită de contacte, care au fost introduse în spumă pentru a preveni îndoirea acestora. Pe de altă parte există senzorul în sine și marcajele de contact.




Totul ar fi bine, dar marcajele de contact sunt aplicate într-o imagine în oglindă.
Senzorul este conectat prin magistrala I2C și este alimentat la 3,3 V. Adică pentru funcționarea normală aveți nevoie de 4 fire (+, -, SDA, SCL)
Puteți interoga senzorul în 2 moduri: fie prin bibliotecă, fie folosind funcții direct în schiță.
Exemplu de program:

#include

#define BMP085_ADDRESS 0x77 // adresa I2C a BMP085

Const unsigned char OSS = 0; // Setarea supraeșantionării

// Valori de calibrare
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;

Temperatura scurta;
presiune lungă;

Void setup()
{
Serial.begin(9600);
Wire.begin();
bmp085Calibrare();
}

buclă goală ()
{
temperatura = bmp085GetTemperature(bmp085ReadUT());
presiune = bmp085GetPressure(bmp085ReadUP());
Serial.print("Temperatura: „);
Serial.print (temperatura/10,0, DEC);
Serial.println("C");
Serial.print("Presiune: „);
Serial.print(presiune/133.322, DEC);
Serial.println(“mm Hg”);
Serial.println();
întârziere (1000);
}

Void bmp085Calibrare()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}

Short bmp085GetTemperature (unsigned int ut)
{
lung x1, x2;
x1 = (((lung)ut - (lung)ac6)*(lung)ac5) >> 15;
x2 = ((lung)mc<< 11)/(x1 + md);
b5 = x1 + x2;

Întoarcere ((b5 + 8)>>4);
}

Long bmp085GetPressure (nesemnat de mult timp)
{
lung x1, x2, x3, b3, b6, p;
nesemnat lung b4, b7;
b6 = b5 - 4000;
// Calculați B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((lung)ac1)*4 + x3)<>2;
// Calculați B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (nesemnat lung)(x3 + 32768))>>15;
b7 = ((nesemnat lung)(sus - b3) * (50000>>OSS));
dacă (b7< 0x80000000)
p = (b7<<1)/b4;
altfel
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
întoarcere p;
}

// Citiți 1 octet din BMP085 la „adresă”
char bmp085Read (adresă caracter nesemnată)
{
date char nesemnate;

Wire.write(adresa);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
în timp ce(!Wire.available())
;
return Wire.read();
}

Int bmp085ReadInt (adresă caracter nesemnată)
{
caracter nesemnat msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(adresa);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
în timp ce(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}

// Citiți valoarea temperaturii necompensate
unsigned int bmp085ReadUT()
{
unsigned int ut;
// Scrieți 0x2E în Register 0xF4
// Aceasta solicită o citire a temperaturii
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// Așteptați cel puțin 4,5 ms
întârziere(5);
// Citiți doi octeți din registrele 0xF6 și 0xF7
ut = bmp085ReadInt(0xF6);
return ut;
}

// Citiți valoarea presiunii necompensate
nesemnat lung bmp085ReadUP()
{
caracter nesemnat msb, lsb, xlsb;
unsigned long up = 0;
// Scrieți 0x34+(OSS<<6) into register 0xF4
// Solicitați o citire a presiunii cu setare de supraeșantionare
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
// Așteptați conversia, timpul de întârziere depinde de OSS
întârziere (2 + (3<// Citiți registrul 0xF6 (MSB), 0xF7 (LSB) și 0xF8 (XLSB)
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
// Așteptați ca datele să devină disponibile
în timp ce(Wire.available()< 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
sus = (((nesemnat lung) msb<< 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
întoarce-te sus;
}


În plus, senzorul are propriul său senzor termic pentru compensarea presiunii și un altimetru

Arduino Nano v3.0
Aceasta este inima întregii stații meteo. Mai simplu spus, controlerul are dimensiuni miniaturale.
eu am cumparat
Nu voi vorbi în detaliu despre controler, deoarece acest lucru a fost deja făcut înaintea mea:


Pachetul lightake a fost prefabricat, controlerul a venit într-un pachet care conținea un cablu USB și un Arduino într-o pungă antistatică sigilată.

Pentru a estima dimensiunea, am plasat o monedă de 1 rublă lângă Arduino.

Placa de control de aproape



Cablul USB este bun, cu inel de ferita. Arduino este alimentat printr-un cablu USB. Mediul de dezvoltare poate fi descărcat (pagina de descărcare). Limbajul este asemănător „C”, nu au fost probleme cu stăpânirea lui, deoarece programez mult în el la serviciu.

ecran LCD
La serviciu am găsit în coșuri un ecran LCD 1602 compatibil. A trebuit să schimb conexiunea, deoarece nu am putut găsi o fișă de date pentru ea. Ca urmare, LCD-ul a început să funcționeze.

Dar după o scurtă perioadă de utilizare, am observat că acest ecran nu mi-a fost suficient și nu ar fi posibil să afișez mai multe date, deoarece are doar 2 rânduri a câte 16 caractere fiecare. La început pare că acești parametri sunt suficienți, dar când te apuci de programare, îți dai seama că maximul pe care îl poți strânge este de 3-4 parametri. Și dacă faci un meniu (mă gândeam să fac un meniu pe acest ecran), atunci mai rămân doar 1-2 parametri spațiu liber.
Drept urmare, am început să caut un alt ecran. La început m-am uitat cu atenție la ecranul grafic de la Nokia 3310 și am participat chiar la licitația eBay pentru a-l cumpăra, dar nu a ieșit (de care sunt foarte fericit), așa că a trebuit să renunț la acest ecran. Acum înțeleg că ar fi prea mic pentru scopurile mele, deoarece există ceva cu care să se compare.
În timp ce mă uitam la întâmplare prin scuturi pe Arduino, am dat peste un ecran grafic 12864 pe un controler ST7920. Acest ecran are dimensiunea potrivită și rezoluție bună pentru nevoile mele (128x64). Adică, puteți plasa cu ușurință 6-7 rânduri de 20 de caractere într-un font care poate fi citit în mod normal. Deoarece ecranul este grafic, pe lângă text, graficele pot fi plasate în diferite fonturi. Pe scurt, asta este exact ceea ce aveam nevoie, totul era prezent pe acest ecran, așa că nu am putut rezista și l-am comandat.
Coletul a sosit rapid și a fost ambalat standard: un plic de folie cu bule, în interior mai era un strat de folie cu bule și un ecran într-o pungă antistatică:






Pentru a estima dimensiunea, am plasat o monedă de 1 rublă lângă LCD.




Pentru a conecta rapid ecranul la Arduino, am lipit o linie de contacte la pinii LCD. LCD-ul poate fi conectat printr-o magistrală serială sau una paralelă. Am ales prima opțiune, deoarece există deja puține contacte Arduino gratuite.
Conexiune (preluată de pe web):

- Pinul 1 (GND) este conectat la magistrala comună
- Pinul 2 (VCC) este conectat la magistrala de alimentare +5V, iar consumul de curent este relativ mic, iar afișajul poate fi alimentat de la stabilizatorul Arduino încorporat.
- Pinii 4, 5 și 6 se conectează la ieșirile digitale Arduino, formând interfața serială SPI:
pinul 4 – (RS) – corespunde liniei CS (de exemplu 7)
pinul 5 – (RW) – corespunde liniei MOSI (de exemplu 8)
pinul 6 – (E) – corespunde liniei SCK (de exemplu 3)
Numerele de contact Arduino pot fi orice, principalul lucru este să nu uitați să le indicați corect în textul programului atunci când inițializați afișajul.
- Pinul 15 (PSB) este conectat la magistrala comună.
- Contactele 19 (A) și 20 (K) sunt sursa de alimentare cu iluminare de fundal (+5V și respectiv GND). Pentru a regla luminozitatea luminii de fundal, puteți utiliza un rezistor variabil de 10 kOhm conectat între magistrala de alimentare și GND. Tensiunea de la motorul său este furnizată pinului 19 al afișajului.
Conform acestor instrucțiuni, am conectat totul, cu excepția luminii de fundal. Am folosit Arduino PWM pentru a alimenta lumina de fundal.
Pentru a conecta programatic LCD-ul la Arduino, se folosește biblioteca u8glib. Îl poți descărca. Dacă există probleme la descărcare, pot încărca biblioteca pe narod.ru.
Biblioteca în sine nu este complicată și vă permite să afișați text în diferite fonturi, să desenați o linie, să desenați forme geometrice simple (dreptunghi, cerc) și să afișați propriile imagini pregătite într-un mod special. În principiu, acest instrument este suficient pentru majoritatea sarcinilor.
Iată rezultatul unui program simplu:

Programul în sine:

#include „U8glib.h”

U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE); // SPI E = 3, RW = 9, RS = 8

// Subrutină pentru determinarea memoriei libere
int freeRam() (
extern int __heap_start, *__brkval;
în televizor;
return (int) &v - (__brkval == 0? (int) &__heap_start: (int) __brkval);
}

Void setup(void) (
u8g.setFont(u8g_font_6x10); // font
u8g.setRot180(); //Întoarce ecranul
analogWrite(6, 115); // Setați luminozitatea ecranului (anodul de iluminare de fundal la 6 pini)
}

Buclă goală (nulă) (
u8g.firstPage();
face (

u8g.setPrintPos(1, 12); // poziție
u8g.print("Bună ziua!!!"); // textul de ieșire
u8g.drawBox(0,22,128,9); // Pictează dreptunghiul în alb
u8g.setColorIndex(0); // cerneală albă, fundal negru
u8g.setPrintPos(1, 30); // poziție
u8g.print("Cuvânt..."); // textul de ieșire

U8g.setColorIndex(1); // cerneală albă, fundal negru
u8g.setPrintPos(1, 50); // poziție
u8g.print("După pornire ="); // textul de ieșire
u8g.setPrintPos(85, 50); // poziție
u8g.print(millis() / 1000); // afișează numărul de secunde după pornire
u8g.setPrintPos(1, 64); // poziție
u8g.print(freeRam()); // arată câtă memorie este ocupată
) while(u8g.nextPage());

Întârziere (200);
}

Ceas în timp real DS1307
O altă componentă pentru stația mea meteo. Acest scut implementează un ceas în timp real. Le-am comandat pe eBay. Vânzătorul a trimis eșarfa ceasului într-o cutie nerealist de mare


În interiorul cutiei erau două coli A4 cu reclamă și o batistă de ceas învelită în celofan


Aș dori să menționez că taxa nu depășește 2 ruble. monedă, iar cutia măsura 13x15x5 cm.
Placa a fost ambalată într-o pungă antistatică

Şal aproape



A trebuit să mă ocup de acest modul. În primul rând, au existat dificultăți de conectare. Și în al doilea rând, nu există cuarț pe această placă. Dacă aș fi știut că voi petrece atât de mult timp pe modul, cel mai probabil l-aș fi asamblat singur, deoarece internetul este plin de diagrame. Cel mai simplu circuit conține 4-5 componente.
In ceea ce priveste legatura. Am găsit o bibliotecă care spunea că interfața I2C poate fi conectată nu la intrările analogice obișnuite Arduino (A4 și A5), ci la oricare dintre cele discrete. Am făcut-o așa cum a fost scris. La început nimic nu a mers, dar după un dans lung cu tamburina, ceasul a pornit. Ei bine, m-am gândit, asta e, problemele s-au terminat, dar după ce am încercat să conectez același modul la alt Arduino, dansul cu tamburina a continuat. Am petrecut mult timp căutând o soluție la această problemă și aproape peste tot a fost indicată fie o conexiune incorectă, fie absența rezistențelor pull-up pe contactele SCL și SDA. Deja voiam să intru în placă cu un fier de lipit, dar pe un forum am dat din greșeală de un cod în care se spunea că se conectează SCL și SDA la porturile standard I2C de pe Arduino. După o conexiune standard, totul a funcționat imediat.
Acum despre cuarț. Nu știu ce fel de cuarț au pus chinezii acolo, dar ceasurile cu astfel de cuarț au fugit cu 10-11 secunde pe zi. Această eroare este de 5 minute pe lună și 1 oră pe an. Nu este nevoie de un astfel de ceas. A trebuit să intru din nou online și să caut cum să repar acest bug. Prima soluție care apare spune că trebuie să împămânți cuarțul. Am făcut-o - rezultatul a fost zero. De asemenea, am găsit undeva că trebuie să găsesc o placă de bază veche și să scot de acolo quartzul ceasului. Am făcut-o - există un rezultat. Acum ceasul fuge nu cu 10-11 secunde, ci cu 1,5 secunde pe zi. Să spunem doar că s-a îmbunătățit, dar este departe de a fi ideal. Deoarece nu mai am chef să mă joc cu un fier de lipit, s-a decis să reglez ceasul programatic, adică să reglez ceasul la valoarea necesară o dată pe zi. După 10 zile, ceasul a sunat cu cel mult o secundă. Metoda este bună, dar numai când dispozitivul de sincronizare Arduino este conectat la curent, altfel ceasul funcționează pe baterie și tot fuge.
Un mic program de testare:

#include „Wire.h”
#define DS1307_I2C_ADDRESS 0x68 // SDA A4, SCL A5

Octet decToBcd (byte val)
{
return ((val/10*16) + (val%10));
}

Byte bcdToDec(byte val)
{
return ((val/16*10) + (val%16));
}

Void setDateDs1307(octet secundă, // 0-59
octet minut, // 0-59
octet oră) // 0-99
{

Wire.write(0);
Wire.write(decToBcd(secunda));
Wire.write(decToBcd(minut));
Wire.write(decToBcd(ora));
Wire.endTransmission();
}

Void getDateDs1307(octet *secundă,
octet *minut,
octet *oră)
{

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

*secunda = bcdToDec(Wire.read());
*minut = bcdToDec(Wire.read());
*ora = bcdToDec(Wire.read());
}

Void setup()
{
octet secundă, minut, oră;
Wire.begin();
Serial.begin(9600);

Al doilea = 45;
minut = 5;
ora = 16;

SetDateDs1307(secundă, minut, oră);
}

buclă goală ()
{
octet secundă, minut, oră;

GetDateDs1307(&second, &minute, &hour);
Serial.print(oră, DEC);
Serial.print(":");
Serial.print(minut, DEC);
Serial.print(":");
Serial.println(al doilea, DEC);

Întârziere (1000);
}


Biblioteca nu este folosită aici, iar funcțiile pentru timpul de citire și scriere sunt trunchiate.

Senzor de temperatură și umiditate DHT11
Nu este nimic de spus despre acest senzor. Nici nu l-as folosi daca nu ar fi nevoie de umiditate. Din păcate, nu i-am făcut o fotografie când l-am primit, așa că nu vor fi fotografii. Fotografiile senzorului pot fi văzute mai jos, unde l-am conectat la Arduino. Conexiunea senzorului este simplă (+, ieșire digitală, -). De obicei, senzorii sunt fabricați cu patru pini. Cu acest factor de formă, al treilea pin nu este conectat la nimic.
Puteți folosi biblioteca pentru a vă conecta la Arduino. Îl poți descărca.
Un mic program de testare cu ieșire de informații pe afișajul LCD 1602:

// include codul bibliotecii:
#include
#include

// Declara obiecte
dht11 DHT11;
LiquidCrystal lcd (12, 11, 6, 5, 4, 3);

#define DHT11PIN 7
int i;

Void setup()
{
lcd.begin(16, 2);
lcd.print("Stare: „);
i=0;
}

buclă goală ()
{
int chk = DHT11.read(DHT11PIN);
lcd.setCursor(8, 0);
comutator (chk)
{
cazul 0: lcd.print(“OK „); break;// lcd.setCursor(11, 0); lcd.print(millis()/2000); pauză;
caz -1: lcd.print(„Eroare sumă de verificare”); mErr(); pauză;
case -2: lcd.print("Eroare de expirare"); mErr(); pauză;
implicit: lcd.print ("Eroare necunoscută"); mErr(); pauză;
}
întârziere (500);
lcd.setCursor(15, 0);
comutator (i)
{
cazul 0: lcd.print("^"); lcd.setCursor(15, 1); lcd.print(" ");break;
cazul 1: lcd.print("v"); lcd.setCursor(15, 1); lcd.print(" ");break;
implicit: lcd.setCursor(15, 1); lcd.print("E"); pauză;
}
i=i+1;
dacă (i>1) i=0;
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.setCursor(2, 1);
lcd.print((float)DHT11.umiditate, 0);
lcd.setCursor(4, 1);
lcd.print("%");
lcd.setCursor(8, 1);
lcd.print("T=");
lcd.setCursor(10, 1);
lcd.print((float)DHT11.temperature, 0);
lcd.setCursor(12, 1);
lcd.print("C");

Void Err ()
{
lcd.setCursor(2, 1);
lcd.print("**");
lcd.setCursor(10, 1);
lcd.print("**");
i=5;
}


Senzorul are unele dezavantaje - datele de la senzor sunt doar în numere întregi, iar intervalul este slab.

Se pare că am scris despre toate componentele. Tot ce rămâne este să adunăm totul într-un singur întreg.
Hopa, aproape am uitat! Pentru a asambla dispozitivul, aveți nevoie de o husă. Am comandat și husa pe Ebay. Vânzătorul s-a dovedit a fi din Anglia. Coletul a ajuns repede, dar nu i-am făcut poze. Toate fotografiile cazului sunt mai jos.

În primul rând, am asamblat totul pe masă folosind cablaje speciale. Am scris un program de testare și l-am încărcat în controler.



De fapt, culoarea albastră a luminii de fundal este mult mai strălucitoare. Chiar și la luminozitate minimă (Bright=5), cadrul este iluminat.

Pentru a asambla totul fără fir, s-a decis să se facă o mini placă de bază, iar pe conectori au fost puse plăci și scuturi Arduino. Dacă se întâmplă ceva, acestea pot fi îndepărtate rapid și ușor. De asemenea, am decis să atașez ecranul LCD și butoanele de control la conectori, doar pentru a lipi senzorul de temperatură pe fire.
Asa a iesit esarfa



În ultima fotografie nu am spălat complet fluxul. Am lipit cauciuc poros sub scuturi de lângă conectori, astfel încât să existe măcar puțin suport. Deși, de fapt, scuturile din conectorii de pe contacte rezistă foarte bine.

Placa de baza cu scuturi instalate si placa Arduino.

Așa arată o conexiune completă la placa de bază


În loc de nasturi, am folosit un scut de casă lipit pe o placă. Am folosit ca butoane butoane de la șoareci vechi.
După cum puteți vedea, numărul de fire a scăzut.

Principala problemă a plasării în carcasă este decuparea unei caneluri netede pentru ecranul LCD. Indiferent cât de mult am încercat, tot nu a ieșit perfect. În unele locuri, golurile au fost puțin mai mari de 1 mm. Pentru ca totul să arate îngrijit, am luat un etanșant negru pentru acvariu și am umplut toate crăpăturile, în același timp am atașat ecranul de acest etanșant. După ce s-a uscat sigilantul, am tăiat excesul din exterior. În lumină puternică, etanșantul este vizibil, dar în lumină normală, totul se îmbină cu corpul.
Așa arată carcasa din interior cu un ecran LCD și o placă de bază instalate.

Așa arată din exterior în lumină puternică (scuze pentru amprentele digitale, le-am văzut când sortam fotografiile).

M-am gândit mult timp la cum să potrivesc butoanele în carcasă și, cel mai important, ce butoane să folosesc...
In magazinele de radio-electronica le-a placut butonul cu un pin lung si varfurile care se potrivesc pe acest pin. Aceste butoane sunt folosite pentru lipirea plăcii. Totul ar fi bine, dar au un minus - cursa de apăsare este foarte mică și puternică.
A trebuit să punem butoanele în două etape: prima a fost să plasăm butoanele pe tablă, a doua a fost să montam această placă pe o altă placă. Și apoi puneți toate acestea în corp pe ghidaje.

Iată cum arată o eșarfă cu nasturi:



Iată cum arată placa suport:


Aici puteți vedea ghidajele în care este introdusă placa cu butoane. Unele elemente au fost lipite pentru a da rigiditate plăcii.

Acum punem totul în corp
Fără butoane de conectare:


Cu conexiune prin buton:

Închideți carcasa și porniți-o. Totul funcționează excelent, butoanele funcționează așa cum ar trebui.

La final postez un scurt videoclip cu dispozitivul care funcționează în diferite moduri:
http://www.youtube.com/watch?v=KsiVaUWkXNA&feature=youtu.be
Pentru cei care nu văd videoclipul aici, aici este link-ul către

Este timpul să încheiem recenzia.
Voi scrie puțin despre program și apoi câteva concluzii scurte. Când am scris programul, nu credeam că voi atinge foarte repede limita de 30.720 de octeți.


A trebuit să optimizez codul. Am mutat multe bucăți de cod în subrutine. Nu m-aș fi gândit niciodată că o instrucțiune switch...case în formă compilată ocupă mai mult spațiu decât mai multe instrucțiuni if...else. Declararea corectă a variabilelor economisește și spațiu. Dacă declarați o matrice lungă, deși este foarte posibil să obțineți pe octeți, atunci depășirea memoriei ajunge la 500 de octeți, în funcție de dimensiunea matricei. Când scrii un program, nu te gândești la el și abia mai târziu, când analizezi programul, îți dai seama că ai greșit unele lucruri și începi să optimizezi codul. După ce s-au rezolvat problemele cu dimensiunea programului, am întâlnit o limitare a RAM. Acest lucru a fost exprimat prin faptul că programul a început să se înghețe după încărcare. A trebuit să introduc o subrutină pentru calcularea memoriei RAM liberă. Ca urmare, am fost forțat să renunț la un algoritm de prognoză meteo, deoarece trebuie să afișeze pictograme pe ecran. Algoritmul în sine funcționează, dar rezultatul pictogramelor a trebuit să fie înregistrat. Mai am idei despre cum să optimizez codul, dar în viitorul apropiat voi lăsa dispozitivul să funcționeze așa cum este pentru a-i evalua performanța și a identifica toate erorile.

Acum cateva concluzii
Minusuri
1) Preț. Justificarea acestui dezavantaj este că un hobby nu este niciodată ieftin.

pro
1) Funcționalitate excelentă a dispozitivului
2) Creșterea funcțiilor este limitată doar de controlerul utilizat și de propria dorință
3) Plăcerea estetică din contemplare și satisfacția morală din faptul că în sfârșit am asamblat și completat acest dispozitiv

Plănuiesc să cumpăr +86 Adauga la favorite Mi-a placut recenzia +137 +304

Ți-a plăcut articolul? Imparte cu prietenii tai!
A fost de ajutor articolul?
da
Nu
Vă mulțumim pentru feedback-ul dumneavoastră!
Ceva a mers prost și votul tău nu a fost numărat.
Mulțumesc. Mesajul tau a fost trimis
Ați găsit o eroare în text?
Selectați-l, faceți clic Ctrl + Enter si vom repara totul!