Velkommen til den fjerde blog i vores Arduino-blogserie! Denne gang skal vi arbejde med en ultrasound sensor og et grafisk 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 vil vi tilføje et grafisk 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 |
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.
Hvis intet objekt reflekterer signalet, vil Echo-stiften timeout efter 38 ms og skifte tilbage til en lav tilstand.
Hvis der er et objekt, der reflekterer signalet, vil Echo-stiften skifte til lav tilstand indenfor 38 ms. Ved at måle, hvor lang tid Echo-stiften var i høj tilstand, kan vi bestemme afstanden, som lyden har rejst, og dermed afstanden mellem sensoren og objektet
Hvis vi modtager en reflekteret puls, vil Echo-stiften falde hurtigere end de 38 ms. I henhold til hvor lang tid Echo-stiften var HIGH, kan vi bestemme den afstand, lydbølgen rejste, og dermed afstanden fra sensoren til objektet.
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, som er 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 = (34cm/ms x 1.5ms) / 2 = 25.5cm.
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);
// Calculating the distance
distance = duration * 0.034 / 2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
}
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);
Ved hjælp af pulseIn () -funktionen læser vi rejsetiden og sætter denne værdi i variablen "varighed". Denne funktion har 2 parametre, den første er navnet på Echo-stiften, og for den anden er tilstanden af den puls, vi læser, enten HIGH eller LOW.
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
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 printer vi så værdien af afstanden i Serial Monitor. Så upload koden, åbn Serial Monitor og brug en flad overflade til at tjekke om afstanden, der vises i Serial Monitor er korrekt! Når den ged er barberet er vi klar til at implementere vores display i projektet!
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 du forbinder displayet til Arduino ved hjælp af I2C-protokollen, vil du typisk bruge både hun-hun jumper-ledninger og han-han jumper-ledninger. Her er en kort beskrivelse af, hvordan de bruges i denne sammenhæng.
Hun-hun jumper-ledninger: Disse bruges til at oprette forbindelse mellem displaymodulet og Arduinoens stik, der har han-pinde (f.eks. GND, VCC, SDA og SCL). Du skal bruge fire hun-hun jumper-ledninger til at forbinde de tilsvarende pins på displaymodulet og Arduinoen.
Han-han jumper-ledninger: Disse bruges til at oprette forbindelse mellem displaymodulet og Arduinoens hun-stik, der er designet til I2C-kommunikation (A4 og A5). Du skal bruge to han-han jumper-ledninger til at forbinde SDA-pinden på displayet til A4-pinden på Arduinoen og SCL-pinden på displayet til A5-pinden på Arduinoen.
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.
- Ventetid: Der er en lille ventetid (delay(10)) mellem hver opdatering af displayet for at give tid til læsning og visning af data.
#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); // Måler tiden for echo-signalet at være højt (HIGH) og gemmer det i duration
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(10); // Venter i 10 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(10); // Venter i 10 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. Ved at dreje på potentiometeret kan vi ændre intensiteten af bagbelysningen på displayet og opnå den ønskede visuelle effekt.
Når du har tilsluttet displayet korrekt og justeret lysstyrken ved hjælp af 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!