Arduino UNO R4 - Sensor Ultrassônico

Este tutorial ensina você a usar o sensor ultrassônico e o Arduino UNO R4 para medir a distância até um objeto. Em detalhes, vamos aprender:

Arduino UNO R4 ultrasonic sensor

Sobre o Sensor Ultrassônico

O sensor ultrassônico HC-SR04 mede a distância até objetos usando ondas sonoras. Ele emite uma onda sonora que os humanos não conseguem ouvir e depois escuta o eco quando a onda sonora volta após bater em um objeto. Medindo o tempo que a onda sonora leva para retornar, o sensor consegue calcular a que distância o objeto está.

Pinagem

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

  • Pino VCC: conecte este pino ao VCC (5V).
  • Pino GND: conecte este pino ao GND (0V).
  • Pino TRIG: conecte este pino ao Arduino UNO R4 para enviar sinais de controle (pulsos).
  • Pino ECHO: este pino envia sinais (pulsos) de volta ao Arduino UNO R4. O Arduino UNO R4 então calcula a duração desses pulsos para determinar a distância.
Ultrasonic Sensor Pinout
image source: diyables.io

Diagrama de Ligação

The wiring diagram between Arduino UNO R4 Ultrasonic Sensor

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Código Arduino UNO R4

#define TRIG_PIN 9 // The Arduino UNO R4 pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 8 // The Arduino UNO R4 pin connected to the ultrasonic sensor's ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(TRIG_PIN, OUTPUT); // configure the echo pin to input mode pinMode(ECHO_PIN, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(ECHO_PIN, 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

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para Arduino Uno R4 WiFi/Minima na Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Copie o código acima e abra-o com a Arduino IDE
  • Clique no botão Upload na Arduino IDE para enviar o código ao Arduino UNO R4
Arduino IDE - How to Upload Code
  • Abra o Serial Monitor.
  • Mova a mão na frente do sensor ultrassônico.
  • Confira a distância entre sua mão e o sensor no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' 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 R4 WiFi on COM15
2

Explicação do Código

A explicação está nos comentários do código Arduino acima.

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

A leitura do sensor ultrassônico inclui ruído. Em alguns casos, esses dados ruidosos podem causar mau funcionamento. Podemos eliminar o ruído com este método:

  • Faça várias medições e salve-as em um array.
  • Ordene o array do menor para o maior.
  • Remova o ruído dos dados:
    • Descarte os menores valores, pois são ruído.
    • Descarte os maiores valores, pois são ruído.
    • Calcule a média usando os valores restantes do meio.

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

    • Ignore as cinco menores amostras e as cinco maiores amostras, pois são consideradas ruído. Calcule a média das dez amostras do meio, da 5ª à 14ª.
    /* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-ultrasonic-sensor */ #define TRIG_PIN 9 // The Arduino UNO R4 pin connected to the ultrasonic sensor's TRIG pin #define ECHO_PIN 8 // The Arduino UNO R4 pin connected to the ultrasonic sensor's 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

O código completo usado neste vídeo está abaixo:

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-ultrasonic-sensor */ /* * HC-SR04 + Traffic Light + Buzzer * Arduino UNO R4 */ // ================== HC-SR04 ================== #define TRIG_PIN 9 #define ECHO_PIN 8 // ================== Traffic Light ================== #define GREEN_LED 5 #define YELLOW_LED 6 #define RED_LED 7 // ================== Buzzer ================== #define BUZZER_PIN 10 float filterArray[20]; float distance; // =================================================== // Buzzer Functions // =================================================== void beep1() { digitalWrite(BUZZER_PIN, HIGH); delay(80); digitalWrite(BUZZER_PIN, LOW); } void beep2() { for (int i = 0; i < 2; i++) { digitalWrite(BUZZER_PIN, HIGH); delay(60); digitalWrite(BUZZER_PIN, LOW); delay(60); } } void beep3() { for (int i = 0; i < 3; i++) { digitalWrite(BUZZER_PIN, HIGH); delay(40); digitalWrite(BUZZER_PIN, LOW); delay(40); } } // =================================================== // Ultrasonic Measure // =================================================== float ultrasonicMeasure() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); float duration_us = pulseIn(ECHO_PIN, HIGH); float distance_cm = duration_us * 0.017; return distance_cm; } void setup() { Serial.begin(9600); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(GREEN_LED, OUTPUT); pinMode(YELLOW_LED, OUTPUT); pinMode(RED_LED, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); } void loop() { // =================================================== // 1. Read and Filter Distance // =================================================== for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); } // Sort ascending for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float temp = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = temp; } } } // Average middle 10 values double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10.0; Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); // =================================================== // 2. Traffic Light + Buzzer // =================================================== if (distance > 16) { digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, LOW); digitalWrite(BUZZER_PIN, LOW); delay(100); } else if (distance > 13) { // Green Warning digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, LOW); digitalWrite(GREEN_LED, HIGH); beep1(); delay(720); digitalWrite(GREEN_LED, LOW); } else if (distance >= 8) { // Yellow Warning digitalWrite(GREEN_LED, LOW); digitalWrite(RED_LED, LOW); digitalWrite(YELLOW_LED, HIGH); beep2(); delay(380); digitalWrite(YELLOW_LED, LOW); } else { // Red Danger digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, LOW); digitalWrite(RED_LED, HIGH); beep3(); delay(180); digitalWrite(RED_LED, LOW); } }

O vídeo abaixo é um tutorial passo a passo que demonstra como usar um sensor ultrassônico com o Arduino UNO R4:

Aplicações do Sensor Ultrassônico

  • Evitar Colisões
  • Detectar Nível de Enchimento
  • Medir Nível
  • Detectar 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!