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 com Arduino.
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.

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 |
1 |
 |
No mínimo utilizar protoboard com 830 pontos |
Jumpers |
Kit cabos ligação macho / macho |
1 |
 |
|
Led Difuso 5mm |
LEDs 5mm |
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
|
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.
|
Transdutor Piezoelétrico |
Disco Piezoelétrico 27mm com fios
|
1 |
 |
|
Arduino UNO R3 |
Arduino UNO |
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.

1.1. Portanto, faça a conexão do Arduino no terminal positivo (anodo) e o GND no terminal negativo (catodo) do led.
1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.
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 e Leds ligados em série e em paralelo.
2.1. 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.

3.1. 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.


Calibrando o 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:

2.1. 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:

3.1. 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:

4.1. 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 (Sketch)
Faça o dowload e abra o arquivo projeto32.ino no IDE do Arduino: DOWNLOAD - projeto32.ino
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.
ATENÇÃO: 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
Comentários