Básico - Projeto 32

Acender um led utilizando um disco piezoelétrico

Objetivo

Criar um circuito utilizando um disco piezoelétrico para acender um led.

Disco Piezoelétrico: Um disco piezo funciona quando uma corrente elétrica passa pelo material cerâmico do disco, fazendo com que ele mude de forma e produza um som. O disco também funciona de forma inversa: quando se bate nele ou ele sofre algum tipo de pressão, a força no material provoca a geração de uma corrente elétrica. Para saber mais, leia: https://pt.wikipedia.org/wiki/Piezoeletricidade e Transdutor Piezoelétrico.

Resultado de imagem para disco piezo elétrico com fio

Aplicação

Para fins didáticos e projetos de automação.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos

Comprar

1 Resultado de imagem para protoboard 830v No mínimo utilizar protoboard com 830 pontos
Jumpers Kit cabos ligação macho / macho

Comprar

1  
Led Difuso 5mm LEDs 5mm

Comprar

1

1 LED difuso azul

 

Você poderá utilizar também LEDs de qualquer outra cor ou LEDs de alto brilho 3 ou 5mm nas cores que desejar.

Resistor

Resistor

Comprar

2

1 Resistor de 100Ω (led azul)
  1 Resistores de 1MΩ (piezo)
Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor.

Transdutor Piezoelétrico

Disco Piezoelétrico 27mm com fios

Comprar

1 https://www.vidadesilicio.com.br/media/catalog/product/cache/2/thumbnail/450x450/9df78eab33525d08d6e5fb8d27136e95/v/k/vktech_12pcs_27mm_piezo_discs_with_leads_mic_drum_trigger_acoustic_pickup_cbg_guitar.jpg  
Arduino UNO R3 Arduino UNO Original

Comprar

 

Arduino UNO Similar

Comprar

1 Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

 

Atenção

1) Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

2) Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led. (Obs.: Resistores superiores a 250 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V).

Valor utilizado para o nosso projeto: LED de alto brilho Azul: 100 Ω

3) Para montar o disco piezoelétrico como um sensor é necessário aplicar um resistor de 1MΩ (1 Mega Ohm) em paralelo com e disco e conectá-lo junto a porta analógica do  microcontrolador. A utilização do resistor serve para ajustar o circuito para que possamos obter uma tensão mensurável no Arduino.

 Veja a foto abaixo que mostra como montamos o nosso sensor piezoelétrico:

4) A montagem abaixo foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

Calibrando do sensor piezoelétrico

Antes de definirmos o valor de referência para acender o led precisamos conhecer os valores lidos pelo sensor sem toque, com toque e com pressão. Copie o código abaixo e cole no IDE do Arduino.

/*******************************************************************************
*
*               Calibrar sensor piezoelétrico
*                   http://squids.com.br/arduino
*
*******************************************************************************/
const int sensorPiezo = 5;
int ValorLido = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
ValorLido = analogRead(sensorPiezo);
Serial.print("Valor lido pelo sensor = ");
Serial.println(ValorLido);
delay(100);
}

 1. Faça o upload para o microcontrolador e abra o Monitor Serial para fazer a leitura do sensor piezoelétrico.

2. Faça primeiro a leitura sem tocar ou pressionar o sensor. Veja abaixo o nosso exemplo:

Observe que no nosso exemplo encontramos o valor zero, quando o sensor não é tocado.

3. Dê uma batida suave (toque) com o dedo sobre o sensor. Faça a leitura para verificar o valor do sensor quando tocado:

Observe no nosso exemplo que tivemos uma alteração na leitura do sensor de 140 até 285.

4. Faça agora uma nova leitura apenas pressionando o sensor com o dedo:

Observe que no nosso exemplo os valores variam de 146 a 1023.

5. Agora já sabemos a grandeza de valores para o sensor recebendo batida (toque) ou aperto (pressão), vamos definir um valor de referência que será o limiar para acender o LED. Vamos utilizar no nosso exemplo 120 como valor de referência. Você poderá ajustar esse valor, dependendo do tipo, tamanho e do fabricante do piezo utilizado no seu projeto. Lembre-se, um valor menor é mais sensível ao toque. A seguir, acesse o sketch do projeto.

Código do Projeto

Faça o dowload e abra o arquivo projeto32.ino no IDE do Arduino:

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Projeto 32 – Acender Led com um disco piezoelétrico
*                   http://squids.com.br/arduino
*
*******************************************************************************/
 
const int piezoPin = A5; // Piezo no pino analógico 5
const int ledPin = 3; // LED no pino digital 3 (PWM)

int batida = 120; //valor do sensor antes da ativação
int sensorValor = 0; // Variável para armzazenar o valor lido no piezo
float brilhoLed = 0; //Brilho do Led

void setup() {
pinMode(ledPin, OUTPUT); // Define o ledPin como OUTPUT
// Pisca o LED duas vezes, para mostrar que o programa iniciou
digitalWrite(ledPin, HIGH); 
delay(150); 
digitalWrite(ledPin, LOW); 
delay(150);
// Pisca a segunda vez
digitalWrite(ledPin, HIGH); 
delay(150); 
digitalWrite(ledPin, LOW); 
delay(150);
}

