Talaan ng mga Nilalaman:

Arduino Atmospheric Tape Sukat / MS5611 GY63 GY86 Pagpapakita: 4 na Hakbang (na may Mga Larawan)
Arduino Atmospheric Tape Sukat / MS5611 GY63 GY86 Pagpapakita: 4 na Hakbang (na may Mga Larawan)

Video: Arduino Atmospheric Tape Sukat / MS5611 GY63 GY86 Pagpapakita: 4 na Hakbang (na may Mga Larawan)

Video: Arduino Atmospheric Tape Sukat / MS5611 GY63 GY86 Pagpapakita: 4 na Hakbang (na may Mga Larawan)
Video: Sustainable Living: Water Level Monitoring With Ultrasonic Sensor, Blynk And ChatGPT Generated Code 2024, Hulyo
Anonim
Pagsukat ng Arduino Atmospheric Tape / MS5611 GY63 GY86 Pagpapakita
Pagsukat ng Arduino Atmospheric Tape / MS5611 GY63 GY86 Pagpapakita

Ito ay talagang isang barometro / altimeter ngunit makikita mo ang dahilan para sa pamagat sa pamamagitan ng pagtingin sa video.

Ang sensor ng presyon ng MS5611, na matatagpuan sa Arduino GY63 at GY86 breakout boards, ay naghahatid ng kamangha-manghang pagganap. Sa isang kalmadong araw susukat nito ang iyong taas sa loob ng 0.2m. Ito ay mabisang pagsukat ng distansya mula sa iyong ulo hanggang sa kalawakan at ibabawas ito mula sa distansya ng iyong mga paa patungo sa kalawakan (sa pamamagitan ng pagsukat ng presyon - iyon ang bigat ng hangin sa itaas). Ang kamangha-manghang aparato na ito ay may isang saklaw na komportableng susukatin ang taas ng Everest - at maaari ring sukatin hanggang sa ilang pulgada.

Ang proyektong ito ay inilaan bilang: isang proyekto ng mga paaralan, isang halimbawa ng pagbabago ng Arduino code at isang magandang lugar ng pagsisimula upang galugarin ang paggamit ng sensor ng MS5611. Mayroong maraming mga katanungan sa forum mula sa mga nahihirapan sa sensor na ito. Ang diskarte dito ay ginagawang paggamit ng napaka prangka. Matapos gawin ang proyektong ito ikaw ay mahusay na kagamitan upang bumuo ng iba pang mga application na nauugnay sa presyon.

Ang bawat sensor ay may kanya-kanyang mga calibration Constant na kailangang basahin at gamitin upang maitama ang data. Mayroong isang silid-aklatan na magagamit upang matulungan ang paghimok ng mga ito. Ang ipinakitang code dito ay gumagamit ng library upang kumuha ng mga pagbasa at pagkatapos ay i-convert ito sa taas at ipinapakita ang mga ito sa isang LCD Shield.

Ipapadala muna namin ang data sa serial monitor sa PC / laptop para sa mga paunang pagsusuri. Nagpapakita ang mga ito ng ilang ingay at sa gayon ay nagdagdag kami ng isang filter upang makinis ang mga ito. Pagkatapos ay magdagdag kami ng isang LCD display upang ang unit ay maaaring tumakbo nang nakapag-iisa at maaari mong subukang sukatin ang iyong taas - o anumang iba pa.

Tandaan na ang board ng GY63 ay mayroong sensor na presyon ng MS5611. Ang GY86 ay tinawag na isang 10 degree ng Freedom board at may kasamang 3 axis accelerometer, 3 axis gyro at isang 3 axis magnetometer para lamang sa ilang $ higit pa.

Kakailanganin mong:

1. Arduino UNO (o iba pang may karaniwang pinout) at ang USB cable

2. GY63 breakout board o GY86

3. 4 Ang Dupont ay humahantong sa lalaki-babae - o sa pagkonekta ng kawad

4. Arduino LCD keypad na kalasag

5. 9v baterya at tingga

6. 2.54mm socket strip (opsyonal ngunit inirerekomenda)

Paghahanda

I-download ang Arduino IDE (integrated environment na pag-unlad) mula sa:

Ang ilang mga teknikal na piraso para sa interes

Naghahatid ang MS5611 ng mahusay na pagganap nito sa pamamagitan ng pag-average ng maraming bilang ng mga sukat. Maaari itong gumawa ng 4096 3 byte (24bit) na mga pagsukat ng analogue sa loob lamang ng 8ms at ibigay ang average na halaga. Kailangang sukatin nito ang parehong presyon at temperatura upang ang data ng presyon ay maaaring maitama para sa panloob na temperatura. Samakatuwid maaari itong maghatid ng halos 60 pares ng mga pagbabasa ng presyon at temperatura bawat segundo.

Magagamit ang sheet ng data sa:

Ang komunikasyon ay sa pamamagitan ng I2C. Kaya't ang iba pang mga sensor ng I2C ay maaaring ibahagi ang bus (tulad ng kaso sa board ng GY86 10DOF kung saan ang lahat ng mga chips ay nasa I2C).

Hakbang 1: Kumuha ng isang MS5611 Library

Marami sa mga sensor ng Arduino alinman ay gumagamit ng isang karaniwang silid-aklatan na kasama ng Arduino IDE o binibigyan ng isang zip file na may isang silid aklatan na madaling mai-install. Ito ay may kaugaliang hindi maging kaso para sa mga sensor ng MS5611. Gayunpaman natagpuan ang isang paghahanap: https://github.com/gronat/MS5611 na mayroong isang silid-aklatan para sa MS5611, kabilang ang pagsasagawa ng pagwawasto ng temperatura.

Pagpipilian 1

Pumunta sa website sa itaas, i-click ang 'I-clone o I-download' at piliin ang 'I-download ang ZIP'. Dapat nitong maihatid ang MS5611-master.zip sa iyong direktoryo ng mga pag-download. Ngayon, kung nais mo, ilipat ito sa isang folder kung saan mo ito mahahanap sa hinaharap. Gumagamit ako ng isang direktoryo na tinatawag na 'data' na idinagdag sa aking mga folder ng Arduino.

Sa kasamaang palad ang na-download na.zip file ay hindi nagsasama ng anumang mga halimbawa ng sketch at masarap idagdag ang library at mga halimbawa sa Arduino IDE. Mayroong isang minimum na halimbawa sa README.md file na maaaring makopya at mai-paste sa isang sketch at mai-save. Ito ay isang paraan upang makarating.

Pagpipilian 2

Upang gawing mas madali itong patakbuhin ang code sa itinuro na ito naidagdag ko ang minimum na halimbawa sa itaas at ang mga halimbawang ipinakita dito sa silid-aklatan at nakakabit ng isang.zip file sa ibaba na mai-install sa Arduino IDE.

I-download ang zip file sa ibaba. Ilipat ito sa isang mas mahusay na folder kung nais mo.

Simulan ang Arduino IDE. I-click ang Sketch> Isama ang Library> Magdagdag ng zip file at piliin ang file. I-restart ang IDE. Parehong magkakaroon ang IDE ng naka-install na silid-aklatan kasama ang lahat ng mga halimbawang ipinakita dito. Suriin sa pamamagitan ng pag-click sa File> mga halimbawa >> MS5611-master. Tatlong sketch ang dapat na nakalista.

Hakbang 2: Ikonekta ang Sensor sa Arduino at Pagsubok

Ikonekta ang Sensor sa Arduino at Pagsubok
Ikonekta ang Sensor sa Arduino at Pagsubok
Ikonekta ang Sensor sa Arduino at Pagsubok
Ikonekta ang Sensor sa Arduino at Pagsubok

Ang mga board ng GY63 / GY86 ay karaniwang may mga header ngunit hindi solder. Kaya't pinili mo na alinman sa paghihinang ang mga header sa lugar at gamitin ang mga lalaking pang-babaeng Dupont, o (tulad ng napagpasyahan ko) na direktang humahantong ang panghinang sa board at magdagdag ng mga pin sa tingga upang mai-plug sa Arduino. Ang huling pagpipilian ay mas mahusay kung sa palagay mo ay nais mong maghinang sa board sa isang proyekto sa paglaon. Ang dating ay mas mahusay kung nais mong gamitin ang board para sa eksperimento. Ang hindi nakaharang na mga lead ay mas madali kaysa sa isang pin header.

