Concept
I built a cool project using an ultrasonic sensor and an Arduino! It measures the distance to objects and tells me how far away they are using LEDs. If something is close, a red light blinks faster the closer it gets – like a warning. A green light turns on if it’s further away, so I know it’s safe. I can even start and stop the sensor with a button, which is pretty neat.
Video
Components Required:
Arduino Uno (or any compatible board)
Ultrasonic Sensor (HC-SR04 or similar)
Red LED
Green LED
220-ohm resistors (2 pieces) & 10k-ohm resistor
Push button
Jumper wires
Breadboard
Schematic
Code
const int trigPin = 3; //Trig const int echoPin = 2; //Echo const int redLedPin = 13; //RedLED const int greenLedPin = 12; //GreenLED const int buttonPin = 4; //PushButton int blinkInterval = 500; //BlinkInterval bool projectRunning = false; //FlagToStart void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); //SetUltrasonicSensor pinMode(echoPin, INPUT); pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); //SetButton } void loop() { if (digitalRead(buttonPin) == LOW) { projectRunning = !projectRunning; //Toggle project state } if (projectRunning) { //Measure distance with ultrasonic sensor long duration = 0; long distance = 0; int retryCount = 0; const int maxRetries = 5; //Set a max number of retries while (duration == 0 && retryCount < maxRetries) { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); retryCount++; } if (duration != 0) { distance = duration * 0.034 / 2; //Convert to cm } //Print distance to Serial Monitor Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); //Control LED based on distance if (distance <= 50) { digitalWrite(greenLedPin, LOW); blinkInterval = map(distance, 0, 50, 100, 1000); digitalWrite(redLedPin, HIGH); delay(blinkInterval); digitalWrite(redLedPin, LOW); delay(blinkInterval); } else { digitalWrite(redLedPin, LOW); digitalWrite(greenLedPin, HIGH); } } else { //Turn off both LEDs when the project is not running digitalWrite(redLedPin, LOW); digitalWrite(greenLedPin, LOW); } }
Building this project was a real learning curve! Seeing the LEDs react to the distance measurements was super cool, but getting there wasn’t always smooth sailing. The sensor readings were a bit wonky at first, picking up on random noise and stuff. I had to get creative with the code to filter that out and make sure it was actually measuring the right things.