void loop() {
sensorValor = analogRead(piezoPin); // Lê o valor do sensor (piezo)
if (sensorValor >= batida) { // Se uma batida for detectada, defina o brilho como máximo
brilhoLed = 255;
}
analogWrite(ledPin, int(brilhoLed) ); // Mostra o valor de brilho no LED
brilhoLed = brilhoLed - 0.05; // Apaga o LED lentamente 
if (brilhoLed <= 0) { 
brilhoLed = 0;}
// Certifica-se de que o valor não será menor que zero
} 

Depois, faça a verificação e o upload para o microcontrolador.

Obs.: Se necessário, ajuste o valor de referência no código acima. No nosso exemplo utilizamos 120 para a variável batida.

Vídeo

Como o projeto deve funcionar

1. Quando você rodar o programa, o Led irá piscar rapidamente duas vezes para indicar que o programa iniciou.

2. Se você bater ou pressionar o sensor piezoelétrico o LED acenderá e depois se apagará lentamente.

Obs.: Note que o valor de limiar (variável batida) utilizado no código foi definido para o disco específico utilizado na construção do projeto do nosso exemplo. Se necessário, ajuste o valor inicial da batida de acordo com o piezo utilizado, fazendo a calibragem do sensor. Um valor menor é mais sensível, e um maior, menos sensível.

Explicando o Código do Projeto

 1. Primeiro declaramos as constantes e as variáveis do projeto.

1.1. Observe que utilizamos as constantes e variáveis tipo "int" e "float". Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:

Tipo Valores Válidos para Variáveis e Constantes
char letras e símbolos: 'a', 'b', 'H', '^', '*','1','0'
int de -32767 até 32767 (apenas números inteiros)
float de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula)
double de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão

1.2. A constante piezoPin se refere ao sensor piezoelétrico que deverá estar conectado à porta analógica A5 do microcontrolador Arduino.

1.3. A constante ledPin se refere ao Led de alto brilho que deverá estar conectado à porta 3 (PWM) do microcontrolador Arduino.

1.4. Declaramos a variável batida como 120 para o nosso projeto. Este é o valor de referência limiar para acender o led.

Atenção: Você poderá ajustar este valor para o seu projeto em função do sensor utilizado. Lembre-se quanto menor o valor de referência, mais sensível será a resposta do sensor.

1.5. Declaramos a variável inteira sensorValor como 0 (zero).

1.6. Declaramos a variável float brilhoLed.

2. Através da estrutura void setup(), definimos:

2.2. Define-se a constante ledPin como saída do controlador Arduino (OUTPUT) conectada à porta digital 3.

2.3. Criamos uma rotina para piscar o Led duas vezes, informando que o programa iniciou.

2.3.1. Através da função digitalWrite(ledPin, HIGH) dizemos ao microcontrolador para acender o Led.

2.3.2. Através da função delay(150) criamos uma pequena pausa de 150ms, onde o led permanecerá ligado.

2.3.3. Através da função digitalWrite(ledPin, LOW) o led será apagado.

2.3.4. Através da função delay(150) esperamos mais 150ms, agora com o led apagado.

2.3.5. Repetimos mais uma vez a rotina para acender e apagar o led.

3. Através da estrutura void loop(), obtemos:

3.1. Através da função analogRead(piezoPin) fazemos a leitura analógica do sensor piezoelétrico e definimos o valor da variável sensorValor.

Obs.: A variável sensorValor será portanto igual aos valores lidos diretamente pela porta analógica onde está conectado o sensor. Esta leitura é feita através da função analogRead() que faz a conversão de analógico para digital onde é utilizado o  ADC (Analog to Digital Converter - conversor analógico para digital) sem tratamento nenhum. A variável sensorValor foi definida localmente como tipo inteiro (int), e portanto, vai de 0 a 1023, ou seja, possui 210 = 1024 valores inteiros (referente à resolução de 10 bits do ADC para controladores Arduino UNO, Mega e Leonardo). Assim, quando o sensor não estiver recebendo toque ou pressão, o valor lido será zero.

3.2. Utilizamos a estrutura condicional If (sensorValor >= batida). Portanto, se a variável sensorValor for mairo ou igual a 120 (número que utilizamos como referência) o led de alto brilho acenderá,  conforme explicação a seguir:

3.2.1. Definimos a variável local brilhoLed como 255, ou seja, valor máximo quando utilizamos uma porta PWM (100%). Obs.: Conceito de PWM ((Pulse Width Modulation) já foi bastante detalhado em projetos anteriores.

3.2.2. Através da função analogWrite(ledPin, int(brilhoLed) fazemos o led acender com o brilho máximo de 255. Observe que na função utilizaremos a variável brilhoLeed como inteiro (int), pois não são permitidos valores decimais.

3.2.2. Vamos reduzindo o valor da variável brilhoLed em 0,05, fazendo com que a led se apague lentamente, através da estrutura void loop().

3.3.3. Se o valor da variável brilhoLed for menor ou igual a zero, o led permanecerá apagado, pois a variável se manterá igual a zero (brilho zero).

3.3. O led permanecerá apagado até ocorrer um novo toque ou pressão sobre o sensor, que altere seu valor acima do valor de referência (120 no nosso projeto).

O anúncio abaixo ajuda a manter o Squids Arduino funcionando