Ang mga kinakailangang koneksyon ay:

GY63 / GY86 Arduino

VCC - 5v Power GND - GND Ground SCL - A5 I2C na orasan> SDA - A4 I2C data

Ikabit ang board ng sensor sa Arduino tulad ng nasa itaas at ikonekta ang Arduino sa PC / laptop sa pamamagitan ng USB lead. Takpan din ang sensor ng ilang opaque / black material. Ang sensor ay sensitibo sa ilaw (tulad ng kaso para sa karamihan ng ganitong uri ng sensor).

Simulan ang Arduino IDE. I-click ang:

File> mga halimbawa >> MS5611-master> MS5611data2serial.

Ang isang bagong halimbawa ng IDE ay lilitaw kasama ng sketch. I-click ang upload button (kanang arrow).

Susunod na simulan ang serial plotter - i-click ang Tools> Serial Plotter at kung kinakailangan itakda ang baud sa 9600. Ang ipinadadala na data ay ang pressure sa Pascals. Pagkatapos ng isang segundo o higit pa ito ay muling susukat at tataas at babaan ang sensor sa pamamagitan ng pagsasabing 0.3m ay dapat ipakita bilang pagbaba at pagtaas ng bakas (ang mas mababang taas ay mas mataas na presyon).

Ang data ay may ilang ingay. Tingnan ang unang balangkas sa itaas. Maaari itong makinis gamit ang isang digital na filter (isang talagang kapaki-pakinabang na tool).

Ang equation ng filter ay:

halaga = halaga + K (bagong-halaga)

kung saan ang 'halaga' ay ang nai-filter na data, at ang 'bago' ang pinakabagong sinusukat. Kung ang K = 1 ay walang pagsala. Para sa mas mababang halaga ng K ang data ay na-smoothed na may isang pare-pareho sa oras ng T / K kung saan ang T ay ang oras sa pagitan ng mga sample. Narito ang T sa paligid ng 17ms kaya ang isang halaga ng 0.1 ay nagbibigay ng isang oras na pare-pareho ng 170ms o sa paligid ng 1 / 6s.

Ang filter ay maaaring idagdag ng:

Magdagdag ng variable para sa na-filter na data bago i-set ():

naka-filter na float = 0;

Pagkatapos ay idagdag ang equation ng filter pagkatapos ng presyon =…. linya

nasala = nasala + 0.1 * (na-filter na presyon);

Magandang ideya na simulan ang na-filter na halaga sa unang pagbasa. Kaya magdagdag ng isang pahayag na 'kung' sa paligid ng linya sa itaas na ginagawa ito kaya't parang:

