micro-controller 8051 based obstacle avoider robot
Post on 24-Oct-2015
1.944 Views
Preview:
DESCRIPTION
TRANSCRIPT
MICRO-CONTROLLER BASED
INTELLIGENT OBSTACLE
AVOIDER ROBOT
AND DISPLAY OF BLINKING
LED’S AND BUZZER
Class Project Report Subject: Advanced Microcontroller and microprocessor systems
Submitted To:
Dr. Veena Sharma, EED NIT-H
Submitted By:
Mirza Abdul Waris Beigh, Roll No: 10289
Department of Electrical Engineering
National Institute Of Technology, Hamirpur
CONTENTS:-
Introduction
Basic Principle
Logic Followed
Block Diagram
Components used
89V51RD2 Kit by Provotech
IR Sensors –3
USB-Serial Programmer By SILABS
2 line LCD Display.
Program Code Used
SENSOR B
Introduction:
The design and implementation of obstacle avoider robot using
8051 Microcontroller is being done. It is programmed to avoid
running into obstacles and detects the presence of different objects
around it and modifies the motion of the motors appropriately.
The objects are sensed by the IR (Infra Red) sensors. The
microcontroller controls two DC motors of robot to navigate.
Basic Principle: The basic principle involved in this is it captures the obstacle presence
with IR sensors mounted at the three sides of the robot. When the sensor
senses an object, analog signal is given to the op-amp to produce 0s and
1s which are then fed to the microcontroller, then the microcontroller
decides the next move according to the program. Microcontroller and
driver circuit are used for the control of motors.
SENSOR A SENSOR C
Logic Followed:
Sensor A Sensor B Sensor C Action
0 0 0 FORWARD
0 0 1 LEFT
0 1 0 RIGHT_DIFF
0 1 1 LEFT_DIFF
1 0 0 RIGHT
1 0 1 FORWARD
1 1 0 RIGHT_DIFF
1 1 1 BACK
Kit Used:
Mechanical parts: Chassis
Castor Wheel
L-Clamp
Motor
Wheel
Input and Output devices Battery Source
Sensor
Driver IC
Microcontroller unit
USB-Serial programmer
Source: An ideal voltage source is a voltage source that maintains the same
voltage across the source's terminals no matter what current is drawn
from the terminals of the source or what current flows into the terminals.
DC source: Direct current (DC) is the unidirectional flow of electric charge. Direct
current is produced by sources such as batteries, solar cells, and
commutator-type electric machines of the dynamo type, etc.
Sensor IR reflective sensors have one emitter (IR LED) and one receiver
(Phototransistor or photo diode. If we have white surface it reflects the
light and it will sensed by the receiver, similarly if we have black surface
it absorbs the light and receiver can not sense light.
Photo diode has property that if IR light fall on it its electrical resistance
comes down (i.e. it comes down from 150kΩ to 10kΩ if no noise
present).
Sample Calculation: Say Receiver has resistance
Rs=150kΩ without light (on black surface)
Rs=10kΩ with light (on white surface)
The voltage that goes to comparator Without light: (on black surface)
Vp=(Rs÷(Rs+R))Vcc=150÷(150+10))*5=4.6875V
With light: (on white surface)
Vp=(Rs÷(Rs+R))Vcc=10÷(10+10))*5=2.5000V
Thus we get variation of voltage that is sensed by comparator IC
(LM324).
This gives logical high or low according to input.
Comparator Comparator is a device which compares two input voltages and gives
output high/low. In circuit diagram it is normally represented by a
triangle having- Inverting (negative) Input (-),Non Inverting (positive)
Input(+), Vcc, Ground, Output.
Use of comparator in IR sensor
As above we see that two inputs are required for comparator. One input is
from photo-receiver (like photo-diode), other is generated by us using
potentiometer. The second voltage is also called as reference voltage for
that sensor.
LM358 The LM358 is a great, easy-to-use dual-channel opamp. LM358
applications include transducer amplifiers, DC gain blocks and all the
conventional opamp circuits.
Driver IC: L293D is a dual H-bridge motor driver integrated circuit (IC). Motor
drivers act as current amplifiers since they take a low-current control
signal and provide a higher-current signal. This higher current signal is
used to drive the motors. L293D contains two inbuilt H-bridge driver
circuits. In its common mode of operation, two DC motors can be driven
simultaneously, both in forward and reverse direction. The motor
operations of two motors can be controlled by input
logic at pins 2 & 7 and 10 & 15. Input logic 00 or 11 will stop the
corresponding motor. Logic 01 and 10 will rotate it in clockwise and
anticlockwise directions, respectively.
Enable pins 1 and 9 (corresponding to the two motors) must be high for
motors to start operating. When an enable input is high, the associated
driver gets enabled. Similarly, when the enable input is low, that driver is
disabled, and their outputs are off and in the high-impedance state.
Microcontroller: Microcontroller acts as the Brain of robot, which generates desired output
for corresponding inputs. In present days, there are several companies
that manufacture microcontrollers, for example ATMEL, Microchip,
Intel, Motorola, Philips etc. We are using P89V51RD2 microcontroller in
our robot. It is a PHILIPS product.
The NXP (founded by Philips) P89V51RD2 DIP is a 40MHz, 5 Volt
8051-based Microcontroller with 32 I/O lines is an extremely popular
8051 family of microcontroller available in standard 40-pin DIP package.
The microcontroller comes with an on-chip boot loader which makes it
easy to program using the USB-serial Programmer.
LCD Display:
LCD display is used to display different strings while program is running
and information regarding buttons to be pressed.
Decription Of Micro-controller board used
Keil uvision:
Keil C51 is the industry-standard tool chain for all 8051-compatible
devices, it supports classic 8051, Dallas 390, NXP MX, extended 8051
variants, and C251 devices. The µVision IDE/Debugger integrates
complete device simulation, interfaces too many target debug adapters,
and provides various monitor debug solutions.
Usb-Serial Programmer:
The programmer used is designed by SILABS and is very easy to use. We
just need to connect the USB cable to a PC and using Flash Magic we can
easily burn the program into the micro controller.
C Program Written:
#include<stdio.h>
#include<reg51.h>
#include"LCD.h"
sbit p1=P2^0;
sbit p2=P2^1;
sbit p3=P2^2;
sbit LED1=P3^0; //LED DEFINITIONS
sbit LED2=P3^1;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit SW1=P3^2; //SWITCH DEFINITIONS
sbit SW2=P3^3;
sbit SW3=P3^6; //SWITCHES ARE ACTIVE LOW (WHEN PRESSED
GIVE LOGIC LOW AT PIN)
sbit SW4=P3^7;
sbit BUZZER=P0^7;
// MOTOR PORT = PORT1
#define FORWARD 0x55
#define BACK 0XAA
#define LEFT 0x44
#define RIGHT 0x11
#define LEFT_DIFF 0x66
#define RIGHT_DIFF 0x99
#define STOP 0x00
void dot(void)
{
BUZZER=0; // TURN ON THE BUZZER
delay_ms(100); //WAIT
BUZZER=1; //TURN OFF THE BUZZER
delay_ms(100); //WAIT
}
void dash(void)
{
BUZZER=0;
delay_ms(300);
BUZZER=1;
delay_ms(90);
}
void main(void)
{
unsigned char sqnc;
P2=0xFF; //INTIALISE PORT 2 AS INPUT PORT FOR Sensors
P1=0x00; //INTIALISE PORT 1 AS OUTPUT PORT FOR MOTOR
LCD_INIT();
delay_ms(100);
LCD_CMD(0X01);
LCD_STRING("Welcome");
delay_ms(2000);
LCD_CMD(0x80);
LCD_STRING("SW1 SW2 SW3");
LCD_CMD(0xC0);
LCD_STRING("LED BUZ Wall-Avoid");
while(1)
{
if (SW1==0) //IF SWITCH1 IS PRESSED EXECUTE
RUNNING LED PROGRAM
{
LCD_CMD(0x01);
LCD_CMD(0x80);
LCD_STRING("Running LED Disp");
while(1)
{
for(sqnc=0;sqnc<=5;sqnc++)
{
LED1=0;LED2=1;LED3=1;LED4=1;
delay_ms(100);
LED1=1;LED2=0;LED3=1;LED4=1;
delay_ms(100);
LED1=1;LED2=1;LED3=0;LED4=1;
delay_ms(100);
LED1=1;LED2=1;LED3=1;LED4=0;
delay_ms(100);
}
for(sqnc=0;sqnc<=5;sqnc++)
{
LED1=1;LED2=1;LED3=1;LED4=0;
delay_ms(100);
LED1=1;LED2=1;LED3=0;LED4=1;
delay_ms(100);
LED1=1;LED2=0;LED3=1;LED4=1;
delay_ms(100);
LED1=0;LED2=1;LED3=1;LED4=1;
delay_ms(100);
}
for(sqnc=0;sqnc<=5;sqnc++)
{
LED1=1;LED2=0;LED3=0;LED4=1;
delay_ms(100);
LED1=0;LED2=1;LED3=1;LED4=0;
delay_ms(100);
LED1=0;LED2=1;LED3=1;LED4=0;
delay_ms(100);
LED1=1;LED2=0;LED3=0;LED4=1;
delay_ms(100);
}
for(sqnc=0;sqnc<=5;sqnc++)
{
LED1=0;LED2=0;LED3=0;LED4=0;
delay_ms(100);
LED1=1;LED2=1;LED3=1;LED4=1;
delay_ms(100);
LED1=0;LED2=0;LED3=0;LED4=0;
delay_ms(100);
LED1=1;LED2=1;LED3=1;LED4=1;
delay_ms(100);
}
for(sqnc=0;sqnc<=3;sqnc++)
{
LED1=0;LED2=1;LED3=1;LED4=1;
delay_ms(200);
LED1=0;LED2=0;LED3=1;LED4=1;
delay_ms(200);
LED1=0;LED2=0;LED3=0;LED4=1;
delay_ms(200);
LED1=0;LED2=0;LED3=0;LED4=0;
delay_ms(200);
LED1=1;LED2=1;LED3=1;LED4=1;
delay_ms(200);
}
for(sqnc=0;sqnc<=3;sqnc++)
{
LED1=1;LED2=1;LED3=1;LED4=0;
delay_ms(200);
LED1=1;LED2=1;LED3=0;LED4=0;
delay_ms(200);
LED1=1;LED2=0;LED3=0;LED4=0;
delay_ms(200);
LED1=0;LED2=0;LED3=0;LED4=0;
delay_ms(200);
LED1=1;LED2=1;LED3=1;LED4=1;
delay_ms(200);
}
}
}
if (SW2==0) //IF SWITCH2 IS PRESSED EXECUTE BUZZER
PROGRAM
{
LCD_CMD(0x01);
LCD_CMD(0x80);
LCD_STRING("Buzzer");
while(1)
{
dot();dot();dot();dash();dash();dot();dot();dot();delay_ms(1
000);delay_ms(1000); //MORSE CODE SEQUENCE
}
}
if (SW3==0) //IF SWITCH3 IS PRESSED TEXECUTE
MOTOR PROGRAM
{
LCD_CMD(0x01);
LCD_CMD(0x80);
LCD_STRING("Wall Avoider");
while(1)
{
here: if (p1==0 && p2==0 && p3==0)
{
P1=FORWARD;
goto here0;
}
here0: if (p1==0 && p2==0 && p3==1)
{
P1=RIGHT;
goto here1;
}
here1: if (p1==0 && p2==1 && p3==0)
{
P1= LEFT_DIFF;
goto here2;
}
here2: if (p1==0 && p2==1 && p3==1)
{
P1= RIGHT_DIFF;
goto here3;
}
here3: if (p1==1 && p2==0 && p3==0)
{
P1= LEFT;
goto here4;
}
here4: if (p1==1 && p2==0 && p3==1)
{
top related