Image of eBits Academy display illustration

Ultraljud och display

  • June 23, 2023
  • |
  • Jonas Rothausen

Välkommen till den fjärde bloggen i vår Arduino-bloggserie! Den här gången arbetar vi med en ultraljudssensor och en teckenbaserad LCD-display för att skapa en enhet som kan mäta avstånd och visa det på displayen.

Vi kommer att använda en HC-SR04 ultraljudssensor som kan skicka ultraljudssignaler och mäta tiden det tar för signalen att reflekteras tillbaka från ett objekt. Utifrån denna tid kan vi beräkna avståndet mellan sensorn och objektet.

För att göra projektet mer interaktivt och användarvänligt lägger vi till en teckenbaserad LCD-display med en storlek på 20x4 tecken. Denna display kommer att visa det uppmätta avståndet i en lättläst form så att användaren enkelt kan läsa resultatet.

För att bygga det här projektet kommer vi att använda en kopplingsdäck och anslutningskablar för att ansluta komponenterna till Arduino . Detta ger ett flexibelt och tillfälligt sätt att bygga kretsen så att den enkelt kan modifieras eller återanvändas för andra projekt.

I de kommande inläggen kommer vi att dyka ner i detaljerna kring att sätta upp och koda projektet. Du får lära dig hur du kopplar ihop ultraljudssensorn och LCD-displayen, ställer in kontrasten och programmerar Arduino att läsa avståndet och visa det på displayen.


Nödvändiga komponenter

 

HC-SR04 ultraljudssensor

 

 

Sensorn vi använder i detta projekt är en HC-SR04 ultraljudssensor. Denna sensor har 4 stift , där VCC och GND är anslutna till 5V- och GND-stiften på Arduino , medan Trig och Echo är anslutna till valfria digitala stift på Arduino .

Med Trig-stiftet skickar vi ultraljud med en frekvens på 40 000 Hz i luften. Om det finns ett föremål eller hinder i dess väg kommer ljudet att reflekteras tillbaka till sensorn. Genom att mäta tiden för denna resa och känna till ljudets hastighet kan vi beräkna avståndet till objektet.

 

 

Det är fascinerande att tänka på hur sensorn avger dessa ultraljudsvågor som färdas genom luften. När de träffar ett föremål reflekteras de tillbaka till sensorn, vilket gör att vi kan få exakta avståndsmätningar.


För att generera ultraljud ställer vi in ​​Trig-stiftet till ett högt tillstånd i 10 μs. Detta skickar en kort skur av ultraljudssignaler som färdas med ljudets hastighet. Efter denna skur växlar Echo-stiftet till ett högt läge och börjar lyssna efter den reflekterade signalen från ett objekt.

Utan ett giltigt eko kan timeout-beteendet variera mellan moduler; 38 ms är ingen universell garanti. Exemplen nedan använder en uttrycklig timeout på 30000 µs och visar ”No echo” när pulseIn() returnerar 0.

När ett giltigt eko registreras går Echo LOW. Pulsbredden beskriver ljudets restid fram och tillbaka och används för att beräkna avstånd.

 

 

Följ modulens datablad för avståndet mellan triggpulser. Det citerade HC-SR04-databladet rekommenderar en mätcykel längre än 60 ms, så koden väntar minst 65 ms före nästa mätning.

För detta ändamål använder vi följande grundläggande formel för avståndsberäkning:
Avstånd = hastighet x tid

Vi vet faktiskt både hastighets- och tidsvärdena. Tiden är den tid då Echo-stiftet var HÖG och hastigheten är ljudhastigheten, här ungefär 340 m/s Det finns ett extra steg som vi måste göra, och det är att dela det slutliga resultatet med 2. Och det beror på att vi mäter hur länge ljudvågen behöver för att resa till objektet och studsa tillbaka igen.

 

Låt oss säga att Echo-stiftet var HÖG i 2ms. Om vi ​​vill få avståndsresultatet i cm kan vi omvandla ljudhastighetsvärdet från 340 m/s till 34 cm/ms.

Avstånd = (Hastighet x Tid) / 2 = (34 cm/ms x 2 ms) / 2 = 34 cm.

