Participe do Nosso Blog

Conectando ideias

Como configurar um medidor de distancia ultrassônico em um Arduino

Como configurar um medidor de distancia ultrassônico em um Arduino

Os medidores de distancia ultrassônicos são pequenos módulos divertidos que medem a distância. Você pode usá-los para encontrar a distância de um objeto ou detectar quando algo está próximo ao sensor, como um detector de movimento. Eles são ideais para projetos que envolvem navegação, prevenção de objetos e segurança doméstica. Como eles usam o som para medir a distância, funcionam tão bem no escuro quanto na luz. O medidor de distancia ultrassônico que usarei neste tutorial é o HC-SR04, que pode medir distâncias de 2 cm a 4oo cm com uma precisão de ±3mm.

Neste artigo, mostrarei como fazer três circuitos de medidores de distancia diferentes para o Arduino. O primeiro circuito localizador de alcance é fácil de configurar e possui uma precisão muito boa. Os outros dois são um pouco mais complicados, mas são um pouco mais precisos porque levam em consideração a temperatura e a umidade. Mas antes de entrarmos nisso, vamos falar sobre como o medidor de distancia mede a distância.

 

Conteudo

A velocidade do som

Os medidores de distancia ultrassônicos medem a distância emitindo um pulso de som ultrassônico que viaja pelo ar até atingir um objeto. Quando esse pulso de som atinge um objeto, ele é refletido no objeto e viaja de volta para o medidores de distancia ultrassônico. O medidores de distancia ultrassônico mede quanto tempo o pulso do som leva para percorrer sua viagem de ida e volta a partir do sensor e de volta. Em seguida, envia um sinal ao Arduino com informações sobre quanto tempo o pulso sônico levou para viajar.

Sabendo o tempo que o pulso ultrassônico leva para ir e voltar do objeto e também conhecendo a velocidade do som, o Arduino pode calcular a distância do objeto. A fórmula que relaciona a velocidade do som, a distância e o tempo percorrido é:

Formua 1

Reorganizando essa fórmula, obtemos a fórmula usada para calcular a distância:

Formua 2

A variável time é o tempo que o pulso ultrassônico leva para deixar o sensor, ricochetear no objeto e retornar ao sensor. Na verdade, dividimos esse tempo pela metade, pois precisamos apenas medir a distância do objeto, não a distância do objeto e retornar ao sensor. A variável speed é a velocidade na qual o som viaja pelo ar.

A velocidade do som no ar muda com a temperatura e a umidade. Portanto, para calcular com precisão a distância, precisamos considerar a temperatura e a umidade ambiente. A fórmula para a velocidade do som no ar com a temperatura e a umidade contabilizada é:

Formua 3

Por exemplo, a 20°C e 50% de umidade, o som viaja a uma velocidade de:

Formua 4

Na equação acima, fica claro que a temperatura tem o maior efeito na velocidade do som. A umidade tem alguma influência, mas é muito menor que o efeito da temperatura.

Como o Medidor de Distrancia ultrassônico mede a distância

 

Na parte frontal do medidor de distanciar ultrassônico existem dois cilindros de metal. Estes são transdutores. Os transdutores convertem forças mecânicas em sinais elétricos. No medidor de distancia ultrassônico, há um transdutor de transmissão e um transdutor de recebimento. O transdutor transmissor converte um sinal elétrico no pulso ultrassônico, e o transdutor receptor converte o pulso ultrassônico refletido novamente em um sinal elétrico. Se você olhar na parte traseira do medidor de distancia, verá um CI atrás do transdutor de transmissão chamado MAX3232. Este é o CI que controla o transdutor de transmissão. Atrás do transdutor receptor está um CI rotulado como LM324. Este é um amplificador operacional de quadrângulo que amplifica o sinal gerado pelo transdutor receptor em um sinal forte o suficiente para transmitir ao Arduino.

Modulo

O medidor de distancia ultrassônico HC-SR04 possui quatro pinos: Vcc, Trig, Echo e GND. O pino Vcc fornece energia para gerar os pulsos ultrassônicos. O pino GND está conectado ao terra. O pino Trig é para onde o Arduino envia o sinal para iniciar o pulso ultrassônico. O pino de eco é o local em que o medidor de distancia ultrassônico envia as informações sobre a duração da viagem feita pelo pulso ultrassônico ao Arduino.

Para iniciar uma medição de distância, precisamos enviar um sinal alto de 5V ao pino Trig por pelo menos 10 µs. Quando o módulo recebe esse sinal, ele emitirá 8 pulsos de som ultrassônico a uma frequência de 40 KHz do transdutor transmissor. Em seguida, aguarda e ouve no transdutor receptor o sinal refletido. Se um objeto estiver dentro do alcance, os 8 pulsos serão refletidos de volta ao sensor. Quando o pulso atinge o transdutor receptor, o pino de eco emite um sinal de alta tensão.

 

