Kombinacija HC-SR04 Ultrasoničnog Senzor i Ekrana (display) 16×2 1602 I2C
U ovom Tutorijalu ćemo koristiti HC-SR04 Ultrasonični Arduino senzor za mjerenje udaljenosti i ekran 16×2 karaktera na koji ćemo ispisvati udaljenost izmjerenu navedenim senzorom.
U prethodnim Tutirijalima smo objasniliti sve osnovne karakteristike vezane za Ultrasonični senzor HC-SR04, kao i za LCD ekran 16×2 I2C.
Suštinski cilj sekcije Tutorijali nije da Vam ponudimo šeme i gotove kodove koje ćete vi iskopirati u svoj Arduino IDE ili neki drugi kompajler i misliti da ste stručnjaci. Cilj nam je da Vam približimo svijet automatike i robotike na jedinstven i poseban način, kao i da Vam kroz svaki Tutorijal pomaknemo granice i inspirišemo Vas na rad i usavršavanje.
Linkove za prethodne lekcije povezane sa ovim projektom možete naći na dnu ovog tutorijala.
U ovoj lekciji ćemo objasniti:
- Šema povezivanja i kod za kontrolu Ultrasoničnog Arduino senzora
- Specifikacija materijala
Šema povezivanja i kod za kontrolu Ultrasoničnog Arduino senzora
Nakon što sve hardverske komponente povežete kao na šemi iznad, i unesete kod sa ovog Linka u svoj Arduino IDE i uradite upload, sve će super raditi do jednog momenta. Mislite li da je na ekranu ispisan pogrešan rezultat? E pa nije!
Nakon što smo uradili Upload koda, naš Arduino kontroler je počeo sa slanjem očitane vrijednosti senzora na ekran. Problem je nastao onoga momenta kada je naše mjerenje prešlo 3 cifre, tj. prešlo 100cm ili 1m. Sve dok Arduino šalje vrijednost manje od 100 tj. 2 cifre, one će se uredno mjenjati, pa čak i u slučaju kada Arduino pošalje 3 cifre, sve će raditi perfektno.
Problem se javljavlja onoga momenta kada je udaljenost bila veća od 100cm i smanjila se na neku manju vrijednost od 100 cm, kao što je u primjeru na našoj šemi. U našem primjer očitana 3-cifrena vrijednost udaljenosti je završavala sa brojem 2, pa smo je smanjili na 46cm. Nažalost, zadatak LCD ekrana je samo da ispisuje vrijednosti koje dobiva sa kontrolera, a ne da čisti prethodne vrijednosti, pa jednostavno ona 3 vrijednost ostaje upisana ne ovisno o našem 2-cifrenom mjerenju. Ako Vam je lakše shvatiti, zadatak kontrolera je da svaki put prepisuje vrijednosti sa senzora preko postojećih, a ne da očisti ekran pa upiše nove vrijednosti, čime ne bi imali ovaj problem.
Jedno od rješenja ovoga problema leži u lekciji Kako se koristi LCD Ekran 16×2 I2C (Display).
Na šemi iznad možete vidjeti kada se ispisuje naš tekst sa dvije cifre (“Udaljen. cm 46”) zauzima 14 od 16 mjesta, dok kada je mjerenje preko 100cm ili 1m, očitanje zauzima 15 od 16 mjesta. Sve što treba da uradimo je da postavimo 1 if uslova.
Konačan kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C adresa koju smo skenirali , broj slova, broj redova
int trigPin = 11; // Trigger
int echoPin = 12; // Echo
long duration, cm, inches;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.begin(); // pocetak rada display-a
lcd.backlight(); // paljenje pozadinskog svjetla
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Konverzija vremena u udaljenost
// Podijeliti sa 29.1 ili pomnožiti sa 0.0343
cm = (duration / 2) * 0.0343;
//Podijeliti sa 74 ili pomnožiti 0.0135
inches = (duration / 2) / 74; // izbrisite ako ne zelite ince
if(cm < 100){ // ako je vrijednost manja od 100cm
lcd.setCursor(14, 0); // na mjesto broj 14 (mjesto 15), red 0 (1 red)
lcd.print(" "); // ispiši dva prazna mjesta
}
lcd.setCursor(0, 0);
lcd.print("Udaljen. cm ");
lcd.print(cm);
lcd.setCursor(0, 1);
lcd.print("Udaljen. in ");
lcd.print(inches);
//lcd.clear();
delay(1000);
}
Zbog ovakvih problemčića, kao što je u ovom našem Tutorijalu, oni sa slabijim programserskim zananjem će provesti sate i dane, uporno pokušavajući rješiti neke jednostavne probleme. Nekada Vas samo jedna linija koda dijeli kako bi Vaš projekat proradio.
StarmoTech tim ulaže ogromne napore kako bi svaki Tutirijal prilagodili svim uzrastima. Kroz jedinstvene primjere pokušavamo da odgovorimo na što više mogućih pitanja i natjeramo Vas da shvatite logiku rada mikrokontrolera. Iz navedenih razloga bitno je da pratite jednu po jednu lekciju i svoje znanje i vještine postepeno širite.
Zadatak: Riješite višak brojeva za red koji se odnosi na Inche 🙂
Specifikacija materijala:
- 1x Arduino Uno
- 1x Breadboard
- 1x HC-SR04 Senzor
- 1x Ekran (display) 16×2 1602 I2C
- 4x Komunikacijski kablovi
Linkovi: