Barometru cu funcții avansate. Cel mai simplu altimetru barometric bazat pe Arduino

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 de a controla altitudinea deasupra nivelului mării. Pe măsură ce altitudinea crește, presiunea scade. Foarte convenabil în drumeții, ca alternativă la navigatoarele GPS. În plus, presiunea atmosferică este utilizată pentru a prognoza vremea.

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

Caracteristicile tehnice ale 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 prin i2c;
  • V1 de pe modul folosește alimentare de 3,3 V și putere logică;
  • V2 de pe modul folosește 3,3-5V putere și putere logică;

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

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BMP085_U.h>

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ă apare mesajul: „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(&event);

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

dacă (eveniment.presiune)

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

Serial.print("Presiune: "); Serial.print(eveniment.presiune); 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 verifica funcționalitatea senzorului apăsând degetul pe senzor. Figura arată valorile presiunii după apăsarea cu degetul.


Măsurarea altitudinii deasupra nivelului mării

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

În exemplul de mai jos, va fi utilizată biblioteca suplimentară Arduino. Pentru a calcula înălțimea utilizând senzorul BMP085, actualizați funcția „buclă de gol()”. Schimbări necesare schițele sunt date în schița de mai jos. Ca rezultat, veți obține valoarea temperaturii pe baza nivelului de presiune și a valorii temperaturii.

/* creează un eveniment nou pentru senzor */

senzori_event_t eveniment;

bmp.getEvent(&event);

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

dacă (eveniment.presiune)

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

Serial.print("Presiune: ");

Serial.print(eveniment.presiune);

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 la momentul în care au fost efectuate citirile*

* 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 necesare pot fi găsite pe site-urile cu prognoze de temperatură*

* sau pe resurse centre de informare pe aeroporturi mari*

*de exemplu, pentru Paris, Franța, puteți găsi valoarea medie actuală a presiunii*

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

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

temperatura de plutire;

bmp.getTemperature(&temperature);

Serial.print("Temperatura: ");

Serial.print(temperatura);

Serial.println("C");

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

/* Actualizați rândul următor, afișând valorile curente */

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print("Altitudine: ");

