Challenge

Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)

Aim:

To implement code for “Measuring distance of an object using ultrasonic distance sensor (HC-SR04).

Objective:

Measuring the distance of an object using Ultrasonic Distance Sensor (HC-SR04)

Usage of Input Capture Mode

Highlights:

Measuring the distance travelled by the wave to the object and gets bounced back from the object to sensor.

Measuring Pulse width using Input Capture Mode

Deliverables:

The distance travelled by a wave to the object for which we want to measure the distance using Ultrasonic Distance Sensor (HC-SR04).

Measuring Pulse width using Input Capture Mode of Timer 1

Code:

#include

#define F_CPU 16000000ul

#include

#include

#include

#include

#define lcd_data_dir DDRD         

#define lcd_command_dir DDRC      

#define lcd_data_port PORTD       

#define lcd_command_port PORTC      

#define EN PC2                      

#define RW PC3                       

#define RS PC4                      

void lcd_command(char);                     

void lcd_char(char);                        

void lcd_init(void);                         

void lcd_string(char*);                   

void lcd_string_xy (char,char,char*);          

void lcd_command (char cmd)                    

{

lcd_data_port = cmd;                          

lcd_command_port&=~((1<

lcd_command_port|= (1<

_delay_ms(1);

lcd_command_port&=~(1<

_delay_ms(2);                                   

}

void lcd_char(char char_data)                     

{

lcd_data_port= char_data;                       

lcd_command_port&=~(1<

lcd_command_port|=((1<

_delay_ms(1);

lcd_command_port&=~(1<

_delay_ms(1);

}

void lcd_init(void)                               

{

lcd_command_dir|= (1<

lcd_data_dir = 0xff;                                     

_delay_ms(20);                            

lcd_command(0x38);                        

lcd_command(0x0C);                      

lcd_command(0x06);                      

lcd_command(0x01);                      

lcd_command(0x80);                     

}

void lcd_string(char *str)             

int i;

for(i=0;str[i]!=0;i++)            

{

lcd_char (str[i]);               

}

}

void lcd_string_xy(char row,char pos,char *str)             

{

if (row == 1)

lcd_command((pos & 0x0f)|0x80);

else if (row == 2)

lcd_command((pos & 0x0f)|(0xC0));

lcd_string(str);                        

}

#define trigger_pin PA0                     

int TimerOverFlow = 0;

ISR(TIMER1_OVF_vect)

{

TimerOverFlow++;                      

}

int main (void)

{

char string[10];

long count;

double distance;

DDRA = 0x01;                           

PORTB = 0xff;                         

lcd_init();

lcd_string_xy(1,0,"ultrasonic");

sei();                                

TIMSK = (1<< TOIE1>

TCCR1A = 0;                           

while(1)

{

PORTA |= (1<< trigger>

_delay_ms(10);

PORTA &=(~(1<< trigger>

TCNT1 = 0;                             

TCCR1B = 0x41;                          

TIFR = 1<

TIFR = 1<

while ((TIFR & (1<

TCNT1 = 0;                                     

TCCR1B = 0x01;                                 

TIFR = 1<

TIFR = 1<

TimerOverFlow = 0;                               

while ((TIFR & (1<< ICF1>

count = ICR1 +(65535 * TimerOverFlow);              

distance = (double)count/466.47;

dtostrf(distance,2,2,string);                      

strcat(string,"cm");                             

lcd_string_xy(2,0,"dist= ");

lcd_string_xy(2,7,string);                     

_delay_ms(200);

}

}

Result:

Thus the implementation of code for “Measuring distance of an object using ultrasonic distance sensor (HC-SR04) is done.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.