Bobinas e amplificadores operacionais permitem que você crie circuitos muito interessantes, como o famoso filtros de frequência. Esses filtros têm uma infinidade de aplicações na indústria eletrônica. Como é o caso com o filtro de passagem baixa, o filtro de passagem alta, etc. São especialmente interessantes para determinadas aplicações sonoras, podendo filtrar ruídos, ou sons mais ou menos graves de acordo com a sua frequência. Portanto, eles são muito úteis.
Se você quiser saber mais sobre filtro passa-baixo, e outros filtros, e como eles podem ajudá-lo em seus projetos com Arduino ou DIY, eu encorajo você a continuar lendo ...
Filtros elétricos
Como o próprio nome sugere, um filtro é um circuito composto por uma série de bobinas e capacitores, e até mesmo alguns amplificadores operacionais, para fins de deixando apenas certas partes de uma frequência passar. Ou seja, de todo o espectro de frequências disponíveis, eles filtrarão uma ou mais partes para evitar que passem.
Se por exemplo Estamos falando do espectro audível pelo ser humano, que vai de 20 Hz a 20 Khz, com filtros que você poderia eliminar o mais baixo, ou o mais alto, para deixar passar apenas os sons mais ou menos agudos / graves. É algo que muitos sistemas de gravação ou reprodução de áudio usam, como microfones, alto-falantes, etc.
Tipo
Conforme tipo de filtro, ou melhor, dependendo da frequência que bloqueiam ou deixam passar, existem diferentes tipos de circuitos que são:
- Filtro passa-baixo: são assim chamados porque são aqueles filtros que permitem a passagem das frequências mais baixas e suprimem ou reduzem a passagem das frequências mais altas. Eles consistem em uma ou mais bobinas (em série com a fonte de alimentação e a carga) e um ou dois capacitores shunt com a fonte de alimentação e a carga. Lembre-se que por carga entende-se o dispositivo conectado ao filtro e que coleta a saída do filtro ... Dentro desses filtros também existem variantes, como L, T e π.
- Filtro passa-alto: o filtro passa-alto é o oposto do passa-baixo, neste caso, o que vai filtrar ou limitar é a passagem de baixa frequência, deixando passar as altas frequências. Nisto são investidos os elementos eletrônicos que o compõem. Ou seja, aqui os capacitores serão aqueles em série com a fonte de alimentação e a carga, enquanto as bobinas serão desviadas. Existem também os mesmos subtipos que no caso dos filtros de passagem baixa.
- Filtro passa-banda: Este tipo de filtro exerce dois blocos de taxa de passagem de banda de frequência. Ou seja, atuam tanto como filtro passa-baixas quanto como passa-altas, opondo-se à passagem das frequências mais baixas e também das mais altas ao mesmo tempo. Em outras palavras, ele permite apenas a passagem das frequências médias.
- Filtro de banda: é exatamente o oposto do anterior, o que faz é que filtra a passagem das frequências médias e só deixa passar as frequências mais baixas e mais altas.
Lembre-se disso indutâncias eles deixam passar baixas frequências e se opõem à passagem de altas frequências. Em vez de, capacitores eles deixam passar altas frequências e se opõem à passagem de baixas frequências.
Eu gostaria de adicionar esses filtros em um nível prático eles não são perfeitos, e eles sempre podem passar algumas frequências baixas ou altas que você deve bloquear. No entanto, eles fazem seu trabalho muito bem para a maioria das aplicações.
E, por fim, gostaria de esclarecer outra coisa: você certamente já ouviu falar sobre o Filtros EMA e DEMA. Os filtros EMA (Exponential Moving Average) permitem implementar este tipo de filtro de forma simples em dispositivos embarcados. Já o DEMA (Double Exponential Moving Average) tem uma resposta mais rápida que o EMA, mantendo uma boa supressão do ruído que se deseja evitar.
Fator alfa
El fator alfa, que você verá que aparece nos códigos IDE do Arduino na próxima seção, é o parâmetro que condiciona o comportamento do filtro exponencial. Está relacionado à frequência de corte:
- Alpha = 1: que fornece um sinal para a saída não filtrada.
- Alfa = 0: o valor do filtro será sempre 0.
- Alpha = x: outros valores podem obter outras alterações no filtro EMA. Se você diminuir o fator Alfa, suavizará mais o sinal de frequência obtido e o tempo de resposta do sistema também aumentará (leva mais tempo para se estabilizar).
Filtros e Arduino
Você deve saber que não é necessário criar o circuito filtro de passagem alta ou filtro de passagem baixa para conectá-lo à sua placa Arduino e trabalhar com ele. Embora você possa experimentar e criar esses tipos de filtros simples, também pode testar como um EMA funcionaria apenas com a placa Arduino e um código simples para o IDE do Arduino. Só precisa de ver como se encarrega de filtrar algumas frequências (neste caso a acção é simulada e alguns inteiros / flutuantes são simplesmente filtrados simulando o que eu faria filtro na verdade).
Aqui estão alguns exemplos de código que você pode usar para praticar.
Exemplo de filtro digital simples no Arduino do tipo passe baixo:
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);
Exemplo de código para o tipo Arduino passo alto:
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 }
Exemplo de código Arduino passe de banda:
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); }
Exemplo de código Arduino para banda:
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); }
Aconselho você a modificar e experimentar esses códigos. O resultado você pode veja muito graficamente graças ao Serial Plotter do Arduino IDE ... Lembre-se que se você tiver dúvidas sobre a programação do Arduino ou como usar o IDE, você pode baixar o curso HwLibre grátis em PDF.