domingo, 15 de maio de 2016

Como utilizar vários sensores ultrasonicos com o arduino

O Sensor Ultrassônico HC-SR04 é um componente muito comum em projetos com Arduino, e permite que você faça leituras de distâncias entre 2 cm e 4 metros, com precisão de 3 mm. Pode ser utilizado simplesmente para medir a distância entre o sensor e um objeto, como para acionar portas do microcontrolador, desviar um robô de obstáculos, acionar alarmes, etc.
Arduino e sensor ultrassônico HC-SR04
O funcionamento do HC-SR04 (datasheet) se baseia no envio de sinais ultrassônicos pelo sensor, que aguarda o retorno (echo) do sinal, e com base no tempo entre envio e retorno, calcula a distância entre o sensor e o objeto detectado.
HC-SR04 - Trigger e Echo
Primeiramente é enviado um pulso de 10µs, indicando o início da transmissão de dados. Depois disso, são enviado 8 pulsos de 40 KHz e o sensor então aguarda o retorno (em nível alto/high), para determinar a distância entre o sensor e o objeto, utilizando a equação Distância = (Tempo echo em nível alto * velocidade do som) /2
Diagrama de tempo HC-SR04
Para ligação do sensor ao microcontrolador, são utilizados 4 pinos: Vcc, Trigger, ECHO e GND.

CONECTANDO O SENSOR HC-SR04 AO ARDUINO

A ligação do sensor ao Arduino no nosso programa vai utilizar, além dos pinos de alimentação, ospinos digitais 4 para o Trigger, e para o Echo. A alimentação será feita pelo pino 5V do Arduino:
Circuito Arduino e HC-SR04
O programa usa a biblioteca Ultrasonic, que você pode baixar aqui. Descompacte a pasta Ultrasonic e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Programa: Conectando Sensor Ultrassonico HC-SR04 ao Arduino
//Autor: Eduardo
//Carrega a biblioteca do sensor ultrassonico
#include
//Define os pinos para o trigger e echo
#define pino_trigger 4
#define pino_echo 5
//Inicializa o sensor nos pinos definidos acima
Ultrasonic ultrasonic(pino_trigger, pino_echo);
void setup()
{
  Serial.begin(9600);
  Serial.println("Lendo dados do sensor...");
}
void loop()
{
  //Le as informacoes do sensor, em cm e pol
  float cmMsec, inMsec;
  long microsec = ultrasonic.timing();
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
  //Exibe informacoes no serial monitor
  Serial.print("Distancia em cm: ");
  Serial.print(cmMsec);
  Serial.print(" - Distancia em polegadas: ");
  Serial.println(inMsec);
  delay(1000);
}
No programa todo o cálculo é feito por meio da biblioteca Ultrasonic. O sensor é inicializado nos pinos trigger e echo, e depois efetuamos a leitura dos dados do sensor, atribuindo às variáveiscmMsec e inMsec os valores das distâncias em centímetros e polegadas, respectivamente. Os dados são mostrados no serial monitor:
Serial Monitor HC-SR04
Agora utilizando 4 sensores ultrasonicos no arduino :
#include #define pino_trigger 7 #define pino_trigger2 13 #define pino_trigger3 3 #define pino_trigger4 10 #define pino_echo 6 #define pino_echo2 12 #define pino_echo3 2 #define pino_echo4 11 //Inicializa o sensor nos pinos definidos acima Ultrasonic ultrasonic(pino_trigger, pino_echo);//sensor 1 Ultrasonic ultrasonic2(pino_trigger2, pino_echo2);//sensor 2 Ultrasonic ultrasonic3(pino_trigger3, pino_echo3);//sensor 3 Ultrasonic ultrasonic4(pino_trigger4, pino_echo4);//sensor 4 float s1;// variavel do tipo flutuante, sensor 1 float s2; float s3; float s4; void setup() { Serial.begin(9600); Serial.println("Lendo dados aguarde filho da puta..."); } void loop() { //Le as informacoes do sensor 1 long microsec = ultrasonic.timing(); s1 = ultrasonic.convert(microsec, Ultrasonic::CM); //Le as informacoes do sensor 2 long microsec2 = ultrasonic2.timing(); s2 = ultrasonic2.convert(microsec2, Ultrasonic::CM); //Le as informacoes do sensor 3 long microsec3 = ultrasonic3.timing(); s3 = ultrasonic3.convert(microsec3, Ultrasonic::CM); //Le as informacoes do sensor 4 long microsec4 = ultrasonic4.timing(); s4 = ultrasonic4.convert(microsec4, Ultrasonic::CM); delay(10); Serial.print("Distancia sensor 1: "); Serial.print(s1); Serial.print(" - Distancia sensor 2: "); Serial.print(s2); Serial.print(" - Distancia sensor 3: "); Serial.print(s3); Serial.print(" - Distancia sensor 4: "); Serial.println(s4);//println coloca eles em paralelo delay(10); }

7 comentários:

  1. código funcionando perfeitamente vlw pela ajuda

    ResponderExcluir
  2. Companheiro!!! Excelente trabalho, parabéns! perdi um dia tentando utilizar a biblioteca Newping dentro do meu projeto, pois falava-se que a Ultrasonic não trabalharia com mais de um sensor...ledo engano!!! Obrigado pela força!

    ResponderExcluir
    Respostas
    1. Apanhei pra caramba tbm, qualquer duvida só chamar!

      Excluir
  3. Olá boa tarde, se eu quiser apenas dois sensores é só eliminar as informações do 3 e 4? Att

    ResponderExcluir
    Respostas
    1. Sim, só tirar !! do mesmo modo se quiser colocar mais sensores é só acrescentar mais variáveis.

      Excluir
  4. ola boa noite estou tentando montar um projeto de estacionamento com 10 vagas usando sensor ultrassônico com biblioteca newping, primeiro tentei com um exemplo de 2 vagas e funcionou perfeitamente porem quando incremento as outras 8 utilizando a biblioteca que diz que posso usar ate 15 sensores mudando os valores que já vem da biblioteca para otimizar o projeto exemplo sensor1 34 e 35 sensor2 36 e 37 sensor3 38 e 39 nao funciona, vc poderia ajudar?

    ResponderExcluir