Velkommen til den fjerde blog i vores Arduino-blogserie! Denne gang skal vi arbejde med en ultralydssensor og et tegnbaseret LCD-display for at skabe en enhed, der kan måle afstand og vise den på displayet.
Vi vil bruge en HC-SR04 ultrasound sensor, der er i stand til at sende ultralydsignaler og måle tiden, det tager for signalet at blive reflekteret tilbage fra et objekt. Baserer på denne tid kan vi beregne afstanden mellem sensoren og objektet.
For at gøre det mere interaktivt og brugervenligt tilføjer vi et tegnbaseret LCD-display med en størrelse på 20x4 tegn. Dette display vil vise den målte afstand i en letlæselig form, så brugeren nemt kan aflæse resultatet.
For at opbygge dette projekt vil vi bruge et breadboard og jumper-ledninger til at forbinde komponenterne med Arduinoen. Dette giver en fleksibel og midlertidig måde at opbygge kredsløbet på, så det nemt kan ændres eller genbruges til andre projekter.
I de kommende indlæg vil vi dykke ned i detaljerne omkring opsætning og kodning af projektet. Du vil lære, hvordan man opretter forbindelse til ultrasound sensoren og LCD-displayet, indstiller kontrasten og programmerer Arduinoen til at læse afstanden og vise den på displayet.
Nødvendige komponenter
| Arduino UNO |
| Ultrasonic Sensor HC-SR04 |
| LCD 20x4 |
| Jumper-ledninger |
| eller |
| Ultrasonisk afstandsmåler Kit — aktuelt udvalg; kontrollér kompatibilitet |
HC-SR04 Ultrasonic Sensor

Sensoren, vi bruger i dette projekt, er en HC-SR04 ultrasound sensor. Denne sensor har 4 ben, hvor VCC og GND forbindes til 5V og GND benene på Arduinoen, mens Trig og Echo tilsluttes til valgfrie digitale pins på Arduinoen.
Ved hjælp af Trig-pinnen sender vi en ultralyd med en frekvens på 40.000 Hz ud i luften. Hvis der er et objekt eller en forhindring på sin vej, vil lyden blive reflekteret tilbage til sensoren. Ved at måle tiden for denne rejse og kende lydens hastighed, kan vi beregne afstanden til objektet.

Det er fascinerende at tænke på, hvordan sensoren udsender disse ultralydsbølger, der bevæger sig gennem luften. Når de rammer et objekt, reflekteres de tilbage til sensoren, hvilket gør det muligt for os at opnå præcise afstandsmålinger.
For at generere ultralyd indstiller vi Trig-stiften til en høj tilstand i 10 μs. Dette sender en kort burst af ultralydssignaler, som bevæger sig med lydens hastighed. Efter denne burst skifter Echo-stiften til en høj tilstand og begynder at lytte efter det reflekterede signal fra et objekt.
Uden et gyldigt ekko kan timeout-adfærden variere mellem moduler; 38 ms er ikke en universel garanti. Eksemplerne nedenfor bruger en eksplicit timeout på 30000 µs og viser ”No echo”, når pulseIn() returnerer 0.
Når et gyldigt ekko registreres, falder Echo-signalet til LOW. Pulslængden beskriver lydens rejsetid frem og tilbage og bruges til at beregne afstanden.

Følg modulets datablad for intervallet mellem triggere. Det citerede HC-SR04-datablad anbefaler en målecyklus på mere end 60 ms; koden venter derfor mindst 65 ms før en ny måling.
Til dette formål bruger vi følgende grundlæggende formel til beregning af afstand:
Distance = Speed x Time
Vi kender faktisk både hastigheds- og tidsværdierne. Tiden er den tid, Echo-stiften var HIGH, og hastigheden er lydens hastighed, her omtrent 340 m/s. Der er et ekstra trin, vi skal gøre, og det er at dividere slutresultatet med 2. Og det skyldes, at vi måler den varighed, lydbølgen har brug for for at rejse til objektet og hoppe tilbage igen.

Lad os sige, at Echo-stiften var HIGH i 2 ms. Hvis vi ønsker at få afstand resultatet i cm, kan vi konvertere hastigheden af lyd værdien fra 340 m/s til 34 cm/ms.
Distance = (Speed x Time) / 2 = (34 cm/ms x 2 ms) / 2 = 34 cm.
Så hvis Echo-stiften var HIGH i 2ms (som vi måler ved hjælp af pulseIn()-funktionen), er afstanden fra sensoren til objektet 34 cm.
Okay, super! Lad os nu kigge på hvordan vi bruger vores ultra sensor med vores Arduino UNO. Vi vil senere tilføje vores display til projektet.
HC-SR04 ultralydssensor til Arduino
Opsætningen for dette kredsløb er ikke så skræmmende og når kredsløbet er klar til start, kan vi kigge og uploade koden. Dermed kan vi tjekke om vores ultrasound sensor er kalibreret korrekt ved brug af Serial Monitor.

