Robotics & Arduino
Lesson 3 · Hands on

Project 07

Ultrasonic — distance LEDs

The code.

//Declare

// US Pins
const int TRIG_PIN = 12;  // Start burst
const int ECHO_PIN = 11;  // Return value

// Led pins
const int LED_RED     = 5;
const int LED_YELLOW  = 4;
const int LED_GREEN   = 3;
const int LED_BLUE    = 2;

//Setup
void setup() {

  // Init serial comm 
  Serial.begin(9600);         // Run at 9600 bits per second

  // Ultrasonic pin modes
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // Led pin modes
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_YELLOW, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  
  allLedsOff();
}

//Run
void loop() {
  
  // Get Distance
  trigUltraSonic();   								// Ping Ultrasonic Sensor
  long duration = pulseIn(ECHO_PIN, HIGH, 30000);   // Stopwatch duration
  float distance = duration * 0.0343 / 2.0;         // Distance calculation
  printDistance(distance);    						// Print distance to Serial 

  // Light Leds
  allLedsOff(); 								// Reset leds
  if (duration == 0 || distance <= 2) {         // Sensor timeout or Blind
    digitalWrite(LED_BLUE, HIGH);
  }
  else lightLed(distance);						// Show distance
  //  - else - loop reset leds
  //  - distance > 50 cm, LEDs will remain off.

  delay(60); // Small stability delay between readings
}

//Logic
void trigUltraSonic(){
  // Clear
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  // Triger
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
}

void printDistance(int objDistance){
  Serial.print("Distance: ");
  Serial.print(objDistance);
  Serial.println(" cm");
}

void lightLed(int objDistance){
  if (objDistance > 2 && objDistance < 20) {     		// Under - up to 20 cm
    digitalWrite(LED_YELLOW, HIGH);
  }
  else if (objDistance >= 20 && objDistance <= 30) {  	// Sweetspot - 20 to 30 cm
    digitalWrite(LED_GREEN, HIGH);
  }
  else if (objDistance > 30 && objDistance <= 50) {   	// Over - 30 to 50 cm
    digitalWrite(LED_RED, HIGH);
  }
}

void allLedsOff(){
  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_YELLOW, LOW);
  digitalWrite(LED_GREEN, LOW);
  digitalWrite(LED_BLUE, LOW);
}






Ultrasonic distance-LED circuit: Trig to D12, Echo to D11; red LED to D5, yellow to D4, green to D3, blue to D2, each through a separate 330 ohm resistor, with common ground.