Satura rādītājs:

Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija: 4 soļi (ar attēliem)
Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija: 4 soļi (ar attēliem)

Video: Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija: 4 soļi (ar attēliem)

Video: Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija: 4 soļi (ar attēliem)
Video: ✅ ARDUINO: Altímetro barométrico | J_RPM 2024, Novembris
Anonim
Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija
Arduino atmosfēras mērlente/ MS5611 GY63 GY86 demonstrācija

Tas tiešām ir barometrs/altimetrs, bet jūs redzēsit nosaukuma iemeslu, apskatot videoklipu.

MS5611 spiediena sensors, kas atrodams Arduino GY63 un GY86 sadalīšanas dēļos, nodrošina pārsteidzošu veiktspēju. Mierīgā dienā tas izmērīs jūsu augstumu līdz 0,2 m. Tas efektīvi mēra attālumu no galvas līdz kosmosam un atņem to no pēdas attāluma līdz kosmosam (mērot spiedienu - tas ir gaisa svars virs). Šai iespaidīgajai ierīcei ir diapazons, kas ērti izmērīs Everesta augstumu - un var izmērīt arī dažas collas.

Šī projekta mērķis bija: skolu projekts, piemērs Arduino koda modificēšanai un laba sākuma vieta, kur izpētīt, izmantojot MS5611 sensoru. Ir daudz foruma jautājumu no tiem, kam ir grūtības ar šo sensoru. Šeit izmantotā pieeja padara tās izmantošanu ļoti vienkāršu. Pēc šī projekta veikšanas jūs būsit labi aprīkots, lai izstrādātu citas ar spiedienu saistītas lietojumprogrammas.

Katram sensoram ir savas kalibrēšanas konstantes, kuras jāizlasa un jāizmanto datu labošanai. Ir pieejama bibliotēka, kas palīdz tos vadīt. Šeit parādītais kods izmanto bibliotēku, lai ņemtu rādījumus, pēc tam pārvērš tos augstumā un parāda tos LCD ekrānā.

Vispirms mēs nosūtīsim datus uz datora/klēpjdatora sērijas monitoru sākotnējām pārbaudēm. Tie rada nelielu troksni, tāpēc mēs pievienojam filtru, lai tos izlīdzinātu. Tad mēs pievienosim LCD displeju, lai iekārta varētu darboties neatkarīgi, un jūs varētu mēģināt izmērīt savu augumu - vai jebko citu.

Ņemiet vērā, ka GY63 plāksnei ir tikai MS5611 spiediena sensors. GY86 sauc par 10 brīvības grādu dēli, un tajā ir arī 3 asu akselerometrs, 3 asu žiroskops un 3 asu magnetometrs tikai par dažiem USD.

Jums būs nepieciešams:

1. Arduino UNO (vai cits ar standarta pinout) un tā USB kabelis

2. GY63 izlaušanās dēlis vai GY86

3. 4 Dupont vada vīrietis -sieviete - vai savienojošo vadu

4. Arduino LCD tastatūras vairogs

5. 9v akumulators un vads

6. 2,54 mm ligzdas sloksne (pēc izvēles, bet ieteicams)

Sagatavošana

Lejupielādējiet Arduino IDE (integrētu izstrādes vidi) no:

Daži tehniski punkti interesei

MS5611 nodrošina lielisku sniegumu, vidēji aprēķinot lielu skaitu mērījumu. Tas var veikt 4096 3 baitu (24 bitu) analogus mērījumus tikai 8 ms un sniegt vidējo vērtību. Tam ir jāmēra gan spiediens, gan temperatūra, lai spiediena datus varētu labot atbilstoši iekšējai temperatūrai. Tādējādi tas var nodrošināt aptuveni 60 pārus spiediena un temperatūras rādījumu sekundē.

Datu lapa ir pieejama:

Saziņa notiek caur I2C. Tātad citi I2C sensori var koplietot kopni (kā tas ir uz GY86 10DOF plates, kur visas mikroshēmas atrodas uz I2C).

1. darbība: iegūstiet MS5611 bibliotēku

Daudzi Arduino sensori izmanto standarta bibliotēku, kas ir iekļauta Arduino IDE, vai tiek piegādāta ar zip failu ar bibliotēku, kuru var viegli instalēt. Tas parasti neattiecas uz MS5611 sensoriem. Tomēr tika atrasta meklēšana: https://github.com/gronat/MS5611, kurā ir MS5611 bibliotēka, tostarp temperatūras korekcijas veikšana.

1. variants

