Ultrahangos távolságérzékelő (HC-SR04) LCD kijelzővel

3 Projekt -- Ultrahangos távolságérzékelő LCD kijelzővel -- V1.2

 by Roboworld Hobbielektronika


Rövid leírás:
Ebben a rövid projektben bemutatjuk neked az ultrahangos távolságmérő szenzor (HC-SR04) működését. Segítségünkre egy LCD kijelző lesz,hogy nyomon tudjuk követni az aktuális távolságot.

Hardware:

1 db Arduino Uno
1 db Ultrahangos távolságérzékelő HC-SR04
1 db 1602 LCD kijelző I2C kommunikációval
Jumper kábel

Kapcsolási rajz:


A kapcsolás megépítése után következzen a programozás. A 2. projekt alkalmával már hozzáadtuk az LCD kijelző library-jét az Arduino IDE fejlesztőkörnyezethez, így ezt már még egyszer nem kell megtenni. Abban az esetben, ha még nem adtad hozzá akkor azt innen tudod letölteni. Amit viszont hozzá kell adni az az ultrahangos szenzor könyvtára.

Hanghullámokról


Tételezzük fel, hogy egy objektum 10 cm-re van a szenzortól. A hang sebessége 340m/s (méter/szekundum) vagy 0,034 cm/µs (centiméter/mikroszekundum), tehát ekkor a hanghullámnak körülbelül 294 µs kell haladnia. De az a hullám, amit kapsz majd az Echo pintől az kétszeres érték mivel a hanghullám elér az objektumhoz majd visszapattanik róla. Tehát annak érdekében, hogy a távolságot cm-ben kapjuk meg, megkell szoroznunk a visszaérkező útidő értékét (EchoPin) 0.034-gyel (hang sebessége) és osztanunk kell 2-vel.

Programozás, mintakód:

A LiquidCrystal library lehetővé teszi, hogy könnyedén vezérelhesd az LCD kijelzőt. lásd 2. projekt.
Először, amit tenned kell, hogy definiálod a Trig és az Echo pint. Esetünkben a pinek száma 9 és 10 az Arduinon, ahogy a kapcsolási rajzon is láthatod. Ezután egy long változót és egy integer kell definiálnod amit „idotartam”-nak és „tavolsag”-nak nevezünk el.
A setup-ban meg kell határozni a trigPin -t kimenetként (OUTPUT) az echoPin-t pedig bemenetként (INPUT) és természetesen a soros kommunikációt se feledd, hogy a pillanatnyi eredmények láthatóak legyenek a serial monitoron.

A trigPin arra szolgál, hogy lüktető jeleket adjon ki megfelelő időközönként. A lüktetési időt lehet változtatni, azonban azt is figyelembe kell venni, hogy minél nagyobb a lüktetési idő annál tovább tart a pontos távolságot meghatározni és annál pontatlanabb is lesz az eredményt. Az echoPin a visszavert hanghullámokat figyeli a pulseIn parancs segítségével. A pulseIn csak a HIGH jeleket olvassa az echoPin-en. Amikor HIGH jelet kap akkor az időzítő elindul majd mikor LOW-ra vált az időzítő megáll. Ezután nincs már hátra, mint a kijelzőn megjeleníteni az értékeket.

/*Project 3 - Ulrahangos távolság érzékelő + LCD megjelenítés I2C kommunikációval
by Roboworld Hobbielektronika
www.hobbielektronikabolt.hu
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C könyvtár használata
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LiquidCrystal_I2C könyvtárat használjuk
// Szükséges megadni a kommunikációs csatornát. Esetünkben ez 0x3F, azonban ez eltérhet. 
// Ha nem működik a 0x3F akkor i2c_scanner.ino futtatása szükséges, amely kiírja a megfelelő értéket. 0x3F-et átírva pl: 0x27 -re megoldhatja a kommunikációs hibát.

const int trigPin = 9;
const int echoPin = 10;
long idotartam;
int tavolsagCm, tavolsagInch;

void setup() {

lcd.begin(16,2); // Megadjuk, hogy 16 karakterből és 2 sorból áll az LCD kijelzőnk. 
// FONTOS!! lcd.begin(karakterszám, sor); 

pinMode(trigPin, OUTPUT); // trigPin beállítása kimenetként 
pinMode(echoPin, INPUT); // echoPin beállítása bemenetként
}
void loop() {

digitalWrite(trigPin, LOW); // lüktető hatás beállítás. Alacsony (LOW) , Magas (HIGH), Alacsony (LOW) váltakozása
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
idotartam = pulseIn(echoPin, HIGH); // Csak a HIGH jeleket olvassa az echoPin-en. Amikor HIGH jelet kap akkor az 
//időzítő elindul majd mikor LOW-ra vált az időzítő megáll. 

tavolsagCm= idotartam*0.034/2; // Ahhoz hogy a helyes távolságot megkapjuk az időtartamot szoroznunk kell a hang
// terjedési sebességével (0,034) majd elkell osztani kettővel mivel a hang a 
//szenzortól elérte az objektumot majd az objektumról visszaverődik. 
// Ez dupla út ezért kell elosztani kettővel. 

tavolsagInch = idotartam*0.0133/2;
lcd.setCursor(0,0); // a kurzort a 0 karakterhez és az 1 sorhoz helyezi
lcd.print("Tavolsag: "); // Kiírja hogy "Tavolsag: "
lcd.print(tavolsagCm); // Kiírja az éppen aktuális értéket cm-ben 
lcd.print(" cm");
delay(10);
lcd.setCursor(0,1); //a kurzort a 0 karakterhez és az 2 sorhoz helyezi
lcd.print("Tavolsag: "); // Kiírja hogy "Tavolsag: "
lcd.print(tavolsagInch); // Kiírja az éppen aktuális értéket Inch-ben 
lcd.print("inch");
delay(10);
}
}


Megvalósítás:

Letöltés

A projekthez tartozó linkek:
A leírás PDF-ben : Itt található
Mintakód: Itt található


Megjegyzések