Aqui usamos um elemento piezoelétrico/buzzer para detectar sons, o que nos permitirá usá-lo como um sensor de batidas à porta. O que se passa aqui é que nos permitimos usar a capacidade dos microprocessadores de ler sinais analógicos via o hardware chamado de conversor analógico-digital. Esses conversores leem um valor de tensão elétrica e transformam-no em um valor codificado digitalmente. No caso das placas Arduino, transformamos a tensão elétrica em um valor entre 0 e 1023, sendo que 0 representa zero volts e 1023, 5 volts, aplicada em uma das seis entradas analógicas disponíveis.
Um elemento piezoelétrico nada mais é do que um dispositivo eletrônico que pode tanto ser usado para tocar notas musicais, como para detectar sons. No exemplo que se segue, ligamos o elemento piezoelétrico ao pino analógico 0, que apresenta-nos a função de ler um valor entre 0 e 5 volts e não somente HIGH ou LOW.
Uma outra coisa a ser lembrada é que esses dispositivos têm polaridade, sendo que normalmente vêm com os seus terminais coloridos de vermelho (+) e preto (-). O terminal vermelho vai ligado à entrada analógica do Arduino e o preto, no GND. Além disso, é necessário conectar um resistor na faixa dos megaohms em paralelo ao elemento piezoelétrico; na foto abaixo, vê-se que conectamos o resistor diretamente nos soquetes do Arduino. Algumas vezes é possível comprar o elemento piezoelétrico sem encapsulamento plástico e, nesse caso, ele terá aparência similar a de um disco metálico com duas perninhas.
O código de exemplo capturará o bater da porta e, caso seja mais intenso que um certo limiar, o Arduino enviará a frase "Toc-toc" para o computador via porta serial. Para visualizar o texto, você pode usar o Arduino serial monitor.
Exemplo de conexão do buzzer/elemento piezoelétrico ao pino analógico 0, com um resistor
/*Toc-toc * por DojoDave <https://www.0j0.org> * * Programa que usa um elemento piezoelétrico como se * fosse um sensor de batidas à porta. * * Basicamente temos que escutar a um pino analógico e * detectar se o sinal ultrapassa um certo limiar. Escreve-se * "Toc-toc" à porta serial nesse caso e altera-se o estado * do LED no pino 13. * * https://www.arduino.cc/en/Tutorial/Knock */ int ledPin = 13; // LED conectado ao pino 13 de controle int knockSensor = 0; // sensor de batidas ligado ao pino analógico 0 byte val = 0; // variável a guardar o valor lido do pino do sensor int statePin = LOW; // variável a guardar o último estado do LED int THRESHOLD = 100; // valor limiar que decide quando o som detectado é uma batida void setup() { pinMode(ledPin, OUTPUT); // declarar o ledPin como saída Serial.begin(9600); // usar a porta serial } void loop() { val = analogRead(knockSensor); // ler o sensor e guardá-lo em "val" if (val >= THRESHOLD) { statePin = !statePin; // mudar o estado de ledPin (este artifício não usa ciclo de execução) digitalWrite(ledPin, statePin); // liga ou desliga o LED Serial.println("Toc-toc"); // envia a frase "Toc-toc" ao computador, seguido por um retorno de linha delay(10); // pequena espera para evitar sobrecarga na saída serial } }