Caută cod

Lecția 20/31: Afișarea distanței ultrasonice pe LCD1602

Lecția 20/31: Afișarea distanței ultrasonice pe LCD1602

Acest proiect demonstrează cum să combini un senzor ultrasonic de distanță HC-SR04 cu un afișaj LCD1602 compatibil I2C pentru a crea un sistem de măsurare a distanței în timp real. La finalul acestui ghid, vei avea un dispozitiv funcțional care măsoară și afișează continuu distanța până la un obiect în centimetri. Aceasta este o abilitate fundamentală în electronica Arduino, deoarece combină intrarea de la senzori cu ieșirea vizuală.

Sunfounder 20-LCD1602-ultrasonic

Această configurare practică poate fi utilizată într-o varietate de aplicații din lumea reală, inclusiv:

  • Crearea unui asistent inteligent de parcare care te ajută să apreciezi distanța până la un perete sau alt vehicul.
  • Construirea unui monitor simplu de nivel al lichidului pentru un rezervor, măsurând distanța de la partea superioară până la suprafață.
  • Dezvoltarea unui distribuitor automat de dezinfectant pentru mâini sau a unui coș de gunoi fără contact care se deschide când un obiect este aproape.
  • Construirea unei alarme de securitate de bază care se declanșează atunci când cineva intră într-o anumită zonă.

Hardware și componente

Pentru a construi acest proiect, vei avea nevoie de următoarele componente:

  • Placă Arduino (de exemplu, Uno)
  • Afișaj LCD1602 cu modul de interfață I2C
  • Senzor ultrasonic de distanță HC-SR04
  • Fire de legătură (jumper wires)
  • Breadboard (opțional, pentru conexiuni mai ușoare)

Înțelegerea LCD1602 și I2C

LCD1602 este un afișaj popular capabil să afișeze 16 caractere pe linie, pe două linii. Modulul „I2C” de pe spatele său este un avantaj semnificativ, deoarece reduce numărul de pini necesari pentru a controla afișajul de la 6 sau mai mulți la doar 2 pentru comunicare (SDA și SCL) și 2 pentru alimentare (VCC și GND). Această simplificare face cablarea mult mai curată și eliberează pini digitali valoroși pe Arduino pentru alți senzori, cum ar fi cel ultrasonic folosit în acest proiect. (în video la 01:30)

Modulul I2C are, de asemenea, un potențiometru mic pentru a regla contrastul afișajului. Dacă alimentezi afișajul și nu vezi nimic, încearcă să rotești acest șurub până când textul devine vizibil. (în video la 02:47)

Ghid de cablare

LCD1602_wiring_ultrasonic_bb

Conectarea componentelor este simplă. Modulul I2C al LCD-ului are patru pini care trebuie conectați la Arduino. Senzorul ultrasonic are, de asemenea, patru pini.

Iată o defalcare a conexiunilor:

Modul I2C LCD1602 la Arduino:

  • GND la GND de pe Arduino
  • VCC la 5V de pe Arduino
  • SDA la A4 de pe Arduino
  • SCL la A5 de pe Arduino

Senzor ultrasonic HC-SR04 la Arduino:

  • VCC la 5V de pe Arduino
  • Trig la pinul digital 12 de pe Arduino
  • Echo la pinul digital 11 de pe Arduino
  • GND la GND de pe Arduino

Diagrama de cablare pentru acest proiect este menționată în video.

Instalarea bibliotecilor necesare

Acest proiect se bazează pe două biblioteci cruciale. Prima, LiquidCrystal_I2C, este necesară pentru a controla LCD-ul și nu este inclusă implicit cu Arduino IDE. O poți descărca de la linkul furnizat în descrierea video sau de pe site-ul Robojax. (în video la 06:16)

A doua bibliotecă, NewPing, este folosită pentru a interfața cu senzorul ultrasonic. Aceasta simplifică procesul de trimitere a unui ping și citirea timpului de ecou. Ambele biblioteci pot fi instalate prin Library Manager din Arduino IDE, mergând la Sketch -> Include Library -> Manage Libraries și căutând numele lor.

Explicația codului

Acest sketch combină funcționalitatea LCD-ului și a senzorului ultrasonic. Codul este structurat pentru a fi ușor configurabil pentru configurarea ta specifică.

În partea de sus a codului, vei găsi variabilele cheie pe care ar putea fi necesar să le ajustezi:

// Setați adresa LCD la 0x27 pentru un afișaj cu 16 caractere și 2 linii
LiquidCrystal_I2C lcd(0x27, displayChars, displayRows);

#define TRIGGER_PIN  12  // Pinul Arduino legat de pinul trigger de pe senzorul ultrasonic.
#define ECHO_PIN     11  // Pinul Arduino legat de pinul echo de pe senzorul ultrasonic.
#define MAX_DISTANCE 190 // Distanța maximă pentru care vrem să trimitem ping (în centimetri).
  • Adresa LCD (0x27): Aceasta este adresa I2C a modulului tău LCD. Majoritatea modulelor folosesc 0x27, dar unele pot folosi 0x3F. Dacă afișajul tău nu arată nimic, poate fi necesar să rulezi un sketch de scanare I2C pentru a găsi adresa corectă și să actualizezi această valoare. (în video la 08:11)
  • TRIGGER_PIN și ECHO_PIN: Acestea definesc pinii digitali Arduino conectați la pinii Trig și Echo ai senzorului ultrasonic. Dacă folosești alți pini, schimbă aceste definiții.
  • MAX_DISTANCE: Aceasta setează distanța maximă în centimetri pe care senzorul o va măsura. HC-SR04 poate măsura până la 400-500cm, dar setarea unei valori mai mici poate îmbunătăți acuratețea și fiabilitatea citirilor, în special pentru distanțe mai scurte.

În funcția loop(), codul efectuează următorii pași:

  1. Folosește funcția sonar.ping_cm() pentru a măsura distanța și a o stoca în variabila distance.
  2. Șterge ecranul LCD și afișează textul "Robojax.com" pe prima linie.
  3. Apoi setează cursorul pe a doua linie și afișează "Distance: ".
  4. În final, mută cursorul la poziția 10 pe a doua linie pentru a afișa valoarea măsurată distance urmată de "cm".

delay(200) de la sfârșitul buclei controlează cât de frecvent senzorul face o nouă citire și actualizează afișajul.

Demonstrația codului

Odată ce codul este încărcat pe Arduino-ul tău, LCD-ul se va aprinde și va începe să afișeze distanța. Poți testa configurația mișcând mâna sau un obiect mai aproape și mai departe de senzorul ultrasonic. Numărul de pe ecran ar trebui să se actualizeze în timp real, arătând distanța în centimetri. (în videoclip la 38:07)

Proiecte conexe din acest videoclip

Capitole

  • [00:00] Introducere în LCD1602 și prezentarea proiectului
  • [01:30] Hardware-ul LCD1602 și modulul I2C explicate
  • [03:14] Configurația pinilor LCD și adresa I2C
  • [05:28] Diagrama de conexiuni pentru LCD1602
  • [06:16] Instalarea bibliotecii LCD necesare
  • [07:24] Cod de bază pentru afișarea textului pe LCD
  • [08:11] Găsirea adresei I2C a LCD-ului tău
  • [11:10] Exemple LCD: cursor intermitent și caractere personalizate
  • [18:51] Exemplu LCD: afișare serială și text derulant
  • [24:36] Afișarea temperaturii și umidității DHT11 pe LCD
  • [33:00] Afișarea tensiunii de la un potențiometru pe LCD
  • [35:56] Combinarea codului senzorului ultrasonic cu LCD-ul
  • [38:07] Demonstrația afișajului de distanță ultrasonic

Imagini

Sunfounder car assembled
Sunfounder car assembled
Sunfounder 20-LCD1602-ultrasonic
Sunfounder 20-LCD1602-ultrasonic
LCD1602_wiring_ultrasonic_bb
LCD1602_wiring_ultrasonic_bb
921-Lesson 20/31: Displaying distance from ultrasonic sensor on LCD1602
Limba: C++
/*
This sketch reads the distance using the ultrasonic sensor and displays on LCD1602
Download and resource page https://robojax.com/RJT878
watch video https://www.youtube.com/watch?v=NXAswOc_2zg
*/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
const int displayChars =16;
const int displayRows =2;

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, displayChars, displayRows);
int shomar =0;
#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 190 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
int distance;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
  // Robojax code for LCD with I2C
  // initialize the LCD, 
  lcd.begin();
 // Turn on the blacklight and print a message.
  lcd.backlight();

}

void loop() {
  
   distance  = sonar.ping_cm();//get the distance in cm
   lcd.clear();
   lcd.print("Robojax.com");
   lcd.setCursor (0,1);//set cursor to char 0 line 2
   lcd.print("Distance: ");  
   lcd.setCursor (10,1); 
   lcd.print(distance);
   lcd.print("cm"); 
   
   delay(200); 
  

}

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)

Manualul utilizatorului