Orodha ya maudhui:

Kuendesha Wastani wa Miradi ya Mdhibiti Wako Mdogo: Hatua 6
Kuendesha Wastani wa Miradi ya Mdhibiti Wako Mdogo: Hatua 6

Video: Kuendesha Wastani wa Miradi ya Mdhibiti Wako Mdogo: Hatua 6

Video: Kuendesha Wastani wa Miradi ya Mdhibiti Wako Mdogo: Hatua 6
Video: UKIONA DALILI HIZI 9 WIKI 2 BAADA YA KUJAMIIANA KAPIME UKIMWI HARAKA HUENDA UMEAMBUKIZWA 2024, Novemba
Anonim
Kuendesha Wastani wa Miradi yako ya Mdhibiti Mdogo
Kuendesha Wastani wa Miradi yako ya Mdhibiti Mdogo

Katika hii inayoweza kufundishwa nitaelezea wastani wa wastani ni kwanini unapaswa kuijali, na pia kukuonyesha jinsi inapaswa kutekelezwa kwa ufanisi mkubwa wa hesabu (usijali juu ya ugumu, ni rahisi kuelewa na nita toa maktaba rahisi ya kutumia kwa miradi yako ya arduino pia:)

Wastani wa kukimbia, pia hujulikana kama wastani wa kusonga, maana ya kusonga au maana ya maana, ni neno linalotumiwa kuelezea wastani wa thamani ya maadili ya mwisho ya N katika safu ya data. Inaweza kuhesabiwa kama wastani wa kawaida au unaweza kutumia ujanja kuifanya iwe na athari ndogo kwenye utendaji wa nambari yako.

Hatua ya 1: Tumia Kesi: Lainisha Vipimo vya ADC

Tumia Kesi: Lainisha Vipimo vya ADC
Tumia Kesi: Lainisha Vipimo vya ADC

Arduino ana ADC 10 nzuri na kelele kidogo sana. Wakati wa kupima thamani kwenye sensorer kama potentiometer, photoresistor au vifaa vingine vya kelele kubwa, ni ngumu kuamini kuwa kipimo ni sahihi.

Suluhisho mojawapo ni kuchukua vipimo kadhaa kila wakati unataka kusoma sensa yako na kuipima wastani. Katika visa vingine hii ni suluhisho linalofaa lakini sio kila wakati. Ikiwa ungetaka kusoma ADC mara 1000 kwa sekunde, itakubidi 10 000 ikiwa unachukua wastani wa vipimo 10. Kupoteza kubwa kwa wakati wa hesabu.

Suluhisho langu lililopendekezwa ni kuchukua vipimo mara 1000 kwa sekunde, kusasisha wastani wa kukimbia kila wakati na kuitumia kama thamani ya sasa. Njia hii inaleta ucheleweshaji lakini inapunguza ugumu wa hesabu wa programu yako, ikikupa muda mwingi wa usindikaji wa ziada.

Katika picha hapo juu nilitumia wastani wa vipimo 32 vya mwisho. Utaona kwamba njia hii sio 100% isiyoweza kushindwa lakini inaboresha usahihi kwa kiasi kikubwa (sio mbaya zaidi kuliko wastani wa sampuli 32 kila wakati). Ikiwa ungetaka kuhesabu wastani wa vipimo 32 kila wakati, hiyo itachukua zaidi ya 0.25 ms kwenye Arduino UNO kwa vipimo peke yake!

Hatua ya 2: Tumia Kesi: Kupima kipengee cha DC cha Ishara ya Kipaza sauti

Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti
Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti
Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti
Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti
Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti
Tumia Kesi: Kupima Sehemu ya DC ya Ishara ya Kipaza sauti

Arduino inaweza kupima voltages kati ya 0 na Vcc (kawaida 5 V). Ishara ya sauti ni AC kabisa na ikiwa unataka kuipima kwenye microcontroller, lazima uipendeze karibu na 1/2 Vcc. Katika mradi wa Arduino UNO ambao ungemaanisha takriban 2.5 V (DC) + ishara ya sauti (AC). Unapotumia 10 bit ADC na 5 V usambazaji wa umeme, upendeleo wa 2.5 V unapaswa kupima kipimo cha 512. Kwa hivyo kupata thamani ya ishara ya AC, 512 inapaswa kutolewa kutoka kipimo cha ADC na ndio hiyo, sivyo?

Katika ulimwengu mzuri, hiyo itakuwa kweli. Kwa bahati mbaya maisha halisi ni ngumu zaidi na upendeleo wetu wa ishara huelekea kuteleza. Kawaida sana ni kelele 50 Hz (60 Hz ikiwa unaishi Amerika) kutoka kwa mtandao wa umeme. Kawaida sio shida sana lakini ni vizuri kujua ipo. Shida zaidi ni laini ya laini kutoka kwa kupokanzwa kwa vifaa. Unaweka kwa uangalifu marekebisho ya kukabiliana na DC mwanzoni na polepole huteleza wakati programu yako inaendelea.

Nitaelezea shida hii na kipelelezi cha [muziki]. Unaweka uondoaji wako wa upendeleo na beats ni wazi (picha 2). Baada ya muda, upendeleo wa DC huenda na midundo haionekani kwa mdhibiti mdogo (picha 3). Algorithm ya kugundua Beat itachunguzwa kwa kina katika siku zijazo kufundisha kwani inazidi wigo wa nakala hii.

Kwa bahati nzuri kuna njia ya kuendelea kuweka hesabu ya DC ya sauti. Haitashangaza kuwa wastani wa kukimbia, mada ya hii inayoweza kufundishwa, inatoa suluhisho.

Tunajua kuwa wastani wa thamani ya ishara yoyote ya AC ni 0. Kutumia maarifa haya tunaweza kutoa thamani ya wastani ya ishara ya AC + DC ni upendeleo wa DC. Ili kuiondoa, tunaweza kuchukua wastani wa maadili ya mwisho na kuiondoa kutoka kwa usomaji wa sasa wa ADC. Kumbuka kuwa unahitaji kutumia wastani wa kutosha wa kukimbia. Kwa sauti, sehemu ya kumi ya sekunde (idadi ya sampuli inategemea kiwango cha sampuli yako) inapaswa kutosha lakini ujue kuwa wastani mrefu hufanya kazi vizuri. Katika picha ya kwanza unaweza kuona mfano wa hesabu halisi ya upendeleo wa DC na wastani wa kutumia vitu 64 kwa kiwango cha sampuli 1 kHz (chini ya vile nilivyopendekeza lakini bado inafanya kazi).

Hatua ya 3: Hesabu

Hesabu
Hesabu

Unaweza kufikiria kukimbia wastani kama wastani wa uzito wa watu katika chumba cha kusubiri cha daktari. Daktari anamaliza kumchunguza mgonjwa mmoja na wakati huo huo mpya anaingia kwenye chumba cha kusubiri.

Ili kujua uzito wa wastani wa wagonjwa wote wanaosubiri kwenye chumba cha kusubiri, muuguzi angeweza kuuliza kila mgonjwa juu ya uzito wao, kuongeza nambari hizo juu na kugawanya na idadi ya wagonjwa. Kila wakati daktari anapokubali mgonjwa mpya, muuguzi angeweza kurudia mchakato mzima.

Labda unafikiria: "Hii haionekani kuwa nzuri sana … Lazima kuwe na njia bora ya kufanya hivyo." Na ungekuwa sahihi.

Ili kuboresha mchakato huu, muuguzi anaweza kuweka rekodi ya jumla ya uzito wa kikundi cha wagonjwa wa sasa. Mara tu daktari anapomuita mgonjwa mpya, muuguzi atamwuliza juu ya uzito wake na kuiondoa kutoka kwa jumla ya kikundi amwachie aende. Muuguzi angeuliza mgonjwa ambaye aliingia tu kwenye chumba cha kusubiri juu ya uzito wake na kuiongeza kwa jumla. Uzito wa wastani wa wagonjwa baada ya kila zamu itakuwa jumla ya uzito uliogawanywa na idadi ya wagonjwa (ndio, sawa na hapo awali lakini sasa muuguzi aliwauliza watu wawili juu ya uzito wao badala ya wote). Natambua aya hii inaweza kuwa ilikuwa ya kutatanisha kwa hivyo tafadhali angalia kielelezo hapo juu kwa uwazi zaidi (au uliza maswali katika maoni).

Lakini hata ikiwa haukuona fungu la mwisho likichanganya unaweza kuwa na maswali kama kile kinachopaswa kuwa kwenye mkusanyiko mwanzoni, ninawekaje kile nilichosoma tu kwa nambari halisi ya C? Hiyo itashughulikiwa katika hatua inayofuata, ambapo utapata pia nambari yangu ya chanzo.

Hatua ya 4: Kanuni

Kanuni
Kanuni

Ili kuhesabu wastani wa kukimbia, unahitaji kwanza njia ya kuhifadhi maadili ya N ya mwisho. unaweza kuwa na safu na vitu vya N na kusonga yaliyomo sehemu moja kila wakati unapoongeza kipengee (tafadhali usifanye hivi), au unaweza kuandika tena kitu kimoja cha zamani na urekebishe pointer kwa kipengee kinachofuata kutupwa nje (tafadhali fanya hivi:)

Mkusanyiko unapaswa kuanza kutekelezwa hadi 0, sawa kwa vitu vyote kwenye laini ya kuchelewesha. Katika hali nyingine wastani wako wa kukimbia utakuwa mbaya kila wakati. Utaona kwamba delayLine_init inachukua huduma ya kuanzisha laini ya ucheleweshaji, unapaswa kujitunza mkusanyiko mwenyewe.

