Shaandhaynta baasaboorka hooseeya: wax kasta oo aad u baahan tahay inaad ka ogaato wareeggan

wareeg filter hoose

Gariiradda iyo amps-ka ayaa kuu oggolaanaya inaad abuurto wareegtooyin aad u xiiso badan, sida kuwa caanka ah miirayaasha soo noqnoqda. Miirayaashaani waxay leeyihiin codsiyo badan oo ku saabsan warshadaha elektarooniga. Sida ay tahay kiisaska miiraha hooseeya, miiraha marinka sare, iwm. Waxay si gaar ah ugu xiiso qabaan codadka codadka qaarkood, iyagoo awooda inay shaandheeyaan dhawaaqyada, ama codad badan ama ka yar oo halis ah iyadoo loo eegayo inta jeer ee ay yihiin. Sidaa darteed, waa kuwo aad waxtar u leh.

Hadaad rabto inaad waxbadan ka ogaato filter hooseeya, iyo miirayaasha kale, iyo sida ay kaaga caawin karaan mashaariicdaada Arduino ama DIY, waxaan kugu dhiirigelinayaa inaad sii wadato akhriska ...

Miirayaasha korontada

Sida magaceedaba ka muuqata, miiraa waa wareeg oo ka kooban taxane taxane ah iyo karti-qaadayaal, iyo xitaa qaar ka mid ah qalabka wax lagu kordhiyo, ujeeddadiisuna tahay daayo kaliya qaybo gaar ah oo ka mid ah soo noqnoqda. Taasi waa, dhammaan noocyada mowjadaha la heli karo, waxay shaandheyn doonaan mid ama in ka badan qaybood si looga hortago inay maraan.

Hadday tahay ejemplo Waxaan ka hadleynaa muuqaalka bini-aadamka ee la maqli karo, kaas oo ka socda 20 Hz ilaa 20 Khz, oo leh miirayaasha waxaad ka takhalusi kartaa kan ugu hooseeya, ama kan ugu sarreeya, si kaliya loogu oggolaado in ka badan ama ka yar seddexleyda / baaska la maqlo. Waa wax ay adeegsadaan duubitaanno badan oo maqal ama nidaamyo taran ah, sida makarafoonnada, ku hadlayaasha, iwm.

Noocyada

Sida laga soo xigtay nooca filter, ama halkii, waxay kuxirantahay inta jeer ee ay xayiraan ama midka ay sii daayaan, waxaa jira noocyo kaladuwan oo wareegyo ah kuwaas oo kala ah:

  • Miiraha gudbinta hooseeya: waxaa loogu yeeraa maxaa yeelay waa kuwa shaandheeyeyaasha ah ee u ogolaanaya mowjadaha ugu hooseeya inay dhaafaan oo ay xakameeyaan ama yareeyaan marinka mowjadaha sare. Waxay ka kooban yihiin hal ama dhowr xarig (oo taxane ah korontada iyo culeyska), iyo hal ama labo shunt capacitors leh koronto iyo xamuul. Xusuusnow in culeyska loo fahmay inuu yahay aaladda ku xiran miiraha oo aruuriya wax soo saarka miiraha ... Miirayaashaan dhexdooda waxaa sidoo kale ku yaal noocyo, sida L, T iyo π.
  • Filter filter sare: miiraha marinka sare waa kan ka soo horjeedka hooseeya, xaaladdan, waxa shaandhayn doona ama xaddidi doona waa ka gudbidda soo noqnoqota ee hooseysa, oo u oggolaanaysa in mawjadaha sare ay dhaafaan. Tan dhexdeeda walxaha elektaroonigga ah ee ka kooban ayaa lagu maalgeliyaa. Taasi waa, halkan capacitors-ku waxay noqon doonaan kuwa taxanahan leh korontada iyo culeyska, halka gariiradda la xirayo. Waxaa sidoo kale jira nooc hoosaadyo la mid ah kiiska miirayaasha gudbinta hooseeya.
  • Fandhax marin baandho: Miiraha noocan ah waxay soo bandhigaan laba baloog oo isku celcelis ah. Taasi waa, waxay u dhaqmaan labadaba sida shaandhada hoose iyo sida shaandhada sare, iyagoo ka soo horjeeda marinka ugu hooseeya iyo sidoo kale kan ugu sarreeya isla waqtigaas. Si kale haddii loo dhigo, waxay kaliya u oggolaaneysaa mawjadaha dhexe inay dhex maraan.
  • Miiraha kooxda: waxay dhab ahaan ka soo horjeeddaa tii hore, waxa ay sameyso ayaa ah inay kala shaandheyso marinka mowjadaha bartamaha oo kaliya waxay soo dejineysaa inta ugu hooseysa iyo kuwa ugu sarreeya.

Xusuusnow taas inductances waxay ku sii daayaan mowjadaha hoose oo ay ka soo horjeedaan marinka mowjadaha sare. Halkii, awoodaha waxay ku sii daayaan mowjadaha sare oo ay ka soo horjeedaan marinka mowjadaha hoose.