A duração desse sinal de alta tensão é igual ao tempo total que os 8 pulsos levam para viajar do transdutor transmissor e voltar ao transdutor receptor. No entanto, queremos apenas medir a distância do objeto, e não a distância do caminho percorrido pelo pulso do som. Portanto, dividimos esse tempo pela metade para obter a variável de tempo na equação d = s x t acima. Como já sabemos a velocidade do (s) som (s), podemos resolver a equação para a distância.

Configuração de localizador de ultrassom para saída de monitor serial

Vamos começar criando um medidor de distancia ultrassônico simples que enviará medições de distância para o seu monitor serial. Se você deseja enviar as leituras para um LCD, consulte a próxima seção. Conectar tudo é fácil, basta conectá-lo assim:

Diagrama

Depois de ter tudo conectado, faça o upload deste programa para o Arduino:

#define trigPin 10
#define echoPin 13

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  float duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) * 0.0344;
  
  if (distance >= 400 || distance <= 2){
    Serial.print("Distancia = ");
    Serial.println("Fora de alcance");
  }
  else {
    Serial.print("Distancia = ");
    Serial.print(distance);
    Serial.println(" cm");
    delay(500);
  }
  delay(500);
}

Explicação do Código

    • Linha 11: Declara as variáveis ​​duração e distância.
    • Linhas 12 e 13: envia um sinal de 2 µs LOW ao trigPin para garantir que ele esteja desligado no início do loop do programa.
 
  • Linhas 15-17: envia um sinal HIGH de 10 µs ao trigPin para iniciar a sequência de oito pulsos ultrassônicos de 40 KHz enviados pelo transdutor transmissor.
  • Linha 19: Define a variável de duração como o comprimento (em µs) de qualquer sinal de entrada HIGH detectado no ecoPin. A saída do pino de eco é igual ao tempo que o pulso ultrassônico emitido leva para viajar até o objeto e retornar ao sensor.
  • Linha 20: Define a variável de distância como a duração (tempo em d = s x t) multiplicada pela velocidade do som convertido de metros por segundo em centímetros por µs (0,0344 cm / µs).
  • Linhas 22-24: Se a distância for maior ou igual a 400 cm ou menor ou igual a 2 cm, exiba “Distância = Fora da faixa” no monitor serial.
  • Linhas 26-30: Se a medição da distância não estiver fora da faixa, exiba a distância calculada na linha 20 no monitor serial por 500 ms.

Medidor de distancia ultrassônico com saída LCD

Se você deseja enviar as medições de distância para um LCD 16X2, siga este diagrama para conectar o medidor de distancia e o LCD ao seu Arduino:

Display

Quando tudo estiver conectado, faça o upload deste código no Arduino:

#include <LiquidCrystal.h>
#define trigPin 10
#define echoPin 13

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  float duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) * 0.0344;
  
  
  if (distance >= 400 || distance <= 2){
    lcd.print("Fora de alcance");
    delay(500);
  }
  else {
    lcd.print(distance);
    lcd.print(" cm");
    delay(500);
  }
  delay(500);
  lcd.clear();
}

Display

Um medidor de distancia ultrassônico de maior precisão

Como a temperatura é uma variável na equação da velocidade do som acima (c = 331,4 + (0,606 x T) + (0,0124 x H)), a temperatura do ar ao redor do sensor afeta nossas medições de distância. Para compensar isso, tudo o que precisamos fazer é adicionar um termistor ao nosso circuito e inserir suas leituras na equação. Isso deve fornecer maior precisão às nossas medições de distância. Um termistor é um resistor variável que altera a resistência com a temperatura. Para saber mais sobre termistores, consulte nosso artigo, Tutorial do sensor de temperatura do termistor do Arduino. Aqui está um diagrama para ajudá-lo a adicionar um termistor ao seu circuito localizador:

Display

  • R1 = Resistor de 10K Ohm
  • Th = Termistor de 10K Ohm

Nota: o valor de R1 deve ser igual à resistência do seu termistor.

Depois que tudo estiver conectado, faça o upload deste código no Arduino:

#include <math.h>
#define trigPin 10
#define echoPin 13

