Instructor
Zobaer Hossain Bhuiyan
Day 01:
Basic robotics implementations
Duration:
3 hours

Module 1: Blinking LED

				
					void setup() {  
  pinMode(13, OUTPUT);     // Initialize digital pin 13 as an output.
}

// The main loop that continues forever
void loop() {
  digitalWrite(13, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);             // wait for a second
  digitalWrite(13, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);             // wait for a second
}
				
			

Module 2: Distance Measurement with Sonar sensor

				
					#define TRIG_PIN 3
#define ECHO_PIN 2

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  // Trigger pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Read echo time
  long duration = pulseIn(ECHO_PIN, HIGH);

  // Distance in cm
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}

				
			

Module 3: Distance Measurement with Sonar sensor & LCD I2C

				
					#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define TRIG_PIN 3
#define ECHO_PIN 2

// Change address if needed: common values 0x27 or 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  lcd.init();
  lcd.backlight();

  lcd.setCursor(0, 0);
  lcd.print("Ultrasonic");
}

void loop() {
  // Trigger pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.0343 / 2; // cm

  lcd.setCursor(0, 1);
  lcd.print("Dist: ");
  lcd.print(distance, 1);
  lcd.print(" cm   "); // clear leftovers

  delay(500);
}

				
			

Module 4: Distance Measurement with Sonar sensor & LCD I2C with DC Motor

				
					#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define TRIG_PIN 3
#define ECHO_PIN 2

#define ENA 8
#define IN1 9
#define IN2 10

LiquidCrystal_I2C lcd(0x27, 16, 2); // change to 0x3F if needed

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Distance:");
}

float getDistanceCM() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH, 25000); // timeout ~4m
  if (duration == 0) return -1;

  return duration * 0.0343 / 2;
}

void motorForward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 200); // speed (0–255)
}

void motorStop() {
  analogWrite(ENA, 0);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}

void loop() {
  float distance = getDistanceCM();

  lcd.setCursor(0, 1);
  if (distance < 0) {
    lcd.print("Out of range ");
    motorStop();
  } else {
    lcd.print(distance, 1);
    lcd.print(" cm       ");

    if (distance < 10.0) {
      motorForward();
    } else {
      motorStop();
    }
  }

  delay(300);
}