Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Sensor Ultrassônico HC-SR04 e Arduino – Guia Completo


Neste tutorial, aprenderemos como o HC-SR04 sensor ultrassônico funciona e como usá-lo com o Arduino . Este é o sensor mais popular para medir distâncias e fazer robôs que evitam obstáculos com Arduino.

Eu já usei o sensor ultrassônico HC-SR04 para construir vários projetos legais do Arduino e você pode conferir aqui:
  • Radar Arduino (Sonar)
  • Medidor de alcance e nível de bolha digital
  • Projeto de Sistema de Segurança e Alarme
  • Arduino Ant Hexapod Robot

Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo. Possui informações e exemplos adicionais para o sensor, incluindo especificações, pinagens, diagramas de fiação, códigos e muito mais.

Visão geral do hardware HC-SR04


O HC-SR04 é um sensor de medição de distância acessível e fácil de usar que tem um alcance de 2 cm a 400 cm (cerca de uma polegada a 13 pés).

O sensor é composto por dois transdutores ultrassônicos. Um é o transmissor que emite pulsos de som ultrassônicos e o outro é o receptor que ouve as ondas refletidas. É basicamente um SONAR que é usado em submarinos para detectar objetos subaquáticos.

Aqui estão suas principais especificações:
Tensão de operação 5V DC
Atual de operação 15mA
Frequência de operação 40KHz
Intervalo mínimo 2 cm / 1 polegada
Intervalo máximo 400 cm / 13 pés
Precisão 3mm
Medição de ângulo <15°
Dimensão 45 x 20 x 15mm

Pinagem do sensor ultrassônico HC-SR04


Segue a pinagem do sensor:

O sensor tem 4 pinos. VCC e GND vá para 5V e GND pinos no Arduino e o Trig e Eco vá para qualquer pino digital do Arduino. Usando o Trigonometria pin enviamos a onda de ultrassom do transmissor e com o Echo pino nós escutamos o sinal refletido.

Como funciona o sensor de distância ultrassônico HC-SR04?


Ele emite um ultrassom a 40.000 Hz que viaja pelo ar e, se houver um objeto ou obstáculo em seu caminho, ele retornará ao módulo. Considerando o tempo de viagem e a velocidade do som, você pode calcular a distância.

Para gerar o ultrassom, precisamos definir o pino Trig em um estado alto por 10 µs. Isso enviará uma rajada ultrassônica de 8 ciclos que viajará na velocidade do som. Os pinos de eco aumentam imediatamente após o envio da rajada ultrassônica de 8 ciclos e começam a ouvir ou esperar que essa onda seja refletida de um objeto.

Se não houver nenhum objeto ou pulso refletido, o pino de eco expirará após 38 ms e voltará ao estado baixo.

Se recebermos um pulso refletido, o pino Echo cairá antes desses 38ms. De acordo com a quantidade de tempo que o pino Echo esteve em ALTO, podemos determinar a distância que a onda sonora percorreu, portanto, a distância do sensor ao objeto.

Para isso, estamos usando a seguinte fórmula básica para calcular a distância:

Distância =Velocidade x Tempo

Na verdade, conhecemos os valores de velocidade e tempo. O tempo é a quantidade de tempo que o pino Echo esteve em ALTO, e a velocidade é a velocidade do som que é 340m/s. Há uma etapa adicional que precisamos fazer, e isso é dividir o resultado final por 2. e isso é porque estamos medindo a duração que a onda sonora precisa para viajar até o objeto e retornar.

Digamos que o pino Echo ficou ALTO por 2ms. Se quisermos obter o resultado da distância em cm, podemos converter o valor da velocidade do som de 340m/s para 34cm/ms.

Distância =(Velocidade x Tempo) / 2 =(34 cm/ms x 1,5 ms) / 2 =25,5 cm.

Portanto, se o pino Echo estiver em ALTO por 2ms (o que medimos usando o pulseIn() função), a distância do sensor ao objeto é de 34 cm.

