Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Najjednostavniji barometarski visinomjer baziran na Arduinu. Napredni barometar

Najjednostavniji barometarski visinomjer baziran na Arduinu. Napredni barometar

Uvod

Šta se može prikazati na ekranu u dva reda osim „Zdravo, svijete!“? Zašto ne prikazati temperaturu, vlažnost i pritisak?

Senzori koji se nude kao vodič za učenje za arduino (DHT11, DHT22) pokazuju temperaturu i vlažnost. U obrazovne svrhe (za univerzitet) bilo je potrebno posmatrati i pritisak. Naravno, govornica ima barometar, ali zašto ne sastaviti svoj? Osim toga, možete dodatno akumulirati očitanja u automatskom načinu rada, a ovo je dobro iskustvo u učenju arduina.

Na ovaj ili onaj način, komponente su naručene iz Kine i ovaj uređaj je sastavljen.

Neophodne komponente

USB-UART je korišten za slanje skice u arduino. Takođe je bilo moguće koristiti Raspberry Pi ili računar sa COM portom.

Dijagram povezivanja za firmver i programski kod

Iz Kine je USB-UART došao sa setom žica:

Bili su sasvim dovoljni. Ostavio sam džamper na 3,3 volta, uprkos činjenici da se moja arduino verzija napaja od 5 volti.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opciono, meni nije išlo, možda zato što je napon signala ostao 3,3V)

Ako ne povežete DTR, tada nakon slanja firmvera, arduino treba ponovo pokrenuti pomoću ugrađenog dugmeta, aktivna razmjena podataka u oba smjera će početi (što potvrđuju LED diode na USB-UART-u), nakon uspješno preuzimanje firmvera, on će se sam ponovo pokrenuti.

Potrebne biblioteke treće strane:

Sam kod, sa komentarima iz primjera (u slučaju da neko treba nešto promijeniti).

Šifra

#include #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include // Globalni senzorski objekt BME280 mySensor; LiquidCrystal_I2C LCD (0x3F, 16.2); // Prikaži adresu, u mom slučaju 0x3F void setup () (lcd.init (); lcd.backlight (); // *** Postavke drajvera ****************** *************** // // commInterface može biti I2C_MODE ili SPI_MODE // specificirati chipSelectPin koristeći arduino imena pinova // specificirati I2C adresu. Može biti 0x77 (podrazumevano) ili 0x76 // Za I2C, omogućite sljedeće i onemogućite SPI odjeljak mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // Adresa senzora, u mom slučaju nije standardna // Za SPI omogućite sljedeće i onemogućite I2C sekciju // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; // *** Postavke rada ************************* **** // // renMode može biti: // 0, Sleep mode // 1 ili 2, Forced mode // 3, Normalni mod mySensor.settings.runMode = 3; // Primjer predlaže korištenje prisilnog načina, ali pri ažuriranju jednom u sekundi, normalan način rada je dovoljan // tStandby može biti: // 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; // Očigledno nije potrebno češće // filter može biti isključen ili broj FIR koeficijenata za korištenje: // 0, filter isključen // 1, koeficijenti = 2 // 2, koeficijenti = 4 // 3, koeficijenti = 8 // 4 , koeficijenti = 16 mySensor.settings.filter = 0; // tempOverSample može biti: // 0, preskočeno // 1 do 5, preduzorkovanje * 1, * 2, * 4, * 8, * 16 odnosno mySensor.settings.tempOverSample = 1; // pressOverSample može biti: // 0, preskočeno // 1 do 5, preduzorkovanje * 1, * 2, * 4, * 8, * 16 odnosno mySensor.settings.pressOverSample = 1; // humidOverSample može biti: // 0, preskočeno // 1 do 5, prekomjerno uzorkovanje * 1, * 2, * 4, * 8, * 16 odnosno mySensor.settings.humidOverSample = 1; // Pozivanje .begin () uzrokuje učitavanje postavki mySensor.begin (); ) void loop () (// Slova se mogu prikazati jednom, a zatim se očitavanja mogu promijeniti, ali očitanja mogu pomjeriti liniju kada se promijeni broj značajnih cifara.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"); kašnjenje (1000);)


Adresa senzora se može pogoditi, postoje samo dvije.

Kako saznati adresu vašeg displeja, možete vidjeti. Postoje dvije oznake, ovisno o mikrokolu.

U ovom slučaju:


A adresa će biti 0x3F jer A0 - A2 otvoren:

LED dioda koja je zatvorena u oval može se bolje ispariti.

Dijagram povezivanja

Otpornik je izabran kao polovina otpora senzora (između VVC i GND) tako da je pad napona na njemu bio 1,7 volti. Kolo se također može napajati sa RAW ulaza, sa drugačijim naponom (na primjer, iz krune).

Fotografija pokazuje da zbog kompaktnosti možete preneti napajanje senzora i displeja sa drugog pina. Možete vidjeti i granu narandžasto-žutog para žica, na njima visi otpornik od 100 Ohma, da smanjite svjetlinu pozadinskog osvjetljenja (možete ostaviti kratkospojnik, ali će vam izrezati oči).

