Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Cel mai simplu altimetru barometric bazat pe Arduino. Barometru avansat

Cel mai simplu altimetru barometric bazat pe Arduino. Barometru avansat

Introducere

Ce poate fi afișat pe un ecran cu două linii în afară de „Hello world!”? De ce să nu afișați temperatura, umiditatea și presiunea?

Senzorii oferiți ca ghid de studiu pentru arduino (DHT11, DHT22) arată temperatura și umiditatea. În scopuri educaționale (pentru universitate) a fost necesar să se observe și presiunea. Desigur, pupirul are un barometru, dar de ce să nu-l așezi pe al tău? În plus, puteți acumula în continuare citiri în modul automat, iar aceasta este o experiență bună în învățarea arduino.

Într-un fel sau altul, componentele au fost comandate din China și acest dispozitiv a fost asamblat.

Componentele necesare

A fost folosit un USB-UART pentru a trimite schița către arduino. De asemenea, a fost posibil să utilizați un Raspberry Pi sau un computer cu port COM.

Schema de conectare pentru firmware și codul programului

Din China, USB-UART a venit cu un set de fire:

Erau destul de des. Am lăsat jumperul la 3,3 volți, în ciuda faptului că versiunea mea arduino este alimentată de 5 volți.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opțional, la mine nu a funcționat, poate pentru că tensiunea semnalului a rămas 3.3V)

Dacă nu conectați DTR-ul, atunci după trimiterea firmware-ului, arduino trebuie repornit cu butonul încorporat, va începe schimbul activ de date în ambele direcții (după cum evidențiază LED-urile de pe USB-UART), după o descărcare reușită a firmware-ului, se va reporni singur.

Biblioteci terță parte necesare:

Codul în sine, cu comentarii din exemple (în cazul în care cineva trebuie să schimbe ceva).

Cod

#include #include „SparkFunBME280.h” #include „Wire.h” #include „SPI.h” #include // Obiect senzor global BME280 mySensor; LiquidCrystal_I2C lcd (0x3F, 16,2); // Adresa de afișare, în cazul meu 0x3F void setup () (lcd.init (); lcd.backlight (); // *** Setări driver ***************** *************** // // commInterface poate fi I2C_MODE sau SPI_MODE // specifica chipSelectPin folosind numele de pin Arduino // specifica adresa I2C. Poate fi 0x77 (implicit) sau 0x76 // Pentru I2C, activați următoarele și dezactivați secțiunea SPI mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // Adresa senzorului, în cazul meu nu este standard // Pentru SPI, activați următoarele și dezactivați secțiunea I2C // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; // *** Setări de operare ************************* **** // // renMode poate fi: // 0, modul Sleep // 1 sau 2, modul forțat // 3, modul normal mySensor.settings.runMode = 3; // Exemplul sugerează utilizarea modului forțat, dar la actualizarea o dată pe secundă, modul normal este suficient // tStandby poate fi: // 0, 0,5 ms // 1, 62,5 ms // 2, 125 ms // 3, 250 ms // 4, 500 ms // 5, 1000 ms // 6, 10 ms // 7, 20 ms mySensor.settings.tStandby = 5; // Evident că nu este necesar mai des // filtrul poate fi dezactivat sau numărul de coeficienți FIR de utilizat: // 0, filtru dezactivat // 1, coeficienți = 2 // 2, coeficienți = 4 // 3, coeficienți = 8 // 4 , coeficienți = 16 mySensor.settings.filter = 0; // tempOverSample poate fi: // 0, ignorat // de la 1 la 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.tempOverSample = 1; // pressOverSample poate fi: // 0, ignorat // de la 1 la 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.pressOverSample = 1; // humidOverSample poate fi: // 0, ignorat // 1 prin 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.humidOverSample = 1; // Apelarea .begin () face ca setările să fie încărcate mySensor.begin (); ) void loop () (// Literele pot fi afișate o dată, iar apoi citirile pot fi modificate, dar citirile pot deplasa linia atunci când numărul de cifre semnificative se modifică.lcd.setCursor (0,0); lcd.print ( "H ="); lcd.print ((uint8_t) mySensor.readFloatHumidity ()); lcd.print ("%"); lcd.print ("T ="); lcd.print (mySensor.readTempC ()); lcd.setCursor (13,0); lcd.print ("P:"); lcd.setCursor (0,1); int mmH = mySensor.readFloatPressure () / 133; lcd.print (mmH); lcd.print ( „mmH”); imprimare lcd (mySensor.readFloatPressure ()); lcd.setCursor (14,1); lcd.print ("Pa"); întârziere (1000);)


Adresa senzorului poate fi ghicită, sunt doar două dintre ele.

Cum să aflați adresa afișajului dvs., puteți vedea. Există două etichete, în funcție de microcircuit.

În acest caz:


Iar adresa va fi 0x3F pentru că A0 - A2 deschis:

LED-ul care este închis într-un oval poate fi mai bine evaporat.

Schema de conectare

Rezistorul a fost ales ca jumătate din rezistența senzorului (între VVC și GND), astfel încât căderea de tensiune pe el să fie de 1,7 volți. Circuitul poate fi alimentat și de la intrarea RAW, cu o tensiune diferită (de exemplu, de la coroană).

