Tipos de sensores de distância para Arduino: HC-SR04, IR, VL53L0X e LiDAR
Comparação de sensores de distância para Arduino: HC-SR04, JSN-SR04T, Sharp IR, VL53L0X/VL53L1X, TF-Luna e TCRT5000; alcance, exatidão, ângulo do feixe, superfícies e exemplos de código.
Escolher entre os tipos de sensores de distância para Arduino parece, à primeira vista, uma questão de “qual mede mais longe”, mas o que realmente decide é a superfície que você vai medir, a exatidão necessária, o quanto o feixe precisa ser estreito e as condições do ambiente. O mesmo HC-SR04 que mede a distância até uma parede com exatidão de centímetros pode ficar instável diante do tecido macio de um sofá, enquanto um sensor laser barato que oferece precisão milimétrica pode perder metade do alcance sob a luz do sol. Neste guia, colocamos lado a lado os seis sensores mais usados em projetos com Arduino.
Os sensores que vamos comparar são: o ultrassônico HC-SR04 e seu irmão à prova d’água, o JSN-SR04T, o sensor de triangulação infravermelha Sharp GP2Y0A21, os sensores laser de tempo de voo (ToF) VL53L0X e VL53L1X, o pequeno LiDAR TF-Luna e o sensor de proximidade de curto alcance TCRT5000. Para cada um, explicamos o princípio de funcionamento, o alcance, a exatidão, o ângulo do feixe, a reação às superfícies e a interface, e fornecemos um sketch de exemplo compilado. No final, uma tabela resume qual escolher para cada projeto.