Serial.print(bmp.pressureToAltitude(seaLevelPressure,

Serial.println("m");

Serial.println("");

Serial.println("Eroare senzor");

Executăm schița și vedem altitudinea calculată deasupra nivelului mării.

Precizia citirilor BMP085 poate fi crescută semnificativ prin specificarea 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 unui aeroport european. Galben este evidentiata valoarea presiunii, pe care o putem folosi pentru a clarifica rezultatele.


Să schimbăm următoarea linie din schița noastră, scriind în ea valoarea curentă (1009 hPa):

float seaLevelPressure = 1009;

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

Sfat: când specificați presiunea, nu uitați să 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ă facem câteva calcule. Dar toate sunt deja incluse în Biblioteca Arduino Adafruit_BMP085 (API v1), care poate fi descărcată de pe link.

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

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

#include <Wire.h>

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 deasupra nivelului mării, pur și simplu rulați schița de mai jos:

#include <Wire.h>

#include <Adafruit_BMP085.h>

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 deasupra nivelului mării pe baza valorilor

//Presiune 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:


Judecând după citirile de mai sus, ne aflăm la o altitudine de -21,5 metri față de nivelul mării. Dar știm că suntem deasupra mării! Ne amintim aceeași problemă ca și cu folosind API-ul V2. Trebuie să ținem cont de vreme! BINE. Să presupunem că găsim un site cu vreme 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 de presiune curente. După o nouă lansare, veți constata că datele s-au schimbat dramatic și am obținut 29,58 de metri cu un semn plus, ceea ce este mult mai asemănător cu adevărul.


Lăsați comentariile, întrebările și distribuiți experienta personala de mai jos. Noi idei și proiecte se nasc adesea în discuții!

Un barometru este un dispozitiv care măsoară presiunea atmosferică. Adică presiunea aerului care ne apasă din toate părțile. Încă de la școală, știm că primul barometru a fost o placă cu mercur și o eprubetă inversată în ea. Autorul acestui dispozitiv a fost Evangelista Torricelli, un fizician și matematician italian. Preluarea citirilor de la un barometru cu mercur poate fi luată la fel de simplu ca citirile de la un 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 - un barometru 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 contractă și, printr-un sistem de pârghii, întoarce săgeata de pe cadran. Așa arată aceste două barometre. În stânga este un aneroid, în dreapta este barometrul lui Torricelli.

De ce am putea avea nevoie de un barometru? Cel mai adesea, acest dispozitiv este utilizat pe aeronave pentru a determina altitudinea de zbor. Cu cât ambarcațiunea se ridică mai sus deasupra nivelului mării, cu atât barometrul de la bord suferă mai puțină presiune. Cunoscând această dependență, 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ă poată fi conectat cu ușurință la același Arduino Uno. Majoritatea barometrelor moderne sunt realizate folosind tehnologia MEMS, la fel ca și girotahometrele și accelerometrele. Barometrele MEMS se bazează pe o metodă piezoresistivă sau de tensiometru, care utilizează efectul modificării rezistenței unui material sub influența forțelor de deformare.

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

2. Senzori BMP085 si BMP180

La cei mai accesibili senzori de presiune, care sunt adesea folosiți în controlerele de zbor și în diferite tipuri de produse de casă dispozitive electronice, pot fi atribuiți senzori 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 la +9000m deasupra nivelului mării);
  • tensiune de alimentare: de la 3,3 la 5 Volți;
    curent: 5 µA la viteza de interogare - 1 Hertz;
  • nivel de zgomot: 0,06 hPa (0,5 m) în modul de putere ultra-scăzută și 0,02 hPa (0,17 m) într-un mod rezolutie maxima(modul de rezoluție avansată).

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

3. Conexiune 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 Arduino Uno.

BMP 180 GND VCC S.D.A. 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 Arduino IDE. Acum totul este gata pentru a scrie primul tău 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șteaptă întârzierea măsurării temperaturii (status); status = pressure.getTemperature( T); if (status != 0)( status = pressure.startPressure(3); if (status != 0)( // așteaptă întârzierea măsurării presiunii (status); status = pressure.getPressure(P,T); dacă (starea ! = 0)( return(P); ) ) ) ) )

Procedura de obținere a presiunii dorite 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 citiri de la senzorul de temperatura incorporat;
  2. timp de așteptare 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 specificată în funcție startPresiunea. Singurul argument al acestei funcții poate lua valori de la 0 la 3, unde 0 este cel mai dur și cel mai estimare rapida, 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 și să-l coborâm la nivelul podelei. Citirile vor varia ușor. Tot ce rămâne este să ne dăm seama cum putem converti aceste numere ciudate în altitudine deasupra nivelului mării.

5. Convertiți presiunea în altitudine

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

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

Void loop())( dublu P, Alt; P = getPressure(); Alt = (P - 1013)/0,11; Serial.println(Alt, 2); delay(100); )

De fapt, presiunea depinde neliniar de altitudinea deasupra nivelului mării, iar formula noastră este potrivită doar pentru altitudinile la care trăim de obicei. Din fericire, omenirea cunoaște o dependență mai precisă a presiunii de înălțime, 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.

Biblioteca SFE_BMP180 are deja o funcție care o folosește pe cea specificată. formula de obtinut inaltimea exacta. Î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 în raport cu care vom începe să urcăm.

6. Vizualizarea

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

Octet constant 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, definiția altitudinii deasupra nivelului mării nu este aceeași sarcină banală. Nu numai că presiunea depinde neliniar de altitudine, dar imaginea este, de asemenea, stricata de diverse 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 precizie crescută, cum ar fi MS5611. Precizia de măsurare a acestui barometru poate ajunge la 0,012 hPa, care 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! 🙂

Niciodată nu a existat o pasiune pentru inginerie electrică, robotică, sisteme automate răspunsul și controlul nu au fost atât de ușor de implementat.

Daca anterior existau constructori specializati cu seturi limitate funcţii şi strict parametrii dați, atunci varietatea de designeri de astăzi este pur și simplu uimitoare: reali sisteme cu microprocesoare, asamblate pe genunchi, au o funcționalitate aproape nelimitată. Imaginație bogată, largă element de bază, comunitățile mari de fani și ingineri și suportul producătorilor sunt principalele trăsături distinctive astfel de truse de robotică la cererea pieței.

Una dintre ele și cea mai populară, firește, este Arduino. Constructor pentru asamblare electronică instantanee dispozitive automate orice grad de dificultate: ridicat, mediu și scăzut. Această platformă este altfel numită „calcul fizic” pentru interacțiunea strânsă cu mediu inconjurator. Placă de circuit imprimat cu microprocesor, deschis codul programului, interfețele standard și conectarea senzorilor la Arduino sunt componentele popularității sale.

Sistemul este placa care reunește totul componentele necesare, oferind un ciclu complet de dezvoltare. Inima acestei plăci este microcontroler. Oferă controlul tuturor perifericelor. Senzorii conectați la sistem permit sistemului să „comunica” și să interacționeze cu mediul: analizează, marchează, schimbă.

Conectarea unui senzor digital de umiditate, temperatură

Doi senzori populari - DHT11, DHT22 - sunt proiectați pentru măsurarea umidității și a temperaturii (vom vorbi despre conectarea unui senzor de temperatură); soluție ieftină, excelentă pentru circuite simple si antrenament. Termistor, senzor capacitiv - baza DHT11 și DHT22. Cipul intern realizează ADC-ul, dând ieșirii o „cifră” pe care orice microcontroler o va înțelege.

DHT11 diferă de DHT22 în domeniul de măsurare și frecvența de eșantionare: 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 o dată la două secunde pentru DHT22.

Ambii senzori DHT au standard de 4 pini:

  1. Alimentare pentru senzori.
  2. Autobuz de date.
  3. Neimplicat.
  4. Pământ.

Pinii de date și de alimentare necesită un rezistor de 10k ohmi între ei.

Proiectat pentru senzori DHT biblioteca DHT.h(poate fi vizualizat la link). Când încărcați schița în controler, monitorul portului ar trebui să afișeze valorile curente ale umidității și temperaturii. Este ușor să-i verificați funcționalitatea - doar respirați pe senzor și ridicați-l: temperatura și umiditatea ar trebui să se schimbe.

Este posibil să afișați valori pe ecran LCD 1602 I2C, dacă îl includeți în sistem.

Folosind acești senzori puteți construi sistem automatizat udarea 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ă conditii speciale umiditatea, care poate fi controlată cu ușurință cu DHT1 și DHT22.

Adesea, în prezicerea vremii sau determinarea altitudinii deasupra nivelului mării, este necesar să se rezolve problema măsurării presiunii. Aici vin în ajutor barometrele electronice bazate pe tehnologia MEMS: o metodă de extensometru sau piezoresistivă asociată cu variabilitatea rezistenței dispozitivului atunci când sunt aplicate forțe care deformează materialul.

Cel mai popular senzor BMP085; Pe lângă presiunea barometrică, înregistrează și temperatura. A fost înlocuit cu BMP180, care 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 -40 +85°C, precizia măsurării în intervalul specificat - ±2°C;
  • Conexiune prin standard i2c;
  • V1 folosește 3,3 V pentru putere și logică;
  • V2 folosește 3,3-5V pentru putere și logică.

Conectarea senzorilor la Arduino în acest caz este standard:

Va avea nevoie 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 simultan. De asemenea, trebuie să instalați biblioteca Adafrut_Sensor.

Fără a acestui senzor niciun sistem de securitate serios nu poate face asta. Senzor infrarosu - element de bază detectarea prezenței animalelor cu sânge cald.

De asemenea, folosind senzori PIR, este extrem de convenabil să controlezi iluminarea în funcție de prezența unei persoane în apropiere. Senzorii cu infraroșu sau piroelectric sunt simpli structura interna si ieftin. Sunt extrem de fiabile și rareori dau greș.

Baza senzorului- un piroelectric sau dielectric capabil să creeze un câmp atunci când temperatura se schimbă. Ele sunt instalate în perechi și sunt închise deasupra cu o cupolă cu segmente sub formă de lentile obișnuite 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 și, în consecință, aceeași tensiune la ieșiri. Când un animal viu cu sânge cald intră în zona de „vizionare” a senzorilor, echilibrul este perturbat și apar impulsuri, care sunt înregistrate.

HC-SR501- cel mai comun și popular senzor. Are doua trimmere variabile de rezistență: unul este pentru reglarea sensibilității și dimensiunii obiectului detectat, al doilea este pentru ajustarea timpului de răspuns (timpul de generare a impulsului după detectare).

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

Deși mulți senzori includ o funcție de măsurare a temperaturii, este mai bine să utilizați un senzor separat, specializat. De exemplu, DS18B20. Acesta este un senzor integrat cu o interfață serială digitală.

Punctele sale forte:

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

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

Pentru a lucra cu senzorul, acesta trebuie inițializat. Aceasta este urmată de scrierea unui octet și citirea unui octet.

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

Este posibil să conectați mai mulți senzori DS18B20 - în acest caz trebuie conectați în paralel. Biblioteca OneWire vă va permite să citiți lecturi din toate odată. Cu simultan un numar mare Când conectați senzori, trebuie să adăugați rezistențe suplimentare de 100 sau 120 ohmi între pinul 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 mod 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 produsul final high-tech sau aplicația finală. Arduino este un complex de hardware și soluții software care va ajuta:

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

Indiferent de nivelul dvs. de pregătire, de cunoștințele dvs., puteți alege oricând sarcini în limitele capacităților dvs. Puteți pune împreună o soluție simplă pentru a automatiza o sarcină simplă fără a lipi împreună cu un școlar; Sau puteți seta o sarcină globală, care necesită, pe lângă cunoștințe și logică, capacitatea de a lipi eficient și corect desenarea și citirea desenelor. Și comunitățile active, forumurile și bazele de cunoștințe ale sistemului Arduino vor ajuta la rezolvarea aproape oricărei probleme.

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 oferiti ca tutorial pentru arduino (DHT11, DHT22) arata temperatura si umiditatea aerului. În scopuri educaționale (pentru universitate), a fost necesară și monitorizarea presiunii. Desigur, departamentul are un barometru, dar de ce să nu-l construiești pe al tău? În plus, puteți acumula în continuare citiri mod automat, și 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

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

Schema de conectare pentru firmware și codul programului

USB-UART a venit din China cu un set de cablaje:

Erau destui. Am lăsat jumperul la 3,3 volți, în ciuda faptului că al meu versiune arduino Alimentat de 5 volți.

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

Dacă nu conectați DTR, atunci după trimiterea firmware-ului, arduino trebuie repornit folosind butonul încorporat, schimbul de date activ va începe în ambele direcții (după cum este demonstrat de LED-urile de pe USB-UART), după ce firmware-ul a a fost încărcat cu succes, 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ți chipSelectPin folosind numele de pin Arduino //specificați 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 de somn// 1 sau 2, modul forțat // 3, modul normal mySensor.settings.runMode = 3; //În exemplu, se sugerează utilizarea modului Forțat, dar când se actualizează o dată pe secundă, modul Normal //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, mai des nu este necesar //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, omis // de la 1 la 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 la schimbarea numărului de cifre semnificative. 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 "); lcd. print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); )


Adresa senzorului poate fi ghicită; există doar două dintre ele.

Puteți vedea cum să aflați adresa afișajului dvs. În funcție de microcircuit, există două etichete.

ÎN în acest caz,:


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

LED-ul care este înconjurat într-un oval poate fi mai bine dezlipit.

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șajului de la un alt pin. Puteți vedea, de asemenea, o ramură a unei perechi de fire galben-portocaliu; un rezistor de 100 ohmi atârnă de ele pentru a reduce luminozitatea luminii de fundal (puteți lăsa jumperul, dar vă va răni ochii).

În cazul meu, totul este alimentat de cel vechi unitate de calculator nutriție. Poate fi alimentat prin USB. Toate componentele au fost lipite cu lipici Moment care era la îndemână.

Concluzie

1602 a apărut la locul de muncă, înșurubat pe masă, care arată presiunea, umiditatea, temperatura. Arduino poate fi refashed fără a-l elimina (poate că va deveni o linie târâtoare).

Senzorii de presiune atmosferică bmp180, bmp280, bme280 sunt invitați frecvent în proiecte de inginerie. Ele pot fi folosite pentru a prezice vremea sau pentru a măsura altitudinea deasupra nivelului mării. Astăzi, această linie specială poate fi numită cei mai populari și mai ieftini senzori pentru Arduino. În acest articol vom descrie principiul de funcționare a senzorilor, schema de conectare la diverse scânduri Arduino și dați exemple de schițe de programare.

Un barometru este un dispozitiv care măsoară presiunea atmosferică. Barometrele electronice sunt folosite în robotică și diverse dispozitive electronice. Cei mai des întâlniți și mai accesibili senzori de presiune sunt de la BOSH: aceștia sunt BMP085, BMP180, BMP280 și alții. Primele două sunt foarte asemănătoare între ele, BMP280 este un senzor mai nou și îmbunătățit.

Senzorii de presiune funcționează prin transformarea presiunii în mișcarea unei piese mecanice. Senzorul de presiune este format dintr-un traductor cu un element sensibil, o carcasă, elemente mecanice (diafragme, arcuri) și un circuit electronic.

Senzorul BMP280 este proiectat special pentru aplicații în care sunt necesare dimensiuni reduse și consum redus de energie. Astfel de aplicații includ sisteme de navigatie, prognoza meteo, indicarea vitezei pe verticală și altele. Senzorul are precizie ridicată, stabilitate și liniaritate bună. Caracteristicile tehnice ale senzorului BMP280:

  • Dimensiuni 2 x 2,5 x 0,95 mm.
  • Presiune 300-1100 hPa;
  • Temperaturi de la 0C la 65C;
  • Suport pentru interfețe I2C și SPI;
  • Tensiune de alimentare 1,7V – 3,6V;
  • Curent mediu 2,7 µA;
  • 3 moduri de funcționare - modul de repaus, modul FORȚAT (efectuarea de măsurători, citirea valorii, intrarea în modul de repaus), modul NORMAL (trecerea senzorului în funcționare ciclică - adică dispozitivul iese automat din modul de repaus după un timp stabilit, efectuează măsurători, citește citirile, salvează valorile măsurate și revine în modul de repaus).

Senzorul BMP180 este ieftin și ușor de utilizat senzor tactil, care măsoară presiunea atmosferică și temperatura. Folosit de obicei pentru a determina altitudinea și în stațiile meteo. Dispozitivul constă dintr-un senzor piezorezistiv, un senzor de temperatură, un ADC, memorie non volatila, RAM și microcontroler.

Caracteristicile tehnice ale senzorului BMP180:

  • Limitele presiunii măsurate sunt 225-825 mm Hg. Artă.
  • Tensiune de alimentare 3,3 – 5V;
  • Curent 0,5mA;
  • suport pentru interfață I2C;
  • Timp de răspuns 4,5 ms;
  • Dimensiuni 15 x 14 mm.

Senzorul bme280 conține 3 dispozitive - pentru măsurarea presiunii, umidității și temperaturii. Proiectat pentru un consum redus de curent, fiabilitate ridicatăși muncă stabilă pe termen lung.

Caracteristicile tehnice ale senzorului bme280:

  • Dimensiuni 2,5 x 2,5 x 0,93 mm;
  • Carcasa metalica LGA echipata cu 8 iesiri;
  • Tensiune de alimentare 1,7 – 3,6V;
  • Disponibilitatea interfețelor I2C și SPI;
  • Consum de curent în standby 0,1 µA.

Dacă comparați toate dispozitivele între ele, senzorii sunt foarte asemănători. În comparație cu predecesorul său, care include BMP180, mai mult senzor nou BMP280 este vizibil mai mic ca dimensiune. Are opt pini carcasă în miniatură necesită îngrijire în timpul instalării. Dispozitivul acceptă și interfețele I2C și SPI, spre deosebire de predecesorii săi, care acceptau doar I2C. Practic nu există modificări în logica de funcționare a senzorului; doar stabilitatea temperaturii a fost îmbunătățită și rezoluția ADC a fost mărită. Senzorul BME280, care măsoară temperatura, umiditatea și presiunea, este, de asemenea, similar cu BMP280. Diferența dintre ele este în dimensiunea carcasei, deoarece BME280 are un senzor de umiditate, care mărește ușor dimensiunile. Numărul de contacte și locația lor pe corp sunt aceleași.

Opțiuni de conectare pentru Arduino

Conectarea senzorului BMP180 la Arduino. Pentru a vă conecta veți avea nevoie de senzorul BMP180 în sine, placa Arduino UNO și firele de conectare. Schema de conectare este prezentată în figura de mai jos.

Masa de la Arduino trebuie conectată la masa senzorului, tensiunea este de 3,3 V, SDA este la pinul A4, SCL este la pinul A5. Pinii A4 și A5 sunt selectați pe baza suportului lor pentru interfața I2C. Senzorul în sine funcționează la o tensiune de 3,3 V, iar Arduino funcționează la 5 V, așa că pe modulul cu senzorul este instalat un stabilizator de tensiune.

Conectarea BMP 280 la Arduino. Pinout și vedere de sus a plăcii sunt prezentate în figură.

Modulul senzorului de presiune în sine arată astfel:

Pentru a vă conecta la Arduino, trebuie să conectați ieșirile după cum urmează: conectați masa la Arduino și pe senzor, VCC - la 3,3 V, SCL / SCK - la pinul analogic A5, SDA / SDI - la A4.

Conectarea senzorului BME280. Locația contactelor și a pinout-ului senzorului BME280 este aceeași cu cea a BMP280.

Deoarece senzorul poate funcționa prin I2C și SPI, conexiunea poate fi implementată folosind două metode.

Când vă conectați prin I2C, trebuie să conectați pinii SDA și SCL.

Când vă conectați prin SPI, trebuie să conectați SCL de la modul și SCK (al 13-lea pin pe Arduino), SDO de la modul la pinul 12 al Arduino, SDA la pinul 11, CSB (CS) la orice pin digital, în acest caz la pinul 10 pe Arduino. În ambele cazuri, tensiunea este conectată la 3,3 V pe Arduino.

Descrierea bibliotecii pentru lucrul cu senzorul. Exemplu de schiță

Pentru a lucra cu senzorul BMP180, există diverse biblioteci care simplifică munca. Acestea includ SFE_BMP180, Adafruit_BMP085. Aceleași biblioteci sunt potrivite pentru lucrul cu senzorul BMP080. Senzorul bmp280 folosește o bibliotecă similară, Adafruit_BMP280.

Prima schiță de testare va face senzorul să citească presiunea și temperatura. Codul este potrivit atât pentru senzorii BMP180, cât și pentru BMP280, trebuie doar să conectați biblioteca corectă și să specificați contactele corecte la care este conectat modulul. În primul rând, trebuie să conectați toate bibliotecile din cod și să inițializați funcționarea senzorului. Pentru a determina presiunea, trebuie mai întâi să cunoașteți temperatura. În acest scop este folosit elementul următor cod.

Stare = pressure.startTemperature(); // Citirea datelor de temperatură de la senzor if(status!=0)( delay(status); // Waiting status = pressure.getTemperature(T); // Salvarea datelor primite de temperatură if( status) !=0)( Serial.print("Temperatura: "); // Afișează cuvântul "Temperatura" Serial.print(T,2); // Afișează valoarea temperaturii. Serial.println("deg C, "); //Tipărește simbolul Celsius.

Apoi trebuie să obțineți informații despre presiunea atmosferică.

Stare = pressure.startPressure(3); // presiunea este citită dacă (starea!=0)( întârziere(starea); // starea de așteptare = pressure.getPressure(P,T); // presiunea este primită, salvată dacă (starea!=0)( Serial.print ("Presiune absolută: "); // Afișează cuvintele "Presiune atmosferică" Serial.print(P,2); // Afișează valoarea variabilei mBar Serial.print(" mbar, "); // Afișează textul " mBar" Serial.print(P*0.7500637554192,2); // afișează valoarea în mmHg (mmHg) Serial.println(" mmHg");) // afișează unitatea de presiune "mmHg" " (mmHg.).

După încărcarea schiței, datele despre temperatură și presiunea atmosferică vor apărea în fereastra de monitorizare a portului.

Senzorul BME280 arata si presiunea si temperatura, in plus poate citi citirile de umiditate, care este dezactivata implicit. Dacă este necesar, puteți regla senzorul și puteți începe să citiți citirile de umiditate. Domeniu de măsurare de la 0 la 100%. Biblioteca care este necesară pentru a lucra cu senzorul se numește Adafruit_BME280.

Codul este similar cu cel descris mai sus, i se adaugă doar linii pentru a determina umiditatea.

Void printValues() ( Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //determinând temperatura, afișând-o pe ecran în grade Celsius. Serial.print("Presiunea = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //determinând presiunea, afișând-o pe ecran Serial.print("Umiditate = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //determinarea umidității ca procent, afișarea valorii măsurate pe ecran. Serial.println(); )

Posibile erori de conectare și eliminarea lor

Cea mai frecventă eroare este datele incorecte despre presiune și temperatură, care diferă cu câteva ordine de mărime valoare reala. Motivul pentru aceasta este cel mai adesea conexiune incorectă– de exemplu, biblioteca afirmă că trebuie conectată prin I2C, dar senzorul este conectat prin SPI.

De asemenea, atunci când utilizați senzori „chinezi”, este posibil să întâlniți adrese I2C sau SPI non-standard. În acest caz, este recomandat să scanați toate dispozitivele conectate folosind una dintre schițele populare și să aflați la ce adresă răspunde senzorul de presiune.

O altă problemă poate fi o discrepanță între tensiunea de funcționare a modulului și tensiunea de bază a controlerului utilizat. Deci, pentru a lucra cu un senzor de 3,3 V, va trebui să creați un divizor de tensiune sau să utilizați unul dintre modulele existente de potrivire a nivelului gata făcute. Apropo, astfel de module sunt destul de ieftine, iar începătorilor li se recomandă să le folosească.

Mici abateri de la valoarea reală se pot datora calibrării senzorului. De exemplu, pentru senzorul BMP180, toate datele sunt calculate și specificate într-o schiță. Pentru a obține o valoare mai precisă a altitudinii, trebuie să cunoașteți presiunea actuală deasupra nivelului mării pentru aceste coordonate.

Concluzie

Senzorii de presiune atmosferică bmp180, bmp280 nu sunt cele mai ieftine tipuri de senzori, dar în multe cazuri nu există practic nicio alternativă la astfel de senzori. În proiectul stației meteo, senzorul înregistrează parametru important– presiunea atmosferică, care face posibilă prezicerea vremii. În proiectele legate de crearea de vehicule zburătoare, barometrul este folosit ca senzor de altitudine reală deasupra nivelului mării.

Conectarea senzorilor nu prezintă nicio dificultate, deoarece se folosește o conexiune standard i2C sau SPI. Pentru programare, puteți folosi unul dintre cele gata făcute.