quinta-feira, 23 de abril de 2015

O sensor de ultrassons SR04 e programação em S4A

O SR04 é dos sensores de ultrassons mais comuns para pequenos projetos. Permite a medida de distâncias entre 2 cm e 4 m com um ângulo de sensibilidade de 15º. A análise da respetiva datasheet, deixou-me bastante confiante e achei eu que planear um pequeno trabalho com este sensor, arduíno e S4A ia ser canja. Toda a gente sabe que a ignorância é muito atrevida...

Este sensor tem 4 pinos, dois para a alimentação (Vcc e GND), um para o trigger (o "disparo" de um sinal) e o restante para receber o som refletido (o eco).


O modo de funcionamento é simples: o envio de um impulso de 10 us (10^-6 s) para o pino do Trigger, resulta na emissão por parte do SR04 de um ciclo de 8 impulsos de ultrassons na gama dos 40 kHz. Nesse momento, o SR04 ativa o pino Echo para 5V que só voltará a 0V no momento em que receber o eco do sinal enviado. Eis o esquema temporal:



Sabendo que o som tem uma velocidade média de 340 m/s, é possível medir a distância que o som percorreu entre ter sido emitido e rececionado de novo. A distância ao obstáculo será metade desse valor.

Continhas, então: d(obstáculo) = d(percorrida pelo som)/2
                             d(obstáculo) = v(som)*tempo(echo)/2

Como vamos medir o tempo do impulso em us e a distância ao obstáculo em cm, há que converter a velocidade do som em cm/us: 340 m/s = 0,034 cm/us.

Assim, d(obstáculo) = 0,017*tempo(echo) ,  tempo(echo) medido em us; d(obstáculo) medido em cm.

Assim..o que poderia correr mal? Liguei o Trigger ao pin13, o Echo à entrada 2 e...nada!!! Por mais impulsos de 10 us que enviasse, não detetava nada na entrada 2. Uma pesquisa mais atenta relativamente à comunicação entre o arduino e o S4A revelou-me que o S4A interage com o arduino atualizando os estados dos atuadores e dos sensores a cada...75 ms! Valor impossível de conciliar com sinais de 10 us!

A solução passou por alterar o firmware que o arduino disponibiliza. Para isso tive a ajuda de um familiar próximo. A ideia foi alterar o mínimo possível o firmware original. Reservámos para o funcionamento do sensor os pinos D13 e A05. O pino D13 passou a funcionar como entrada e saída, o A05 devolve o valor da distância em cm.
Foi gerado um ciclo, que se repete de meio em meio segundo, em que o pino D13, inicialmente uma saída, envia um impulso de 10us. Passa então a ser definido como entrada e lê a duração do impulso do pino Echo. Este tempo é multiplicado pelo valor de 0,017, como explicado acima, e enviado para o pino A05.

O firmware realizado está disponível no seguinte endereço: http://densare.pt/files/zip/S4AFirmware16_SR04.zip

NOTA IMPORTANTE: O firmware disponibilizado só funciona corretamente com o sensor SR04 ligado à entrada 13. Sem o sensor devidamente ligado, o firmware fica à espera de um dado indefinidamente e em ambiente S4A a placa surge como não reconhecida.

Deixo então a minha proposta de trabalho para envolver o SR04 em circuitos programados através de Scratch...


...o circuito esquemático do último exercício proposto...




...e um pequeno vídeo com o circuito do sensor de proximidade em funcionamento:




Como nota final, não posso deixar de referir que levei o circuito do sensor montado para uma aula de Física e Química de 8º ano, onde os alunos estão  a dar o som. Foi interessante porque deu para exemplificar o facto de os ultrassons não serem audíveis, o fenómeno do eco, o funcionamento do sonar. Os alunos identificaram o circuito nas luzes de sinalização de lugar ocupado / livre do parque de estacionamento do centro comercial cá da terra. E pediram um workshop de arduino para o verão. E eu estou com vontade de lhes fazer a vontade...



1 comentário: