Monte um detector de distância completo: um display LCD mostra os centímetros em tempo real, três LEDs funcionam como um semáforo de proximidade (verde, amarelo, vermelho) e um buzzer apita cada vez mais rápido conforme você se aproxima do obstáculo.

O coração do projeto é o sensor ultrassônico HC-SR04. Ele emite um pulso de som inaudível e mede o tempo até o eco voltar — com esse tempo, o Arduino calcula a distância até o objeto. A cada leitura, o programa acende o LED da faixa correspondente, escreve o valor no display LCD e ajusta a velocidade do bipe. Quanto mais perto, mais rápido o apito.
Todos os componentes disponíveis na A2 Robotics — clique em cada item para comprar
Arduino Uno R3
1 unidade
Sensor ultrassônico HC-SR04
1 unidade
Display LCD 16x2
1 unidade
LED difuso 5mm verde
1 unidade
LED difuso 5mm amarelo
1 unidade
LED difuso 5mm vermelho
1 unidade
Buzzer ativo 5V
1 unidade
Resistor 220Ω (1/4W)
1 unidade (LCD)
Resistor 470Ω (1/4W)
3 unidades (LEDs)
Protoboard 830 pontos
1 unidade
Jumpers (cabos de ligação)
40 cabos
| Componente | Ligação no Arduino |
|---|---|
| HC-SR04 Trig / Echo | Pinos 7 e 6 |
| LCD (RS,EN,D4,D5,D6,D7) | Pinos 12, 11, 5, 4, 3, 2 |
| LEDs verde / amarelo / vermelho | Pinos 8 / 9 / 10 |
| Buzzer | Pino 13 |
// Sensor de estacionamento com LCD e LEDs — A2 Robotics #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int pinoTrig = 7, pinoEcho = 6; const int ledVerde = 8, ledAmarelo = 9, ledVermelho = 10; const int pinoBuzzer = 13; const int distSegura = 40, distAtencao = 20, distPerigo = 10; unsigned long ultimoBipe = 0; int intervaloBipe = 500; bool estadoBuzzer = false; // buzzer ligado/desligado void setup() { pinMode(ledVerde, OUTPUT); pinMode(ledAmarelo, OUTPUT); pinMode(ledVermelho, OUTPUT); pinMode(pinoBuzzer, OUTPUT); pinMode(pinoTrig, OUTPUT); pinMode(pinoEcho, INPUT); lcd.begin(16, 2); lcd.print("SENSOR DE RE"); delay(2000); lcd.clear(); } void loop() { long d = medirDistancia(); atualizarDisplay(d); atualizarLeds(d); atualizarBuzzer(d); delay(100); } long medirDistancia() { digitalWrite(pinoTrig, LOW); delayMicroseconds(2); digitalWrite(pinoTrig, HIGH); delayMicroseconds(10); digitalWrite(pinoTrig, LOW); long dur = pulseIn(pinoEcho, HIGH); long d = dur * 0.0343 / 2; if (d > 200) d = 200; if (d < 0) d = 0; return d; } void atualizarDisplay(long d) { lcd.setCursor(0,0); lcd.print("Dist: "); lcd.print(d); lcd.print(" cm "); lcd.setCursor(0,1); if (d > distSegura) lcd.print(" TUDO CERTO "); else if (d > distAtencao) lcd.print(" DIMINUA... "); else if (d > distPerigo) lcd.print(" ATENCAO!!! "); else lcd.print(" ** PARE! ** "); } void atualizarLeds(long d) { digitalWrite(ledVerde, d > distSegura); digitalWrite(ledAmarelo, d <= distSegura && d > distPerigo); digitalWrite(ledVermelho, d <= distAtencao); } void atualizarBuzzer(long d) { // Buzzer ATIVO: liga/desliga com digitalWrite (não usa tone). if (d > distSegura) { digitalWrite(pinoBuzzer, LOW); return; } if (d > distAtencao) intervaloBipe = 600; else if (d > distPerigo) intervaloBipe = 250; else intervaloBipe = 80; // Alterna o estado a cada intervalo, criando o bipe intermitente unsigned long agora = millis(); if (agora - ultimoBipe >= intervaloBipe) { ultimoBipe = agora; estadoBuzzer = !estadoBuzzer; digitalWrite(pinoBuzzer, estadoBuzzer); } }
VCC no 5V, GND no terra, Trig no pino 7 e Echo no pino 6.
Pinos RS, EN, D4, D5, D6 e D7 nos pinos 12, 11, 5, 4, 3 e 2.
Verde no 8, amarelo no 9, vermelho no 10 — cada um com resistor de 470Ω.
Respeite a polaridade: o terminal positivo (+) vai no pino 13 e o negativo (−) no GND. O buzzer ativo já tem o som embutido — não precisa de resistor.
Carregue na IDE do Arduino e aproxime a mão do sensor para ver os LEDs, o LCD e o buzzer reagirem.