U mom slučaju sve se napaja starim kompjuterskim napajanjem. Može se napajati preko USB-a. Sve komponente su zalijepljene Moment ljepilom koji je bio pri ruci.

Ishod

Na radnom mjestu pojavio se 1602 pričvršćen za stol, koji pokazuje pritisak, vlažnost, temperaturu. Arduino se može obnoviti bez uklanjanja (može postati puzeća linija).

BMP085 je senzor za praćenje barometarskog pritiska (osim toga, prati i temperaturu).

Senzor se koristi u mnogim projektima, uključujući i one koji koriste Arduino, jer praktički nema analoga. Osim toga, također je jeftin. Prvo pitanje koje se postavlja je: zašto bi iko mjerio atmosferski pritisak? Dva su razloga za to. Prvi je kontrola visine. Sa povećanjem nadmorske visine, pritisak opada. Veoma je pogodan za planinarenje, kao alternativa GPS navigatorima. Osim toga, indikator atmosferskog tlaka se koristi za predviđanje vremena.

BMP085 je svojevremeno zamijenjen senzorom BMP180, koji se povezuje na Arduino i druge mikrokontrolere na isti način kao i njegov prethodnik, ali je u isto vrijeme manji i jeftiniji.

Specifikacije BMP085

  • Opseg osjetljivosti: 300-1100 hPa (9000 m - 500 m nadmorske visine);
  • Rezolucija: 0,03 hPa / 0,25 m;
  • Radna temperatura -40 do + 85 °C, tačnost mjerenja temperature + -2 °C;
  • I2c konekcija;
  • V1 na modulu koristi 3.3V napajanje i logičku snagu;
  • V2 na modulu koristi 3,3-5 V napajanje i logičku snagu;

Nakon ponovnog pokretanja Arduino IDE, možete pokrenuti prvi primjer skice, kod za koji je dat u nastavku:

#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 senzora pritiska"); Serial.println ("");

/ * Inicijalizirajte senzor * /

if (! bmp.begin ())

/ * Ako se pojavi natpis: "Došlo je do problema pri otkrivanju BMP085 ...",

Provjerite je li senzor ispravno povezan * /

Serial.print ("Ups, nije otkriven BMP085 ... Provjerite svoje ožičenje ili I2C ADDR!");

senzors_event_t događaj;

bmp.getEvent (& događaj);

/ * prikaz rezultata (barometarski pritisak se mjeri u hPa) * /

ako (događaj.pritisak)

/ * Prikaz atmosferskog pritiska u hPa * /

Serial.print ("Pritisak:"); Serial.print (događaj.pritisak); Serial.println ("hPa");

Otvorite prozor serijskog monitora (brzina prijenosa - 9600). Naša skica bi trebala dati podatke o tlaku u hPa (hektopaskalima). Funkcionalnost senzora možete testirati pritiskom prsta na senzor. Na slici su prikazane vrijednosti pritiska nakon pritiska prstom.


Mjerenje visine iznad nivoa mora

Verovatno znate da pritisak opada sa povećanjem nadmorske visine. Odnosno, možemo izračunati visinu znajući pritisak i temperaturu. Opet ćemo matematiku ostaviti iza kulisa. Ako ste zainteresovani za proračune, možete se upoznati sa njima na ovoj stranici Wikipedije.

Primjer ispod će koristiti dodatnu Arduino biblioteku. Da biste izračunali nadmorsku visinu pomoću senzora BMP085, ažurirajte funkciju "void loop ()". Potrebne promjene na skici prikazane su na skici ispod. Ovo će vam dati očitavanje temperature na osnovu nivoa pritiska i očitavanja temperature.

/ * kreirajte novi događaj za senzor * /

senzors_event_t događaj;

bmp.getEvent (& događaj);

/ * prikaz rezultata (barometarski pritisak u hPa) * /

ako (događaj.pritisak)

/ * prikaz atmosferskog pritiska u hPa * /

Serial.print ("Pritisak:");

Serial.print (događaj.pritisak);

Serial.println ("hPa");

/ * da biste izračunali visinu sa određenom preciznošću, morate znati *

* prosječni pritisak i temperatura okoline

* u stepenima Celzijusa u vrijeme mjerenja *

* ako nemate ove podatke, možete koristiti "zadanu vrijednost",

* što je jednako 1013,25 hPa (ova vrijednost je definirana kao

* SENSORS_PRESSURE_SEALEVELHPA *

* u datoteci sensors.h). Ali rezultati neće biti tačni *

* tražene vrijednosti možete pronaći na web stranicama s prognozama temperature *

* ili na resursima informativnih centara na velikim aerodromima *

* npr. za Pariz, Francuska, trenutni prosječni pritisak se može pronaći *

* na web stranici: http://bit.ly/16Au8ol * /

/ * dobijte trenutnu vrijednost temperature od senzora BMP085 * /

temperatura plutanja;

bmp.getTemperature (& temperatura);

Serial.print ("Temperatura:");

Serial.print (temperatura);

Serial.println ("C");

/ * pretvoriti primljene podatke u visinu * /

/ * ažuriraj sljedeći red da odražava trenutne vrijednosti * /

plutajući seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print ("Visina:");

Serial.print (bmp.pressureToAltitude (seaLevelPressure,

Serial.println ("m");

Serial.println ("");

Serial.println ("Greška senzora");

Pokrećemo skicu i vidimo izračunatu visinu iznad nivoa mora.

Preciznost očitavanja BMP085 može se značajno povećati podešavanjem prosječne vrijednosti pritiska, koja varira u zavisnosti od vremena. Svaki 1 hPa pritiska koji nismo uzeli u obzir dovodi do greške od 8,5 metara!

Na slici ispod prikazane su vrijednosti pritiska iz jednog od informativnih izvora evropskog aerodroma. Vrijednost pritiska je označena žutom bojom, što možemo koristiti za preciziranje rezultata.


Promijenimo sljedeći red u našoj skici, upisujući stvarnu vrijednost (1009 hPa) u nju:

plutajući seaLevelPrissure = 1009;

Kao rezultat toga, dobićemo malo drugačije rezultate:

Savjet: kada specificirate pritisak, obavezno konvertujte podatke koji se koriste u hPa.

Korištenje BMP085 (API v1)

Ponovimo još jednom: da biste saznali pritisak i nadmorsku visinu iznad nivoa mora, potrebno je izvršiti neke proračune. Ali svi su već uključeni u Adafruit_BMP085 Arduino biblioteku (API v1), koju možete preuzeti sa veze.

Nakon instaliranja biblioteka, potrebno je ponovo pokrenuti Arduino IDE

Nakon ponovnog pokretanja, možete pokrenuti prvi primjer skice:

#include & ltWire.h & gt

Adafruit_BMP085 bmp;

Serial.begin (9600);

Serial.println ("* C");

Serial.print ("Pritisak =");

Serial.println ("Pa");

Serial.println ();

Nakon flešovanja vašeg Arduina, otvorite serijski monitor. Podesite brzinu prenosa na 9600. Skica će prikazati temperaturu u stepenima Celzijusa i pritisak u paskalima. Ako stavite prst na senzorski element senzora, temperatura i pritisak će se povećati:


Mjerenje nadmorske visine (API v1)

Da kontrolišete nadmorsku visinu, samo pokrenite skicu ispod:

#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 ("Pritisak =");

Serial.print (bmp.readPressure ());

Serial.println ("Pa");

// izračunati nadmorsku visinu na osnovu vrijednosti

// "standardni" barometarski pritisak jednak 1013,25 milibara = 101325 Pascal

Serial.print ("Visina =");

Serial.print (bmp.readAltitude ());

Serial.println ("metri");

Serial.println ();

Pokrenite skicu da prikažete rezultate:


Na osnovu gore navedenih očitavanja, nalazimo se na -21,5 metara nadmorske visine. Ali znamo da smo iznad mora! Sjećanje na isti problem kao kod korištenja API V2. Moramo uzeti u obzir vremenske prilike! UREDU. Pretpostavimo da smo pronašli dobru meteorološku web stranicu i tlak je 101,964 Pa. Otvorite primjer Primjeri-> BMP085test u Arduino IDE i uredite liniju koja je istaknuta na slici ispod:


U ovaj red treba da unesete podatke o trenutnom pritisku. Nakon novog lansiranja, otkrit ćete da su se podaci dramatično promijenili i dobili smo 29,58 metara sa znakom plus, što je mnogo više kao istina.


Ostavite svoje komentare, pitanja i podijelite svoje lično iskustvo ispod. U raspravi se često rađaju nove ideje i projekti!

Veličina atmosferskog pritiska, brzina i priroda njegovih promjena, igraju važnu ulogu u predviđanju vremena, a također snažno utječu na dobrobit ljudi podložnih meteorološkoj ovisnosti - bolestima povezanim s različitim vremenskim pojavama. Barometri se koriste za mjerenje atmosferskog tlaka. Mehanički aneroidni barometar ima dvije strelice. Jedan prikazuje trenutni pritisak. Druga strelica, koja se može ručno postaviti na bilo koju poziciju, omogućava vam da označite izmjerenu vrijednost kako biste odredili trend promjena atmosferskog tlaka tokom vremena. Vrlo je poželjno da elektronski barometar također pokazuje ne samo vrijednost atmosferskog tlaka, već i omogućava da se utvrdi da li postoji povećanje ili smanjenje i koliko se brzo mijenja mjeren parametar.

Jeftine domaće meteorološke stanice prikazuju samo piktograme sa slikama kapi kiše, oblaka ili sunca. Teško je reći kako su ove ikone povezane sa atmosferskim pritiskom i da li ova meteorološka stanica ima barometrijski senzor ili se koriste drugi kreativni načini predviđanja vremena. Naprednije meteorološke stanice prikazuju trenutnu vrijednost pritiska kao broj, a promjenu tlaka u prethodnih nekoliko sati kao grubi stupčasti grafikon, uglavnom u dekorativne svrhe. Takve meteorološke stanice su znatno skuplje. Na tržištu postoje i vrlo sofisticirani uređaji dizajnirani za nautičare, jedriličare i sl., koji sa velikom preciznošću pokazuju kako promjene tlaka tako i trenutnu vrijednost, ali su takvi uređaji vrlo skupi.

Ova publikacija govori o jednostavnom domaćem barometru koji pokazuje veličinu i brzinu promjene atmosferskog tlaka, kao i temperaturu zraka.

Izgled uređaja je prikazan na fotografiji.

Rezultati mjerenja se prikazuju na displeju za sintezu u dva reda. U prvom redu je prikazan rezultat mjerenja trenutnog atmosferskog tlaka u mm Hg, odstupanje trenutne vrijednosti tlaka od prosječne vrijednosti za datu lokaciju (višak trenutne vrijednosti tlaka u odnosu na prosječnu vrijednost smatra se pozitivnim), kao i kao temperatura vazduha u stepenima Celzijusa. Podaci prikazani u gornjem redu osvježavaju se svakih 6 sekundi. Izlaz novih podataka prati bljesak LED diode koja se nalazi iznad indikatora.

Drugi red indikatora prikazuje povećanje pritiska u toku poslednjeg sata, tri sata i deset sati. Ako se pritisak povećao tokom navedenog vremenskog perioda, tada se odgovarajući porast prikazuje sa plusom, u suprotnom - sa minusom. Podaci u drugom redu se ažuriraju svakih 10 minuta. Odmah nakon uključivanja barometra, drugi red će biti prazan. Brojčane vrijednosti će se tamo pojaviti nakon 1 sata, 3 sata i 10 sati, respektivno.

Barometar je dizajniran za rad u suhoj, zagrijanoj prostoriji na temperaturi od 0 ... 40 ° C i atmosferskom pritisku od 600 ... 825 mm Hg. Art.

Točnost mjerenja pritiska i temperature u potpunosti je određena preciznošću korišćenog Bosch BMP180 senzora pritiska. Tipična greška mjerenja tlaka je -1hPa, što otprilike odgovara 0,75 mm Hg. Komponenta buke pri merenju pritiska - 0,02 hPa (0,015 mm Hg). Tipična nesigurnost mjerenja temperature oko 25 °C je +/- 0,5 °C. Više detalja o tehničkim karakteristikama senzora BMP180 možete pronaći na njima. opis u dodatku.

Vremenski intervali u ovom uređaju se računaju softverom. Greška u formiranju ovih intervala, koju je izmjerio autor, ne prelazi jednu minutu u 10 sati.

Dijagram barometra je prikazan na slici.

Glavni element uređaja je Arduino Nano modul. Autor je koristio 3. verziju sa mikrokontrolerom ATmega 328. Memorija modula u ovom slučaju zauzima samo jednu trećinu, tako da je moguće koristiti Arduino Nano modul sa ATmega 168 mikrokontrolerom.

Displej Winstar WH1602L - dva reda sa 16 karaktera po redu. Zasnovan je na HD44780 kontroleru. Otpornik R2 vam omogućava da podesite kontrast slike. Ako se napon na pinu 3 (Vo) jako razlikuje od optimalnog, onda se na ekranu uopće neće vidjeti slika. Ovu okolnost morate uzeti u obzir pri prvom uključivanju uređaja. Za primjer ekrana koji koristi autor, optimalni napon na pinu 3 bio je oko 1 V. Otpornik R3 određuje trenutnu vrijednost LED dioda pozadinskog osvjetljenja.

Senzor pritiska BMP180 ima metalno kućište dimenzija 3,6x3,6x1 mm. Njegovi zaključci su kontaktne pločice smještene na dnu kućišta. Dodatno, senzoru je potrebno napajanje od 1,8 - 3,6 V. Nivoi signala koje senzor razmjenjuje sa eksternim uređajem također se razlikuju od potrebnih. Ove okolnosti otežavaju direktno korištenje BMP180. Na sreću, ovaj problem se može lako riješiti. U prodaji su moduli bazirani na BMP180 senzorima koji uključuju same senzore i sve pripadajuće elemente. Ovi moduli su ploča 10x13mm. Njihova cijena je oko 1,4 USD. Izgled modula je prikazan na sledećoj fotografiji.

LED dioda HL1 treperi svakih 6 sekundi, signalizirajući da se novi rezultati prikazuju na barometru. Autor je koristio zelenu LED diodu prečnika 3 mm L-1154GT kompanije Kingbright.
Kondenzator C1 ima prilično veliki kapacitet, što uređaj čini neosjetljivim na kratkotrajne nestanke struje. Ako to nije potrebno, C1 se može smanjiti na 500 mikrofarada.
Dioda D1 isključuje pozadinsko svjetlo indikatora u slučaju nestanka struje. Ovo povećava autonomni rad barometra od energije pohranjene u kondenzatoru C1.

Uređaj se može napajati iz bilo kojeg izvora istosmjerne struje (punjač za mobilni telefon, jedinica za napajanje bilo kojeg gadgeta, itd.) sa izlaznim naponom od 8 ... 12 V. Pri naponu od 9 V, barometar troši oko 80 mA.

Uređaj je montiran na matičnoj ploči dimenzija 85 x 55 mm, koja je pričvršćena za displej pomoću ploče od pleksiglasa.

Senzor BMP180 nalazi se na dnu - što je dalje moguće od glavnih elemenata koji stvaraju toplinu, a to su otpornik R3 i LED pozadinsko osvjetljenje displeja. Telo uređaja je plastična kutija dimenzija 160x160x25. U donjim i gornjim zidovima kutije treba izbušiti određeni broj otvora za ventilaciju.

Skica koju treba flešovati u memoriju Arduino Nano modula prikazana je u dodatku. Autor je koristio Arduino IDE 1.8.1. Da biste podržali senzor pritiska, morate instalirati biblioteku Adafruit-BMP085. Odgovarajući fajl je uključen u prilog.

Prije učitavanja skice, u red 17, umjesto broja 740.0, koji odgovara prosječnom pritisku na mjestu postavljanja autorskog primjerka barometra, upisuje se prosječni pritisak u mm. rt. Art. odgovara lokaciji na kojoj će vaš barometar biti instaliran. Kao prva aproksimacija, ovaj parametar se može odrediti formulom Pav = 760 - 0,091h, gdje je h visina iznad nivoa mora u metrima. Najlakši način za određivanje nadmorske visine je GPS navigator.

Ova formula ne uzima u obzir mnoge faktore koji utiču na atmosferski pritisak i primjenjiva je samo za visine do 500 m. Opis načina za preciznije određivanje prosječnog tlaka je izvan okvira ove publikacije. Mogu se naći na brojnim materijalima o meteorologiji, koji su dostupni na internetu.

Spisak radioelemenata

Oznaka Tip Denominacija Količina BilješkaRezultatMoja sveska
A1 BMP180 senzorski modul 1 U notepad
A2 Arduino ploča

Arduino Nano 3.0

1 U notepad
VD1 Ispravljačka dioda

1N4007

1 U notepad
HG1 LCD displejWH1602L1 Winstar U notepad
HL1 Dioda koja emituje svetlostL-1154GT1 Kingbright U notepad
C1 Elektrolitički kondenzator4700 uF x 16 V1

Strast prema elektrotehnici, robotizaciji, automatskim odzivima i sistemima upravljanja nikada nije bilo tako lako ostvariti.

Ako su ranije postojali specijalizirani konstruktori s ograničenim skupovima funkcija i rigidno postavljenim parametrima, onda je današnja raznolikost konstruktora jednostavno nevjerojatna: pravi mikroprocesorski sistemi, sastavljeni na koljenu, imaju praktički neograničenu funkcionalnost. Bogata mašta, široka baza elemenata, velika zajednica obožavatelja i inženjera i podrška proizvođača su glavni karakteristične karakteristike takvi na tržištu traženi robotski kompleti.

Jedan od njih i najpopularniji, što je prirodno, jeste Arduino... Konstruktor za trenutnu montažu elektronskih automatskih uređaja bilo koje složenosti: visoke, srednje i niske. Ova platforma se naziva i "fizičko računarstvo" zbog bliske interakcije sa okolinom. Štampana ploča sa mikroprocesorom, otvorenim kodom, standardnim interfejsima i povezivanjem senzora na Arduino su komponente njegove popularnosti.

Sistem je ploča koja kombinuje sve potrebne komponente kako bi se osigurao puni razvojni ciklus. Srce ove ploče je mikrokontroler... Omogućava kontrolu nad svim perifernim uređajima. Senzori povezani sa sistemom omogućavaju sistemu da "komunicira" i komunicira sa okolinom: analizira, označava promene.

Povezivanje digitalnog senzora vlažnosti i temperature

Dva popularna senzora - DHT11, DHT22 - dizajnirana su za mjerenje vlažnosti i temperature (još uvijek govorimo o povezivanju temperaturnog senzora); jeftino rješenje, odlično za jednostavne dijagrame i obuku. Termistor, kapacitivni senzor - osnova DHT11 i DHT22. Interni čip izvodi ADC, dajući "cifru" na izlazu, koju svaki mikrokontroler može razumjeti.

DHT11 se razlikuje od DHT22 po opsegu mjerenja i učestalosti uzorkovanja: vlažnost - 20-80% za DHT11 i 0-100% za DHT22; temperatura - 0°C do +50°C za DHT11 i -40°C do +125°C za DHT22; anketiranje - svake sekunde za DHT11 i svake dvije sekunde za DHT22.

Oba DHT senzora imaju standardna 4 pina:

  1. Napajanje senzora.
  2. Sabirnica podataka.
  3. Nije uključen.
  4. Zemljište.

Izlazi podataka i snage zahtijevaju 10K otpornik da se poveže između njih.

Dizajniran za DHT senzore DHT.h biblioteka(možete vidjeti link). Prilikom učitavanja skice u kontroler, port monitor bi trebao prikazati trenutne vrijednosti vlažnosti i temperature. Lako je provjeriti performanse - samo udahnite senzor i podignite ga: temperatura i vlažnost bi se trebali promijeniti.

Moguć je prikaz vrijednosti na ekranu LCD 1602 I2C ako ga uključite u sistem.

Koristeći ove senzore, možete izgraditi automatizirani sistem za navodnjavanje tla na otvorenom, u stakleniku, pa čak i na prozorskoj dasci. Ili organizirajte sistem za sušenje bobica - potonje se puše ili zagrijavaju ovisno o sadržaju vlage u bobičastom voću.

Takođe, neki akvaterarijumi zahtevaju posebne uslove vlažnosti koji se lako mogu kontrolisati pomoću DHT1 i DHT22.

Često je u pitanju predviđanja vremena ili određivanja visine nadmorske visine potrebno riješiti problem mjerenja pritiska. Ovdje u pomoć dolaze elektronski barometri bazirani na MEMS tehnologiji: tenzorometrijska ili piezorezistivna metoda povezana s promjenjivosti otpora uređaja kada se primjenjuju sile koje deformiraju materijal.

Najpopularniji BMP085 senzor; osim barometarskog pritiska, bilježi i temperaturu. Zamijenjen je BMP180, ima iste karakteristike:

  • Osetljivost u opsegu: 300-1100 hPa (ako je u metrima - 9000 - 500 m nadmorske visine);
  • Rezolucija: 0,03 hPa ili 0,25 m;
  • Radna temperatura senzora je -40 + 85 ° C, tačnost mjerenja u navedenom opsegu je ± 2 ° C;
  • I2c konekcija;
  • V1 koristi 3.3V za napajanje i logiku;
  • V2 koristi 3,3-5V za napajanje i logiku.

Povezivanje senzora na Arduino u ovom slučaju je standardno:

Trebaće Unified Sensor Driver- njegova ažurirana verzija pruža veću preciznost očitavanja; osim toga, omogućava vam rad s nekoliko različitih povezanih senzora tlaka u isto vrijeme. Biblioteka Adafrut_Sensor također mora biti instalirana.

Nijedan ozbiljan sigurnosni sistem ne može bez ovog senzora. Infracrveni senzor- osnovni element detekcije prisustva toplokrvnih životinja.

Takođe, uz pomoć PIR senzora izuzetno je zgodno kontrolisati osvetljenje u zavisnosti od prisustva osobe u blizini. Infracrveni ili piroelektrični senzori su jednostavni iznutra i jeftini. Izuzetno su pouzdani i rijetko kvare.

Baza senzora- piroelektrik ili dielektrik koji može stvoriti polje kada se temperatura promijeni. Postavljaju se u paru, a odozgo su zatvoreni kupolom sa segmentima u obliku konvencionalnih sočiva ili Fresnel sočiva. Ovo omogućava da se snopovi fokusiraju sa različitih tačaka prodiranja.

U nedostatku tijela koja emituju toplinu u prostoriji, svaki element ima istu ulaznu dozu zračenja, odnosno isti napon na izlazima. Kada živa toplokrvna životinja uđe u „zonu gledanja“ senzora, ravnoteža se poremeti i pojavljuju se impulsi koji se snimaju.

HC-SR501- najrasprostranjeniji i najpopularniji senzor. Ima dva triming varijabilna otpornika: jedan za podešavanje osjetljivosti i veličine detektiranog objekta, drugi za podešavanje vremena odziva (vrijeme kada se puls generiše nakon detekcije).

Dijagram povezivanja je standardan i neće uzrokovati poteškoće.

Iako je funkcija mjerenja temperature uključena u mnoge senzore, bolje je koristiti poseban namjenski senzor. Na primjer, DS18B20. To je integralni senzor sa digitalnim serijskim interfejsom.

Njegove prednosti:

  • preliminarna fabrička kalibracija;
  • greška manja od 0,5 ° C;
  • programabilna rezolucija od 0,0625°C pri 12-bitnoj rezoluciji;
  • izuzetno širok raspon mjerenih temperatura: od -55°C do +125°C;
  • senzor ima ugrađen ADC;
  • nekoliko senzora može biti uključeno u jednu komunikacijsku liniju.

Zgrada TO-92- najčešći za ove senzore. Postoje dvije glavne sheme za povezivanje senzora temperature DS18B20 na mikroprocesor ili kontroler:

Da biste radili sa senzorom, morate ga inicijalizirati. Nakon toga slijedi pisanje bajta i čitanje bajta.

Ove tri operacije pokazuju kako se radi sa senzorom i OneWire biblioteka ih savršeno podržava. Instalirajte OneWire biblioteku. Nakon toga učitavamo skicu - i softversko okruženje je spremno.

Moguće je povezati nekoliko senzora DS18B20 - u ovom slučaju moraju biti povezani paralelno. Biblioteka OneWire će vam omogućiti čitanje očitanja sa svih odjednom. Uz veliki broj priključaka senzora u isto vrijeme, potrebno je dodati dodatne otpornike od 100 ili 120 Ohma između podatkovne noge senzora DS18B20 i sabirnice podataka na Arduinu.

zaključci

Povezivanje senzora na Arduino je transformacija algoritamskog robota, kontrolisanog automatski ili ručno, u punopravno okruženje za interakciju uređaja i kola sa okruženjem. Ne zaboravite - ovo nije lijek za sve bolesti. A ne end-to-end high-tech proizvod ili aplikacija za krajnju upotrebu. Arduino je kompleks hardverskih i softverskih rješenja koja će pomoći:

  • master algoritamski sistemi za inženjere početnike;
  • ovladati osnovnim dizajnerskim vještinama;
  • naučite programirati.

Bez obzira na nivo obučenosti, znanja, uvijek možete izabrati zadatke za sebe u okviru svojih mogućnosti. Možete sastaviti jednostavno rješenje za automatizaciju bilo kojeg jednostavnog zadatka bez lemljenja zajedno sa učenikom; ali možete postaviti globalni zadatak gdje vam je, osim znanja i logike, potrebna i sposobnost kvalitativnog i pravilnog lemljenja i čitanja crteža. A aktivne zajednice, forumi i baze znanja na Arduino sistemu pomoći će u rješavanju gotovo svakog problema.

Barometar je uređaj koji mjeri atmosferski pritisak. Odnosno, vazdušni pritisak, koji nas pritiska sa svih strana. Iz škole znamo da je prvi barometar bila ploča od žive u kojoj je bila izvrnuta epruveta. Autor ovog uređaja bio je Evangelista Torricelli, italijanski fizičar i matematičar. Očitavanje živinog barometra može biti jednostavno kao očitavanje alkoholnog termometra: što je veći pritisak izvan tikvice, veći je stupac žive u njoj. Poznato je da je živa para vrlo toksična.

Kasnije se pojavio sigurniji uređaj - aneroidni barometar. U ovom barometru živa je zamijenjena valovitom kutijom od tankog lima, u kojoj je stvoren vakuum. Pod uticajem atmosfere, kutija se skuplja i, kroz sistem poluga, okreće strelicu na brojčaniku. Ovako izgledaju ova dva barometra. Lijevo - aneroid, desno - Torricelli barometar.

Zašto nam treba barometar? Najčešće se ovaj uređaj koristi na avionima za određivanje visine leta. Što se vozilo više uzdiže iznad nivoa mora, to je manji pritisak na barometar u vozilu. Poznavajući ovaj odnos, lako je odrediti visinu.

Još jedan uobičajeni slučaj upotrebe je kućna meteorološka stanica. U ovom slučaju možemo koristiti poznate zavisnosti nadolazećeg vremena od atmosferskog pritiska. Pored barometra, takve stanice su opremljene senzorima vlažnosti i temperature.

1. Elektronski barometar

Ne možemo koristiti tako glomazne barometre u robotici. Potreban nam je minijaturni i energetski efikasan uređaj koji se lako povezuje na isti Arduino Uno. Većina modernih barometara je napravljena korišćenjem MEMS tehnologije, kao i žirotahometri sa akcelerometrima. MEMS barometri su zasnovani na piezorezistivnoj ili metodi merača naprezanja, koja koristi efekat promene otpora materijala pod dejstvom sila deformisanja.

Ako otvorite kućište MEMS barometra, možete vidjeti senzorski element (desno), koji se nalazi direktno ispod otvora na zaštitnom kućištu uređaja, i kontrolnu ploču (lijevo) koja vrši primarno filtriranje i transformacija mjerenja.

2. Senzori BMP085 i BMP180

Najpovoljniji senzori pritiska, koje često koriste kontrolori leta i u svim vrstama kućnih elektronskih uređaja, uključuju BOSH senzore: BMP085 i BMP180. Drugi barometar je noviji, ali potpuno kompatibilan sa starom verzijom.

Nekoliko važnih karakteristika BMP180:

  • raspon mjernih vrijednosti: od 300 hPa do 1100 hPa (od -500m od +9000m nadmorske visine);
  • napon napajanja: od 3,3 do 5 volti;
    jačina struje: 5 μA pri brzini pozivanja od 1 herca;
  • nivo buke: 0,06 hPa (0,5 m) u grubom režimu (režim ultra niske potrošnje) i 0,02 hPa (0,17 m) u režimu napredne rezolucije.

Sada spojimo ovaj senzor na kontroler i pokušamo procijeniti atmosferski pritisak.

3. Povezivanje BMP180

Oba senzora imaju I2C interfejs, tako da se lako mogu povezati na bilo koju platformu iz Arduino porodice. Ovako izgleda tabela povezivanja za Arduino Uno.

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

Shematski dijagram

Izgled rasporeda

4. Program

Za rad sa senzorom potrebna nam je biblioteka: BMP180_Breakout_Arduino_Library

Preuzmite ga iz spremišta i instalirajte u Arduino IDE. Sada ste spremni da napišete svoj prvi program. Pokušajmo dobiti sirove podatke od senzora i poslati ih na monitor COM porta.

#include #include SFE_BMP180 pritisak; void setup () (Serial.begin (9600); pressure.begin ();) void loop () (dvostruko P; P = getPressure (); Serial.println (P, 4); kašnjenje (100);) duplo getPressure () (status char; duplo T, P, p0, a; status = pressure.startTemperature (); if (status! = 0) (// čeka se kašnjenje mjerenja temperature (status); status = pressure.getTemperature (T) ; if (status! = 0) (status = pressure.startPressure (3); if (status! = 0) (// čeka se kašnjenje mjerenja tlaka (status); status = pressure.getPressure (P, T); if ( status! = 0) (povratak (P);)))))

Postupak dobivanja željenog tlaka od senzora nije tako trivijalan i sastoji se od nekoliko faza. U pojednostavljenom obliku, algoritam izgleda ovako:

  1. tražimo od barometra očitanja ugrađenog temperaturnog senzora;
  2. sačekajte vrijeme A dok senzor procjenjuje temperaturu;
  3. dobijamo temperaturu;
  4. tražimo od barometra pritisak;
  5. vrijeme čekanja B dok senzor procjenjuje pritisak;
  6. dobiti vrijednost pritiska;
  7. vrati vrijednost tlaka iz funkcije.

Vrijeme B ovisi o tačnosti mjerenja koja je postavljena u funkciji startPressure... Jedini argument za ovu funkciju može imati vrijednosti od 0 do 3, gdje je 0 najgrublja i najbrža procjena, a 3 najpreciznija procjena pritiska.

Učitavamo program na Arduino Uno, i posmatramo tok merenja atmosferskog pritiska. Pokušajmo podići senzor iznad naše glave i spustiti ga na nivo poda. Očitavanje će se neznatno razlikovati. Ostaje samo da shvatimo kako možemo pretvoriti ove neshvatljive brojeve u visinu iznad nivoa mora.

5. Pretvorite pritisak u visinu

Senzor BMP180 vraća pritisak u hektopaskalima (hPa). U ovim jedinicama je uobičajeno mjeriti atmosferski tlak. 1 hPa = 100 Paskala. Poznato je da je prosječni pritisak na nivou mora 1013 hPa, a svaki dodatni metar nadmorske visine će ovaj pritisak smanjiti za samo 0,11 hPa (približno).

Dakle, ako oduzmemo od rezultata funkcije getPressure broj 1013, a preostalu razliku podijelimo sa 0,11, dobićemo vrijednost nadmorske visine u metrima. Ovako će se promijeniti naš program:

Void petlja () (dvostruko P, Alt; P = getPressure (); Alt = (P - 1013) /0,11; Serial.println (Alt, 2); kašnjenje (100);)

Zapravo, pritisak ovisi o nadmorskoj visini nelinearno, a naša formula je prikladna samo za nadmorske visine na kojima ti i ja obično živimo. Na sreću, čovječanstvo poznaje tačniju ovisnost pritiska o nadmorskoj visini, koju možemo primijeniti da bismo dobili preciznije rezultate.

Ovde je p pritisak izmeren u datoj tački, p0 je pritisak u odnosu na koji se meri visina.

Već postoji funkcija u biblioteci SFE_BMP180 koja koristi navedenu. formula za dobijanje tačne visine. Koristimo ga u našem programu.

#include #include SFE_BMP180 pritisak; duplo P0 = 0; void setup () (Serial.begin (9600); pressure.begin (); P0 = pressure.getPressure ();) void loop () (dvostruki P, Alt; P = getPressure (); Alt = pritisak.visina (P , P0) Serial.println (Alt, 2); kašnjenje (100);) double getPressure () (...)

Nisam u potpunosti kopirao funkciju getPressure da bi tekst ostao čitljiv.

U programu se pojavila još jedna varijabla P0 - to je pritisak koji ćemo mjeriti na početku programa. U slučaju aviona, P0 će biti pritisak na mjestu polijetanja sa kojeg počinjemo naše penjanje.

6. Vizualizacija

Pokušajmo sada prikazati očitanja tlaka u programu SFMonitor, i da vidimo kako se mijenja pritisak kada se senzor pomakne na visinu od 2 metra.

Statički konstantni bajt PACKET_SIZE = 1; statički konstantni bajt VALUE_SIZE = 2; static const boolean SEPARATE_VALUES = istina; #include #include #include SFE_BMP180 pritisak; SerialFlow rd (& Serial); duplo P0 = 0; void setup () (rd.setPacketFormat (VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES); rd.begin (9600); pressure.begin (); P0 = getPressure ();) void loop () (dvostruko P; P = getPressure (); rd.setPacketValue (100 + int ((P - P0) * 100)); rd.sendPacket (); kašnjenje (100);) double getPressure () (...)

Kao rezultat programa, dobijamo graf pritiska u Pascalima:

7. Zaključak

Kao što smo naučili iz lekcije, određivanje visine iznad nivoa mora nije tako trivijalan zadatak. Ne samo da pritisak nelinearno zavisi od visine, već sliku kvare i razni vanjski faktori. Na primjer, pritisak u našem domu se stalno mijenja tokom vremena. Čak i za nekoliko minuta, visina mjerena našim uređajem može varirati u rasponu od 0,5 - 1 metar. Temperatura takođe u velikoj meri utiče na kvalitet merenja, pa je moramo uzeti u obzir prilikom izračunavanja pritiska.

Za avione se preporučuje upotreba naprednih preciznih senzora kao što je MS5611. Ovaj barometar može mjeriti do 0,012 hPa, što je 5 puta bolje od BMP180. Također, GPS koordinate se koriste za pojašnjenje barometarske visine leta.

Sretno u posmatranju atmosfere! 🙂

Top srodni članci