Arduino - Sensor Ultrassônico

Neste tutorial, vamos aprender:

Sobre o Sensor Ultrassônico

O sensor ultrassônico HC-SR04 é usado para medir a distância até um objeto usando ondas ultrassônicas.

Pinagem

O sensor ultrassônico HC-SR04 tem quatro pinos:

  • Pino VCC: deve ser conectado ao VCC (5V)
  • Pino GND: deve ser conectado ao GND (0V)
  • Pino TRIG: este pino recebe o sinal de controle (pulso) do Arduino.
  • Pino ECHO: este pino envia um sinal (pulso) para o Arduino. O Arduino mede a duração do pulso para calcular a distância.
Pinagem do Sensor Ultrassônico
image source: diyables.io

Como Funciona

Esta seção traz um conhecimento mais aprofundado. NÃO se preocupe se você não entender. Pule esta seção se ela parecer difícil demais e volte outro dia. Continue lendo as próximas seções.
  1. Microcontrolador: gera um pulso de 10 microssegundos no pino TRIG.
  2. O sensor ultrassônico emite as ondas ultrassônicas automaticamente.
  3. A onda ultrassônica é refletida depois de atingir um obstáculo.
  4. O sensor ultrassônico:
    • Detecta a onda ultrassônica refletida.
    • Mede o tempo de percurso da onda ultrassônica.
  • Sensor ultrassônico: gera um pulso no pino ECHO. A duração do pulso é igual ao tempo de percurso da onda ultrassônica.
  • O microcontrolador mede a duração do pulso no pino ECHO e depois calcula a distância entre o sensor e o obstáculo.
  • Como Obter a Distância do Sensor Ultrassônico

    Para obter a distância do sensor ultrassônico, só precisamos fazer dois passos (1 e 6 da parte Como Funciona)

    • Gerar um pulso de 10 microssegundos no pino TRIG
    • Medir a duração do pulso no pino ECHO e depois calcular a distância entre o sensor e o obstáculo

    Cálculo da Distância

    Temos:

    • O tempo de percurso da onda ultrassônica (µs): travel_time = pulse_duration
    • A velocidade da onda ultrassônica: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

    Então:

    • A distância percorrida pela onda ultrassônica (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
    • A distância entre o sensor e o obstáculo (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

    Arduino - Sensor Ultrassônico

    Os pinos do Arduino podem gerar um pulso de 10 microssegundos e medir a duração de um pulso. Por isso, podemos obter a distância do sensor ultrassônico usando dois pinos do Arduino:

    • Um pino é conectado ao pino TRIG para gerar o pulso de 10µs no pino TRIG do sensor
    • Outro pino é conectado ao pino ECHO para medir o pulso vindo do sensor

    Diagrama de Ligação

    Diagrama de Ligação do Arduino com Sensor Ultrassônico

    This image is created using Fritzing. Click to enlarge image

    Como Programar o Sensor Ultrassônico

    digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);
    • Meça a duração do pulso (µs) em um pino do Arduino usando a função pulseIn(). Por exemplo, o pino 8:
    duration_us = pulseIn(8, HIGH);
    • Calcule a distância (cm):
    distance_cm = 0.017 * duration_us;

    Código Arduino

    /* * Created by ArduinoGetStarted, https://arduinogetstarted.com * * Arduino - Ultrasonic Sensor HC-SR04 * * Wiring: Ultrasonic Sensor -> Arduino: * - VCC -> 5VDC * - TRIG -> Pin 9 * - ECHO -> Pin 8 * - GND -> GND * * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG pin int echoPin = 8; // ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(trigPin, OUTPUT); // configure the echo pin to input mode pinMode(echoPin, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(echoPin, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

    Passos Rápidos

    • Copie o código acima e abra-o na Arduino IDE
    • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
    Arduino IDE - Como Carregar o Código
    • Abra o Serial Monitor
    • Mova sua mão na frente do sensor ultrassônico
    • Veja a distância do sensor até a sua mão no Serial Monitor
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno' on 'COM15')
    New Line
    9600 baud
    distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
    Ln 11, Col 1
    Arduino Uno on COM15
    2

    Explicação do Código

    Leia a explicação linha por linha nos comentários do código!

    Como Filtrar o Ruído das Medições de Distância do Sensor Ultrassônico

    O resultado da medição do sensor ultrassônico contém ruído. Em algumas aplicações, o resultado com ruído causa um funcionamento indesejado. Podemos remover o ruído usando o seguinte algoritmo:

    1. Fazer várias medições e guardá-las em um array
    2. Ordenar o array em ordem crescente
    3. Filtrar o ruído
      • Algumas das menores amostras são consideradas ruído → ignore-as
      • Algumas das maiores amostras são consideradas ruído → ignore-as
      • ⇒ calcule a média das amostras do meio

      O código de exemplo abaixo faz 20 medições

      • As cinco menores amostras são consideradas ruído → ignore-as
      • As cinco maiores amostras são consideradas ruído → ignore-as
      • ⇒ calcule a média das 10 amostras do meio (da 5ª à 14ª)
      /* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG pin #define ECHO_PIN 8 // ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

    Vídeo

    Desafie-se

    Use o sensor ultrassônico para fazer um dos seguintes projetos:

    • Evitar colisões em um carrinho de controle remoto.
    • Detectar quando a lixeira está cheia.
    • Monitorar o nível da lixeira.
    • Abrir/fechar a lixeira automaticamente. Dica: Consulte Arduino - Servo Motor.

    Conhecimento Adicional

    Alguns fabricantes oferecem sensores ultrassônicos com 3 pinos. Os sinais TRIG e ECHO ficam no mesmo pino. Nesse caso, precisamos usar apenas um pino do Arduino para as duas funções: gerar um pulso para o sensor e medir o pulso vindo do sensor.

    Aplicações do Sensor Ultrassônico

    • Prevenção de Colisões
    • Detecção de Recipiente Cheio
    • Medição de Nível
    • Detecção de Proximidade

    ※ NOSSAS MENSAGENS

    • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!