Dodieties uz iepriekš minēto vietni, noklikšķiniet uz “Klonēt vai lejupielādēt” un atlasiet “Lejupielādēt ZIP”. Tam vajadzētu piegādāt MS5611-master.zip jūsu lejupielāžu direktorijā. Tagad, ja vēlaties, pārvietojiet to uz mapi, kur to varēsit atrast arī turpmāk. Es izmantoju direktoriju ar nosaukumu “dati”, kas pievienots manām Arduino mapēm.

Diemžēl lejupielādētajā.zip failā nav neviena parauga skices, un būtu jauki pievienot bibliotēku un piemērus Arduino IDE. Failā README.md ir minimāls piemērs, ko var kopēt, ielīmēt skicē un saglabāt. Tas ir viens no veidiem, kā sākt.

2. variants

Lai atvieglotu koda izpildi šajā pamācībā, bibliotēkai esmu pievienojis iepriekš minēto minimālo piemēru un šeit parādītos piemērus un zemāk pievienojis.zip failu, kas tiks instalēts Arduino IDE.

Lejupielādējiet zemāk esošo zip failu. Ja vēlaties, pārvietojiet to uz labāku mapi.

Sāciet Arduino IDE. Noklikšķiniet uz Skice> Iekļaut bibliotēku> Pievienot zip failu un atlasiet failu. Restartējiet IDE. IDE tagad būs instalēta bibliotēka, kā arī visi šeit redzamie piemēri. Pārbaudiet, noklikšķinot uz Fails> piemēri >> MS5611-master. Jāuzskaita trīs skices.

2. darbība: pievienojiet sensoru Arduino un pārbaudiet

Pievienojiet sensoru Arduino un pārbaudiet
Pievienojiet sensoru Arduino un pārbaudiet
Pievienojiet sensoru Arduino un pārbaudiet
Pievienojiet sensoru Arduino un pārbaudiet

GY63/GY86 plāksnēm parasti ir galvenes, bet tās nav pielodētas. Tātad jūsu izvēle ir lodēt galvenes vietā un izmantot vīriešu un sieviešu Duponta vadus vai (kā es nolēmu) lodēšanas vadus tieši pie tāfeles un pievienot vadam tapas, lai pievienotu Arduino. Pēdējā iespēja ir labāka, ja domājat, ka vēlāk varētu vēlēties pielodēt dēli projektā. Pirmais ir labāks, ja vēlaties izmantot dēli eksperimentiem. Vadu atlošana ir daudz vienkāršāka nekā tapas galvene.

Nepieciešamie savienojumi ir:

GY63/GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C pulkstenis> SDA - A4 I2C dati

Pievienojiet sensora paneli Arduino, kā norādīts iepriekš, un savienojiet Arduino ar datoru/klēpjdatoru, izmantojot USB vadu. Pārklājiet sensoru arī ar kādu necaurspīdīgu/melnu materiālu. Sensors ir jutīgs pret gaismu (kā tas ir lielākajā daļā šāda veida sensoru).

Sāciet Arduino IDE. Klikšķis:

Fails> piemēri >> MS5611-master> MS5611data2serial.

Kopā ar skici parādīsies jauns IDE gadījums. Noklikšķiniet uz augšupielādes pogas (labā bultiņa).

Pēc tam palaidiet sērijveida ploteri - noklikšķiniet uz Tools> Serial Plotter un, ja nepieciešams, iestatiet bodu uz 9600. Nosūtāmie dati ir spiediens Pascals. Pēc apmēram sekundes tas atkal mērogosies un sensora pacelšana un nolaišana par 0,3 m parādīsies kā pēdas nolaišana un pacelšana (zemāks augstums ir lielāks spiediens).

Datiem ir zināms troksnis. Skatiet pirmo sižetu iepriekš. To var izlīdzināt, izmantojot digitālo filtru (patiešām noderīgs rīks).

Filtra vienādojums ir šāds:

vērtība = vērtība + K (jauna vērtība)

kur “vērtība” ir filtrētie dati, un “jauns” ir pēdējais mērījums. Ja K = 1, filtrēšanas nav. Zemākām K vērtībām dati tiek izlīdzināti ar laika konstanti T/K, kur T ir laiks starp paraugiem. Šeit T ir aptuveni 17 ms, tāpēc vērtība 0,1 dod laika konstanti 170 ms vai aptuveni 1/6 s.

Filtru var pievienot:

Pirms iestatīšanas pievienojiet mainīgo filtrētajiem datiem ():

pludiņš filtrēts = 0;