double Thermistor(int RawADC) {
 double Temp;
 Temp = log(10000.0*((1024.0/RawADC-1))); 
 Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
 Temp = Temp - 273.15;          
 return Temp;
}

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  int val;                
  double temp;            
  val=analogRead(0);      
  temp=Thermistor(val);

  float duration, distance;
  float spdSnd;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  spdSnd = 331.4 + (0.606 * temp) + 0.62;
  distance = (duration / 2) * (spdSnd / 10000);
  
  if (distance <= 400 || distance >= 2){
    Serial.print("Distancia = ");
    Serial.println("Fora de alcance");
  }
  else {
    Serial.print("Distancia = ");
    Serial.print(distance);
    Serial.println(" cm");
    delay(500);
  }
  delay(500);
}

Explicação do Código

No programa localizador de alcance básico no início deste artigo, usamos a fórmula d = s x t para calcular a distância. Neste programa, usamos a fórmula que considera a temperatura e a umidade (c = 331,4 + (0,606 x T) + (0,0124 x H)).

Nas linhas 5 a 10, a equação de Steinhart-Hart é usada para converter os valores de resistência do termistor em temperatura, que são armazenados em uma variável chamada temp. Na linha 35, adicionamos uma nova variável (spdSnd) que contém a velocidade da equação do som. A saída da variável spdSnd é usada como a velocidade na função de distância na linha 36.

 

O medidor de distancia ultrassônico de precisão muito alta (quase alta demais)

O circuito localizador ultrassônico de compensação de temperatura é bastante preciso para o que a maioria das pessoas o usará. No entanto, há outro fator que afeta a velocidade do som no ar (e, portanto, o cálculo da distância), que é a umidade. Você pode dizer pela equação da velocidade do som que a umidade tem apenas um pequeno efeito na velocidade do som, mas vamos conferir de qualquer maneira.

Existem vários tipos de sensores de umidade que você pode usar no Arduino, mas eu usarei o sensor de umidade e temperatura DHT11. Na verdade, este módulo possui um termistor além do sensor de umidade, portanto a configuração é realmente simples:

Display

Depois que tudo estiver conectado, precisaremos instalar uma biblioteca especial para executar o código. A biblioteca é a DHTLib escrita por Rob Tillaart. A biblioteca é fácil de instalar. Primeiro, baixe o arquivo .zip abaixo. Em seguida, no Arduino IDE, vá para Sketch > Include Library > Add ZIP Library e selecione o arquivo DHTLib.zip.

DHTLibDHTLib.zip

Após a instalação da biblioteca, faça o upload desse código no seu Arduino:

#include <dht.h>

#define trigPin 10
#define echoPin 13
#define DHT11_PIN 7

dht DHT;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  
  float duration, distance;
  float speed;
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  speed = 331.4 + (0.606 * DHT.temperature) + (0.0124 * DHT.humidity);
  distance = (duration / 2) * (speed / 10000);
  
  if (distance <= 400 || distance >= 2){
    Serial.print("Distancia = ");
    Serial.println("Fora de alcance");
  }
  else {
    Serial.print("Distancia = ");
    Serial.print(distance);
    Serial.println(" cm");
    delay(1000);
  }
  delay(1000);
}

Explicação do Código:

As leituras de temperatura e umidade emitidas pelo DHT11 são digitais, portanto, não precisamos usar a equação de Steinhart-Hart para converter a resistência do termistor à temperatura. A biblioteca DHTLib contém todas as funções necessárias para obter a temperatura e a umidade em unidades que podemos usar diretamente na velocidade da equação do som. As variáveis de temperatura e umidade são denominadas DHT.temperature e DHT.humidity. Então, a velocidade é usada como uma variável na equação da distância na linha 28.

Para enviar as medições de distância para um LCD, primeiro conecte seu LCD em um Arduino e depois faça o upload deste código:

#include <dht.h>
#include <LiquidCrystal.h>

#define trigPin 10
#define echoPin 13
#define DHT11_PIN 7

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

dht DHT;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  
  float duration, distance;
  float speed;
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  speed = 331.4 + (0.606 * DHT.temperature) + (0.0124 * DHT.humidity);
  distance = (duration / 2) * (speed / 10000);
  
  if (distance <= 400 || distance >= 2){
     lcd.print("Fora de alcance");
    delay(500);
  }
   else {
    lcd.print(distance);
    lcd.print(" cm");
    delay(500);
  }
  delay(500);
  lcd.clear();
}

Display

Obrigado pela leitura! Deixe um comentário se tiver alguma dúvida sobre como configurá-las. Se você gosta de nossos artigos aqui no Circuit Basics, assine e informaremos quando publicarmos novos artigos. Além disso, se você conhece alguém que ache este artigo útil, compartilhe-o!

Informações de contato

Contate-nos por e-mail ou redes sociais
contato@arduinoeautomacao.com.br

Inscreva-se em nossa newsletter