Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Ultraschallsensor HC-SR04 und Arduino – Vollständige Anleitung

In diesem Tutorial lernen wir, wie der HC-SR04 Ultraschallsensor funktioniert und wie man es mit Arduino verwendet . Dies ist der beliebteste Sensor zum Messen von Entfernungen und zum Erstellen von Hindernisvermeidungsrobotern mit Arduino.

Ich habe den HC-SR04-Ultraschallsensor bereits zum Erstellen mehrerer cooler Arduino-Projekte verwendet, und Sie können sie sich hier ansehen:

  • Arduino-Radar (Sonar)
  • Entfernungsmesser und digitale Wasserwaage
  • Sicherheits- und Alarmsystemprojekt
  • Arduino Ant Hexapod-Roboter

Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen. Es enthält zusätzliche Informationen und Beispiele für den Sensor, einschließlich Spezifikationen, Pinbelegungen, Schaltplänen, Codes und mehr.

Überblick über die HC-SR04-Hardware

Der HC-SR04 ist ein erschwinglicher und einfach zu verwendender Entfernungsmesssensor, der einen Bereich von 2 cm bis 400 cm (etwa einen Zoll bis 13 Fuß) hat.

Der Sensor besteht aus zwei Ultraschallwandlern. Einer ist ein Sender, der Ultraschallimpulse ausgibt, und der andere ist ein Empfänger, der nach reflektierten Wellen lauscht. Es ist im Grunde ein SONAR, das in U-Booten zur Erkennung von Unterwasserobjekten verwendet wird.

Hier sind die wichtigsten Spezifikationen:

Betriebsspannung 5 V DC
Betriebsstrom 15 mA
Betriebsfrequenz 40 KHz
Mindestbereich 2 cm / 1 Zoll
Maximale Reichweite 400 cm / 13 Fuß
Genauigkeit 3 mm
Messwinkel <15°
Dimension 45 x 20 x 15 mm

Pinbelegung des Ultraschallsensors HC-SR04

Hier ist die Pinbelegung des Sensors:

Der Sensor hat 4 Pins. VCC und GND Gehen Sie zu 5V und GND Pins auf dem Arduino und dem Trig und Echo Gehen Sie zu einem beliebigen digitalen Arduino-Pin. Verwenden des Triggers Pin senden wir die Ultraschallwelle vom Sender und mit dem Echo Pin hören wir auf das reflektierte Signal.

Wie funktioniert der Ultraschall-Abstandssensor HC-SR04?

Es sendet einen Ultraschall mit 40.000 Hz aus, der durch die Luft wandert, und wenn sich ein Objekt oder Hindernis auf seinem Weg befindet, wird er zum Modul zurückgeworfen. Unter Berücksichtigung der Laufzeit und der Schallgeschwindigkeit können Sie die Entfernung berechnen.

Um den Ultraschall zu erzeugen, müssen wir den Trig-Pin für 10 µs auf einen High-Zustand setzen. Dadurch wird ein Ultraschallstoß mit 8 Zyklen ausgesendet, der sich mit Schallgeschwindigkeit fortbewegt. Die Echo-Stifte gehen sofort hoch, nachdem dieser 8-Zyklus-Ultraschallstoß gesendet wurde, und er beginnt zu lauschen oder darauf zu warten, dass diese Welle von einem Objekt reflektiert wird.

Wenn kein Objekt oder reflektierter Impuls vorhanden ist, wird der Echo-Pin nach 38 ms abgeschaltet und kehrt in den niedrigen Zustand zurück.

Wenn wir einen reflektierten Impuls erhalten, wird der Echo-Pin früher als diese 38 ms abfallen. Je nachdem, wie lange der Echo-Pin HIGH war, können wir die Entfernung bestimmen, die die Schallwelle zurückgelegt hat, also die Entfernung vom Sensor zum Objekt.

Dazu verwenden wir folgende Grundformel zur Entfernungsberechnung:

Entfernung =Geschwindigkeit x Zeit

Wir kennen tatsächlich sowohl die Geschwindigkeit als auch die Zeitwerte. Die Zeit ist die Zeit, die der Echo-Stift HIGH war, und die Geschwindigkeit ist die Schallgeschwindigkeit, die 340 m / s beträgt. Es gibt einen zusätzlichen Schritt, den wir tun müssen, und das ist, das Endergebnis durch 2 zu teilen. Und das liegt daran, dass wir die Dauer messen, die die Schallwelle benötigt, um zum Objekt zu gelangen und zurückzuprallen.

Nehmen wir an, der Echo-Pin war 2 ms lang HIGH. Wenn wir das Entfernungsergebnis in cm erhalten möchten, können wir den Schallgeschwindigkeitswert von 340 m/s in 34 cm/ms umrechnen.

Distanz =(Geschwindigkeit x Zeit) / 2 =(34 cm/ms x 1,5 ms) / 2 =25,5 cm.

Wenn also der Echo-Pin für 2 ms HIGH war (was wir mit pulseIn() messen Funktion), beträgt der Abstand vom Sensor zum Objekt 34 cm.

So verbinden Sie den HC-SR04-Ultraschallsensor mit Arduino

So müssen wir den HC-SR04-Sensor an ein Arduino-Board anschließen.

Die Erdungs- und die VCC-Pins des Moduls müssen mit der Erdung und den 5-Volt-Pins auf dem Arduino-Board verbunden werden und die Trig- und Echo-Pins mit einem beliebigen digitalen I/O-Pin auf dem Arduino-Board.

Sie können diese für dieses Tutorial benötigten Komponenten von einer der folgenden Websites beziehen:

  • Ultraschallsensor HC-SR04 ………… 
  • Arduino-Board ……………………………
  • Steckbrett und Schaltdrähte ……… 

HC-SR04 Ultraschallsensor Arduino Code

Hier ist ein Code zum Messen der Entfernung mit dem Ultraschallsensor HC-SR04 und Arduino.

/* Ultrasonic Sensor HC-SR04 and Arduino Tutorial by Dejan Nedelkovski, www.HowToMechatronics.com */ // defines pins numbers const int trigPin = 9; const int echoPin = 10; // defines variables long duration; int distance; void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); // Starts the serial communication } void loop() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance = duration * 0.034 / 2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); } Codesprache:Arduino (arduino)

Code-Erklärung

Zuerst müssen wir die Trig- und Echo-Pins definieren. In diesem Fall sind es die Pins Nummer 9 und 10 auf dem Arduino Board und sie heißen trigPin und echoPin. Dann brauchen wir eine Long-Variable mit dem Namen "duration" für die Fahrzeit, die wir vom Sensor erhalten, und eine Integer-Variable für die Entfernung.

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance; Codesprache:Arduino (arduino) 

Im Setup müssen wir den trigPin als Ausgang und den echoPin als Eingang definieren und auch die serielle Kommunikation starten, um die Ergebnisse auf dem seriellen Monitor anzuzeigen.

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
} Codesprache:Arduino (arduino) 

In der Schleife müssen wir zuerst sicherstellen, dass der trigPin frei ist, also müssen Sie diesen Pin für nur 2 µs auf einen LOW-Zustand setzen. Um nun die Ultraschallwelle zu erzeugen, müssen wir den trigPin für 10 µs auf HIGH State setzen.

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW); Codesprache:Arduino (arduino) 

Verwenden von pulseIn() Funktion lesen wir die Reisezeit und geben diesen Wert in die Variable „Dauer“ ein. Diese Funktion hat 2 Parameter, der erste ist der Name des Echo-Pins und der zweite ist der Status des Impulses, den wir lesen, entweder High oder Low.

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH); Codesprache:Arduino (arduino) 

In diesem Fall müssen wir diesen auf HIGH setzen, da die HC-SR04-Sensoren den Echo-Pin auf High setzen, nachdem sie den 8-Zyklus-Ultraschall-Burst vom Sender gesendet haben. Dies startet tatsächlich das Timing und sobald wir die reflektierte Schallwelle empfangen, geht der Echo-Pin auf Low, was das Timing stoppt. Am Ende gibt die Funktion die Länge des Impulses in Mikrosekunden zurück.

Um die Entfernung zu erhalten, multiplizieren wir die Dauer mit 0,034 und dividieren sie durch 2, wie wir diese Gleichung zuvor erklärt haben.

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance); Codesprache:Arduino (arduino) 

Am Ende drucken wir den Wert der Entfernung auf dem seriellen Monitor aus.

Beispiel für einen Arduino-Ultraschallsensor und ein LCD-Display

Hier ist ein weiteres Beispiel, wie man den Ultraschallsensor mit Arduino verwendet und die Ergebnisse auf einem LCD anzeigt.

Sie können den Ultraschallsensor und das LDC wie folgt verbinden:

Der Code, der die Entfernung misst, ist ziemlich identisch mit dem einfachen Beispiel. Anstatt die Ergebnisse auf dem seriellen Monitor auszudrucken, drucken wir sie hier auf dem LCD aus. Wenn Sie weitere Informationen zur Verwendung und Verbindung eines LCD mit Arduino benötigen, können Sie mein spezielles Tutorial dafür lesen.

/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
} Codesprache:Arduino (arduino) 

Beispielcode mit der NewPing-Bibliothek

Es gibt tatsächlich eine einfachere und bessere Möglichkeit, den Arduino für die Entfernungsmessung mit dem HC-SR04-Ultraschallsensor zu programmieren, und zwar mit der NewPing-Bibliothek.

In dem zuvor erläuterten Code haben wir den Sensor manuell ausgelöst und die empfangene Signalimpulsdauer gemessen. Dann haben wir anhand dieser Ergebnisse die Entfernung darauf basierend berechnet. Mit der NewPing-Bibliothek können wir die Entfernung mit nur einer einzigen Codezeile ermitteln.

Hier ist ein Beispielcode:

#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
} Codesprache:Arduino (arduino) 