Fotografia arată că, pentru compactitate, puteți prelua puterea senzorului și a afișa de la un alt pin. De asemenea, puteți vedea o ramură a unei perechi de fire galben-portocaliu, pe ele atârnă un rezistor de 100 Ohm, pentru a reduce luminozitatea luminii de fundal (puteți lăsa jumperul, dar vă va tăia ochii).

În cazul meu, totul este alimentat de o sursă de alimentare veche a computerului. Poate fi alimentat prin USB. Toate componentele au fost lipite cu lipici Moment care era la îndemână.

Rezultat

La locul de muncă, 1602 a apărut înșurubat pe masă, care arată presiunea, umiditatea, temperatura. Arduino poate fi reîmprospătat fără a fi îndepărtat (poate deveni o linie târâtoare).

BMP085 este un senzor pentru monitorizarea presiunii barometrice (in plus, monitorizeaza si temperatura).

Senzorul este folosit în multe proiecte, inclusiv în cele care folosesc Arduino, deoarece practic nu are analogi. În plus, este și ieftin. Prima întrebare care apare este: de ce ar măsura cineva presiunea atmosferică? Există două motive pentru aceasta. Primul este controlul altitudinii. Odată cu creșterea altitudinii, presiunea scade. Este foarte convenabil pentru drumeții, ca alternativă la navigatoarele GPS. În plus, indicatorul presiunii atmosferice este folosit pentru a prezice vremea.

BMP085 a fost înlocuit la un moment dat de senzorul BMP180, care se conectează la Arduino și la alte microcontrolere în același mod ca predecesorul său, dar în același timp este mai puțin și costă mai puțin.

Specificații BMP085

  • Interval de sensibilitate: 300-1100 hPa (9000 m - 500 m deasupra nivelului mării);
  • Rezolutie: 0,03 hPa / 0,25 m;
  • Temperatura de lucru -40 până la + 85 ° C, precizie de măsurare a temperaturii + -2 ° C;
  • conexiune I2c;
  • V1 de pe modul folosește putere de 3,3 V și putere logică;
  • V2 de pe modul folosește 3,3-5 V putere și putere logică;

După repornirea IDE-ului Arduino, puteți rula primul exemplu de schiță, al cărui cod este dat mai jos:

#include & ltWire.h & gt

#include & ltAdafruit_Sensor.h & gt

#include & ltAdafruit_BMP085_U.h & gt

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified (10085);

void setup (void)

Serial.begin (9600);

Serial.println ("Test senzor de presiune"); Serial.println ("");

/ * Inițializați senzorul * /

dacă (! bmp.begin ())

/ * Dacă a apărut o inscripție: „A existat o problemă la detectarea BMP085...”,

Verificați dacă senzorul este conectat corect * /

Serial.print ("Hopa, nu a fost detectat niciun BMP085... Verificați cablarea sau ADDR-ul I2C!");

senzori_event_t eveniment;

bmp.getEvent (& eveniment);

/ * afișați rezultatele (presiunea barometrică este măsurată în hPa) * /

dacă (eveniment.presiune)

/ * Afișează presiunea atmosferică în hPa * /

Serial.print ("Presiune:"); Serial.print (presiune.eveniment); Serial.println ("hPa");

Deschideți fereastra monitorului serial (rată de transmisie - 9600). Schița noastră ar trebui să scoată date de presiune în hPa (hectopascali). Puteți testa funcționalitatea senzorului apăsând degetul pe senzor. Figura arată valorile presiunii după apăsarea cu degetul.


Măsurarea înălțimii deasupra nivelului mării

Probabil știi că presiunea scade odată cu creșterea altitudinii. Adică putem calcula altitudinea cunoscând presiunea și temperatura. Din nou, vom lăsa matematica în culise. Dacă sunteți interesat de calcule, vă puteți familiariza cu ele pe această pagină Wikipedia.

Exemplul de mai jos va folosi biblioteca suplimentară Arduino. Pentru a calcula altitudinea folosind senzorul BMP085, actualizați funcția „buclă de gol ()”. Modificările necesare ale schiței sunt prezentate în schița de mai jos. Acest lucru vă va oferi o citire a temperaturii pe baza nivelului de presiune și a temperaturii.

/ * creează un nou eveniment pentru senzor * /

senzori_event_t eveniment;

bmp.getEvent (& eveniment);

/ * afișează rezultatele (presiunea barometrică în hPa) * /

dacă (eveniment.presiune)

/ * afișează presiunea atmosferică în hPa * /

Serial.print ("Presiune:");

Serial.print (presiune.eveniment);

Serial.println ("hPa");

/ * pentru a calcula înălțimea cu o anumită precizie, trebuie să știți *

* presiunea medie si temperatura mediului ambiant

* în grade Celsius în momentul efectuării citirilor *

* dacă nu aveți aceste date, puteți utiliza „valoarea implicită”,

* care este egal cu 1013,25 hPa (această valoare este definită ca

* SENSORS_PRESSURE_SEALEVELHPA *

* în fișierul senzori.h). Dar rezultatele nu vor fi exacte *

* valorile cerute pot fi găsite pe site-urile cu prognoze de temperatură *

* sau pe resursele centrelor de informare din aeroporturile mari *

* de exemplu, pentru Paris, Franța, poate fi găsită presiunea medie actuală *

* pe site: http://bit.ly/16Au8ol * /

/ * obțineți valoarea actuală a temperaturii de la senzorul BMP085 * /

temperatura de plutire;

bmp.getTemperature (& temperatura);

Serial.print ("Temperatura:");

Serial.print (temperatura);

Serial.println ("C");

/ * convertiți datele primite la înălțime * /

/ * actualizați următoarea linie pentru a reflecta valorile curente * /

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print ("Altitudine:");

Serial.print (bmp.pressureToAltitude (seaLevelPressure,

Serial.println ("m");

Serial.println ("");

Serial.println („Eroare senzor”);

Lansăm schița și vedem înălțimea calculată deasupra nivelului mării.

Precizia citirilor BMP085 poate fi crescută semnificativ prin ajustarea valorii medii a presiunii, care variază în funcție de vreme. Fiecare 1 hPa de presiune pe care nu l-am luat în calcul duce la o eroare de 8,5 metri!

Figura de mai jos prezintă valorile presiunii de la una dintre resursele de informații ale aeroportului european. Valoarea presiunii este evidențiată cu galben, pe care o putem folosi pentru a rafina rezultatele.


Să schimbăm următoarea linie din schița noastră, notând valoarea reală (1009 hPa) în ea:

float seaLevelPressure = 1009;

Ca rezultat, vom obține rezultate ușor diferite:

Sugestie: când specificați presiunea, asigurați-vă că convertiți datele utilizate în hPa.

Utilizarea BMP085 (API v1)

Să repetăm ​​încă o dată: pentru a afla presiunea și altitudinea deasupra nivelului mării, trebuie să faci niște calcule. Dar toate sunt deja incluse în Biblioteca Arduino Adafruit_BMP085 (API v1), pe care o puteți descărca din link.

După instalarea bibliotecilor, trebuie să reporniți IDE-ul Arduino

După repornire, puteți rula primul exemplu de schiță:

#include & ltWire.h & gt

Adafruit_BMP085 bmp;

Serial.begin (9600);

Serial.println ("* C");

Serial.print ("Presiune =");

Serial.println ("Pa");

Serial.println ();

După ce ați intermit Arduino, deschideți monitorul serial. Setați viteza de transmisie la 9600. Schița va afișa temperatura în grade Celsius și presiunea în pascali. Dacă puneți degetul pe elementul senzor al senzorului, temperatura și presiunea vor crește:


Măsurarea altitudinii (API v1)

Pentru a controla altitudinea, rulați schița de mai jos:

#include & ltWire.h & gt

#include & ltAdafruit_BMP085.h & gt

Adafruit_BMP085 bmp;

Serial.begin (9600);

Serial.print ("Temperatura =");

Serial.print (bmp.readTemperature ());

Serial.println ("* C");

Serial.print ("Presiune =");

Serial.print (bmp.readPressure ());

Serial.println ("Pa");

// calculează altitudinea pe baza valorilor

// Presiunea barometrică „standard” egală cu 1013,25 milibari = 101325 Pascal

Serial.print ("Altitudine =");

Serial.print (bmp.readAltitude ());

Serial.println („metri”);

Serial.println ();

Rulați schița pentru a afișa rezultatele:


Pe baza citirilor de mai sus, ne aflăm la -21,5 metri deasupra nivelului mării. Dar știm că suntem deasupra mării! Amintiți-vă de aceeași problemă ca atunci când utilizați API V2. Trebuie să ținem cont de vreme! BINE. Să presupunem că am găsit un site meteorologic bun și presiunea este de 101,964 Pa. Deschideți exemplul Exemple-> BMP085test în Arduino IDE și editați linia care este evidențiată în figura de mai jos:


În această linie trebuie să introduceți datele presiunii curente. După o nouă lansare, veți constata că datele s-au schimbat dramatic și am ajuns la 29,58 de metri cu un semn plus, ceea ce seamănă mult mai mult cu adevărul.


Lasă-ți comentariile, întrebările și împărtășește-ți experiența personală mai jos. În discuție se nasc adesea idei și proiecte noi!

Mărimea presiunii atmosferice, viteza și natura modificărilor acesteia joacă un rol important în prezicerea vremii și, de asemenea, afectează puternic bunăstarea persoanelor susceptibile de dependență meteorologică - afecțiuni asociate cu diferite fenomene meteorologice. Barometrele sunt folosite pentru a măsura presiunea atmosferică. Barometrul aneroid mecanic are două săgeți. Unul arată presiunea curentă. O altă săgeată, care poate fi setată manual în orice poziție, vă permite să marcați valoarea măsurată pentru a determina tendința modificărilor presiunii atmosferice în timp. Este foarte de dorit ca barometrul electronic să arate, de asemenea, nu numai valoarea presiunii atmosferice, dar să permită și să se determine dacă există o creștere sau o scădere și cât de repede se modifică parametrul măsurat.

Stațiile meteo interne ieftine arată doar pictograme cu imagini cu picături de ploaie, nori sau soare. Este dificil de spus cum sunt legate aceste pictograme de presiunea atmosferică și dacă această stație meteo are un senzor barometric sau sunt folosite alte moduri creative de a prezice vremea. Stațiile meteo mai avansate arată valoarea actuală a presiunii ca un număr, iar presiunea se schimbă în ultimele ore ca un grafic cu bare brut, în principal în scopuri decorative. Astfel de stații meteo sunt mult mai scumpe. Pe piata exista si aparate foarte sofisticate destinate marinarilor, iahtistilor etc., cu o precizie ridicata arata atat schimbarile de presiune cat si valoarea curenta, insa astfel de aparate sunt foarte scumpe.

Această publicație discută despre un barometru simplu de casă care arată amploarea și rata schimbării presiunii atmosferice, precum și temperatura aerului.

Aspectul dispozitivului este prezentat în fotografie.

Rezultatele măsurătorilor sunt afișate pe un afișaj de sintetizare cu două linii. Prima linie afișează rezultatul măsurării presiunii atmosferice actuale în mm Hg, abaterea valorii actuale a presiunii de la valoarea medie pentru o anumită locație (excesul valorii actuale a presiunii față de valoarea medie este considerat pozitiv), precum și ca temperatura aerului in grade Celsius. Datele afișate în linia de sus sunt reîmprospătate la fiecare 6 secunde. Ieșirea de date noi este însoțită de o clipire a LED-ului situat deasupra indicatorului.

A doua linie a indicatorului afișează creșterile de presiune din ultima oră, trei ore și zece ore. Dacă presiunea a crescut în perioada de timp specificată, atunci incrementul corespunzător este afișat cu un plus, în caz contrar - cu un minus. Datele din a doua linie sunt actualizate la fiecare 10 minute. Imediat după pornirea barometrului, a doua linie va fi goală. Valorile numerice vor apărea acolo după 1 oră, 3 ore și, respectiv, 10 ore.

Barometrul este proiectat să funcționeze într-o cameră uscată, încălzită, la o temperatură de 0 ... 40 ° C și o presiune atmosferică de 600 ... 825 mm Hg. Artă.

Precizia măsurării presiunii și temperaturii este în întregime determinată de precizia senzorului de presiune Bosch BMP180 utilizat. Eroarea tipică de măsurare a presiunii este de -1 hPa, care corespunde aproximativ la 0,75 mm Hg. Componenta de zgomot la măsurarea presiunii - 0,02 hPa (0,015 mm Hg). Incertitudinea tipică de măsurare a temperaturii în jurul valorii de 25 ° C este de +/- 0,5 ° C. Mai multe detalii despre caracteristicile tehnice ale senzorului BMP180 pot fi găsite pe acestea. descrierea din anexa.

Intervalele de timp din acest dispozitiv sunt numărate de software. Eroarea în formarea acestor intervale, măsurată de autor, nu depășește un minut în 10 ore.

Diagrama barometrului este prezentată în figură.

Elementul principal al dispozitivului este modulul Arduino Nano. Autorul a folosit a 3-a versiune cu microcontrolerul ATmega 328. Memoria modulului în acest caz este ocupată doar de o treime, astfel încât este posibil să se utilizeze modulul Arduino Nano cu microcontrolerul ATmega 168.

Afișează Winstar WH1602L - două rânduri cu 16 caractere pe linie. Se bazează pe controlerul HD44780. Rezistorul R2 vă permite să reglați contrastul imaginii. Dacă tensiunea la pinul 3 (Vo) este foarte diferită de cea optimă, atunci nicio imagine nu va fi vizibilă deloc pe afișaj. Această circumstanță trebuie luată în considerare la pornirea dispozitivului pentru prima dată. Pentru exemplul afișajului folosit de autor, tensiunea optimă la pinul 3 a fost de aproximativ 1 V. Rezistorul R3 determină valoarea curentă a LED-urilor de iluminare de fundal.

Senzorul de presiune BMP180 are o carcasa metalica cu dimensiunile de 3,6x3,6x1 mm. Concluziile sale sunt tampoane de contact situate pe fundul carcasei. În plus, senzorul necesită o sursă de alimentare de 1,8 - 3,6 V. Nivelurile de semnal pe care senzorul le schimbă cu dispozitivul extern diferă și ele de cele necesare. Aceste circumstanțe fac dificilă utilizarea directă a BMP180. Din fericire, această problemă poate fi rezolvată cu ușurință. Sunt la vânzare module bazate pe senzori BMP180, care includ senzorii înșiși și toate elementele potrivite. Aceste module sunt o placă de 10x13mm. Costul lor este de aproximativ 1,4 USD. Aspectul modulului este prezentat în fotografia următoare.

LED-ul HL1 clipește la fiecare 6 secunde, semnalând că noi rezultate sunt afișate pe barometru. Autorul a folosit un LED verde cu un diametru de 3 mm L-1154GT de la Kingbright.
Condensatorul C1 are o capacitate destul de mare, ceea ce face ca dispozitivul să fie insensibil la întreruperile de curent pe termen scurt. Dacă acest lucru nu este necesar, atunci C1 poate fi redus la 500 microfarads.
Dioda D1 stinge lumina de fundal a indicatorului în caz de pană de curent. Aceasta crește funcționarea autonomă a barometrului din energia stocată în condensatorul C1.

Aparatul poate fi alimentat de la orice sursă de curent continuu (încărcător de telefon mobil, sursă a oricărui gadget etc.) cu o tensiune de ieșire de 8 ... 12 V. La o tensiune de 9 V, barometrul consumă aproximativ 80 mA.

Dispozitivul este asamblat pe o placă de 85 x 55 mm, care este atașată de afișaj folosind o placă de plexiglas.

Senzorul BMP180 este situat în partea de jos - pe cât posibil de elementele principale generatoare de căldură, care sunt rezistența R3 și afișajul cu LED-uri retroiluminat. Corpul dispozitivului este o cutie de plastic de 160x160x25. Un număr de găuri de ventilație trebuie să fie găurite în pereții inferiori și superiori ai cutiei.

Schița care trebuie să fie flashată în memoria modulului Arduino Nano este prezentată în anexă. Autorul a folosit Arduino IDE 1.8.1. Pentru a susține senzorul de presiune, trebuie să instalați biblioteca Adafruit-BMP085. Dosarul corespunzător este inclus în anexă.

Înainte de a încărca schița, în rândul 17, în locul numărului 740.0, care corespunde presiunii medii la locul de instalare a copiei autorului a barometrului, introduceți presiunea medie în mm. rt. Artă. corespunzătoare locației în care va fi instalat barometrul dvs. Ca o primă aproximare, acest parametru poate fi determinat prin formula Pav = 760 - 0,091h, unde h este înălțimea deasupra nivelului mării în metri. Cel mai simplu mod de a determina altitudinea este cu un navigator GPS.

Această formulă nu ia în considerare mulți factori care afectează presiunea atmosferică și este aplicabilă numai pentru altitudini de până la 500 m. O descriere a modalităților de a determina cu mai multă precizie presiunea medie este în afara domeniului de aplicare al acestei publicații. Ele pot fi găsite pe numeroasele materiale despre meteorologie, care sunt disponibile pe Internet.

Lista radioelementelor

Desemnare Tip de Denumirea Cantitate NotăMagazinCaietul meu
A1 Modul senzor BMP180 1 În blocnotes
A2 Placa Arduino

Arduino Nano 3.0

1 În blocnotes
VD1 Dioda redresoare

1N4007

1 În blocnotes
HG1 Ecran LCDWH1602L1 Winstar În blocnotes
HL1 Dioda electro luminiscentaL-1154GT1 Kingbright În blocnotes
C1 Condensator electrolitic4700 uF x 16 V1

Pasiunea pentru inginerie electrică, robotizare, răspuns automat și sisteme de control nu a fost niciodată atât de ușor de realizat.

Dacă mai devreme existau constructori specializați cu seturi limitate de funcții și parametri stabiliți rigid, atunci varietatea de constructori de astăzi este pur și simplu uimitoare: sistemele cu microprocesoare reale, asamblate pe genunchi, au o funcționalitate practic nelimitată. Imaginația bogată, o bază largă de elemente, o comunitate mare de fani și ingineri și sprijinul producătorului sunt principalele trăsături distinctive astfel de truse de robotică solicitate de piață.

Unul dintre ele și cel mai popular, ceea ce este natural, este Arduino... Constructor pentru asamblarea instantanee a dispozitivelor electronice automate de orice complexitate: mare, medie si mica. Această platformă este numită și „calculatură fizică” pentru interacțiunea sa strânsă cu mediul. O placă de circuit imprimat cu un microprocesor, cod sursă deschisă, interfețe standard și senzori de conectare la Arduino sunt componentele popularității sale.

Un sistem este o placă care combină toate componentele necesare pentru a asigura un ciclu complet de dezvoltare. Inima acestei plăci este microcontroler... Oferă control asupra tuturor perifericelor. Senzorii conectați la sistem permit sistemului să „comunica” și să interacționeze cu mediul: analizează, marchează modificări.

Conectarea unui senzor digital de umiditate și temperatură

Doi senzori populari - DHT11, DHT22 - sunt conceputi pentru a masura umiditatea si temperatura (mai vorbim despre conectarea unui senzor de temperatura); soluție ieftină, excelentă pentru diagrame simple și antrenament. Termistor, senzor capacitiv - baza DHT11 și DHT22. Cipul intern realizează ADC-ul, dând o „cifră” la ieșire, pe care orice microcontroler o poate înțelege.

DHT11 diferă de DHT22 în domeniul de măsurare și frecvența de prelevare: umiditate - 20-80% pentru DHT11 și 0-100% pentru DHT22; temperatura - 0 ° C până la + 50 ° C pentru DHT11 și -40 ° C până la + 125 ° C pentru DHT22; sondaj - la fiecare secundă pentru DHT11 și la fiecare două secunde pentru DHT22.

Ambii senzori DHT au standard de 4 pini:

  1. Sursa de alimentare senzor.
  2. Autobuz de date.
  3. Neimplicat.
  4. Pământ.

Ieșirile de date și putere necesită un rezistor de 10K pentru a fi conectat între ele.

Proiectat pentru senzori DHT Biblioteca DHT.h(puteți vedea linkul). Când încărcați o schiță în controler, monitorul portului ar trebui să afișeze valorile curente ale umidității și temperaturii. Este ușor să verificați performanța - doar respirați pe senzor și ridicați-l: temperatura și umiditatea ar trebui să se schimbe.

Este posibilă afișarea valorilor pe ecran LCD 1602 I2C dacă îl includeți în sistem.

Folosind acești senzori, puteți construi un sistem automat de irigare a solului în aer liber, într-o seră și chiar pe un pervaz. Sau organizați un sistem de uscare a fructelor de pădure - acestea din urmă sunt suflate sau încălzite în funcție de conținutul de umiditate al boabelor.

De asemenea, unele acvarii necesită condiții speciale de umiditate care pot fi ușor controlate cu DHT1 și DHT22.

Adesea, în ceea ce privește prezicerea vremii sau determinarea înălțimii de ridicare deasupra nivelului mării, este necesar să se rezolve problema măsurării presiunii. Aici vin în ajutor barometrele electronice bazate pe tehnologia MEMS: metodă tensorometrică sau piezoresistivă asociată cu variabilitatea rezistenței dispozitivului atunci când se aplică forțe care deformează materialul.

Cel mai popular Senzor BMP085; pe lângă presiunea barometrică, înregistrează și temperatura. A fost înlocuit cu BMP180, are aceleași caracteristici:

  • Sensibilitate în interval: 300-1100 hPa (dacă în metri - 9000 - 500 m deasupra nivelului mării);
  • Rezoluție: 0,03 hPa sau 0,25 m;
  • Temperatura de funcționare a senzorului este de -40 + 85 ° C, precizia măsurării în intervalul specificat este de ± 2 ° C;
  • conexiune I2c;
  • V1 folosește 3,3V pentru putere și logică;
  • V2 folosește 3,3-5V pentru putere și logică.

Conectarea senzorilor la Arduino în acest caz este standard:

Va dura Driver de senzor unificat- versiunea sa actualizată oferă o precizie mai mare a citirilor; în plus, vă permite să lucrați cu mai mulți senzori de presiune conectați în același timp. Trebuie instalată și biblioteca Adafrut_Sensor.

Niciun sistem de securitate serios nu poate face fără acest senzor. Senzor infrarosu- elementul de bază al detectării prezenței animalelor cu sânge cald.

De asemenea, cu ajutorul senzorilor PIR, este extrem de convenabil să controlezi iluminarea, în funcție de prezența unei persoane în apropiere. Senzorii în infraroșu sau piroelectrici sunt simpli la nivel intern și ieftini. Sunt extrem de fiabile și rareori dau greș.

Baza senzorului- piroelectric sau dielectric capabil să creeze un câmp la schimbarea temperaturii. Sunt instalate în perechi, iar de sus sunt închise cu o cupolă cu segmente sub formă de lentile convenționale sau o lentilă Fresnel. Acest lucru permite ca fasciculul să fie focalizat din diferite puncte de penetrare.

În absența corpurilor care emit căldură în cameră, fiecare element are aceeași doză de radiație de intrare, respectiv aceeași tensiune la ieșiri. Când un animal viu cu sânge cald intră în „zona de vizualizare” a senzorilor, echilibrul este perturbat și apar impulsuri, care sunt înregistrate.

HC-SR501- cel mai răspândit și popular senzor. Are două rezistențe variabile de tăiere: unul pentru reglarea sensibilității și dimensiunii obiectului detectat, celălalt pentru reglarea timpului de răspuns (timpul în care este generat pulsul după detectare).

Schema de conectare este standard și nu va cauza dificultăți.

Deși funcția de măsurare a temperaturii este inclusă în mulți senzori, este mai bine să utilizați un senzor separat dedicat. De exemplu, DS18B20. Este un senzor integral cu o interfață serială digitală.

Punctele sale forte:

  • calibrare preliminară din fabrică;
  • eroare mai mică de 0,5 ° С;
  • rezoluție programabilă de 0,0625 ° С la rezoluție de 12 biți;
  • gamă extrem de largă de temperaturi măsurate: de la -55 ° С la + 125 ° С;
  • senzorul are un ADC încorporat;
  • mai mulți senzori pot fi incluși într-o linie de comunicație.

Cladirea TO-92- cel mai comun pentru acesti senzori. Există două scheme principale pentru conectarea unui senzor de temperatură DS18B20 la un microprocesor sau controler:

Pentru a lucra cu senzorul, trebuie să-l inițializați. Aceasta este urmată de scrierea unui octet și citirea unui octet.

Aceste trei operațiuni demonstrează cum să lucrezi cu senzorul, iar biblioteca OneWire le susține perfect. Instalați biblioteca OneWire. După aceea încărcăm schița - și mediul software este gata.

Este posibil să conectați mai mulți senzori DS18B20 - în acest caz, aceștia trebuie conectați în paralel. Biblioteca OneWire vă va permite să citiți lecturile dintr-o dată. Cu un număr mare de conexiuni la senzori în același timp, este necesar să adăugați rezistențe suplimentare de 100 sau 120 Ohm între piciorul de date al senzorului DS18B20 și magistrala de date de pe Arduino.

concluzii

Conectarea senzorilor la Arduino este transformarea unui robot algoritmic, controlat automat sau manual, într-un mediu cu drepturi depline pentru interacțiunea dispozitivelor și circuitelor cu mediul. Nu uitați - acesta nu este un panaceu pentru toate bolile. Și nu un produs de înaltă tehnologie end-to-end sau o aplicație finală. Arduino este un complex de soluții hardware și software care vă vor ajuta:

  • master sisteme algoritmice pentru ingineri începători;
  • stăpânește abilitățile de bază de proiectare;
  • invata sa programezi.

Indiferent de nivelul tău de pregătire, de cunoștințele tale, poți alege oricând sarcini pentru tine în limitele puterilor tale. Puteți asambla o soluție simplă pentru a automatiza orice sarcină simplă fără a lipi împreună cu un student; dar puteți seta o sarcină globală în care, pe lângă cunoștințe și logică, aveți nevoie și de capacitatea de a lipi calitativ și corect să desenați și să citiți desene. Și comunitățile active, forumurile și bazele de cunoștințe ale sistemului Arduino vor ajuta la rezolvarea aproape oricărei probleme.

Un barometru este un dispozitiv care măsoară presiunea atmosferică. Adică presiunea aerului, care ne apasă din toate părțile. Știm de la școală că primul barometru a fost o placă de mercur cu o eprubetă inversată în ea. Autorul acestui dispozitiv a fost Evangelista Torricelli, un fizician și matematician italian. Efectuarea citirilor unui barometru cu mercur poate fi la fel de simplă ca și citirea unui termometru cu alcool: cu cât presiunea în afara balonului este mai mare, cu atât coloana de mercur în interiorul acestuia este mai mare. Vaporii de mercur sunt cunoscuți a fi foarte toxici.

Mai târziu, a apărut un dispozitiv mai sigur - barometrul aneroid. În acest barometru, mercurul a fost înlocuit cu o cutie ondulată din tablă subțire, în care se crea un vid. Sub influența atmosferei, cutia se micșorează și, printr-un sistem de pârghii, întoarce săgeata de pe cadran. Așa arată aceste două barometre. Stânga - aneroid, dreapta - barometru Torricelli.

De ce avem nevoie de un barometru? Cel mai adesea, acest dispozitiv este utilizat pe aeronave pentru a determina altitudinea de zbor. Cu cât vehiculul se ridică mai sus deasupra nivelului mării, cu atât barometrul de bord suferă mai puțină presiune. Cunoscând această relație, este ușor de determinat înălțimea.

Un alt caz comun de utilizare este o stație meteo de casă. În acest caz, putem folosi dependențele cunoscute ale vremii viitoare de presiunea atmosferică. Pe lângă barometru, astfel de stații sunt echipate cu senzori de umiditate și temperatură.

1. Barometru electronic

Nu putem folosi barometre atât de voluminoase în robotică. Avem nevoie de un dispozitiv miniatural și eficient din punct de vedere energetic, care să se conecteze cu ușurință la același Arduino Uno. Majoritatea barometrelor moderne sunt realizate folosind tehnologia MEMS, la fel ca și girotahometrele cu accelerometre. Barometrele MEMS se bazează pe o metodă piezoresistivă sau de tensiometru, care utilizează efectul modificării rezistenței unui material sub acțiunea forțelor de deformare.

Dacă deschideți carcasa barometrului MEMS, puteți vedea elementul de detectare (în dreapta), care este situat direct sub orificiul din carcasa de protecție a dispozitivului și placa de control (în stânga), care efectuează filtrarea primară și conversia măsurătorilor.

2. Senzori BMP085 si BMP180

Cei mai accesibili senzori de presiune, care sunt adesea folosiți de controlorii de zbor și în tot felul de dispozitive electronice de casă, includ senzorii de la BOSH: BMP085 și BMP180. Al doilea barometru este mai nou, dar pe deplin compatibil cu versiunea veche.

Câteva caracteristici importante ale BMP180:

  • interval de valori măsurate: de la 300 hPa la 1100 hPa (de la -500m de la + 9000m deasupra nivelului mării);
  • tensiune de alimentare: de la 3,3 la 5 volți;
    puterea curentului: 5 μA la o rată de sondare de 1 Hertz;
  • nivel de zgomot: 0,06 hPa (0,5 m) în modul grosier (modul de putere ultra-scăzută) și 0,02 hPa (0,17 m) în modul de rezoluție avansată.

Acum să conectăm acest senzor la controler și să încercăm să estimăm presiunea atmosferică.

3. Conectarea BMP180

Ambii senzori au o interfață I2C, astfel încât pot fi conectați cu ușurință la orice platformă din familia Arduino. Așa arată tabelul de conexiuni pentru Arduino Uno.

BMP 180 GND VCC SDA SCL
Arduino Uno GND + 5V A4 A5

Diagramă schematică

Aspectul aspectului

4. Program

Pentru a lucra cu senzorul, avem nevoie de o bibliotecă: BMP180_Breakout_Arduino_Library

Descărcați-l din depozit și instalați-l în IDE-ul Arduino. Acum sunteți gata să scrieți primul program. Să încercăm să obținem date brute de la senzor și să le trimitem către monitorul portului COM.

#include #include SFE_BMP180 presiune; void setup () (Serial.begin (9600); pressure.begin ();) void loop () (double P; P = getPressure (); Serial.println (P, 4); delay (100);) double getPressure () (starea caracterului; dublu T, P, p0, a; status = pressure.startTemperature (); if (status! = 0) (// așteptare întârziere pentru măsurarea temperaturii (starea); status = pressure.getTemperature (T) ; if (starea! = 0) (starea = pressure.startPressure (3); if (status! = 0) (// așteptarea întârzierii măsurării presiunii (starea); status = pressure.getPressure (P, T); dacă ( stare! = 0) (întoarce (P);)))))

Procedura de obținere a presiunii râvnite de la senzor nu este atât de banală și constă din mai multe etape. Într-o formă simplificată, algoritmul arată astfel:

  1. cerem barometrului citirile senzorului de temperatura incorporat;
  2. așteptați timp A în timp ce senzorul evaluează temperatura;
  3. obținem temperatura;
  4. cerem presiunea barometrului;
  5. timpul de așteptare B în timp ce senzorul evaluează presiunea;
  6. obțineți valoarea presiunii;
  7. returnează valoarea presiunii din funcție.

Timpul B depinde de precizia măsurării, care este setată în funcție startPresiunea... Singurul argument pentru această funcție poate lua valori de la 0 la 3, unde 0 este cea mai grosieră și cea mai rapidă estimare, iar 3 este cea mai precisă estimare a presiunii.

Încărcăm programul pe Arduino Uno și observăm fluxul de măsurători ale presiunii atmosferice. Să încercăm să ridicăm senzorul deasupra capului nostru și să-l coborâm la nivelul podelei. Citirea va varia ușor. Rămâne doar să ne dăm seama cum putem converti aceste numere de neînțeles la înălțimea deasupra nivelului mării.

5. Convertiți presiunea în altitudine

Senzorul BMP180 returnează presiunea în hectopascali (hPa). În aceste unități se obișnuiește să se măsoare presiunea atmosferică. 1 hPa = 100 Pascali. Se știe că presiunea medie la nivelul mării este de 1013 hPa, iar fiecare metru suplimentar deasupra nivelului mării va scădea această presiune cu doar 0,11 hPa (aproximativ).

Astfel, dacă scădem din rezultatul funcției getPressure numărul 1013 și împărțim diferența rămasă la 0,11, apoi obținem valoarea înălțimii deasupra nivelului mării în metri. Iată cum se va schimba programul nostru:

Buclă goală () (dublu P, Alt; P = getPressure (); Alt = (P - 1013) /0,11; Serial.println (Alt, 2); întârziere (100);)

De fapt, presiunea depinde de altitudine în mod neliniar, iar formula noastră este potrivită doar pentru înălțimile la care trăim de obicei tu și cu mine. Din fericire, omenirea cunoaște o dependență mai precisă a presiunii de altitudine, pe care o putem aplica pentru a obține rezultate mai precise.

Aici p este presiunea măsurată într-un punct dat, p0 este presiunea în raport cu care se măsoară înălțimea.

Există deja o funcție în biblioteca SFE_BMP180 care o folosește pe cea specificată. formula pentru a obține înălțimea exactă. Îl folosim în programul nostru.

#include #include SFE_BMP180 presiune; dublu P0 = 0; void setup () (Serial.begin (9600); pressure.begin (); P0 = pressure.getPressure ();) void loop () (dublu P, Alt; P = getPressure (); Alt = presiune.altitudine (P) , P0) Serial.println (Alt, 2); delay (100);) double getPressure () (...)

Nu am copiat complet funcția getPressure pentru a menține textul lizibil.

În program a apărut o altă variabilă P0 - aceasta este presiunea pe care o vom măsura la începutul programului. În cazul unei aeronave, P0 va fi presiunea la locul decolare de la care ne vom începe urcarea.

6. Vizualizarea

Acum să încercăm să afișăm valorile presiunii în program SFMonitor, și să vedem cum se modifică presiunea când senzorul se mișcă la o înălțime de 2 metri.

Octet const static PACKET_SIZE = 1; octet const static VALUE_SIZE = 2; static const boolean SEPARATE_VALUES = adevărat; #include #include #include SFE_BMP180 presiune; SerialFlow rd (& Serial); dublu P0 = 0; void setup () (rd.setPacketFormat (VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES); rd.begin (9600); pressure.begin (); P0 = getPressure ();) void loop () (dublu P; P = getPressure (); rd.setPacketValue (100 + int ((P - P0) * 100)); rd.sendPacket (); delay (100);) double getPressure () (...)

Ca rezultat al programului, obținem un grafic de presiune în Pascals:

7. Concluzie

După cum am învățat din lecție, determinarea înălțimii deasupra nivelului mării nu este o sarcină atât de banală. Nu numai că presiunea depinde de înălțime în mod neliniar, dar imaginea este, de asemenea, stricată de diverși factori externi. De exemplu, presiunea din casa noastră se schimbă constant în timp. Chiar și în câteva minute, înălțimea măsurată de dispozitivul nostru poate varia în intervalul 0,5 - 1 metru. Temperatura afectează foarte mult și calitatea măsurătorilor, așa că trebuie să luăm în considerare atunci când calculăm presiunea.

Pentru aeronave, se recomandă utilizarea senzorilor de precizie avansati, cum ar fi MS5611. Acest barometru poate măsura până la 0,012 hPa, ceea ce este de 5 ori mai bun decât BMP180. De asemenea, coordonatele GPS sunt folosite pentru a clarifica altitudinea barometrică a zborului.

Succes la observarea atmosferei! 🙂

Top articole similare