Pēc tam pievienojiet filtra vienādojumu pēc spiediena =…. līnija.

filtrēts = filtrēts + 0,1*(filtrēts ar spiedienu);

Ieteicams inicializēt filtrēto vērtību pirmajā lasījumā. Tāpēc virs rindiņas, kas to dara, pievienojiet paziņojumu “ja”, lai tas izskatās šādi:

ja (filtrēts! = 0) {

filtrēts = filtrēts + 0,1*(filtrēts ar spiedienu); } cits {filtrēts = spiediens; // pirmais lasījums, tāpēc filtrēts uz lasīšanu}

Tests “! =” Nav “vienāds”. Tātad, ja “filtrēts” nav vienāds ar 0, tiek izpildīts filtra vienādojums, bet, ja tas ir, tad tas tiek iestatīts uz spiediena rādījumu.

Visbeidzot, Serial.println paziņojumā ir jāmaina “spiediens” uz “filtrēts”, lai mēs redzētu filtrēto vērtību.

Labākā mācīšanās tiek panākta, manuāli veicot iepriekš minētās izmaiņas. Tomēr es tos iekļāvu MS5611data2serialWfilter piemērā. Tātad, ja rodas problēmas, piemēru var ielādēt.

Tagad augšupielādējiet kodu Arduino un redziet uzlabojumus. Skatiet otro diagrammu iepriekš un atzīmējiet, ka Y skala ir paplašināta x2.

Izmēģiniet zemāku filtra konstantes vērtību, teiksim 0,02, nevis 0,1, un redzēsit atšķirību. Dati ir vienmērīgāki, bet ar lēnāku reakciju. Šis ir kompromiss, kas jāmeklē, izmantojot šo vienkāršo filtru. Raksturlielums ir tāds pats kā RC (pretestības un kapacitātes) filtram, ko plaši izmanto elektroniskajās shēmās.

3. darbība. Padariet to savrupu

Tagad mēs pievienosim LCD tastatūras vairogu, pārveidosim spiedienu uz augstumu metros un parādīsim to displejā. Mēs arī pievienosim iespēju nulles vērtību, nospiežot tastatūras pogu “Atlasīt”.

Ja LCD ekrāns ir uz Arduino, sensors būs jāpievieno LCD ekrānam. Diemžēl LCD vairogi parasti ir bez atbilstošām ligzdām. Tātad iespējas ir izveidot lodēšanas savienojumus vai iegūt kādu kontaktligzdu. Kontaktligzda ir pieejama ebay par ne vairāk kā pasta izdevumiem. Meklējiet “2,54 mm ligzdas sloksni” un atrodiet tās, kas ir līdzīgas Arduino ierīcēm. Tie parasti ir 36 vai 40 tapas garumā. Es izvairītos no pagrieztajiem tapām, jo tie nav pietiekami dziļi standarta Dupont vadiem.

Kontaktligzda ir jāsagriež garumā, un griezums jāveic tajā pašā vietā kā tapa. Tātad 6 kontaktu sloksnei - noņemiet 7. tapu ar smalkām knaiblēm, pēc tam nogrieziet tajā vietā, izmantojot junioru zāģi. Es vīlēju galus, lai tie būtu kārtīgi.

Pārliecinieties, ka, lodējot tos uz plāksnes, nav lodēšanas tiltu.

Pieņemot atbilstošu lēmumu par sensora pievienošanu, pievienojiet LCD ekrānu Arduino un pievienojiet sensoram tās pašas tapas, bet tagad uz LCD ekrāna.

Sagatavojiet arī akumulatoru un vadu. Es izveidoju savu svinu no detaļām manā atkritumu tvertnē, bet tās ir pieejamas arī ebay - ieskaitot jauku iespēju, kas ietver akumulatora kārbu un slēdzi. Meklējiet “PP3 2.1 mm vads”.

Patreizējais patēriņš ir aptuveni 80mA. Tāpēc, ja vēlaties darboties ilgāk par dažām minūtēm, apsveriet lielāku 9 V akumulatoru nekā PP3.

4. solis: pievienojiet kodu augstumam un LCD

Image
Image

Mums ir jādara nedaudz vairāk, lai pārveidotu spiedienu augstumā un palielinātu displeju.

Skices sākumā pievienojiet displeja bibliotēku un pastāstiet, kādas tapas tiek izmantotas:

#iekļaut

// inicializēt bibliotēku ar saskarnes tapu numuriem LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Tālāk mums ir vajadzīgi daži mainīgie un funkcija, lai nolasītu tastatūras pogas. Tie visi ir savienoti ar analogo ieeju A0. Katra poga dod atšķirīgu spriegumu A0. Meklējot “arduino lcd vairoga pogu kods”, tika atrasts labs kods:

www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Sample_Code

Pirms iestatīšanas pievienojiet šo kodu ():

// definējiet dažas paneļa un pogu izmantotās vērtības

int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // lasīt pogas int read_LCD_buttons () {adc_key_in = analogRead (0); // nolasiet vērtību no sensora // manas pogas, lasot, ir centrētas uz šīm vērtībām: 0, 144, 329, 504, 741 // šīm vērtībām pievienojam aptuveni 50 un pārbaudām, vai esam tuvu (adc_key_in> 1000) atgriezt btnNONE; // Ātruma dēļ mēs to padarām par pirmo iespēju, jo tas būs visticamākais rezultāts, ja (adc_key_in <50) atgriezīs btnRIGHT; ja (adc_key_in <250) atgriežas btnUP; ja (adc_key_in <450) atgriežas btnDOWN; ja (adc_key_in <650) atgriežas btnLEFT; if (adc_key_in <850) return btnSELECT; atgriezties btnNONE; // kad visi citi neizdodas, atdod šo…}

Sākuma punktā augstums parasti tiek nulle. Tātad mums ir nepieciešami mainīgie gan augstumam, gan atsaucei. Pievienojiet tos pirms iestatīšanas () un iepriekš minētās funkcijas:

pludiņš mtr;

pludiņa ref = 0;

Pāreja no spiediena paskalos uz skaitītājiem gandrīz precīzi dalās ar 12 jūras līmenī. Šī formula ir piemērota lielākajai daļai mērījumu uz zemes. Ir precīzākas formulas, kas ir piemērotākas pārveidošanai lielos augstumos. Izmantojiet tos, ja plānojat to izmantot gaisa balona lidojuma augstuma reģistrēšanai.

Atsaucei jābūt iestatītai uz pirmo spiediena rādījumu, lai mēs sāktu no nulles augstuma un nospiežot pogu SELECT. Pēc filtra koda un pirms paziņojuma Serial.println pievienojiet:

ja (atsauce == 0) {

ref = filtrēts/12,0; } if (read_LCD_buttons () == btnSELECT) {ref = filtrēts/12.0; }

Pēc tam pievienojiet augstuma aprēķinu:

mtr = ref - filtrēts/12,0;

Visbeidzot nomainiet paziņojumu Serial.println, lai nosūtītu “mtr”, nevis “filtrētu”, un pievienojiet kodu, lai LCD nosūtītu “mtr”:

Serial.println (mtr); // Nosūtīt spiedienu, izmantojot seriālo (UART)

lcd.setCursor (0, 1); // 2. rinda lcd.print (mtr);

Visas šeit veiktās izmaiņas ir iekļautas MS5611data2lcd piemērā. Ielādējiet to kā 2. darbībā.

Ir viens pēdējais modulis, kas ir noderīgs. Displeju ir grūti nolasīt, ja tas tiek atjaunināts 60 reizes sekundē. Mūsu filtrs izlīdzina datus ar laika konstanti aptuveni 0,8 s. Tātad pietiek ar displeja atjaunināšanu ik pēc 0,3 sekundēm.

Tāpēc pievienojiet skaitītāju pēc visām citām mainīgo definīcijām skices sākumā (piemēram, pēc pludiņa atsauces = 0;):

int i = 0;

Pēc tam pievienojiet kodu pieaugumam “i” un paziņojumu “ja”, kas tiks palaists, kad tas sasniegs 20, un pēc tam iestatiet to atpakaļ uz nulli un pārvietojiet komandas Sērija un lcd paziņojumā “ja”, lai tās tiktu izpildītas tikai katru 20. lasījumu:

i += 1;

ja (i> = 20) {Serial.println (mtr); // Nosūtīt spiedienu, izmantojot seriālo (UART) lcd.setCursor (0, 1); // 2. rinda lcd.print (mtr); i = 0; }

Es neiekļāvu piemēru ar šo pēdējo modifikāciju, lai mudinātu manuāli ievadīt kodu, kas palīdz mācīties.

Šim projektam vajadzētu dot labu sākumpunktu, piemēram, digitālajam barometram. Tiem, kas varētu apsvērt iespēju izmantot RC modeļos - meklējiet OpenXvario kodu, kas nodrošina altimetru un variometru Frsky un Turnigy 9x telemetrijas sistēmām.

Ieteicams: