Lesson 71: Measure distance and display on LCD screen | Arduino Step By Step Course
This project demonstrates how to combine an HC-SR04 ultrasonic sensor with an LCD1602 display to measure and display distances on the Arduino. This setup is useful for various applications requiring proximity detection and visual feedback.
Practical Applications:
- Robotics: Measuring distances for obstacle avoidance or navigation.
- Parking Assistance: Creating a simple parking distance sensor.
- Home Automation: Building a proximity-based lighting system.
- Industrial Automation: Monitoring distances in manufacturing processes.
Hardware/Components
To build this project, you will need the following components:
- Arduino Uno (or compatible board)
- HC-SR04 Ultrasonic Sensor
- LCD 1602 Display (I2C version recommended)
- Jumper Wires
Wiring Guide
The wiring is described in the video (in video at 00:31). The key connections are:
- Ultrasonic Sensor: VCC to 5V, GND to GND, TRIG to pin 12, ECHO to pin 11.
- LCD 1602: VCC to 5V, GND to GND, SDA to pin A4, SCL to pin A5.
%%WIRING%%
Code Explanation
The code utilizes the NewPing library for ultrasonic distance measurement and the LiquidCrystal_I2C library for LCD control (in video at 02:15). The key configurable parameters are:
#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 200 // Maximum distance we want to ping for (in centimeters).
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int VCC2 = 2; //extra VCC for LCD
The TRIGGER_PIN and ECHO_PIN define the Arduino pins connected to the ultrasonic sensor. MAX_DISTANCE sets the maximum measurable distance. The LCD address (0x3F) might need adjustment depending on your specific LCD module. The VCC2 pin provides an additional 5V supply for the LCD.
The sonar.ping_cm() and sonar.ping_in() functions are used to obtain distance measurements in centimeters and inches respectively (in video at 05:27 and 06:01).
Live Project/Demonstration
A demonstration of the project is shown in the video (in video at 06:42). The video shows the sensor measuring distances to various objects and displaying the results in centimeters and inches on the LCD screen. The serial monitor displays the same measurements, providing a means to verify the readings.
Chapters
- [00:04] Introduction and Project Overview
- [00:31] Wiring Diagram and Connections
- [02:15] Code Explanation: Ultrasonic Sensor Setup
- [03:19] Code Explanation: LCD1602 Setup
- [04:21] Code Explanation: Arduino Setup
- [04:46] Code Explanation: Main Loop and Display
- [06:42] Live Demonstration
- [07:26] Conclusion
/*
* S08-03
* Utilizzando il LCD1602-I2C e il sensore ultrasonico HC-SR04 con Arduino
* Scritto/aggiornato da Ahmad Shamshiri per Robojax (Robojax.com)
* il 16 gennaio 2019 alle 15:51 ad Ajax, Ontario, Canada
*
* Questo codice è fornito "COSÌ COM'È" senza garanzia o responsabilità. Libero di essere utilizzato a patto che tu mantenga intatto questo avviso.*
* Questo codice è stato scaricato da Robojax.com
* Questo programma è software libero: puoi ridistribuirlo e/o modificarlo
* secondo i termini della GNU General Public License come pubblicata da
* la Free Software Foundation, sia nella versione 3 della Licenza, che
* (a tua scelta) in qualsiasi versione successiva.
*
* Questo programma è distribuito nella speranza che possa essere utile,
* ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di
* COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la
* GNU General Public License per ulteriori dettagli.
*
* Dovresti aver ricevuto una copia della GNU General Public License
* insieme a questo programma. In caso contrario, visita <https://www.gnu.org/licenses/>.
*/
#include <NewPing.h>
#define TRIGGER_PIN 12 // Pin Arduino collegato al pin di attivazione del sensore ultrasonico.
#define ECHO_PIN 11 // Pin Arduino collegato al pin di eco del sensore ultrasonico.
#define MAX_DISTANCE 200 // Distanza massima per cui vogliamo effettuare il ping (in centimetri). La distanza massima del sensore è certificata a 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Impostazione dei pin e distanza massima di NewPing.
// inizio delle impostazioni per LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo LCD a 0x3F per un display di 16 caratteri e 2 righe.
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int VCC2 = 2;
// fine delle impostazioni per LCD1602-I2C
void setup() {
Serial.begin(9600); // Apri il monitor seriale a 19600 baud per vedere i risultati del ping.
pinMode(VCC2, OUTPUT); // extra VCC per LCD
digitalWrite(VCC2, HIGH); // l'extra VCC è ora ALTO (5V)
// inizializza l'LCD,
lcd.begin();
// Accendi la luce nera e stampa un messaggio.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Robojax LCD1602");
}
void loop() {
delay(50); // Aspetta 50 ms tra i ping (circa 20 ping al secondo). 29 ms dovrebbe essere il ritardo più breve tra i ping.
lcd.clear(); // cancella i valori precedenti dallo schermo
lcd.setCursor (0,0); // carattere zero, linea 1
lcd.print("LCD1602 HC-SR04"); // stampa testo
// stampa distanza in cm
lcd.setCursor (0,1); // carattere 0, riga 2
lcd.print(sonar.ping_cm()); // stampa distanza in cm
lcd.setCursor (3,1); // carattere 4, riga 2
lcd.print("cm"); // stampa "cm" sul display
// stampa distanza in pollici
lcd.setCursor (7,1); // carattere 8, riga 2
lcd.print(sonar.ping_in()); // stampa distanza in cm
lcd.setCursor (9,1); // carattere 4, riga 2
lcd.print("inches"); // stampa "cm" sul display
Serial.print("Ping: ");
Serial.print(sonar.ping_cm()); // Invia un ping, ottieni la distanza in cm e stampa il risultato (0 = fuori dal range di distanza impostato)
Serial.print("cm");
Serial.print(", ");
Serial.print(sonar.ping_in());
Serial.println("in");
int distance = sonar.ping_cm();
}
Cose di cui potresti avere bisogno
-
eBay
-
eBayAcquista LCD1602-I2C da eBayebay.us
-
AliExpressAcquista LCD1602-I2C da AliExpresss.click.aliexpress.com
-
Banggood
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Nessun file disponibile.