Så om Echo-stiftet var HÖGT i 2ms (vilket vi mäter med pulseIn()-funktionen), är avståndet från sensorn till objektet 34 cm.

Okej Super! Låt oss nu titta på hur vi använder vår ultrasensor med vår Arduino UNO . Vi kommer senare att lägga till vår display i projektet.

 

HC-SR04 Ultraljudssensor för Arduino

Inställningen för den här kretsen är inte så skrämmande och när kretsen är redo att gå kan vi titta och ladda upp koden. På så sätt kan vi kontrollera om vår ultraljudssensor är korrekt kalibrerad med hjälp av seriell monitor .

 

 

Jord- och VCC-stiften på modulen ska anslutas till jord respektive 5-voltsstift på Arduino och trig- och ekostiften till valfritt digitalt I/O-stift på Arduino-kortet .

 

Arduino-kod (Serial Monitor)

Här är en kod för att mäta avstånd med HC-SR04 ultraljudssensor och 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);
}


Förklaring av koden

Först måste vi definiera Trig- och Echo-stiften. I det här fallet är de stift nummer 9 och 10 på Arduino och de kallas trigPin och echoPin. Då behöver vi en lång variabel som kallas "duration" för den restid vi får från sensorn och en heltalsvariabel för avståndet.

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;

 


I void setup() måste vi definiera trigPin som en utgång och echoPin som en ingång och även starta den seriella kommunikationen för att visa resultaten på den seriella skärmen.

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() måste vi först se till att trigPin är redo, så vi måste ställa in det stiftet till ett LOW-tillstånd för bara 2 μs. Nu för att generera ultraljudvågen måste vi ställa in trigPin på HIGH State i 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äter HIGH-pulsens längd i mikrosekunder och lagrar den i duration. Det tredje argumentet ger en timeout på 30000 µs. Om 0 returneras visar de fullständiga exemplen ”No echo” och hoppar över avståndsberäkningen.

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH, 30000UL);

 

I det här fallet behöver vi denna inställning på HÖG, eftersom HC-SR04-sensorerna ställer in ekopinnen till HÖG efter att ha skickat 8-cyklers ultraljudskurar från sändaren. Detta startar faktiskt timingen och när vi tar emot den reflekterade ljudvågen blir Echo-stiftet LÅG vilket stoppar timingen. I slutet returnerar funktionen pulsens längd i mikrosekunder.

 

För att få avståndet multiplicerar vi varaktigheten med 0,034 och dividerar den med 2, som vi tidigare förklarat denna ekvation.

// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
Till sist visas avståndet i Serial Monitor, eller ”No echo” om pulsen saknas. Ladda upp, öppna Serial Monitor och jämför med ett plant föremål på känt avstånd. Vänta minst 65 ms efter varje mätning. Lägg sedan till skärmen.

 


Arduino ultraljudssensor och LCD-skärm

Här är ett annat exempel på hur man använder ultraljudssensorn med Arduino och visar resultaten på en LCD.

Du kan ansluta ultraljudssensorn och LCD som visas i nästa bild. (Vi kommer att gå in mer på djupet med denna inställning lite längre ner på bloggen). Vi behöver inte ändra inställningen av vår ultraljudssensor.

När du ansluter skärmen till Arduino UNO med I2C väljer du kablar efter kontakterna. Vanligen används hona-hane-kablar direkt från skärmens hanstift till UNO:s honkontakter, eller kablar via ett kopplingsdäck. Kontrollera dina faktiska kontakter innan du kopplar.

Direktanslutning: Använd vanligen fyra hona-hane-kablar för GND, VCC, SDA och SCL mellan skärmens hanstift och UNO:s honkontakter.
Anslutning via kopplingsdäck: Om modulen sitter på ett kopplingsdäck kan du använda hane-hane-kablar från däcket till UNO. Anslut SDA till A4 och SCL till A5 och komplettera med GND och matning.

 

Anslut GND-stiftet på displaymodulen till GND på Arduino . Detta säkerställer en gemensam jordanslutning mellan skärmen och Arduino.