Como os sensores de distância medem? Três princípios básicos
Quase todos os sensores de distância usados com Arduino se baseiam em um de três métodos. Tempo de voo: o sensor emite um pulso de som ou luz e mede quanto tempo a reflexão leva para voltar; a distância é metade do produto entre tempo e velocidade. Sensores ultrassônicos fazem isso com som, e o VL53L0X e o TF-Luna, com luz. Como a luz é cerca de um milhão de vezes mais rápida que o som, sensores ToF contêm chips especiais com temporização na escala de picossegundos. Triangulação: sensores Sharp IR emitem um feixe infravermelho em direção ao alvo e verificam onde a luz refletida atinge um detector sensível à posição (PSD); para objetos próximos, o ponto se desloca para uma extremidade e, para os distantes, para a outra. Intensidade da reflexão: sensores simples como o TCRT5000 medem apenas a intensidade da luz que retorna; como isso depende muito da cor da superfície, trata-se de detecção de proximidade, e não de uma medição real de distância.
| Princípio | Sensores | Vantagens | Desvantagens |
|---|---|---|---|
| Tempo de voo com som | HC-SR04, JSN-SR04T | Barato, não é afetado pela cor nem pela luz | Feixe amplo, desempenho fraco em superfícies macias e inclinadas, sensível à temperatura |
| Tempo de voo com luz | VL53L0X, VL53L1X, TF-Luna | Rápido, feixe estreito, boa exatidão | Luz solar e vidro causam problemas |
| Triangulação infravermelha | Sharp GP2Y0A21 | Pouco afetado pela cor, saída analógica simples | Saída não linear, faixa limitada, resultados enganosos abaixo de 10 cm |
| Intensidade da reflexão | TCRT5000 | Muito barato, muito rápido | Apenas alguns mm a cm, depende muito da cor |
A tabela geral de comparação
A tabela abaixo reúne os valores típicos dos módulos de cada sensor. Os alcances são os informados pelos fabricantes; em um projeto real, podem ser menores dependendo da superfície e do ambiente. Os preços variam conforme o país, por isso são apresentados em termos relativos.
| Sensor | Alcance | Exatidão | Ângulo do feixe | Interface | Alimentação | Preço relativo |
|---|---|---|---|---|---|---|
| HC-SR04 | 2–400 cm | Cerca de ±0,3–1 cm | Cerca de 15° | Pulso Trig/Echo | 5 V (HC-SR04P: 3,3–5 V) | Muito barato |
| JSN-SR04T | Cerca de 25–450 cm | Cerca de ±1 cm | Amplo (cerca de 45° ou mais) | Trig/Echo, UART em algumas versões | 5 V | Barato |
| Sharp GP2Y0A21 | 10–80 cm | Boa de perto, fraca de longe | Estreito (alguns graus) | Tensão analógica | 4,5–5,5 V | Médio |
| VL53L0X | 3 cm – 2 m (padrão ~1,2 m) | Cerca de ±3% | 25° | I2C (0x29) | Módulo 3,3–5 V | Barato |
| VL53L1X | 4 cm – 4 m | Cerca de ±3%, resolução em mm | 27° (pode ser reduzido a 15°) | I2C (0x29) | Módulo 3,3–5 V | Médio |
| TF-Luna | 0,2–8 m | ±6 cm (até 3 m), ±2% (3–8 m) | 2° | UART ou I2C | 5 V, lógica de 3,3 V | Caro |
| TCRT5000 | Cerca de 0,2–15 mm (melhor a 2,5 mm) | Não mede distância, indica presença/ausência | Estreito | Digital (DO) + analógica (AO) | 3,3–5 V | Muito barato |
HC-SR04: o clássico ultrassônico
O HC-SR04 emite oito pulsos sonoros de 40 kHz e mantém o pino ECHO em HIGH até o eco retornar. O Arduino mede a duração desse pulso em microssegundos com pulseIn(). A 20 °C, o som percorre cerca de 343 metros por segundo, ou 0,0343 cm por microssegundo; como o som vai até o alvo e volta, distância = tempo × 0,0343 / 2. A velocidade do som varia com a temperatura (cerca de 331,3 + 0,606 × T m/s): entre 0 °C e 35 °C, há uma diferença de cerca de 6%, o que significa até 12 cm de erro a 2 metros. O código abaixo aplica essa correção e usa a mediana de cinco leituras para eliminar ecos incorretos ocasionais.
1const int TRIG_PIN = 9;
2const int ECHO_PIN = 10;
3const float SICAKLIK = 20.0; // ortam sıcaklığı, °C / ambient temperature, °C
4float sesHizi; // cm/µs
5
6float mesafeOlc() {
7 digitalWrite(TRIG_PIN, LOW);
8 delayMicroseconds(2);
9 digitalWrite(TRIG_PIN, HIGH); // 10 µs tetik darbesi / 10 µs trigger pulse
10 delayMicroseconds(10);
11 digitalWrite(TRIG_PIN, LOW);
12 unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000UL); // 30 ms ≈ 5 m sınırı / ~5 m limit
13 if (sure == 0) return -1; // yankı yok / no echo
14 return sure * sesHizi / 2.0; // gidiş-dönüş / round trip
15}
16
17void setup() {
18 Serial.begin(9600);
19 pinMode(TRIG_PIN, OUTPUT);
20 pinMode(ECHO_PIN, INPUT);
21 sesHizi = (331.3 + 0.606 * SICAKLIK) / 10000.0; // m/s -> cm/µs (20 °C: 0,0343)
22}
23
24void loop() {
25 float olcum[5];
26 for (int i = 0; i < 5; i++) { // 5 ölçüm, aralarında 60 ms / 5 readings, 60 ms apart
27 olcum[i] = mesafeOlc();
28 delay(60);
29 }
30 for (int i = 1; i < 5; i++) { // sırala / sort
31 float x = olcum[i];
32 int j = i - 1;
33 while (j >= 0 && olcum[j] > x) { olcum[j + 1] = olcum[j]; j--; }
34 olcum[j + 1] = x;
35 }
36 float d = olcum[2]; // ortanca / median
37 if (d < 0) Serial.println("Menzil disi / out of range");
38 else { Serial.print(d, 1); Serial.println(" cm"); }
39}
40- Espere pelo menos 60 ms entre as leituras: se você medir novamente enquanto os ecos do pulso anterior ainda estiverem se refletindo pelo ambiente, os resultados serão incorretos.
- Superfícies macias e inclinadas: tecido, espuma e cortinas absorvem som; superfícies inclinadas mais de 45 graus refletem o eco para longe do sensor.
- Feixe amplo: o cone de aproximadamente 15 graus cobre uma área com quase 50 cm de largura a 2 metros; em um corredor estreito, ele também pode detectar as paredes laterais.
- Placas de 3,3 V: o HC-SR04 clássico precisa de 5 V e sua saída ECHO é de 5 V; no ESP32 e no Pico, coloque um divisor de tensão no ECHO ou use o HC-SR04P, que funciona com 3,3 V.
- Vários sensores: dois HC-SR04 acionados ao mesmo tempo captam os ecos um do outro; acione-os um após o outro.
A ligação do HC-SR04 e seu uso com o Monitor Serial e um LCD são explicados em detalhes no artigo sobre o sensor de distância HC-SR04; aqui, o foco é a comparação.
JSN-SR04T: o ultrassônico à prova d’água
O JSN-SR04T funciona com a mesma lógica de disparo e eco do HC-SR04, mas seu transdutor fica em uma cápsula à prova d’água ligada por um cabo, separada da placa eletrônica. Isso o torna a escolha para locais úmidos, como caixas-d’água, poços, cisternas de chuva e sensores de estacionamento externos. Ele tem duas diferenças importantes: como um único transdutor emite e escuta, há uma zona cega a curta distância (cerca de 20–25 cm), e seu feixe é mais amplo que o do HC-SR04. Instale o sensor na tampa superior do reservatório, pelo menos 25 cm acima do nível máximo da água. O código abaixo transforma a distância em um percentual de enchimento.
1// JSN-SR04T ile su deposu doluluğu / water tank level with a JSN-SR04T
2const int TRIG_PIN = 9;
3const int ECHO_PIN = 10;
4const float SENSOR_BOSLUK = 25.0; // sensörden en yüksek su seviyesine, cm (ölü bölge) / sensor to max level (blind zone)
5const float DEPO_DERINLIK = 120.0; // en yüksek seviyeden depo dibine, cm / max level to tank bottom
6
7float mesafeOlc() {
8 digitalWrite(TRIG_PIN, LOW);
9 delayMicroseconds(5);
10 digitalWrite(TRIG_PIN, HIGH);
11 delayMicroseconds(20); // JSN-SR04T 10 µs'den uzun darbeyi sever / likes a longer pulse
12 digitalWrite(TRIG_PIN, LOW);
13 unsigned long sure = pulseIn(ECHO_PIN, HIGH, 40000UL);
14 if (sure == 0) return -1;
15 return sure * 0.0343 / 2.0; // 20 °C ses hızı / speed of sound at 20 °C
16}
17
18void setup() {
19 Serial.begin(9600);
20 pinMode(TRIG_PIN, OUTPUT);
21 pinMode(ECHO_PIN, INPUT);
22}
23
24void loop() {
25 float d = mesafeOlc();
26 if (d < 0) {
27 Serial.println("Yanki yok / no echo");
28 } else {
29 float suYuksekligi = DEPO_DERINLIK - (d - SENSOR_BOSLUK); // dipten su yüksekliği / water height
30 float yuzde = constrain(suYuksekligi / DEPO_DERINLIK * 100.0, 0, 100);
31 Serial.print("Mesafe / distance: ");
32 Serial.print(d, 1);
33 Serial.print(" cm Doluluk / fill: %");
34 Serial.println(yuzde, 0);
35 }
36 delay(1000); // su yüzeyi dalgalanır, sık ölçme / water ripples, measure slowly
37}
38Sharp GP2Y0A21: infravermelho analógico
O Sharp GP2Y0A21YK0F é um sensor infravermelho que funciona entre 10 e 80 cm e fornece uma tensão analógica conforme a distância. Como usa triangulação, ele é menos sensível à cor do alvo que sensores baseados na intensidade da reflexão. Sua saída não é linear: fornece cerca de 2,3 V a 10 cm e 0,4 V a 80 cm, seguindo uma curva de potência inversa entre esses pontos. O código converte essa curva com a aproximação distância = 29.988 × V^-1.173. A maior armadilha ocorre abaixo de 10 cm: à medida que o alvo se aproxima, a saída volta a cair, e um objeto a 5 cm pode parecer estar a 20 cm. Instale o sensor de modo que o alvo nunca possa se aproximar a menos de 10 cm.
1// Sharp GP2Y0A21YK0F (10–80 cm), analog / analog output
2const int SHARP_PIN = A0;
3
4float sharpCm() {
5 long toplam = 0;
6 for (int i = 0; i < 20; i++) { // 20 okumanın ortalaması / average of 20 readings
7 toplam += analogRead(SHARP_PIN);
8 delay(2);
9 }
10 float volt = toplam / 20.0 * 5.0 / 1023.0;
11 if (volt < 0.35) return -1; // 80 cm'den uzak / farther than 80 cm
12 float cm = 29.988 * pow(volt, -1.173); // ters güç eğrisi / inverse power curve
13 if (cm > 80) return -1;
14 return cm; // 10 cm altı yanıltıcı / misleading below 10 cm
15}
16
17void setup() {
18 Serial.begin(9600);
19}
20
21void loop() {
22 float cm = sharpCm();
23 if (cm < 0) Serial.println("Menzil disi / out of range");
24 else { Serial.print(cm, 1); Serial.println(" cm"); }
25 delay(100);
26}
27Sensores Sharp consomem pulsos curtos de alta corrente durante a medição, e esses pulsos geram ruído na linha de alimentação. Um capacitor de aproximadamente 10 µF próximo aos pinos VCC e GND do sensor estabiliza bastante as leituras. A família também tem modelos com outros alcances: o GP2Y0A41SK0F funciona de 4 a 30 cm, e o GP2Y0A02YK0F, de 20 a 150 cm; cada um tem coeficientes de curva diferentes.
VL53L0X e VL53L1X: sensores laser ToF
O VL53L0X e o VL53L1X são minúsculos sensores laser de tempo de voo da STMicroelectronics. Eles emitem um pulso laser invisível de 940 nm, medem o tempo de retorno da reflexão com contadores de fótons e fornecem o resultado diretamente em milímetros via I2C. São quase independentes da cor, seu feixe é mais estreito que o de um sensor ultrassônico e uma medição leva 20–50 ms. O VL53L0X mede até cerca de 1,2 metro no modo padrão e 2 metros no modo de longo alcance; o VL53L1X chega a 4 metros e seu campo de visão (ROI) pode ser reduzido por software. Ambos têm o endereço I2C padrão 0x29. O código abaixo usa a biblioteca VL53L0X da Pololu; busque “VL53L0X” no Gerenciador de Bibliotecas e instale a versão da Pololu.
1#include <Wire.h>
2#include <VL53L0X.h> // Pololu VL53L0X kütüphanesi / library
3
4VL53L0X sensor;
5
6void setup() {
7 Serial.begin(9600);
8 Wire.begin(); // Uno: SDA A4, SCL A5 / ESP32: SDA 21, SCL 22
9 sensor.setTimeout(500);
10 if (!sensor.init()) {
11 Serial.println("VL53L0X bulunamadi / not found");
12 while (true) {}
13 }
14 // Uzun menzil modu (2 m'ye kadar, daha gürültülü) / long range mode (up to 2 m, noisier):
15 // sensor.setSignalRateLimit(0.1);
16 // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
17 // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
18 sensor.setMeasurementTimingBudget(50000); // 50 ms: daha kararlı ölçüm / steadier reading
19 sensor.startContinuous();
20}
21
22void loop() {
23 uint16_t mm = sensor.readRangeContinuousMillimeters();
24 if (sensor.timeoutOccurred()) {
25 Serial.println("Zaman asimi / timeout");
26 } else if (mm >= 8190) { // 8190-8191: hedef yok / no target
27 Serial.println("Menzil disi / out of range");
28 } else {
29 Serial.print(mm);
30 Serial.println(" mm");
31 }
32}
33O tempo reservado para a medição define o equilíbrio entre exatidão e velocidade: 20 ms é rápido, mas gera ruído; 200 ms é lento, mas estável. A luz solar e fontes intensas de infravermelho reduzem bastante o alcance; lembre-se disso se for medir ao ar livre. Para conectar dois VL53L0X ao mesmo barramento I2C, como ambos têm o endereço 0x29, mantenha um desativado pelo pino XSHUT e atribua um novo endereço ao outro (setAddress); os detalhes do I2C estão no artigo O que é I2C.
TF-Luna: 8 metros com um pequeno LiDAR
O TF-Luna é o pequeno LiDAR de ponto único da Benewake: ele mede o tempo de voo modulando luz infravermelha de 850 nm, funciona de 0,2 a 8 metros com um feixe muito estreito de apenas 2 graus e pode fazer até 250 leituras por segundo. Por padrão, envia cada leitura via UART a 115200 baud como um pacote de 9 bytes: dois bytes de cabeçalho 0x59, distância (cm), intensidade do sinal, temperatura interna e uma soma de verificação. Se a intensidade do sinal for inferior a 100 ou igual a 65.535 (superexposição), a leitura é considerada pouco confiável. Ele é alimentado com 5 V, mas seu nível lógico UART é de 3,3 V, então pode ser conectado diretamente a um ESP32. Como a SoftwareSerial do Uno não é confiável a 115200 baud, escolha uma placa com UART por hardware, como o ESP32 ou o Mega; a lógica de interpretação de pacotes UART é explicada no artigo sobre comunicação serial UART.
1// TF-Luna LiDAR, UART (115200), ESP32 Serial2
2// TF-Luna TX -> GPIO 16, RX -> GPIO 17, VCC 5V, GND
3const int RXD2 = 16, TXD2 = 17;
4
5uint8_t kare[9]; // 0x59 0x59 DistL DistH AmpL AmpH TempL TempH Checksum
6int konum = 0;
7
8void setup() {
9 Serial.begin(115200);
10 Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
11}
12
13void loop() {
14 while (Serial2.available()) {
15 uint8_t b = Serial2.read();
16 if (konum < 2) { // iki 0x59 başlık baytını bekle / wait for two 0x59 header bytes
17 if (b == 0x59) kare[konum++] = b;
18 else konum = 0;
19 continue;
20 }
21 kare[konum++] = b;
22 if (konum < 9) continue;
23 konum = 0;
24
25 uint8_t toplam = 0;
26 for (int i = 0; i < 8; i++) toplam += kare[i];
27 if (toplam != kare[8]) continue; // sağlama toplamı hatalı / bad checksum
28
29 uint16_t mesafe = kare[2] | (kare[3] << 8); // cm
30 uint16_t guc = kare[4] | (kare[5] << 8); // sinyal gücü / signal strength
31 float derece = (kare[6] | (kare[7] << 8)) / 8.0 - 256.0;
32
33 if (guc < 100 || guc == 65535) { // zayıf ya da aşırı sinyal / weak or saturated
34 Serial.println("Guvenilmez / unreliable");
35 } else {
36 Serial.print(mesafe);
37 Serial.print(" cm guc / amp: ");
38 Serial.print(guc);
39 Serial.print(" ic sicaklik / chip temp: ");
40 Serial.println(derece, 1);
41 }
42 }
43}
44TCRT5000: detecção de proximidade e de linha

O TCRT5000 não é um medidor de distância, mas um sensor reflexivo: a luz do LED infravermelho é refletida pela superfície, e o fototransistor ao lado mede quanto retorna. Ele funciona melhor a cerca de 2,5 mm, e o sinal enfraquece rapidamente além de 1,5 cm. Como superfícies brancas refletem muito e as pretas muito pouco, ele fornece valores completamente diferentes conforme a cor, mesmo à mesma distância; por isso, é usado para distinguir preto de branco em robôs seguidores de linha, contar furos em discos de encoder e detectar objetos muito próximos. O comparador do módulo comuta a saída digital quando o limiar ajustado pelo potenciômetro é ultrapassado. Veja os detalhes no artigo sobre o sensor infravermelho TCRT5000.
1// TCRT5000 modülü: DO dijital, AO analog / TCRT5000 module: DO digital, AO analog
2const int DO_PIN = 7;
3const int AO_PIN = A1;
4const int LED_PIN = 13;
5
6void setup() {
7 Serial.begin(9600);
8 pinMode(DO_PIN, INPUT);
9 pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13 bool nesneVar = (digitalRead(DO_PIN) == LOW); // çoğu modülde LOW = yansıma var / LOW = reflection on most modules
14 int yansima = analogRead(AO_PIN); // düşük değer = güçlü yansıma / low value = strong reflection
15 digitalWrite(LED_PIN, nesneVar);
16 Serial.print(nesneVar ? "Nesne VAR / object " : "Nesne yok / none ");
17 Serial.println(yansima);
18 delay(100);
19}
20Efeito da superfície e do ambiente
O alcance de um sensor no papel muda quando ele encontra a superfície que você vai medir. Sensores ultrassônicos são excelentes em superfícies rígidas que refletem som, mas têm dificuldade com tecidos que o absorvem; sensores baseados em luz são afetados pela cor, pelo brilho e pela luz solar. A tabela abaixo mostra qual sensor permanece confiável em cada situação para ajudar você a planejar seu projeto.
| Superfície / ambiente | Ultrassônico (HC-SR04) | Sharp IR | Laser ToF (VL53, TF-Luna) | TCRT5000 |
|---|---|---|---|---|
| Parede rígida e plana | Muito bom | Bom | Muito bom | Bom (apenas muito perto) |
| Tecido, espuma, cortinas | Fraco (som absorvido) | Bom | Bom | Médio |
| Superfície preta fosca | Bom | Médio | Alcance reduzido | Muito fraco |
| Vidro, espelho, metal brilhante | Bom (o som é refletido) | Enganoso | Enganoso (a luz atravessa ou é desviada) | Enganoso |
| Superfície inclinada | Fraco (o eco é desviado) | Médio | Bom | Médio |
| Luz solar, ambiente externo | Não é afetado | É afetado | Alcance bastante reduzido | É afetado |
| Superfície da água | Bom (medição em reservatórios) | Fraco | Variável | Não adequado |
| Variações de temperatura | A velocidade do som muda, exige correção | Pouco afetado | Pouco afetado | Pouco afetado |
Resumo das ligações: Uno, ESP32 e Pico
| Sensor | Arduino Uno | ESP32 | Raspberry Pi Pico | Observação |
|---|---|---|---|---|
| HC-SR04 / JSN-SR04T | TRIG D9, ECHO D10, 5V | TRIG 5, ECHO 18 (via divisor), VIN 5V | TRIG GP14, ECHO GP15 (via divisor), VBUS | A saída ECHO fornece 5 V |
| Sharp GP2Y0A21 | A0, 5V | GPIO 34 (via divisor), VIN 5V | GP26 (via divisor), VBUS | A saída pode chegar a 3,1 V |
| VL53L0X / VL53L1X | SDA A4, SCL A5 | SDA 21, SCL 22 | SDA GP4, SCL GP5 | Endereço 0x29 |
| TF-Luna | SoftwareSerial não recomendada | TX → GPIO 16, RX → GPIO 17 | TX → GP1 (uart0 RX), RX → GP0 | Alimentação de 5 V, lógica de 3,3 V |
| Módulo TCRT5000 | DO D7, AO A1 | DO 27, AO 34 | DO GP16, AO GP27 | 3,3–5 V |
Medição ultrassônica com o Raspberry Pi Pico
No MicroPython, a duração do pulso é medida com machine.time_pulse_us(); ela faz o mesmo que pulseIn() no Arduino e retorna um valor negativo quando o tempo limite é excedido. Alimente o HC-SR04 pelo pino VBUS (USB 5 V) do Pico e coloque um divisor de 1 kΩ + 2 kΩ na linha ECHO, ou use o HC-SR04P, que funciona diretamente com 3,3 V. Também existem drivers MicroPython para o VL53L0X e o TF-Luna; você pode interpretar facilmente o pacote UART do TF-Luna com machine.UART usando a mesma lógica do código Arduino.
1from machine import Pin, time_pulse_us
2import time
3
4trig = Pin(14, Pin.OUT)
5echo = Pin(15, Pin.IN) # 5 V ECHO için gerilim bölücü şart / divider required for a 5 V ECHO
6SES_HIZI = 0.0343 # cm/µs, 20 °C
7
8def mesafe_olc():
9 trig.low()
10 time.sleep_us(2)
11 trig.high()
12 time.sleep_us(10) # 10 µs tetik / 10 µs trigger
13 trig.low()
14 sure = time_pulse_us(echo, 1, 30000) # zaman aşımında eksi döner / negative on timeout
15 if sure < 0:
16 return None
17 return sure * SES_HIZI / 2
18
19while True:
20 d = mesafe_olc()
21 print("Menzil disi" if d is None else "{:.1f} cm".format(d))
22 time.sleep_ms(100)
23Qual sensor de distância usar em cada projeto?
| Projeto | Sensor recomendado | Por quê? |
|---|---|---|
| Robô que desvia de obstáculos | HC-SR04 (econômico) ou VL53L0X | O feixe amplo não deixa passar obstáculos; o VL53L0X é mais rápido e menor |
| Nível de caixa-d’água ou poço | JSN-SR04T | Sonda à prova d’água, detecta bem a superfície da água |
| Sensor de estacionamento para carro | JSN-SR04T ou HC-SR04 | Resistência ao ambiente externo, alcance de 2–3 m é suficiente |
| Robô seguidor de linha | TCRT5000 | Feito para distinguir preto de branco |
| Mini sumô, medição precisa sobre a bancada | VL53L0X / VL53L1X | Resolução milimétrica, feixe estreito, tamanho pequeno |
| Radar com Arduino (varredura com servo) | HC-SR04 ou TF-Luna | O HC-SR04 é barato; o feixe de 2° do TF-Luna desenha um mapa muito mais nítido |
| Medidor de altura, contador de passagem em portas | VL53L1X ou TF-Luna | Longo alcance e leituras estáveis |
| Drone, longa distância | TF-Luna | Alcance de 8 m, até 250 Hz |
| Torneira sem toque, detecção de mãos | Sharp GP2Y0A21 | Alcance de 10–80 cm e saída analógica simples |
Mais algumas ideias de projetos: gire um HC-SR04 com um servo para montar uma visualização de radar com Arduino; use um HC-SR04 na frente e dois VL53L0X nas laterais do seu robô que desvia de obstáculos; abra a tampa de uma lixeira inteligente quando uma mão se aproximar; monte uma trena digital portátil com um display OLED ou envie o nível de enchimento da caixa-d’água para seu celular por meio de um ESP32 com um JSN-SR04T.
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
| HC-SR04 sempre indica 0 ou fora de alcance | Sem eco, problema de ligação ou alimentação | Verifique a alimentação de 5 V e os pinos TRIG/ECHO, defina um tempo limite para pulseIn |
| Leituras ultrassônicas dão saltos de vez em quando | Eco do pulso anterior ou de uma parede lateral | Espere 60 ms entre as leituras, use um filtro de mediana |
| JSN-SR04T não consegue medir de perto | Zona cega (20–25 cm) | Instale o sensor a pelo menos 25 cm do alvo |
| Sharp indica um valor alto e incorreto muito perto | A curva se inverte abaixo de 10 cm | Impeça que o alvo se aproxime a menos de 10 cm |
| Leituras do Sharp têm ruído | Pulsos de corrente perturbam a alimentação | Capacitor de 10 µF entre VCC-GND, calcule a média das leituras |
| VL53L0X não encontrado | Ligação I2C ou conflito de endereços | Verifique SDA/SCL e o endereço 0x29 com um scanner I2C |
| Sensor laser indica distância menor ao ar livre | Infravermelho presente na luz solar | Faça sombra, aumente o tempo reservado à medição ou use um ultrassônico |
| Dados do TF-Luna sem sentido | Baud rate incorreto ou SoftwareSerial não acompanha | Use 115200 baud e uma UART por hardware, verifique a soma de verificação |
Sensores de distância são a maneira mais fácil de fazer projetos com Arduino perceberem o ambiente ao redor, e escolher o modelo certo é o que diferencia um projeto estável de outro que tira você do sério. As tabelas e o código desta comparação ajudam a equilibrar orçamento e desempenho conforme suas necessidades. No app BlueGrays, você encontra projetos passo a passo com esquemas do circuito e código para medição de distância com HC-SR04, sensor de estacionamento, medidor de altura, robô que desvia de obstáculos, sensor de estacionamento com ESP32 e medição de distância com TCRT5000.
Perguntas frequentes
Qual é o melhor sensor de distância para Arduino?
Não existe um único sensor melhor; a escolha depende do alvo e do ambiente. O HC-SR04 atende ao uso geral de baixo custo; o VL53L0X ou VL53L1X, à precisão milimétrica e ao feixe estreito; o JSN-SR04T, a locais úmidos; e o TF-Luna, à medição rápida além de alguns metros.
Até que distância o HC-SR04 consegue medir?
O fabricante informa de 2 cm a 4 metros, mas, na prática, as leituras confiáveis costumam chegar a 2–3 metros. Você se aproxima do limite quando o alvo é grande, rígido e perpendicular ao sensor; com alvos macios, pequenos ou inclinados, o alcance diminui bastante.
Qual é a diferença entre sensores de distância ultrassônicos e infravermelhos?
Um sensor ultrassônico mede o tempo de retorno do eco de um pulso sonoro; ele não é afetado pela cor nem pela luz, mas seu feixe é amplo e ele tem dificuldade com superfícies macias. Sensores infravermelhos usam luz, têm feixes mais estreitos e são rápidos, mas a luz solar, o vidro e algumas superfícies escuras podem prejudicar a leitura.
Qual é a diferença entre o VL53L0X e o VL53L1X?
Ambos são sensores laser ToF com interface I2C. O VL53L0X mede até cerca de 2 metros, enquanto o VL53L1X chega a 4 metros, pode medir mais rápido e permite reduzir o campo de visão por software. O VL53L0X atende a pequenos robôs de curto alcance; o VL53L1X, a medições mais distantes e precisas.
Qual sensor de distância devo usar para medir o nível de uma caixa-d’água?
O JSN-SR04T, com sua sonda à prova d’água, é a escolha mais comum; ele é instalado na tampa superior do reservatório, pelo menos 25 cm acima do nível máximo da água. O HC-SR04 também funciona em reservatórios secos e fechados, mas a umidade e a condensação podem danificá-lo rapidamente.
Sensores de distância funcionam com ESP32 e Raspberry Pi Pico?
Sim, mas você precisa de um divisor de tensão para reduzir a 3,3 V a saída ECHO dos HC-SR04 e JSN-SR04T de 5 V e a saída analógica do Sharp. Os módulos VL53L0X e o TF-Luna já usam lógica compatível com 3,3 V, e o HC-SR04P funciona diretamente com 3,3 V.
Projetos para montar depois desta leitura
Ver todos os projetos
Medição de distância com HC-SR04 (Monitor Serial)
O sensor HC-SR04 funciona como um morcego que se orienta no escuro: emite um som que você não consegue ouvir, escuta o eco e mede a distância até o objeto à sua frente. O Arduino escreve essa distânci