kuongeza kipengee cha kuchelewesha laini ni rahisi kama kupungua kwa faharisi ya kipengee kipya zaidi na 1, kuhakikisha kuwa haionyeshi upande wa safu ya safu ya kuchelewesha. baada ya kupungua kwa faharisi ikiwa ni 0, itazunguka hadi 255 (kwa sababu ni nambari 8 isiyosainiwa kamili). Modulo (%) mwendeshaji na saizi ya safu ya safu ya kuchelewesha atahakikisha index itaelekeza kwa kitu halali.

Kuhesabu wastani wa kukimbia inapaswa kuwa rahisi kuelewa ikiwa ulifuata mlinganisho wangu katika hatua iliyopita. Ondoa kipengee cha zamani kabisa kutoka kwa mkusanyiko, ongeza thamani mpya zaidi kwa mkusanyiko, bonyeza kushinikiza thamani mpya zaidi kwenye laini ya kuchelewesha, rudisha mkusanyiko uliogawanywa na idadi ya vitu.

Rahisi, sawa?

Tafadhali jisikie huru kujaribu kutumia nambari iliyoambatanishwa ili kuelewa vizuri jinsi hii yote inafanya kazi. Kama inavyosimama sasa, arduino inasoma thamani ya analog kwenye pini ya Analog A0 na chapa "[ADC value], [wastani wa wastani]" kwenye bandari ya serial kwa kiwango cha baud 115200. Ikiwa utafungua mpangaji wa serial wa arduino kwa kiwango sahihi cha baud, utaona mistari miwili: Thamani ya ADC (samawati) na laini iliyosafishwa (nyekundu).

Hatua ya 5: Ziada

Ziada
Ziada

Kuna mambo machache ambayo sio lazima ujue ili utumie wastani katika mradi wako ut haitaumiza kujua.

kuchelewesha: Nitaanza na kuzungumza juu ya kielelezo cha hatua hii. Utaona kwamba wastani wa vitu zaidi huleta ucheleweshaji mkubwa. Ikiwa wakati wako wa kujibu kubadilisha thamani ni muhimu, unaweza kutaka kutumia wastani mfupi au kuongeza kiwango cha sampuli (pima mara nyingi zaidi).

Kuendelea.

kuanzisha: Wakati nilizungumza juu ya kuanzisha mkusanyiko na kuchelewesha vitu, nilisema unapaswa kuzitanguliza zote kuwa 0. Vinginevyo unaweza kuanzisha laini ya kuchelewesha kwa chochote unachopenda lakini mkusanyiko unapaswa kuanza kama jumla ya vitu vipya vya N katika laini ya kuchelewesha (ambapo N ni idadi ya vitu katika wastani wako wa kukimbia). Ikiwa mkusanyiko utaanza kama thamani nyingine yoyote, wastani uliohesabiwa utakuwa mbaya - iwe chini sana au juu sana, kila wakati kwa kiwango sawa (kwa kuzingatia hali sawa za awali). Ninashauri ujaribu kujifunza kwa nini hii ni hivyo kwa kutumia "kalamu na masimulizi ya karatasi".

saizi ya mkusanyiko: Unapaswa pia kutambua kuwa mkusanyiko unapaswa kuwa mkubwa wa kutosha kuhifadhi jumla ya vitu vyote kwenye laini ya kuchelewesha ikiwa zote ni nzuri au hasi. Kwa kweli hiyo inamaanisha mkusanyiko unapaswa kuwa aina moja ya data kubwa kuliko vitu vya laini ya kuchelewesha na kusainiwa, ikiwa vitu vya laini ya kuchelewesha vimesainiwa.

hila: Njia za kuchelewesha kwa muda mrefu huchukua kumbukumbu nyingi. Hiyo inaweza kuwa shida haraka. Ikiwa umezuiliwa sana na haujali sana juu ya usahihi, unaweza kukadiria wastani wa kukimbia kwa kuacha kuchelewesha kabisa na kufanya hii badala yake: toa mkusanyiko wa 1 / N * kutoka kwa mkusanyiko na uongeze thamani mpya (kwa mfano wa wastani wa muda mrefu: mkusanyiko = mkusanyiko * 7/8 + Thamani mpya). Njia hii inatoa matokeo yasiyofaa lakini ni njia nzuri ya kuhesabu wastani wa kukimbia unapokuwa na kumbukumbu ndogo.

isimu: "wastani wa wastani / maana" kawaida hutumiwa wakati wa kurejelea wastani wa wakati halisi wakati "wastani wa kusonga / maana" kawaida inamaanisha algorithm inaendeshwa kwa seti ya data tuli kama lahajedwali bora.

Hatua ya 6: Hitimisho

Natumahi kuwa hii ya kufundisha ilikuwa rahisi kutosha kuelewa na kwamba itakusaidia katika miradi yako ya baadaye. Tafadhali jisikie huru kuchapisha maswali kwenye maoni hapa chini ikiwa kuna jambo wazi.

Ilipendekeza: