Arduino Nano - Sensor Ultrassônico

Este tutorial ensina você a usar o Arduino Nano e o sensor ultrassônico para medir a distância até obstáculos ou objetos. Em detalhes, vamos aprender:

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×Sensor Ultrassônico
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Sensor Ultrassônico

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

Pinagem do Sensor Ultrassônico

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: recebe um sinal de controle (pulso) do Arduino Nano
  • Pino ECHO: envia um sinal (pulso) para o Arduino Nano. O Arduino Nano mede a duração do pulso para calcular a distância.
Pinagem do sensor ultrassônico

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.
  • O Arduino Nano produz um pulso de 10 microssegundos no pino TRIG, o que faz o sensor ultrassônico emitir ondas ultrassônicas.
  • Quando as ondas atingem um obstáculo, elas são refletidas de volta.
  • O sensor ultrassônico consegue detectar a onda refletida e medir o seu tempo de percurso.
  • Em seguida, o sensor gera um pulso no pino ECHO, com duração igual ao tempo de percurso da onda ultrassônica.
  • O Arduino Nano mede a duração do pulso no pino ECHO e calcula a distância entre o sensor e o obstáculo.

Como Obter a Distância do Sensor Ultrassônico

Para calcular a distância a partir do sensor ultrassônico, só precisamos escrever um código Arduino que faça dois passos (1 e 6 em Como Funciona):

  • O Arduino Nano gera um pulso de 10 microssegundos no pino TRIG.
  • O Arduino Nano mede a duração do pulso no pino ECHO.
  • Depois, o Arduino Nano usa a duração do pulso medida para 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 Nano - Sensor Ultrassônico

Os pinos do Arduino Nano podem produzir um pulso de 10 microssegundos e medir a duração de um pulso. Isso nos permite usar dois pinos do Arduino Nano para determinar a distância do sensor ultrassônico até um objeto. Só precisamos:

  • Conectar um pino do Arduino Nano ao pino TRIG do sensor ultrassônico. Esse pino do Arduino Nano é usado para gerar um pulso de 10µs no pino TRIG do sensor
  • Conectar outro pino do Arduino Nano ao pino ECHO do sensor ultrassônico. Esse pino do Arduino Nano é usado para medir o pulso vindo do sensor

Diagrama de Ligação

Diagrama de ligação do sensor ultrassônico com o Arduino Nano

This image is created using Fritzing. Click to enlarge image

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

Como Programar o Sensor Ultrassônico

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

Código Arduino Nano

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor 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() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the 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

  • Copie o código e abra-o com o Arduino IDE.
  • Depois, clique no botão Upload no Arduino IDE para compilar e fazer o upload do código para o Arduino Nano.
Como fazer upload do código para o Arduino Nano
  • Abra o Serial Monitor
  • Coloque a mão na frente do sensor ultrassônico
  • Veja no Serial Monitor a distância do sensor até a sua mão
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 Nano on COM15
2

Explicação do Código

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

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

O resultado da medição de um sensor ultrassônico pode conter ruído, o que pode causar operações indesejadas em algumas aplicações. Para remover o ruído, podemos usar o seguinte algoritmo:

  1. Faça várias medições e guarde-as em um array
  2. Ordene o array em ordem crescente
  3. Filtre o ruído da seguinte forma:
    • As menores amostras são consideradas ruído e devem ser ignoradas
    • As maiores amostras são consideradas ruído e devem ser ignoradas
    • Deve-se calcular a média das amostras do meio

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

    • Ignora as cinco menores amostras.
    • Ignora as cinco maiores amostras.
    • Calcula a média das 10 amostras do meio, da quinta até a décima quarta.
    /* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor 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() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the 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 um sensor ultrassônico em qualquer um dos projetos a seguir:

  • Construir um sistema de prevenção de colisão para um carrinho de controle remoto.
  • Descobrir o quanto uma lixeira está cheia.
  • Acompanhar o nível de uma lixeira.
  • Abrir e fechar uma lixeira automaticamente. Dica: Veja Arduino Nano - Servo Motor.

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!