kung (sinala! = 0) {

nasala = nasala + 0.1 * (na-filter na presyon); } iba pa {nasala = presyon; // unang pagbasa kaya itinakda ang nasala sa pagbabasa}

Ang pagsubok na '! =' Ay 'hindi pantay'. Kaya't kung ang 'sinala' ay hindi katumbas ng 0 ang filter na equation ay naisakatuparan ngunit kung ito ay pagkatapos ay nakatakda ito sa pagbabasa ng presyon.

Panghuli kailangan nating baguhin ang 'presyur' sa 'nasala' sa pahayag na Serial.println upang makita namin ang na-filter na halaga.

Ang pinakamagandang pag-aaral ay nakakamit sa pamamagitan ng manu-manong paggawa ng mga pagbabago. Gayunpaman isinama ko ang mga ito sa halimbawang MS5611data2serialWfilter. Kaya't kung may mga problema ang halimbawa ay maaaring mai-load.

Ngayon i-upload ang code sa Arduino at makita ang pagpapabuti. Tingnan ang pangalawang balangkas sa itaas at tandaan ang Y scale ay pinalawak x2.

Subukan ang isang mas mababang halaga para sa pare-pareho ang filter, sabihin ang 0.02 sa halip na 0.1, at tingnan ang pagkakaiba. Ang data ay mas makinis ngunit may isang mabagal na tugon. Ito ay isang kompromiso na kailangang hanapin kapag ginagamit ang simpleng filter na ito. Ang katangian ay kapareho ng isang RC (paglaban at kapasidad) na filter na malawak na ginamit sa mga elektronikong circuit.

Hakbang 3: Gawin itong Standalone

Ngayon ay magdagdag kami ng isang LCD Keypad na kalasag, i-convert ang presyon sa taas sa metro, at ipakita ito sa display. Magdaragdag din kami ng kakayahang zero ang halaga sa pamamagitan ng pagpindot sa keypad na 'Piliin' na pindutan.

Gamit ang LCD na kalasag sa Arduino ang sensor ay kailangang maiugnay sa LCD na kalasag. Sa kasamaang palad ang mga LCD na kalasag ay karaniwang dumating nang walang naaangkop na mga socket. Kaya ang mga pagpipilian ay upang makagawa ng mga koneksyon ng solder o upang makakuha ng ilang socket strip. Ang socket strip ay magagamit sa ebay para sa hindi hihigit sa gastos ng selyo. Gumawa ng isang paghahanap sa '2.54mm socket strip' at hanapin ang mga katulad sa mga nasa Arduino. Karaniwan itong nagmula sa 36 o 40 pin na haba. Iiwasan ko ang mga nakabukas na pin dahil hindi sila malalim para sa karaniwang mga lead ng Dupont.

Ang socket strip ay kailangang i-cut sa haba at ang hiwa ay kailangang gawin sa parehong lugar bilang isang pin. Kaya para sa isang 6 pin strip - alisin ang ika-7 na pin na may ilang pinong pliers, pagkatapos ay i-cut sa lugar na iyon gamit ang isang junior hacksaw. Isinampa ko ang mga dulo upang gawing maayos ang mga ito.

Siguraduhin na walang mga tulay ng panghinang kapag hinihinang ito sa pisara.

Gamit ang naaangkop na desisyon sa pagkonekta ng sensor plug ang LCD kalasag papunta sa Arduino at ikonekta ang sensor ng parehong mga pin - ngunit ngayon sa LCD kalasag.

Ihanda rin ang baterya at humanda. Ginawa ko ang aking lead mula sa mga bahagi sa aking scrap bin ngunit magagamit din sila sa ebay - kasama ang isang magandang pagpipilian na may kasamang isang kahon ng baterya at switch. Paghahanap sa 'PP3 2.1mm lead'.

Ang kasalukuyang pagkonsumo ay sa paligid ng 80ma. Samakatuwid kung nais mong tumakbo ng higit sa ilang minuto isaalang-alang ang isang mas malaking 9v na baterya kaysa sa PP3.

Hakbang 4: Magdagdag ng Code para sa Altitude at sa LCD

Image
Image

Kailangan naming gumawa ng kaunti pang pag-coding upang mai-convert ang presyon sa taas at himukin ang display.

Sa simula ng sketch idagdag ang display library at sabihin ito kung ano ang ginagamit na mga pin:

# isama

// ipasimula ang silid-aklatan gamit ang mga numero ng mga interface ng interface na LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

Susunod na kailangan namin ng ilang mga variable at isang pagpapaandar upang mabasa ang mga pindutan ng keypad. Ang lahat ng ito ay konektado sa analogue input A0. Ang bawat pindutan ay nagbibigay ng iba't ibang boltahe sa A0. Ang isang paghahanap sa 'arduino lcd code ng mga pindutan ng kalasag' ay nakakita ng magandang code sa:

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

Idagdag ang code na ito bago i-set ():

// tukuyin ang ilang mga halagang ginamit ng panel at mga pindutan

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 // basahin ang mga pindutan sa int read_LCD_buttons () {adc_key_in = analogRead (0); // basahin ang halaga mula sa sensor // ang aking mga pindutan kapag nabasa ay nakasentro sa mga valies na ito: 0, 144, 329, 504, 741 // nagdagdag kami ng humigit-kumulang 50 sa mga halagang iyon at suriin upang makita kung malapit kami kung (adc_key_in> 1000) ibalik btnWALA; // Ginagawa namin ito ng ika-1 na pagpipilian para sa mga kadahilanang bilis sapagkat ito ang pinaka-malamang na resulta kung (adc_key_in <50) bumalik btnRIGHT; kung (adc_key_in <250) ibalik ang btnUP; kung (adc_key_in <450) bumalik btnDOWN; kung (adc_key_in <650) bumalik btnLEFT; kung (adc_key_in <850) bumalik btnSELECT; ibalik btnWALA; // kapag nabigo ang lahat, ibalik ito …}

Karaniwan ay zero ang altitude sa panimulang punto. Kaya kailangan namin ng mga variable para sa parehong taas at sanggunian. Idagdag ang mga ito bago i-setup () at ang pagpapaandar sa itaas:

lumutang mtr;

float ref = 0;

Ang pagbabago mula sa presyon sa Pascals sa metro ay halos eksaktong isang paghahati ng 12 sa antas ng dagat. Ang formula na ito ay pagmultahin para sa karamihan ng mga sukat batay sa lupa. Mayroong mas tumpak na mga formula na mas naaangkop para sa conversion sa mataas na altitude. Gamitin ang mga ito kung gagamitin mo ito upang maitala ang taas ng isang flight ng lobo.

Ang sanggunian ay dapat na itakda sa unang presyon ng pagbabasa upang magsimula kami sa zero taas at kapag ang pindutang SELECT ay pinindot. Idagdag, pagkatapos ng filter code, at bago ang pahayag ng Serial.println:

kung (ref == 0) {

ref = nasala / 12.0; } kung (read_LCD_buttons () == btnSELECT) {ref = sinala / 12.0; }

Pagkatapos nito idagdag ang pagkalkula ng taas:

mtr = ref - sinala / 12.0;

Panghuli baguhin ang pahayag ng Serial.println upang magpadala ng 'mtr' sa halip na 'sinala', at magdagdag ng code upang maipadala ang 'mtr' sa LCD:

Serial.println (mtr); // Send pressure via serial (UART)

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

Ang lahat ng mga pagbabago dito ay kasama sa halimbawang MS5611data2lcd. I-load ito tulad ng sa hakbang 2.

Mayroong isang huling mod na kapaki-pakinabang. Ang display ay mahirap basahin kapag ina-update ito nang 60 beses sa isang segundo. Ang aming filter ay ang pagpapakinis ng data na may isang oras na pare-pareho sa paligid ng 0.8s. Kaya't ang pag-update ng display sa bawat 0.3 ay tila sapat na.

Kaya magdagdag ng isang counter pagkatapos ng lahat ng iba pang mga kahulugan ng variable sa simula ng sketch (hal. Pagkatapos ng float ref = 0;):

int i = 0;

Pagkatapos magdagdag ng code upang madagdagan ang 'i' at isang pahayag na 'kung' upang tumakbo pagdating sa 20 at pagkatapos ay itakda ito pabalik sa zero at ilipat ang mga Serial at lcd na mga utos sa loob ng pahayag na 'kung' kaya't naisasagawa lamang ito tuwing ika-20 na pagbasa:

ako + = 1;

kung (i> = 20) {Serial.println (mtr); // Send pressure through serial (UART) lcd.setCursor (0, 1); // line 2 lcd.print (mtr); i = 0; }

Hindi ako nagsama ng isang halimbawa sa huling pagbabago na ito upang hikayatin ang pagpasok ng code nang manu-mano na tumutulong sa pag-aaral.

Ang proyektong ito ay dapat magbigay ng isang magandang panimulang punto halimbawa para sa isang digital barometer. Para sa mga maaaring isaalang-alang ang paggamit sa mga modelo ng RC - maghanap para sa OpenXvario para sa code na nagbibigay-daan sa isang altimeter at variometer para sa Frsky at Turnigy 9x telemetry system.

Inirerekumendang: