Wednesday, 4 March 2020

Complete Guide for Ultrasonic Sensor HC-SR04 with Arduino

Description

The HC-SR04 ultrasonic sensor uses sonar to determine distance to an object like bats do. It offers excellent non-contact range detection with high accuracy and stable readings in an easy-to-use package. It comes complete with ultrasonic transmitter and receiver modules.





Features
Here’s a list of some of the HC-SR04 ultrasonic sensor features and specs:

Power Supply :+5V DC
Quiescent Current : <2ma p="">Working Current: 15mA
Effectual Angle: <15 p="">Ranging Distance : 2cm – 400 cm/1″ – 13ft
Resolution : 0.3 cm
Measuring Angle: 30 degree
Trigger Input Pulse width: 10uS
Dimension: 45mm x 20mm x 15mm

How Does it Work?
The ultrasonic sensor uses sonar to determine the distance to an object. Here’s what happens:

The transmitter (trig pin) sends a signal: a high-frequency sound.
When the signal finds an object, it is reflected and…
… the transmitter (echo pin) receives it.


HC-SR04 Ultrasonic Sensor Pinout



Pins

VCC: +5VDC
Trig : Trigger (INPUT)
Echo: Echo (OUTPUT)

GND: GND


Schematics

Follow the next schematic diagram to wire the HC-SR04 ultrasonic sensor to the Arduino.




The following table shows the connections you need to make:

Ultrasonic Sensor HC-SR04 Arduino

VCC                   5V
Trig                 Pin     11
Echo         Pin     12
GND               GND



Code

Upload the following code to your Arduino IDE.
/*
 * created by Rui Santos, https://randomnerdtutorials.com
 * 
 * Complete Guide for Ultrasonic Sensor HC-SR04
 *
    Ultrasonic sensor Pins:
        VCC: +5VDC
        Trig : Trigger (INPUT) - Pin11
        Echo: Echo (OUTPUT) - Pin 12
        GND: GND
 */
 
int trigPin = 11;    // Trigger
int echoPin = 12;    // Echo
long duration, cm, inches;
 
void setup() {
  //Serial Port begin
  Serial.begin (9600);
  //Define inputs and outputs
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 
void loop() {
  // The sensor is triggered by a HIGH pulse of 10 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  // Read the signal from the sensor: a HIGH pulse whose
  // duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(echoPin, INPUT);
  duration = pulseIn(echoPin, HIGH);
 
  // Convert the time into a distance
  cm = (duration/2) / 29.1;     // Divide by 29.1 or multiply by 0.0343
  inches = (duration/2) / 74;   // Divide by 74 or multiply by 0.0135
  
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  
  delay(250);
}

No comments: