entrada-POST

Bem-vindo a uma nova lição do curso de programação para Makers com Arduino e Protocoder! Nesta entrada do curso, vamos utilizar dois sensores de ultrassons BAT para calcular a distância a que colocamos a mão, e depois, com um pequeno buzzer (ou cigarra), reproduziremos um som.

Lista de materiais

  • ZUM BT-328, placa Arduino ou compatível.
  • 2 sensores de ultrassons Bat
  • 1 módulo Buzzer

Conceitos que vamos aprender

Nesta entrada vamos aprender a utilizar o sensor de ultrassons para calcular a distância em centímetros e utilizaremos a função Tone do Arduino, para emitir sons através do buzzer. Para conectar os sensores de ultrassons BAT, seguiremos as indicações da tabela:

Módulo Bat 1 Módulo Bat 2
VCC VCC VCC
GND GND GND
ECHO Pino 8 Pino 9
TRIGGER Pino 10 Pino 11

Na seguinte imagem, podes ver como se conectam os módulos à placa:

conexion_theremin

O código

No código do Arduino, começamos por declarar as variáveis globais, que neste caso, serão apenas as relativas às conexões dos pinos:

 

 

Depois, inicializamos o programa com a função setup:

 

 

Nesta função, indicamos os pinos que funcionarão como entrada (INPUT), e quais o que funcionarão como saída (OUTPUT). O código da função loop é:

 

 

Em primeiro lugar declaramos a variável local freq_maxima, que indica ao Arduino qual será a frequência máxima a que soará o buzzer. Depois declaramos as variáveis distancia_frequencia e distancia_tempo, que armazenarão os dados da distancia lida pelos sensores de ultrassons, sendo essas distâncias que se utilizarão para modificar a frequência do sonido e o tempo de reprodução de cada “nota”, respectivamente. Para ler a distância, utilizamos a funcão distance, que toma como argumentos, os valores que enviamos do código principal para a função, o número do pino do trigger e echo do sensor de ultrassons. Se quiseres conhecer mais sobre o sensor de ultrassons, podes ver este tutorial da página do Arduino. O código da função distance é:

 

 

Podes ver como esta função chama a função TP_init, à qual voltamos a enviar como argumentos, os dados dos pinos que declarámos na função loop anteriormente. Desta forma, podemos ir enviando dados de uma função para a outra, sem problemas. A função TP_init tem o seguinte código:

 

 

Dentro desta função, alteramos o estado dos pinos, e enviamos vários sinais, de 2 e 10 microsegundos, através do pino Trigger do sensor de ultrassons e depois utilizamos a função pulseIn no pino Echo, para calcular o tempo que demora o pino a alterar o seu valor de cima a baixo. O dito tempo corresponde ao tempo que demorou o impulso a ser recebido, depois de ser enviado. Se quiseres conhecer mais sobre esta função, podes aceder à página de referência do Arduino para a função pulseIn. A função TP_init retorna o valor resultante da função pulseIn (em microsegundos), e dentro da função distance utilizamos o valor em microsegundos que recebemos, para calcular a distância a que se encontra o objecto. Uma vez calculadas as distâncias para os dois sensores de ultrassons, utilizamos a função constrain (que vimos no tutorial anterior) para forçar a que as leituras que realizámos, mantenham-se dentro de certos limites. Não te esqueças de modificar os valores para praticares e aprenderes mais. Uma vez que utilizámos a função constrain, vamos também utilizar a função map (que também vimos no tutorial anterior) para modificar o intervalo dos valores. A variável distancia_tempo, poderia multiplicar o valor por 10, para que a função map não fosse completamente necessária. Por último, fazemos soar o buzzer com o comando tone:

 

 

A função tone é a responsável por reproduzir o tom que soará no buzzer e tem como parâmetros, o pino onde está conectado o buzzer, a frequência e a duração do tom. A seguir, realizamos um delay com a mesma duração do que o tom, para que esse tom se reproduza completamente. Como exercício, podes experimentar modificar os valores da frequência mínima e máxima, as distâncias, modificar a escala utilizada para mapear os valores, e ver o efeito que tem sobre o buzzer. Até à próxima!