Talaan ng mga Nilalaman:
- Hakbang 1: Gumamit ng Kaso: Pag-Smoothing Out ng Mga Sukat ng ADC
- Hakbang 2: Gumamit ng Kaso: Pagsukat sa DC Component ng Mikropono Signal
- Hakbang 3: Pagkalkula
- Hakbang 4: Ang Code
- Hakbang 5: Mga Dagdag
- Hakbang 6: Konklusyon
Video: Tumatakbo na Average para sa Iyong Mga Proyekto ng Microcontroller: 6 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
Sa itinuturo na ito ay ipapaliwanag ko kung ano ang average na tumatakbo at kung bakit mo ito dapat pangalagaan, pati na rin ipakita sa iyo kung paano ito dapat ipatupad para sa maximum na kahusayan sa computational (huwag mag-alala tungkol sa pagiging kumplikado, napakadaling maintindihan at gagawin ko. magbigay ng isang madaling gamitin na library para sa iyong mga proyekto sa arduino din:)
Ang average na pagpapatakbo, na karaniwang tinutukoy din bilang average na paglipat, paglipat ng kahulugan o pagpapatakbo ng mean, ay isang term na ginamit para sa paglalarawan ng average na halaga ng huling mga halagang N sa serye ng data. Maaari itong kalkulahin tulad ng normal na average o maaari kang gumamit ng trick upang magkaroon ito ng kaunting epekto sa pagganap ng iyong code.
Hakbang 1: Gumamit ng Kaso: Pag-Smoothing Out ng Mga Sukat ng ADC
Ang Arduino ay may disenteng 10 bit ADC na may napakakaunting ingay. Kapag sumusukat ng halaga sa isang sensor tulad ng potentiometer, photoresistor o iba pang mga mataas na bahagi ng ingay, mahirap magtiwala na tama ang pagsukat.
Ang isang solusyon ay ang pagkuha ng maraming mga sukat sa tuwing nais mong basahin ang iyong sensor at i-average ang mga ito. Sa ilang mga kaso ito ay isang mabubuhay na solusyon ngunit hindi palaging. Kung nais mong basahin ang ADC ng 1000 beses bawat segundo, kailangan mong 10 000 kung kumuha ka ng average ng 10 mga sukat. Isang malaking basura ng oras ng pagkalkula.
Ang aking iminungkahing solusyon ay ang magsukat ng 1000 beses sa isang segundo, i-update ang average na tumatakbo sa bawat oras at gamitin ito bilang kasalukuyang halaga. Ipinakikilala ng pamamaraang ito ang ilang latency ngunit binabawasan ang pagiging kumplikado ng computational ng iyong aplikasyon, na nagbibigay sa iyo ng mas maraming oras para sa karagdagang pagproseso.
Sa larawan sa itaas ginamit ko ang average ng pagtakbo ng huling 32 na sukat. Makikita mo na ang pamamaraang ito ay hindi 100% nabigo ngunit ito ay nagpapabuti ng kawastuhan nang malaki (hindi ito mas masahol kaysa sa pag-average ng 32 na mga sample sa bawat oras). Kung nais mong kalkulahin ang isang average ng 32 mga sukat sa bawat oras, na tatagal sa 0.25 ms sa Arduino UNO para sa mga sukat lamang!
Hakbang 2: Gumamit ng Kaso: Pagsukat sa DC Component ng Mikropono Signal
Maaaring sukatin ng Arduino ang mga voltages sa pagitan ng 0 at Vcc (normal na 5 V). Ang signal ng audio ay ganap na AC at kung nais mong sukatin ito sa isang microcontroller, kailangan mong bias ito sa paligid ng 1/2 Vcc. Sa isang proyekto ng Arduino UNO na nangangahulugang halos 2.5 V (DC) + audio signal (AC). Kapag gumagamit ng 10 bit ADC at 5 V power supply, 2.5 V bias ay dapat pantay na pagsukat ng 512. Kaya upang makakuha ng isang halaga ng AC ng signal, 512 ay dapat ibawas mula sa pagsukat ng ADC at iyan ba, tama?
Sa isang perpektong mundo, totoo iyan. Sa kasamaang palad ang totoong buhay ay mas kumplikado at ang aming bias ng signal ay may posibilidad na naaanod. Karaniwan ay 50 Hz ingay (60 Hz kung nakatira ka sa US) mula sa electrical network. Karaniwan hindi ito lahat masyadong may problema ngunit mabuting malaman na mayroon ito. Mas may problema ang linear drift mula sa pagpainit ng mga bahagi. Maingat mong itinakda ang DC offset na pagwawasto sa simula at dahan-dahan itong lumayo habang tumatakbo ang iyong aplikasyon.
Ilalarawan ko ang problemang ito sa isang (musika) beat detector. I-set up mo ang iyong pagtanggal ng bias at mga beats ay malinaw (larawan 2). Pagkatapos ng ilang oras, ang paggalaw at beats ng DC bias ay halos hindi kapansin-pansin sa microcontroller (larawan 3). Ang algorithm ng detection ng Beat ay susuriin nang malalim sa isang hinaharap na maituturo dahil lumalagpas ito sa saklaw ng artikulong ito.
Sa kasamaang palad may isang paraan upang patuloy na kalkulahin ang offset ng audio ng DC. Hindi nakakagulat na ang average na pagpapatakbo, paksa ng itinuturo na ito, ay nagbibigay ng isang solusyon.
Alam namin na ang average na halaga ng anumang AC signal ay 0. Gamit ang kaalamang ito maaari naming ibawas ang average na halaga ng AC + DC signal na ito ay DC bias. Upang alisin ito, maaari kaming tumagal ng average na tumatakbo sa huling ilang mga halaga at ibawas ito mula sa kasalukuyang pagbabasa ng ADC. Tandaan na kailangan mong gumamit ng sapat na haba ng average na tumatakbo. Para sa audio, ang ikasampu sa isang segundo (ang bilang ng mga sample ay nakasalalay sa iyong rate ng sample) ay dapat na sapat ngunit alam na mas mahaba ang average ng pagtatrabaho. Sa unang larawan maaari mong makita ang halimbawa ng totoong pagkalkula ng bias ng DC na may average na pagpapatakbo na may 64 na elemento sa 1 kHz sample rate (mas mababa sa inirerekumenda ko ngunit gumagana pa rin ito).
Hakbang 3: Pagkalkula
Maaari mong isipin ang average na tumatakbo bilang average na bigat ng mga tao sa waiting room ng doktor. Tinapos ng doktor ang pagsusuri sa isang pasyente at sabay-sabay na bago ang isang paglalakad sa silid ng paghihintay.
Upang malaman ang average na timbang ng lahat ng naghihintay na mga pasyente sa waiting room, maaaring tanungin ng nars ang bawat pasyente tungkol sa kanilang timbang, idagdag ang mga numerong iyon at hatiin sa bilang ng mga pasyente. Sa tuwing tatanggap ang doktor ng bagong pasyente, ulitin ng nars ang buong proseso.
Maaaring iniisip mo: "Hindi ito masyadong mahusay sa tunog … Dapat mayroong isang mas mahusay na paraan upang magawa ito." At magiging tama ka.
Upang ma-optimize ang prosesong ito, maaaring mapanatili ng nars ang isang tala ng kabuuang bigat ng kasalukuyang pangkat ng mga pasyente. Sa sandaling tumawag ang doktor ng bagong pasyente, tatanungin siya ng nars tungkol sa kanyang timbang at ibawas ito mula sa kabuuan ng pangkat na binitawan siya. Tatanungin ng nars ang pasyente na naglalakad lamang sa waiting room tungkol sa kanyang timbang at idagdag ito sa kabuuan. Ang average na timbang ng mga pasyente pagkatapos ng bawat paglilipat ay magiging kabuuan ng mga timbang na hinati sa bilang ng mga pasyente (oo, katulad ng dati ngunit ngayon tinanong lamang ng nars ang dalawang tao tungkol sa kanilang timbang sa halip na silang lahat). Napagtanto kong ang talatang ito ay maaaring medyo nakalilito kaya mangyaring tingnan ang ilustrasyon sa itaas para sa karagdagang kalinawan (o magtanong sa mga komento).
Ngunit kahit na hindi mo nahanap na nakalilito ang huling talata maaari kang magkaroon ng mga katanungan tulad ng kung ano ang dapat na nasa nagtitipon sa simula, paano ko mailalagay ang nabasa ko lamang sa isang aktwal na C code? Tatalakayin iyon sa susunod na hakbang, kung saan makukuha mo rin ang aking source code.
Hakbang 4: Ang Code
Upang makalkula ang average na pagpapatakbo, kailangan mo muna ng isang paraan upang maiimbak ang huling mga halagang N. maaari kang magkaroon ng isang array na may mga N elemento at ilipat ang buong nilalaman ng isang lugar sa bawat oras na magdagdag ka ng isang elemento (mangyaring huwag gawin ito), o maaari mong patungan ang isang lumang elemento at ayusin ang pointer sa susunod na elemento na itatapon (mangyaring gawin ito:)
Dapat simulan ng accumulator ang inisyal na sa 0, pareho din para sa lahat ng mga elemento sa linya ng pagkaantala. Sa ibang kaso ang iyong average na tumatakbo ay laging mali. Makikita mo ang pag-aalaga ng delayLine_init ng pagpapasimula ng linya ng pagkaantala, dapat mong alagaan ang nagtitipid sa iyong sarili.
ang pagdaragdag ng isang elemento upang maantala ang linya ay kasing dali ng pagbawas ng index ng pinakabagong elemento ng 1, tinitiyak na hindi nito itinuturo ang panig ng pagkaantala ng hanay ng linya. pagkatapos ng decrementing index kapag ito ay 0, ito ay loop sa paligid ng 255 (dahil ito ay isang 8 bit unsigned integer). Ang operator ng Modulo (%) na may sukat ng pagkaantala ng hanay ng linya ay titiyakin na ang index ay magtuturo sa isang wastong elemento.
Ang pagkalkula ng average na tumatakbo ay dapat na madaling maunawaan kung sinunod mo ang aking pagkakatulad sa nakaraang hakbang. Ibawas ang pinakalumang elemento mula sa nagtitipon, magdagdag ng pinakabagong halaga sa nagtitipon, itulak ang pinakabagong halaga sa linya ng pagkaantala, ibalik ang nagtitipon na hinati ng bilang ng mga elemento.
Madali, tama?
Mangyaring huwag mag-atubiling mag-eksperimento sa paggamit ng nakalakip na code upang mas maunawaan kung paano gumagana ang lahat ng ito. Tulad ng kasalukuyang paninindigan, binabasa ng arduino ang halagang analog sa analog pin A0 at na-print ang "[halaga ng ADC], [average na tumatakbo]" sa serial port sa 115200 baud rate. Kung bubuksan mo ang serial plotter ng arduino sa wastong rate ng baud, makikita mo ang dalawang linya: halaga ng ADC (asul) at pinahid ang halaga (pula).
Hakbang 5: Mga Dagdag
Mayroong ilang mga bagay na hindi mo kinakailangang malaman upang magamit ang average na pagtakbo sa iyong proyekto na hindi masaktan malaman.
antala: Magsisimula ako sa pag-uusap tungkol sa ilustrasyon ng hakbang na ito. Mapapansin mo na ang pagpapatakbo ng average ng higit pang mga elemento ay nagpapakilala ng mas malaking pagkaantala. Kung kritikal ang iyong oras ng pagtugon upang magbago ang halaga, baka gusto mong gumamit ng mas maikling average na tumatakbo o dagdagan ang rate ng sample (mas madalas na sukatin).
Magpatuloy.
nagpapasimula: Nang pag-usapan ko ang tungkol sa pagpapasimula ng nagtitipon at mga elemento ng pagkaantala, sinabi ko na dapat mong ipasimuno silang lahat sa 0. Bilang kahalili maaari mong ipasimula ang linya ng pagkaantala sa anumang nais mo ngunit ang nagtitipid ay dapat magsimula bilang isang kabuuan ng mga pinakabagong elemento ng N sa linya ng pagkaantala (kung saan ang N ay bilang ng mga elemento sa iyong average na tumatakbo). Kung nagsisimula ang nagtitipon bilang anumang iba pang halaga, ang kinakalkula na average ay magiging mali - alinman sa masyadong mababa o masyadong mataas, palaging sa parehong halaga (ipinapalagay ang parehong mga paunang kundisyon). Iminumungkahi kong subukan mong malaman kung bakit ganito sa pamamagitan ng paggamit ng ilang "pen at simulation ng papel".
laki ng nagtitipon: Dapat mo ring tandaan na ang nagtitipon ay dapat sapat na malaki upang maiimbak ang kabuuan ng lahat ng mga elemento sa linya ng pagkaantala kung lahat sila ay positibo o negatibong max. Praktikal na nangangahulugang ang nagtitipon ay dapat na isang uri ng data na mas malaki kaysa sa mga elemento ng pagkaantala ng linya at naka-sign, kung ang mga elemento ng pagkaantala ng linya ay naka-sign.
trick: Ang mga mahabang linya ng pagkaantala ay tumatagal ng maraming memorya. Maaari itong mabilis na maging isang problema. Kung pinaghihigpitan mo ang memorya at hindi masyadong nagmamalasakit sa kawastuhan, maaari mong tantyahin ang average na pagpapatakbo sa pamamagitan ng pagtanggal sa ganap na pagkaantala at gawin ito sa halip: ibawas ang 1 / N * na nagtitipon mula sa nagtitipon at magdagdag ng bagong halaga (sa halimbawa ng 8 matagal na average na tumatakbo: nagtitipon = nagtitipon * 7/8 + bagongValue). Nagbibigay ang pamamaraang ito ng maling resulta ngunit ito ay isang disenteng pamamaraan ng pagkalkula ng average na pagpapatakbo kapag mababa ang memorya mo.
lingguwistika: ang "tumatakbo average / ibig sabihin" ay karaniwang ginagamit kapag tumutukoy sa average ng real time habang ang "average na paglipat / ibig sabihin" ay karaniwang nangangahulugang tumatakbo ang algorithm sa static na hanay ng data tulad ng excel spreadsheet.
Hakbang 6: Konklusyon
Inaasahan kong ang itinuro na ito ay sapat na madaling maunawaan at makakatulong ito sa iyong mga susunod na proyekto. Mangyaring huwag mag-atubiling mag-post ng mga katanungan sa mga komento sa ibaba kung mayroong anumang hindi malinaw.
Inirerekumendang:
Mga Rainbow LEDs para sa Iyong Mga Proyekto: 4 na Hakbang (na may Mga Larawan)
Mga Rainbow LEDs para sa Iyong Mga Proyekto: Kumusta kayong lahat! Ginagamit ko ang mga LED na ito para sa maraming mga pandekorasyon na proyekto at ang resulta ay laging kamangha-mangha kaya nais kong ibahagi sa iyo ang aking mga karanasan nakita ko maraming tao ang bumibili ng mga RGB LED strip control at gumagamit ng tulad ng 3 o 5 sa mode ng pagbabago ng kulay sa
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: 6 Mga Hakbang
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: Arduino Project & Lupon ng Tutorial; May kasamang 10 pangunahing mga proyekto ng Arduino. Lahat ng mga source code, ang Gerber file at marami pa. Walang SMD! Madaling paghihinang para sa lahat. Madaling naaalis at mapapalitan na mga bahagi. Maaari kang gumawa ng hindi bababa sa 15 mga proyekto sa isang solong bo
Guerrilla Battery Holder para sa Iyong Mga Proyekto sa Breadboard / Arduino: 3 Mga Hakbang
Guerrilla Battery Holder para sa Iyong Mga Proyekto sa Breadboard / Arduino: Nag-eksperimento ako sa DS1307 at sa Arduino, kailangan kong maghanap ng isang paraan upang ikonekta ang isang baterya ng CR1212. Kinubkob ko ang aking kahon ng mga konektor, at walang nahanap na makakatulong. Pagkatapos, eur ê ka! Nagkaroon ako ng ilaw
Tiny AVR Microcontroller ay tumatakbo sa isang Prutas na Baterya: 9 Mga Hakbang (na may Mga Larawan)
Ang Tiny AVR Microcontroller ay tumatakbo sa isang Prutas na Baterya: Ang ilan sa mga prutas at gulay na kinakain ay maaaring magamit upang makagawa ng elektrisidad. Ang mga electrolytes sa maraming prutas at gulay, kasama ang mga electrode na gawa sa iba't ibang mga metal ay maaaring magamit upang makagawa ng pangunahing mga cell. Isa sa pinakamadaling magagamit na gulay, ika
Magdagdag ng Video at Audio sa Iyong Proyekto ng Microcontroller: 7 Mga Hakbang
Magdagdag ng Video & Audio sa Iyong Proyekto ng Microcontroller: 7 Mga display ng Segment na LED ay kapaki-pakinabang para sa pagpapakita ng mga numero at ang bitmap na LCD ay maaaring gumawa ng simpleng mga graphic, ngunit kung minsan isang totoo, output ng kulay ng video ang pinakamadaling paraan upang pumunta: Ang Composite video (aka, RCA Jack) ay nasa lahat ng pook, at gumagana sa 3 " - 60 & q