Es ist viel einfacher als das vorherige Beispiel. Wir verwenden einfach den Aufruf ping_cm() -Methode auf das NewPing-Sonarobjekt und wir erhalten die Entfernung in Zentimetern. Wenn wir den Abstand in Zoll wollen, können wir das ping_in() verwenden stattdessen.

Die Bibliothek hat auch einige andere nützliche Funktionen. Zum Beispiel mit dem ping_median(iterations [, max_cm_distance]) -Methode können wir genauere Ergebnisse erhalten, da sie einen Median oder den Mittelwert aus mehreren Messungen zurückgibt. Mit den Iterationen Parameter stellen wir die Anzahl der Abtastungen ein, die das Programm zur Berechnung des Mittelwerts verwendet. Der Standardwert ist 5 Iterationen. Der ping_median() gibt die empfangene Pulsdauer in Mikrosekunden zurück.

Für weitere Informationen und Details können Sie jedoch die NewPing-Wiki-Seite besuchen.

Verbesserung der Genauigkeit des Abstandssensors HC-SR04 mit dem Temperatursensor DHT22

Der HC-SR04-Sensor ist ziemlich genau, aber da seine Arbeit von der Schallgeschwindigkeit abhängt, sollten wir für genauere Ergebnisse auch die Lufttemperatur berücksichtigen. Die Schallgeschwindigkeit kann sich erheblich ändern, wenn sich die Lufttemperatur ändert. Beispielsweise beträgt die Schallgeschwindigkeit bei 20 °C etwa 340 m/s, aber bei -20 °C beträgt die Schallgeschwindigkeit etwa 315 m/s. Auch die relative Luftfeuchtigkeit beeinflusst die Geschwindigkeit.

Wenn wir also diesen Sensor verwenden, um Entfernungen bei verschiedenen Temperaturen zu messen, sollten wir eine Temperaturkompensation implementieren, und das können wir mit der folgenden Formel tun:

Geschwindigkeit =331,4 + 0,6 x Temperatur + 0,0124 x relative_Luftfeuchtigkeit

Hier ist ein Beispiel:

Neben dem HC-SR04-Ultraschallsensor werden wir den DHT11 / DHT22-Sensor verwenden, um die Temperatur und die Luftfeuchtigkeit der Umgebung zu messen und den Schallgeschwindigkeitswert entsprechend anzupassen.

Arduino-Code

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

} Codesprache:Arduino (arduino) 

Also lesen wir zuerst die Temperatur- und Feuchtigkeitswerte vom DHT22-Sensor und verwenden diese Werte dann, um die Schallgeschwindigkeit zu berechnen. Dann erhalten wir die Laufzeit der Schallwellen in Mikrosekunden, wandeln sie in Sekunden um und berechnen die Entfernung vom Sensor zu den Objekten in Zentimetern.

HC-SR04 Abmessungen und 3D-Modell

Ich habe ein 3D-Modell des HC-SR04-Ultraschallsensors erstellt, falls Sie eines benötigen, wenn Sie Ihr nächstes Projekt damit machen. Sie können es über den unten stehenden Link herunterladen.

Sie können dieses 3D-Modell bei Thangs finden und herunterladen.

Hier sind die Abmessungen des HC-SR04-Sensors:

Bitte beachten Sie, dass diese je nach Hersteller manchmal etwas abweichen können.

Schlussfolgerung

Wir haben also so ziemlich alles abgedeckt, was wir über die Verwendung des HC-SR04-Ultraschallsensors mit Arduino wissen müssen. Es ist ein großartiger Sensor für viele DIY-Elektronikprojekte, bei denen wir eine berührungslose Abstandsmessung, Präsenz- oder Objekterkennung, Füllstand oder Position von etwas usw. benötigen.

Die Projekte, die ich mit diesem Sensor gemacht habe, habe ich bereits am Anfang des Beitrags erwähnt. Hier sind einige andere coole Projekte mit dem HC-SR04-Sensor und Arduino:

  • Berührungsloser automatischer Mülleimer mit Bewegungssensor
  • Intelligente Lichtsteuerung mit Handgesten
  • Akustische Mini-Levitation
  • Roboter zur Vermeidung von Hindernissen

Ich hoffe, Ihnen hat dieses Tutorial gefallen und Sie haben etwas Neues gelernt. Fühlen Sie sich frei, Fragen in den Kommentaren unten zu stellen, und vergessen Sie nicht, sich meine vollständige Sammlung von über 30 Arduino-Projekten anzusehen.


Herstellungsprozess

  1. Was ist der Ultraschallsensor HC-SR04:Funktionsweise und Anwendungen
  2. Arduino-Sensor – Typen und Anwendungen
  3. Ultraschallsensor (HC-SR04) + Raspberry Pi
  4. HC-SR04 Ultraschall-Reichweitensensor auf dem Raspberry Pi
  5. DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
  6. FlickMote
  7. IOT - Smart Jar mit ESP8266, Arduino und Ultraschallsensor
  8. Mini-Radar mit Arduino
  9. Ultraschallbereichsdetektor mit Arduino
  10. Ultraschallsensor mit Alarm, LCD und Temperatur