terça-feira, setembro 29, 2020

Módulo Sensor de Vibração (com sensor SW-420)

Continuando a esvaziar o meu backlog de sensores, vamos ver outro sensor simples, o de vibração.


Existem vários tipos de detectores de vibração, este módulo usa o SW-420 que é uma opção de baixo custo mas com boa sensibilidade e omnidirecional. A figura abaixo é o mais próximo que encontrei de um datasheet:


Pelo que consegui entender, a peça em vermelho (roller) conecta os dois terminais do sensor; à medida que o sensor é movido ou vibrado a conexão é momentaneamente interrompida.

No módulo, estas conexões e desconexões controlam a descarga e carga de um capacitor. Desta forma a tensão no capacitor indica o quanto o sensor está sendo vibrado. Esta tensão é comparada com uma referência definida por um potenciômetro:

O resultado final é uma saída digital que muda de estado quando o sensor detecta uma vibração acima do limite definido através do potenciômetro. Como indicado acima, o módulo possui dois LEDs, um para indicar que está alimentado outro para indicar que foi detectada vibração.

No módulo que eu usei a saída está normalmente em nível alto (e o LED aceso) e passa para nível baixo (e LED apagado) quando uma vibração é detectada. Pelo que vi na internet existem versões com a saída invertida. As referências que eu encontrei falam em operação de 3,3 a 5V, mas não vejo motivo para não funcionar com3V.

Para testar o sensor vamos usar uma montagem minimalista com um Arduino Nano, um buzzer e o sensor (quem acompanha o blog vai perceber que usei a mesma montagem do teste do sensor de chama):

O nosso software simplesmente reproduzir no buzzer a saída do sensor:

/**
 * Teste do Sensor de Vibração
 * DQ - 21/09/20
 * https://dqsoft.blogspot.com
 */

// Conexões
const int pinBuzzer = 3;
const int pinSensor = 4;

// Iniciação
void setup() {
  Serial.begin(115200);
  pinMode (pinBuzzer, OUTPUT);
  digitalWrite (pinBuzzer, LOW);
  pinMode (pinSensor, INPUT);
}

// Laco eterno
void loop() {
  // Replica a saída do sensor no buzzer
  digitalWrite (pinBuzzer, digitalRead(pinSensor));
  // Dá um tempo entre as leituras
  delay (100);
}

Aí é só ajustar o potenciômetro para o nível de vibração a partir do qual queremos que o buzzer seja acionado.

Nenhum comentário: