Very Shy Robot

Author : Ghibea Ovidiu-Catalin

Group : 1221A

Faculty : FILS

Introducere

This robot has an anxiety problem and does not want to meet with anyoane or anything.

Descriere generală

Small robot that is capable of sensing incoming obstacles and avoid them. Once the switch is turned on, the robot will start moving in a straight line. The ultrasonic sensor placed on the front of the robot will pick up any incoming waves and will translate this into distance in the code. If the received distance will be lower than a certain threshold He will stop and signal to the motor driver module to turn left until there is nothing in front of him anymore, after which he will continue moving.

Hardware Design

Components

Name Quantity
Arduino Uno 1
HC-SR04 Ultrasonic Sensor 1
Speaker 1
LM298N Motor Driver Module 1
5V DC Motors 2
Switch 1
9V Battery 1
Wheels 2
Chassis 1
Jumper Wires 1

Electric diagram:

Software Design

  • Development environments used: ArduinoIDE
  • Used libraries:

https://www.arduino.cc/reference/en/libraries/pcm/

How It Works

First define trig and echo pin of HC-SR04 in the program. In this project the trig pin is connected to GPIO9 and echo pin is connected to GPIO10 of Arduino NANO.

int trigPin = 9;      // trig pin of HC-SR04
 
int echoPin = 10;     // Echo pin of HC-SR04

Define pins for input of LM298N Motor Driver Module. The LM298N has 4 data input pins used to control the direction of motor connected to it.

int revleft4 = 4;       //REVerse motion of Left motor
int fwdleft5 = 5;       //ForWarD motion of Left motor
int revright6 = 6;      //REVerse motion of Right motor
int fwdright7 = 7;      //ForWarD motion of Right motor

In setup() function, define the data direction of utilised GPIO pins. The four Motor pins and Trig pin is set as OUTPUT and Echo Pin is set as Input.

pinMode(revleft4, OUTPUT);      // set Motor pins as output
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT); 
pinMode(trigPin, OUTPUT);         // set trig pin as output
pinMode(echoPin, INPUT);          //set echo pin as input to capture reflected waves

In loop() function, get the distance from HC-SR04 and based on the distance move the motor direction. The distance will show the object distance coming in front of the robot. The Distance is taken by bursting a beam of ultrasonic up to 10 us and receiving it after 10us. To learn more about measuring distance using Ultrasonic sensor and Arduino, follow the link.

digitalWrite(trigPin, LOW);
delayMicroseconds(2);   
digitalWrite(trigPin, HIGH);     // send waves for 10 us
delayMicroseconds(10);
duration = pulseIn(echoPin, HIGH); // receive reflected waves
distance = duration / 58.2;   // convert to distance
delay(10);

If the distance is greater than the defined distance means there is not obstacle in its path and it will moving in forward direction.

if (distance > 19)            
            {
            digitalWrite(fwdright7, HIGH);                    // move forward
            digitalWrite(revright6, LOW);
            digitalWrite(fwdleft5, HIGH);                                
            digitalWrite(revleft4, LOW);                                                       
            }

If the distance is less than the defined distance to avoid obstacle means there is some obstacle ahead. So in this situation robot will stop for a while and movebackwards after that again stop for a while and then take turn to another direction.

if (distance < 18)
             {
             digitalWrite(fwdright7, LOW);  //Stop                
             digitalWrite(revright6, LOW);
             digitalWrite(fwdleft5, LOW);                                
             digitalWrite(revleft4, LOW);
             delay(500);
             digitalWrite(fwdright7, LOW);      //movebackword         
             digitalWrite(revright6, HIGH);
             digitalWrite(fwdleft5, LOW);                                
             digitalWrite(revleft4, HIGH);
             delay(500);
             digitalWrite(fwdright7, LOW);  //Stop                
             digitalWrite(revright6, LOW);
             digitalWrite(fwdleft5, LOW);                                
             digitalWrite(revleft4, LOW);  
             delay(100);  
             digitalWrite(fwdright7, HIGH);       
             digitalWrite(revright6, LOW);   
             digitalWrite(revleft4, LOW);                                 
             digitalWrite(fwdleft5, LOW);  
             delay(500);
            }

This is how a robot can avoid obstacles in its path without getting stuck anywhere.

Demo

Concluzii

After finishing the project, I learned that:

  • While the code is simple, the hardest part was the making of the chasis.
  • Some parts have very tough bolts to unscrew which led to a lot of wasted time
  • It was fun to see it work after all the effort put in it

Download

Bibliografie/Resurse

pm/prj2022/robert/very_shy_robot.txt · Last modified: 2022/06/02 11:56 by ovidiu.ghibea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0