Challenge

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

 Measuring distance of an object using ultrasonic sensor (HC-SR04)
 
#define F_CPU 8000000UL
#include
#include
#include
#include
#include
 
 
#define LCD_Data_Dir DDRD /* Define LCD data port direction */
#define LCD_Command_Dir DDRC /* Define LCD command port direction register */
#define LCD_Data_Port PORTD /* Define LCD data port */
#define LCD_Command_Port PORTC /* Define LCD data port */
#define EN PC2 /* Define Enable signal pin */
#define RW PC3 /* Define Read/Write signal pin */
#define RS PC4 /* Define Register Select (data reg./command reg.) signal pin */
 
void LCD_Command (char); /* LCD command write function */
void LCD_Char (char); /* LCD data write function */
void LCD_Init (void); /* LCD Initialize function */
void LCD_String (char*); /* Send string to LCD function */
void LCD_String_xy (char,char,char*); /* Send row, position and string to LCD function */
 
 
void LCD_Command (char cmd) /* LCD command write function */
{
LCD_Data_Port = cmd; /* Write command data to LCD data port */
LCD_Command_Port &= ~((1<
LCD_Command_Port |= (1<
_delay_us(1);
LCD_Command_Port &= ~(1<
_delay_ms(3); /* Wait little bit */
}
 
void LCD_Char (char char_data) /* LCD data write function */
{
LCD_Data_Port = char_data; /* Write data to LCD data port */
LCD_Command_Port &= ~(1<
LCD_Command_Port |= (1<
_delay_us(1);
LCD_Command_Port &= ~(1<
_delay_ms(1); /* Wait little bit */
}
 
void LCD_Init (void) /* LCD Initialize function */
{
LCD_Command_Dir |= (1<
LCD_Data_Dir = 0xFF; /* Make LCD data port direction as o/p */
 
_delay_ms(20); /* LCD power up time to get things ready, it should always >15ms */
LCD_Command (0x38); /* Initialize 16X2 LCD in 8bit mode */
LCD_Command (0x0C); /* Display ON, Cursor OFF command */
LCD_Command (0x06); /* Auto Increment cursor */
LCD_Command (0x01); /* Clear LCD command */
LCD_Command (0x80); /* 8 is for first line and 0 is for 0th position */
}
 
void LCD_String (char *str) /* Send string to LCD function */
{
int i;
for(i=0;str[i]!=0;i++) /* Send each char of string till the NULL */
{
LCD_Char (str[i]); /* Call LCD data write */
}
}
 
void LCD_String_xy (char row, char pos, char *str) /* Send string to LCD function */
{
if (row == 1)
LCD_Command((pos & 0x0F)|0x80); /* Command of first row and required position<16 */
else if (row == 2)
LCD_Command((pos & 0x0F)|0xC0); /* Command of Second row and required position<16 */
LCD_String(str); /* Call LCD string function */
}
#define Trigger_pin PA0 /* Trigger pin */
 
int TimerOverflow = 0;
 
ISR(TIMER1_OVF_vect)
{
TimerOverflow++; /* Increment Timer Overflow count */
}
 
int main(void)
{
char string[10];
long count;
double distance;
 
DDRA = 0x01; /* Make trigger pin as output */
PORTB = 0xFF; /* Turn on Pull-up */
 
LCD_Init();
LCD_String_xy(1, 0, "Ultrasonic");
 
sei(); /* Enable global interrupt */
TIMSK = (1 << TOIE1); /* Enable Timer1 overflow interrupts */
TCCR1A = 0; /* Set all bit to zero Normal operation */
 
while(1)
{
/* Give 10us trigger pulse on trig. pin to HC-SR04 */
PORTA |= (1 << Trigger_pin);
_delay_us(10);
PORTA &= (~(1 << Trigger_pin));
 
TCNT1 = 0; /* Clear Timer counter */
TCCR1B = 0x41; /* Capture on rising edge, No prescaler*/
TIFR = 1<
TIFR = 1<
 
/*Calculate width of Echo by Input Capture (ICP) */
 
while ((TIFR & (1 << ICF1)) == 0);/* Wait for rising edge */
TCNT1 = 0; /* Clear Timer counter */
TCCR1B = 0x01; /* Capture on falling edge, No prescaler */
TIFR = 1<
TIFR = 1<
TimerOverflow = 0;/* Clear Timer overflow count */
 
while ((TIFR & (1 << ICF1)) == 0);/* Wait for falling edge */
count = ICR1 + (65535 * TimerOverflow); /* Take count */
/* 8MHz Timer freq, sound speed =343 m/s */
distance = (double)count / 466.47;
 
dtostrf(distance, 2, 2, string);/* distance to string */
strcat(string, " cm "); /* Concat unit i.e.cm */
LCD_String_xy(2, 0, "Dist = ");
LCD_String_xy(2, 7, string); /* Print distance */
_delay_ms(200);
}
}
 

Measuring distance of an object using an ultrasonic sensor like the HC-SR04 can be a useful and cost-effective way to gather information about the environment in a variety of applications. 

  1. The ultrasonic sensor sends out a high-frequency sound wave, usually in the range of 40 kHz.
  2. The sound wave travels through the air until it encounters an object.
  3. When the sound wave hits the object, it is reflected back toward the sensor.
  4. The ultrasonic sensor then detects the reflected sound wave and calculates the time it took for the wave to travel to the object and back.
  5. By using the speed of sound in air (which is approximately 343 meters per second), the sensor can calculate the distance to the object.

To use an HC-SR04 ultrasonic sensor, you will typically need a microcontroller or other circuit to interface with the sensor and process the data. Here are the steps involved:

  1. Configure the microcontroller to send a short pulse (typically 10 microseconds) to the HC-SR04's "trigger" pin.
  2. The sensor will then emit an ultrasonic pulse and start a timer.
  3. When the reflected pulse is detected by the sensor, it will stop the timer.
  4. The microcontroller can then calculate the distance to the object by multiplying the time it took for the pulse to travel to the object and back by the speed of sound in air, and dividing the result by two (since the sound wave has to travel to the object and back).
  5. The calculated distance can then be output to a display or used in other ways as needed.

It's worth noting that there are a few factors that can affect the accuracy of the distance measurement using an ultrasonic sensor. These include the temperature and humidity of the air, as well as any interference from other sound sources in the environment. Additionally, the HC-SR04 has a limited range (typically around 2 meters) and may not work well in noisy environments or with certain types of objects (such as soft or absorbent materials). Nonetheless, with proper calibration and setup, an ultrasonic sensor like the HC-SR04 can be a useful tool for measuring distance in a wide range of applications.

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.