Sensor de estacionamento com HC-SR04
Uma versão em miniatura do sensor de estacionamento de um carro: quanto mais perto um objeto chega, mais rápidos ficam os bipes. O sensor de distância mede a distância até o objeto à sua frente; se el

Projeto de medição de altura
Um medidor de altura preso ao batente da porta que informa, em centímetros, a altura de quem está embaixo dele. Primeiro, você pressiona o primeiro botão sem ninguém embaixo, e o sensor de distância m

Robô que desvia de obstáculos
Que tal construir um veículo inteligente que encontra seu próprio caminho? O robô que desvia de obstáculos monitora o ambiente constantemente com o sensor ultrassônico na parte da frente. Ao encontrar

Medidor ultrassônico de distância HC-SR04 com ESP32
O sensor ultrassônico HC-SR04 calcula a distância medindo o tempo que a onda sonora emitida leva para atingir um objeto e retornar (tempo de voo). Neste projeto, enviaremos um pulso de 10 microssegundos do ESP32 ao pino TRIG do sensor e leremos a duração do eco no pino ECHO com pulseIn(). Exibiremos a distância calculada em centímetros em um LCD I2C 16x2. Como o HC-SR04 opera a 5V, é preciso usar um divisor de tensão no pino ECHO; caso contrário, o GPIO de 3,3V do ESP32 será danificado.

Sensor de estacionamento com ESP32 (HC-SR04 + barra de 5 LEDs + buzzer + OLED)
A versão com ESP32 do sensor de estacionamento de carro! Usamos o sensor ultrassônico HC-SR04 para medir a distância até o objeto à sua frente. Conforme a distância diminui, a barra de 5 LEDs vai se preenchendo (verde → amarelo → vermelho) e o intervalo entre os bipes do buzzer diminui. Quando o objeto chega muito perto (menos de 10 cm), o alarme soa continuamente e todos os LEDs acendem.

Leitura de reflexão (proximidade) com TCRT5000
Com um pequeno sensor que emite luz invisível e mede quanto dela é refletido, você detecta a superfície à frente dele. Quanto mais o sensor se aproxima de um objeto ou de uma superfície clara, mais lu

Medição de distância com display LCD
Uma ferramenta que mede distâncias sem régua: aproxime e afaste a mão na frente do sensor e veja o número mudar. O HC-SR04 emite uma onda sonora e escuta seu eco, e o Arduino calcula a distância em ce
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