Modulets jord- og VCC-stifter skal tilsluttes henholdsvis jord- og 5 volt-stifterne på Arduinoen og trig- og ekko-stifterne til enhver digital I / O-pin på Arduino-kortet.
Arduino-kode (Serial Monitor)
Her er en kode til måling af afstand ved hjælp af HC-SR04 ultralydssensor og Arduino.
// 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, 30000UL);
if (duration == 0) {
Serial.println("No echo");
delay(65);
return;
}
// Calculating the distance
distance = duration * 0.034 / 2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
delay(65);
}
Forklaring af koden
Først skal vi definere Trig- og Echo-stifterne. I dette tilfælde er de stifterne nummer 9 og 10 på Arduinoen, og de hedder trigPin og echoPin. Derefter har vi brug for en lang variabel, kaldet "duration" for den rejsetid, vi får fra sensoren, og en heltalsvariabel for afstanden.
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
I void setup() skal vi definere trigPin som en udgang og echoPin som en indgang og også starte den serielle kommunikation for at vise resultaterne på den serielle skærm.
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
}
I void loop() skal vi først sørge for, at trigPin er klar, så vi skal indstille den stift på en LOW State for blot 2 μs. Nu for at generere Ultra-lydbølgen skal vi indstille trigPin på HIGH State til 10 μs.
// 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);
pulseIn(echoPin, HIGH, 30000UL) måler den høje pulslængde i mikrosekunder og gemmer den i duration. Det tredje argument sætter en timeout på 30000 µs. Returneres 0, viser de fulde eksempler ”No echo” og springer afstandsberegningen over.
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH, 30000UL);
I dette tilfælde har vi brug for dette sæt til det HIGH, da HC-SR04-sensorerne indstiller ekko-stiften til HIGH efter at have sendt 8-cyklus ultralyds bursts fra senderen. Dette starter faktisk timingen, og når vi modtager den reflekterede lydbølget, går Echo-stiften til LOW, hvilket stopper timingen. I slutningen returnerer funktionen pulsens længde i mikrosekunder.
For at få afstanden multiplicerer vi varigheden med 0,034 og dividerer den med 2, som vi tidligere forklarede denne ligning.
// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
Til sidst vises afstanden i Serial Monitor, eller ”No echo” hvis pulsen mangler. Upload koden, åbn Serial Monitor, og sammenlign med en flad genstand i kendt afstand. Efter hver måling ventes mindst 65 ms. Derefter kan displayet tilføjes.
Arduino ultralydssensor og LCD-skærm
Her er et andet eksempel på, hvordan du bruger ultralydssensoren med Arduino og viser resultaterne på en LCD.
Man kan tilslutte ultralydssensoren og LDC som vist på næste figur. (Vi går mere i dybden med denne opsætning lige om lidt længere nede i bloggen). Vi behøver ikke at ændre opsætnignen af vores ultra lydsensor.
Når displayet forbindes til Arduino UNO med I2C, vælges kabler efter stikkene. Typisk bruges hun-han jumper-ledninger direkte fra displayets hanstifter til UNO’s hunstik, eller kabler via et breadboard. Kontrollér de faktiske stik før tilslutning.
Direkte forbindelse: Brug normalt fire hun-han-ledninger til GND, VCC, SDA og SCL mellem displayets hanstifter og UNO’s hunstik.
Forbindelse via breadboard: Er modulet monteret på et breadboard, kan du bruge han-han jumper-ledninger fra breadboardet til UNO. Forbind SDA til A4 og SCL til A5 samt GND og forsyning.
Tilslut GND pinnen på displaymodulet til GND på Arduinoen. Dette sikrer en fælles jordforbindelse mellem displayet og Arduinoen.
Tilslut VCC-pinnen på displaymodulet til 5V pinnen på Arduinoen. Dette giver strømforsyning til displayet.
Tilslut SDA-pinnen på displaymodulet til A4-pinnen på Arduinoen. Dette er dataforbindelsen mellem displayet og Arduinoen.
Tilslut SCL-pinnen på displaymodulet til A5-pinnen på Arduinoen. Dette er clockforbindelsen mellem displayet og Arduinoen.
Nu hvor dit display er korrekt forbundet til Arduino, kan du begynde at arbejde med koden til at styre displayet. Vi bruger bibliotekerne Wire.h, LCD.h og LiquidCrystal_I2C.h til at forenkle kommunikationen mellem Arduino og displayet.
Koden, der måler afstanden, er stort set den samme som det grundlæggende eksempel. Her udskriver vi dem på LCD'et i stedet for at udskrive resultaterne på den serielle skærm.
Arduino Kode (20x4 display)
I koden med displayet er der tilføjet biblioteker (Wire.h, LCD.h, LiquidCrystal_I2C.h) og initialiseringen af LCD-displayet ved hjælp af lcd.begin()-funktionen. Derudover er der tilføjet kodestykker til at styre LCD-displayet og udskrive afstandsmålingerne på displayet ved hjælp af lcd.print()-funktionen.
Her er nogle specifikke ændringer:
- Tilføjede biblioteker: Koden inkluderer nu Wire.h, LCD.h og LiquidCrystal_I2C.h bibliotekerne for at kunne styre LCD-displayet.
- LCD-objekt initialisering: Et objekt af typen LiquidCrystal_I2C med adressen 0x27 og pin-konfigurationen er blevet oprettet ved hjælp af LiquidCrystal_I2C-klassen.
- Displayets dimensioner: I lcd.begin()-funktionen er dimensionerne (bredde og højde) for LCD-displayet blevet ændret til 20 og 4, hvilket angiver, at displayet har en bredde på 20 tegn og 4 linjer.
- Udskrivning på displayet: I stedet for at udskrive afstandsværdien på Serial Monitor bruges nu lcd.print()-funktionen til at udskrive teksten og afstandsværdien på LCD-displayet. Der er to udskrivninger, en for centimeter og en for tommer, hver på en separat linje på displayet.
- Måleinterval: Koden bruger delay(65) ved displayopdateringen og ved manglende ekko. Dermed er der mere end 60 ms mellem triggere, som anbefalet i HC-SR04-databladet. Manglende puls vises som ”No echo”, ikke som 0 cm.
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7); // Opretter et LCD-objekt. Parametre: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
lcd.begin(20, 4); // Initialiserer forbindelsen til LCD-skærmen og specificerer dimensionerne (bredde og højde) af displayet
lcd.setBacklightPin(3, POSITIVE); // Sætter bagbelysningspin til positiv forsyningsspænding
lcd.setBacklight(HIGH); // Tænder bagbelysningen
pinMode(trigPin, OUTPUT); // Sætter trigPin til OUTPUT-mode
pinMode(echoPin, INPUT); // Sætter echoPin til INPUT-mode
}
void loop() {
digitalWrite(trigPin, LOW); // Sætter trigPin til lav logisk værdi (0V)
delayMicroseconds(2); // Venter i 2 mikrosekunder
digitalWrite(trigPin, HIGH); // Sætter trigPin til høj logisk værdi (5V)
delayMicroseconds(10); // Venter i 10 mikrosekunder
digitalWrite(trigPin, LOW); // Sætter trigPin til lav logisk værdi (0V)
duration = pulseIn(echoPin, HIGH, 30000UL); // Måler tiden for echo-signalet at være højt (HIGH) og gemmer det i duration
if (duration == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("No echo");
delay(65);
return;
}
distanceCm = duration * 0.034 / 2; // Beregner afstanden i centimeter baseret på tiden
distanceInch = duration * 0.0133 / 2; // Beregner afstanden i tommer baseret på tiden
lcd.setCursor(0, 0); // Sætter positionen, hvor efterfølgende tekst skrevet til LCD'en vil blive vist
lcd.print("Distance: "); // Udskriver strengen "Afstand" på LCD'en
lcd.print(distanceCm, DEC); // Udskriver afstandsværdien fra sensoren i centimeter
lcd.print(" cm "); // Udskriver "cm" på LCD'en
delay(65); // Venter i 65 millisekunder
lcd.setCursor(0, 1); // Sætter positionen til næste linje
lcd.print("Distance: "); // Udskriver strengen "Afstand" på LCD'en
lcd.print(distanceInch, DEC); // Udskriver afstandsværdien fra sensoren i tommer
lcd.print(" inch "); // Udskriver "tommer" på LCD'en
delay(65); // Venter i 65 millisekunder
}
Justering af kontrasten på LCD-skærmen
På displaymodulet, hvor de fire pins er forbundet mellem displayet og Arduinoen, er der også et potentiometer. Dette potentiometer kan drejes for at justere kontrasten på LCD-displayet. Potentiometeret justerer tegnkontrasten, normalt ikke bagbelysningens lysstyrke.
Når displayet er korrekt tilsluttet, og kontrasten er justeret med potentiometeret, har du gennemført et nyt projekt!
Du har nu succesfuldt oprettet forbindelse mellem Arduinoen, ultralydssensoren og LCD-displayet, og du kan visualisere afstandsmålingerne på LCD-displayet. Det åbner op for mange muligheder for at anvende disse komponenter i forskellige projekter.
Vi har gennemgået processen med at tilslutte en ultralydssensor til en Arduino og vise afstandsmålingerne på et LCD-display.
Vi håber, at denne blog har været nyttig for dig, og at den har inspireret dig til at udforske og eksperimentere med Arduino og elektroniske komponenter. Husk altid at have det sjovt med dine projekter og fortsætte med at lære og udfordre dig selv. God fornøjelse med dine fremtidige Arduino-eventyr!
Du har nu succesfuldt oprettet forbindelse mellem Arduinoen, ultralydssensoren og LCD-displayet, og du kan visualisere afstandsmålingerne på LCD-displayet. Det åbner op for mange muligheder for at anvende disse komponenter i forskellige projekter.
Vi har gennemgået processen med at tilslutte en ultralydssensor til en Arduino og vise afstandsmålingerne på et LCD-display.
Vi håber, at denne blog har været nyttig for dig, og at den har inspireret dig til at udforske og eksperimentere med Arduino og elektroniske komponenter. Husk altid at have det sjovt med dine projekter og fortsætte med at lære og udfordre dig selv. God fornøjelse med dine fremtidige Arduino-eventyr!