Como conectar o sensor ultrassônico HC-SR04 ao Arduino


Veja como precisamos conectar o sensor HC-SR04 a uma placa Arduino.

Os pinos Ground e VCC do módulo precisam ser conectados aos pinos Ground e de 5 volts na placa Arduino, respectivamente, e os pinos trig e echo a qualquer pino de E/S digital na placa Arduino.

Você pode obter esses componentes necessários para este tutorial em qualquer um dos sites abaixo:

  • Sensor ultrassônico HC-SR04 ………… 
  • Placa Arduino ………………………………
  • Breadboard e jump wires ……… 

Código Arduino do Sensor Ultrassônico HC-SR04


Aqui está um código para medir a distância usando o sensor ultrassônico HC-SR04 e o Arduino.


/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2;
  // Prints the distance on the Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);
}Code language: Arduino (arduino)

Explicação do código


Primeiro temos que definir os pinos Trig e Echo. Neste caso, eles são os pinos número 9 e 10 na placa Arduino e são denominados trigPin e echoPin. Em seguida, precisamos de uma variável Long, chamada "duração" para o tempo de viagem que obteremos do sensor e uma variável inteira para a distância.
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;Code language: Arduino (arduino)

No setup temos que definir o trigPin como saída e o echoPin como entrada e também iniciar a comunicação serial para mostrar os resultados no monitor serial.
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}Code language: Arduino (arduino)

No loop, primeiro temos que garantir que o trigPin esteja limpo, então você deve definir esse pino em um estado LOW por apenas 2 µs. Agora, para gerar a onda de som Ultra, precisamos definir o trigPin em HIGH State por 10 µs.
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);Code language: Arduino (arduino)

Usando o pulseIn() lemos o tempo de viagem e colocamos esse valor na variável “duration”. Esta função tem 2 parâmetros, o primeiro é o nome do pino Echo e o segundo é o estado do pulso que estamos lendo, seja Alto ou Baixo.
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)

Neste caso, precisamos que este ajuste seja HIGH, pois os sensores HC-SR04 configuram o pino Echo para High após enviar a rajada ultrassônica de 8 ciclos do transmissor. Isso realmente inicia o tempo e uma vez que recebemos a onda sonora refletida, o pino Echo irá para Baixo, o que interrompe o tempo. No final, a função retornará a duração do pulso em microssegundos.

Para obter a distância, multiplicaremos a duração por 0,034 e dividimos por 2, conforme explicamos essa equação anteriormente.
// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);Code language: Arduino (arduino)

Ao final imprimiremos o valor da distância no Serial Monitor.

Exemplo de sensor ultrassônico Arduino e display LCD


Aqui está outro exemplo de como usar o sensor ultrassônico com Arduino e exibir os resultados em um LCD.

Você pode conectar o sensor ultrassônico e o LDC da seguinte forma:

O código que mede a distância é praticamente o mesmo do exemplo básico. Aqui, em vez de imprimir os resultados no monitor serial, nós os imprimimos no LCD. Se você precisar de mais detalhes sobre como usar e conectar um LCD com Arduino, você pode verificar meu tutorial específico para isso.
/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}Code language: Arduino (arduino)

Exemplo de código usando a biblioteca NewPing


Na verdade, existe uma maneira mais simples e melhor de programar o Arduino para medir distância usando o sensor ultrassônico HC-SR04, e isso é usar a biblioteca NewPing.

No código explicado anteriormente, acionamos manualmente o sensor e medimos a duração do pulso do sinal recebido. Então, de acordo com esses resultados, calculamos a distância com base nele. Usando a biblioteca NewPing podemos obter a distância com apenas uma única linha de código.

Segue um código de exemplo:
#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}Code language: Arduino (arduino)

É muito mais simples que o exemplo anterior. Nós apenas usamos a chamada ping_cm() no objeto de sonar NewPing e obtemos a distância em centímetros. Se quisermos a distância em polegadas, podemos usar o ping_in() em vez de.

A biblioteca também tem alguns outros recursos úteis. Por exemplo, com o ping_median(iterations [, max_cm_distance]) método, podemos obter resultados mais precisos, pois ele retorna uma mediana, ou o valor médio de várias medidas. Com as iterações parâmetro definimos o número de amostras que o programa levará para calcular o valor médio. O valor padrão é 5 iterações. O ping_median() retorna a duração do pulso recebido em microssegundos.

No entanto, para mais informações e detalhes, você pode verificar a página wiki do NewPing.

Melhorando a precisão do sensor de distância HC-SR04 com sensor de temperatura DHT22


O sensor HC-SR04 é bastante preciso, mas como seu funcionamento depende da velocidade do som, para resultados mais precisos também devemos levar em consideração a temperatura do ar. A velocidade do som pode mudar significativamente à medida que a temperatura do ar muda. Por exemplo, a 20°C, a velocidade do som é de cerca de 340m/s, mas a -20°C a velocidade do som é de cerca de 315m/s. A umidade relativa também afeta a velocidade.

Então, se usarmos esse sensor para medir distâncias em várias temperaturas, devemos implementar uma compensação de temperatura, e podemos fazer isso com a seguinte fórmula:

Velocidade =331,4 + 0,6 x Temperatura + 0,0124 x Umidade_Relativa

Aqui está um exemplo:

Junto ao sensor ultrassônico HC-SR04, usaremos o sensor DHT11 / DHT22 para medir a temperatura e a umidade do ambiente e ajustar o valor da velocidade do som de acordo.

Código do Arduino

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

}Code language: Arduino (arduino)

Então, primeiro estamos lendo os valores de temperatura e umidade do sensor DHT22 e, em seguida, usamos esses valores para calcular a velocidade do som. Em seguida, obtemos a duração da viagem da onda sonora em microssegundos, convertemos para segundos e calculamos a distância do sensor aos objetos em centímetros.

Dimensões do HC-SR04 e modelo 3D


Fiz um modelo 3D do sensor ultrassônico HC-SR04 caso você precise de um ao fazer seu próximo projeto com ele. Você pode baixá-lo no link abaixo.

Você pode encontrar e baixar este modelo 3D em Thangs.

Aqui estão as dimensões do sensor HC-SR04:

Por favor, tenha em mente que às vezes eles podem diferir um pouco dependendo do fabricante.

Conclusão


Então, cobrimos praticamente tudo o que precisamos saber sobre o uso do sensor ultrassônico HC-SR04 com Arduino. É um ótimo sensor para muitos projetos eletrônicos de bricolage onde precisamos de uma medição de distância sem contato, detecção de presença ou objetos, nivelar ou posicionar algo etc.

Já mencionei os projetos que fiz com este sensor no início do post. Aqui estão alguns outros projetos interessantes usando o sensor HC-SR04 e Arduino:
  • Lixeira com sensor de movimento automático sem toque
  • Controle de luz inteligente por gestos de mão
  • Mini Levitação Acústica
  • Robô que evita obstáculos

Espero que tenham gostado deste tutorial e aprendido algo novo. Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo e não se esqueça de conferir minha coleção completa de mais de 30 projetos Arduino.

Processo de manufatura

  1. O que é Sensor Ultrassônico HC-SR04:Funcionando e suas Aplicações
  2. Sensor Arduino - Tipos e Aplicações
  3. Sensor ultrassônico (HC-SR04) + Raspberry Pi
  4. Sensor de alcance ultrassônico HC-SR04 no Raspberry Pi
  5. Sensor DHT11 com LEDs e um alto-falante Piezo
  6. FlickMote
  7. IOT - Jar inteligente usando ESP8266, Arduino e sensor ultrassônico
  8. Mini Radar com Arduino
  9. Detector de alcance ultrassônico com Arduino
  10. Sensor ultrassônico com alarme, LCD e temperatura