Após a construção do circuito vamos passar à programação do mesmo.
Tendo como base as duas aulas anteriores, aula 16 e 17, já sabemos que vamos precisar de incluir a biblioteca <Servo.h>, que nos vai permitir trabalhar com o servo, e definir algumas variáveis:
No void setup() identificamos o pinMode de cada uma dos pinos que estamos a utilizar no arduíno e inicializamos o monitor de série para podermos monitorizar o nosso algoritmo.
No void loop(), utilizando o sensor ultrasonic, vamos medir o tempo que demora a executar um pulso, isto é, o tempo que a onda demora a atingir o objeto e regressar ao sensor:
Tendo o tempo do pulso, em microssegundos , convertemo-lo em horas para em seguida podermos calcular a distância a que o objeto se encontra:
Neste momento, vamos deixar o nosso sensor ultrasonic de parte e vamos começar a pensar como vamos pegar na distância encontrada e a vamos utilizar no servo.
Como sabemos da aula 16, um servo tem teoricamente um 'curso' entre 0 e 180 graus. No entanto, nunca chega a 0º nem a 180º. Assim, para este projeto, vamos criar uma barreira inicial de 30º de partida e de chegada, isto quer dizer que o nosso servo irá apenas trabalhar entre 30 e 150º.
Para efetuar estes cálculos vamos novamente utilizar o gráfico que aprendemos a construir nas últimas aulas:
Agora torna-se fácil calcular o ângulo do servo.
Alguns de vocês devem estar a perguntar o porquê de 37º, ponto inicial, e 143º, ponto final?
Muito bem, a razão é simples. Visto que cada um dos valores lidos vai ter um ângulo entre 0 e 15º, vamos colocar o apontador do servo no meio. Eu defini esse meio como sendo 7º. Daí os 37º (30º ponto de partida + 7º para o meio do valor).
Voltemos ao nosso algoritmo. Para calcular o ângulo usamos a seguinte instrução:
Agora que temos o projeto finalizado, podemos dar alguns retoques, isto é, vamos acrescentar um par de LED's, um verde e um vermelho, para indicar se a distância está dentro dos parâmetros que podem ser considerados no projeto ou não. Queremos dizer com isto que se a distância for superior a 7 polegadas irá sair da escala que preparamos, por este motivo esta não pode ser medida. Nesta situação o LED vermelho deverá acender, caso contrário estará ligado o LED verde.
Vamos ver o circuito a utilizar:
Para dar resposta a todo este problema teremos as seguintes linhas de código:
Finalizamos aqui a nossa aula utilizando servos e sensores de distância. Espero que tenham gostado e cá vos espero na próxima aula.
Até lá, um abraço...