// Parking Sensor — Arduino UNO + HC-SR04 + 3 LEDs + passive buzzer
// Robot Maker Toolkit starter project. Wiring matches the app's audited
// HC-SR04 table: TRIG->D9, ECHO->D10, VCC->5V, GND->GND.
const int trigPin = 9;
const int echoPin = 10;
const int greenLed = 4; // clear (> 100 cm)
const int yellowLed = 5; // getting close (30-100 cm)
const int redLed = 6; // close (< 30 cm)
const int buzzer = 3; // passive buzzer via tone()
const int ZONE_SAFE = 100; // cm
const int ZONE_NEAR = 30; // cm
const int ZONE_STOP = 10; // cm - continuous tone below this
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(buzzer, OUTPUT);
}
float readDistanceCm() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // 30 ms timeout (~5 m)
if (duration == 0) return -1.0; // no echo = out of range
return duration * 0.0343f / 2.0f;
}
void loop() {
float d = readDistanceCm();
bool valid = d > 0;
Serial.print("Distance: ");
if (valid) { Serial.print(d); Serial.println(" cm"); }
else { Serial.println("out of range"); }
digitalWrite(greenLed, valid && d > ZONE_SAFE ? HIGH : LOW);
digitalWrite(yellowLed, valid && d <= ZONE_SAFE && d > ZONE_NEAR ? HIGH : LOW);
digitalWrite(redLed, valid && d <= ZONE_NEAR ? HIGH : LOW);
if (!valid || d > ZONE_SAFE) {
noTone(buzzer); // clear: silence
delay(150);
} else if (d > ZONE_STOP) {
tone(buzzer, 2000, 60); // beep, faster as you close in
int gap = map((int)d, ZONE_STOP, ZONE_SAFE, 60, 400);
delay(constrain(gap, 60, 400));
} else {
tone(buzzer, 2000); // STOP: continuous tone
delay(60);
}
}