Anslut VCC-stiftet på displaymodulen till 5V-stiftet på Arduino . Detta ger ström till displayen.

Anslut SDA-stiftet på displaymodulen till A4-stiftet på Arduino . Detta är dataanslutningen mellan skärmen och Arduino.

Anslut SCL-stiftet på displaymodulen till A5-stiftet på Arduino . Detta är klockanslutningen mellan skärmen och Arduino.

Nu när din skärm är ordentligt ansluten till Arduino kan du börja arbeta med koden för att styra skärmen. Vi använder biblioteken Wire.h, LCD.h och LiquidCrystal_I2C.h för att förenkla kommunikationen mellan Arduino och skärmen.
Koden som mäter avståndet är i huvudsak densamma som grundexemplet. Här skriver vi ut dem på LCD-skärmen istället för att skriva ut resultaten på serieskärmen.

 

Arduino-kod (20x4 display)

I koden med displayen har bibliotek (Wire.h, LCD.h, LiquidCrystal_I2C.h) och initieringen av LCD-displayen med funktionen lcd.begin() lagts till. Dessutom har kodavsnitt lagts till för att styra LCD-skärmen och skriva ut avståndsmätningarna på skärmen med hjälp av lcd.print()-funktionen.

Här är några specifika ändringar:

  • Tillagda bibliotek: Koden inkluderar nu Wire.h, LCD.h och LiquidCrystal_I2C.h för att styra LCD-skärmen.
  • Initiering av LCD-objekt: Ett objekt av typen LiquidCrystal_I2C med adressen 0x27 och stiftkonfigurationen har skapats med klassen LiquidCrystal_I2C.
  • Skärmens mått: I funktionen lcd.begin() har LCD-skärmens bredd och höjd ändrats till 20 och 4, alltså 20 tecken i bredd och 4 rader.
  • Utskrift på skärmen: I stället för att skriva avståndet i Serial Monitor används nu lcd.print() för att skriva text och avstånd på LCD-skärmen. Centimeter och tum visas på varsin rad.
  • Mätintervall: Koden använder delay(65) vid skärmuppdatering och saknat eko. Triggpulserna ligger därmed mer än 60 ms isär enligt HC-SR04-databladet. En saknad puls visas som ”No echo”, inte 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
}

 

Justera kontrasten på LCD-skärmen

På displaymodulen, där de fyra stiften är kopplade mellan displayen och Arduino, finns även en potentiometer. Denna potentiometer kan vridas för att justera kontrasten på LCD-skärmen. Potentiometern justerar tecknens kontrast, inte normalt bakgrundsbelysningens ljusstyrka.

När skärmen är korrekt ansluten och kontrasten justerad med potentiometern har du slutfört ett nytt projekt!  

Du har nu framgångsrikt anslutit Arduino, ultraljudssensorn och LCD-skärmen , och du kan visualisera avståndsmätningarna på LCD-skärmen . Det öppnar upp för många möjligheter att använda dessa komponenter i olika projekt.

Vi har gått igenom processen att ansluta en ultraljudssensor till en Arduino och visa avståndsmätningarna på en LCD-skärm .

Vi hoppas att den här bloggen har varit användbar för dig och att den har inspirerat dig att utforska och experimentera med Arduino och elektroniska komponenter. Kom alltid ihåg att ha kul med dina projekt och fortsätt lära dig och utmana dig själv. Njut av dina framtida Arduino-äventyr!

Du har nu framgångsrikt anslutit Arduino, ultraljudssensorn och LCD-skärmen , och du kan visualisera avståndsmätningarna på LCD-skärmen . Det öppnar upp för många möjligheter att använda dessa komponenter i olika projekt.

Vi har gått igenom processen att ansluta en ultraljudssensor till en Arduino och visa avståndsmätningarna på en LCD-skärm .

Vi hoppas att den här bloggen har varit användbar för dig och att den har inspirerat dig att utforska och experimentera med Arduino och elektroniska komponenter. Kom alltid ihåg att ha kul med dina projekt och fortsätt lära dig och utmana dig själv. Njut av dina framtida Arduino-äventyr!

Lämna en kommentar

Observera att kommentarer måste godkännas innan de publiceras.