Eletrônica digital com Arduino – Buzzer, parte 2

No post anterior dei uma breve explicação de como tocar um som no buzzer com Arduino. Introduzi alguns comandos sem muito detalhamento e agora teremos outros mais, então vou primeiramente falar sobre algumas funções e macros do Arduino.

LOW e HIGH
Utilizamos essas macros para avaliar o estado de um botão, por exemplo, de forma a avaliar se o botão foi apertado ou não, ou ainda para agir de uma forma quando o botão for apertado e de outra quando o botão for liberado.
O botão que utilizaremos tem 4 pernas e é o da imagem abaixo:

Com o botão “espetado” diretamente na protoboard, utilizamos as duas pernas de baixo para alimentação, sendo que no modelo que utilizaremos alimentei a perna inferior esquerda com +3.3v. Na perna inferior da direita coloquei um resistor de 330ohms, que faz uma redução de +/- 5%. Como você poderá reparar na próxima imagem, o dourado fica sempre na saída do fluxo, ou seja, a perna inferior direita do botão recebe a perna do lado laranja do resistor. Na perna do lado dourado colocamos a saída a um terra. Na perna superior direita um fio é ligado ao pino 2 digital, que será tratado como entrada.

INPUT e OUTPUT
Essas macros definem o modo de trabalho dos pinos digitais, que podem receber ou enviar frequências. Para o botão foi utilizado o pino digital 2 como entrada, ou seja, ele receberá o sinal enviado pelo botão. A variável definida para ler o estado do botão é um inteiro chamado EstadoBotao, inicializado com o valor 0.

A variável do botão foi definida como um inteiro Botao com o número do pino. No caso, número 2.
As variáveis podem ser definidas antes do setup(). Dentro do setup, inicializamos o pino do botão:

pinMode(Botao,INPUT);

Nesse caso, fora chamada a função que inicializa um pino do arduino, chamada pinMode, onde foi passado os parâmetros da variável Botao e da macro INPUT.

Para saber o estado do botão é necessário fazer uma leitura constante, pois a qualquer momento o botão pode ser pressionado. Então, cria-se uma variável para armazenar o valor do estado e faz-se a leitura do pino do botão. Agora utiliza-se a variável EstadoBotao:

EstadoBotao = digitalRead(Botao);

O estado LOW e HIGH podem ser avaliados com um if:

if (EstadoBotao == HIGH){
...;
...;
etc;
}

Nesse modelo exemplificado aqui, o botão será utilizado para alimentar uma variável chamada status. Se status for igual a 1, então inicia o buzzer. As frequências serão geradas por um potenciômetro (descrito mais adiante) e o buzzer só emitirá som quando o botão mudar a variável status pra 1. Junto a frequência do potenciômetro há um LED de alto brilho. Ele está sendo alimentado de forma analógica, ou seja, nenhuma inteligência (exceto a minha, obviamente!) e nesse modelo ele não depende do software para receber intervenções em seu brilho – Ou seja, o potenciômetro atuará diretamente sobre o LED mas não diretamente sobre o buzzer.

Vamos agora à última parte da composição desse circuito – o potenciômetro sliding:

No caso do potenciômetro, a filtragem foi feita na entrada com um resistor de 330ohms entre a voltagem e o pino de entrada do potenciômetro, na base esquerda, orientando-se pela imagem anterior. O aterramento está diretamente ligado na perna direita, na base do potenciômetro. No topo há apenas um pino, por onde sairá o sinal da variação do slider. No exemplo a saída está ligada à porta analógica 0.

Na programação desse componente foi necessário uma variável do tipo inteiro para armazenar a porta chamada pinPot e uma variável do tipo int chamada valPot. Agora será utilizada outra função do Arduino, chamada analogRead(). Como citado anteriormente, as variáveis devem ser declaradas antes ou dentro do setup(), enquanto as leituras que devam ser constantes devem ser inseridas na função loop():

valPot = analogRead(pinPot);

E para que esse valor tenha influência sobre a frequência do buzzer, a lógica é simples; substitua o parâmetro frequência da função tone() pela variável valPot!

//gerar tom no pino 13
//frequencia valPot
//duração 800ms
tone(13,valPot,800);
//delay (em ms) para o HW 'respirar'
delay(9);

A imagem completa do circuito resultante é esta:

Se tiver alguma dúvida em relação à ligação dos fios na protoboard, por favor leia este outro post onde falo sobre a protoboard.

Por via de regras, recomendo que sejam feitas primeiramente TODOS os aterramentos, depois os sinais analógicos e digitais, depois uma CONFERÊNCIA do circuito, depois a alimentação e depois OUTRA CONFERÊNCIA. Estando tudo certificado, ligue o cabo USB ao noteboot/pc/netbook.

A programação completa para esse circuito é a seguinte:
int ledPin = 13; //led no pino 13
int Botao = 2; //botao no pino 2
int pinPot = 0; //potenciometro
int valPot = 0;
int status = 0;

int EstadoBotao = 0; //Variavel para ler o status do pushbutton
void setup(){
pinMode(ledPin, OUTPUT); //Pino do led será saída
pinMode(Botao, INPUT); //Pino com botão será entrada
}
void loop(){
valPot = analogRead(pinPot)*5;
EstadoBotao = digitalRead(Botao);
/*novo estado do botão vai ser igual ao que
Arduino ler no pino onde está o botão.
Poderá ser ALTO (HIGH)se o botão estiver
Pressionado, ou BAIXO (LOW),se o botão
estiver solto */

if (EstadoBotao == HIGH){ //Se botão estiver pressionado (HIGH)
if (status == 0){
status = 1;
}
else{
status = 0;
}
//digitalWrite(ledPin, HIGH);// acende o led do pino 13.
}
else{ //se não estiver pressionado
digitalWrite(ledPin, LOW); //deixa o led do pino 13 apagado
}
if (status == 1){
tone(13,valPot,800);
delay(9);
//status = 0;
}
}

Conclusão:
O experimento não produziu faíscas, fumaça ou olores. Ainda positivamente, foi possível até produzir um video mostrando o Arduíno em funcionamento:

P.S.: Esse post foi demorado de escrever, então entenda-se como RC1. Farei posteriormente a correção dos erros ortográficos e acrescentarei nele mesmo qualquer informação mais que julgar necessário.
Boa diversão!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Eletrônica digital com Arduino – Buzzer, parte 2

Deixe uma resposta