Waxaan jeclaan lahaa inaan ku daro miirayaashaas heer wax ku ool ah iyagu ma qummana, oo waxay had iyo jeer ku sii dayn karaan xoogaa mowjaddo hooseeya ama sarreeya oo ay tahay inaad xirto. Si kastaba ha noqotee, shaqadooda si wanaagsan ayey u qabtaan codsiyada badankood.

Ugu dambeyntiina, waxaan sidoo kale jeclaan lahaa inaan caddeeyo wax kale, oo taasi waa inaad hubaal ka maqasheen arrinta Miirayaasha EMA iyo DEMA. EMA (Average Moving Average) filtarrada ayaa kuu oggolaanaya inaad ku hirgeliso noocan miiraha hab fudud oo ah aalado gundhig ah. Marka laga hadlayo DEMA (Celceliska Dhaqdhaqaaqa Dhaqdhaqaaqa Laba-jibbaaran), waxay leeyihiin jawaab ka dhakhso badan EMA, iyagoo ilaalinaya xakamaynta wanaagsan ee buuqa aad rabto inaad iska ilaaliso.

Cunsurka Alpha

El isirka alfa, taas oo aad arki doonto taas oo ka muuqata Arduino IDE codes-ka qaybta xigta, waa cabbirka cabbiraya habdhaqanka shaandhada jibbaaranaha. Waxay la xiriirtaa soo noqnoqoshada gooynta:

  • Alfa = 1: taasi waxay siinaysaa calaamadda wax soo saarka aan la shaandheyn.
  • Alpha = 0: qiimaha miiraha ayaa had iyo jeer noqon doona 0.
  • Alpha = x: qiyamka kale waxay ku heli karaan isbeddelo kale shaandhada EMA. Haddii aad yareyso cunsurka 'Alpha', waxaad jilcin doontaa calaamadaha soo noqnoqda ee aad heshay in ka badan, waqtiga jawaabta ee nidaamkuna sidoo kale waa la kordhiyaa (waxay qaadataa in ka badan xasilinta).

Shaandheeyeyaasha iyo Arduino

Baska Arduino I2C

Isticmaalka miirayaashaan, adeegsiga maktabad loogu talagalay Arduino IDE waxay shaqadaada ka dhigaysaa mid aad u fudud. Waad isticmaali kartaa isku mid.

Waa inaad ogaataa inaysan muhiim ahayn in la sameeyo wareegga filter sare ama miiraha pass hooseeya si aad ugu xirto guddiga Arduino oo aad ula shaqeyso. In kasta oo aad tijaabin karto oo aad abuuri karto noocyadan shaandheeyeyaasha fudud, haddana waxaad sidoo kale tijaabin kartaa sida EMA uu ula shaqeyn lahaa kaliya guddiga Arduino iyo lambar fudud oo loogu talagalay Arduino IDE Waa waxa kaliya ee aad u baahan tahay inaad aragto sida ay mas'uul uga tahay kala shaandheynta mowjadaha qaar (xaaladdan oo kale ficil ahaan waa loo ekaysiinayaa oo qaar ka mid ah tiirarka / sabeynta ayaa si fudud loo sifeeyay jilitaanka wixii aan sameyn lahaa shaandhee dhab ahaan).

Waa kuwan tusaalooyin koodh ah oo aad ku adeegsan karto.

Tusaale shaandhada dhijitaalka ah ee fudud ee Arduino nooca ah baas hooseeya:

float   lowpass_prev_out[LOWPASS_ANALOG_PIN_AMT], 
         lowpass_cur_out[LOWPASS_ANALOG_PIN_AMT];
int        lowpass_input[LOWPASS_ANALOG_PIN_AMT];
 
 
int adcsample_and_lowpass(int pin, int sample_rate, int samples, float alpha, char use_previous) {
  // pin:            Pin analógico de Arduino usado
  // sample_rate:    El ratio adecuado
  // samples:        Samples
  // alpha:          El factor Alpha para el filtro paso bajo
  // use_previous:   Si es true se sigue ajustando hasta el valor más reciente. 
 
  float one_minus_alpha = 1.0-alpha;
  int micro_delay=max(100, (1000000/sample_rate) - 160);  
  if (!use_previous) { 
    lowpass_input[pin] = analogRead(pin);
    lowpass_prev_out[pin]=lowpass_input[pin]; 
  }
  int i;
  for (i=samples;i>0;i--) {
    delayMicroseconds(micro_delay);
    lowpass_input[pin] = analogRead(pin);
    lowpass_cur_out[pin] = alpha*lowpass_input[pin] + one_minus_alpha*lowpass_prev_out[pin];
    lowpass_prev_out[pin]=lowpass_cur_out[pin];
  }
  return lowpass_cur_out[pin];
}
 
int resulting_value;
 
void setup() {
   Serial.begin(9600);
   resulting_value = adcsample_and_lowpass(0, 1000, 300, 0.015, false); 
}
 
void loop() {
   resulting_value = adcsample_and_lowpass(0, 1000, 150, 0.015, true);  
   Serial.println(resulting_value);

Tusaalaha nambarka nooca Arduino Baas dheer:

int sensorPin = 0;    //pin usado para el ADC
int sensorValue = 0;  //Inicia sensor variable equivalente a EMA Y
float EMA_a = 0.3;    //Inicialización del EMA Alpha
int EMA_S = 0;        //Iniciación del EMA s
int highpass = 0;
 
void setup(){
  Serial.begin(115200);              
  EMA_S = analogRead(sensorPin);     
}
 
void loop(){
  sensorValue = analogRead(sensorPin);              //Lee el valor del sensor ADC
  EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S);  //Ejecuta el filtro EMA
  highpass = sensorValue - EMA_S;                   //Calcula la seña alta
 
  Serial.println(highpass);
   
  delay(20);                                //Espera 20ms
}

Tusaalaha koodhka Arduino baaska la mariyo:

int sensorPin = 0;        //Pin para el ADC
int sensorValue = 0;      //Inicia la variable del sensor, equivale a EMA Y
 
float EMA_a_low = 0.3;    //Inicia EMA Alpha
float EMA_a_high = 0.5;
 
int EMA_S_low = 0;        //Inicia EMA S
int EMA_S_high = 0;
 
int highpass = 0;
int bandpass = 0;
 
void setup(){
  Serial.begin(115200);                   
   
  EMA_S_low = analogRead(sensorPin);      
  EMA_S_high = analogRead(sensorPin);
}
 
void loop(){
  sensorValue = analogRead(sensorPin);    //Lee el valor del sensor ADC
   
  EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low);  //Ejecuta EMA
  EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high);
   
  highpass = sensorValue - EMA_S_low;     
  bandpass = EMA_S_high - EMA_S_low;     
 
  Serial.print(highpass);
  Serial.print(" ");
  Serial.println(bandpass);
   
  delay(20);                              
}

Tusaalaha koodhka Arduino kooxda:

int sensorPin = 0;          //Pin usado para el ADC
int sensorValue = 0;        //Inicio para EMA Y
 
float EMA_a_low = 0.05;     //Inicio de EMA alpha 
float EMA_a_high = 0.4;
 
int EMA_S_low = 0;          //Inicia EMA S
int EMA_S_high = 0;
 
int highpass = 0;
int bandpass = 0;
int bandstop = 0;
 
void setup(){
  Serial.begin(115200);                     
   
  EMA_S_low = analogRead(sensorPin);        
  EMA_S_high = analogRead(sensorPin);
}
 
void loop(){
  sensorValue = analogRead(sensorPin);      //Lee el valor del sensor ADC
   
  EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low);          //Ejecuta EMA
  EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high);
   
  bandpass = EMA_S_high - EMA_S_low;       
 
  bandstop = sensorValue - bandpass;        
 
  Serial.print(sensorValue);
  Serial.print(" ");
  Serial.print(EMA_S_low);
  Serial.print(" ");
  Serial.println(bandstop);
   
  delay(20);                                
}

Xusuusnow in ADC ay tahay beddelka Arduino Analog Dijital ah. Isticmaal xaddiga 0-5v, oo u qaybinaya kala-duwanaanta 0-1023. Haddii qiimuhu yahay 0v, waxaa la qaadayaa qiimaha dhijitaalka ah ee 0, haddii uu yahay 5vna, 1023 ayaa loo qaadan doonaa sida qiimaha calaamadaha, 1v wuxuu noqon karaa 204m, 2v wuxuu noqon karaa 408, iwm.

Waxaan kugula talinayaa inaad wax ka beddesho oo aad tijaabiso xeerarkan. Natiijada waad awoodi kartaa muuqaal ahaan aad u eeg mahadsanid Serlot Plotter of Arduino IDE… Xusuusnow haddii aad su'aalo ka qabtid barnaamijka Arduino ama sida loo isticmaalo IDE, waad soo dejisan kartaa koorso HwLibre bilaash ah oo PDF ah.


Noqo kuwa ugu horreeya ee faallo bixiya

Ka tag faalladaada

cinwaanka email aan la daabacin doonaa. Beeraha loo baahan yahay waxaa lagu calaamadeeyay la *

*

*

  1. Masuul ka ah xogta: Miguel Ángel Gatón
  2. Ujeedada xogta: Xakamaynta SPAM, maaraynta faallooyinka.
  3. Sharci: Oggolaanshahaaga
  4. Isgaarsiinta xogta: Xogta looma gudbin doono dhinacyada saddexaad marka laga reebo waajibaadka sharciga ah.
  5. Kaydinta xogta: Macluumaadka ay martigelisay Shabakadaha Occentus (EU)
  6. Xuquuqda: Waqti kasta oo aad xadidi karto, soo ceshan karto oo tirtiri karto macluumaadkaaga.