Пребарување код

Лекција 20/31: Прикажување на ултразвучно растојание на LCD1602

Лекција 20/31: Прикажување на ултразвучно растојание на LCD1602

Овој проект демонстрира како да се комбинира HC-SR04 ултразвучен сензор за растојание со LCD1602 дисплеј кој поддржува I2C за да се создаде систем за мерење на растојание во реално време. До крајот на ова упатство, ќе имате функционален уред кој континуирано мери и прикажува растојание до објект во сантиметри. Ова е основна вештина во Arduino електрониката, бидејќи комбинира сензорски влез со визуелен излез.

Sunfounder 20-LCD1602-ultrasonic

Оваа практична поставка може да се користи во различни реални апликации, вклучувајќи:

  • Креирање паметен асистент за паркирање кој помага да се процени растојанието до ѕид или друго возило.
  • Изградба на едноставен монитор за ниво на течност во резервоар со мерење на растојанието од врвот до површината.
  • Развивање на автоматизиран дозер за дезинфекција на раце или корпа за отпадоци без допир која се отвора кога објект е во близина.
  • Конструирање на основен безбедносен аларм кој се активира кога некој влегува во одредена зона.

Хардвер и компоненти

За да го изградите овој проект, ќе ви бидат потребни следниве компоненти:

  • Arduino плоча (на пр., Uno)
  • LCD1602 дисплеј со I2C интерфејс модул
  • HC-SR04 ултразвучен сензор за растојание
  • Поврзувачки жици (jumper wires)
  • Breadboard (опционално, за полесно поврзување)

Разбирање на LCD1602 и I2C

LCD1602 е популарен дисплеј способен да прикажува 16 карактери по линија на две линии. „I2C“ модулот на неговата задна страна е значајна предност бидејќи го намалува бројот на пинови потребни за контрола на дисплејот од 6 или повеќе на само 2 за комуникација (SDA и SCL) и 2 за напојување (VCC и GND). Ова поедноставување го прави жицирањето многу почисто и ослободува вредни дигитални пинови на вашиот Arduino за други сензори, како ултразвучниот што се користи во овој проект. (во видео на 01:30)

I2C модулот исто така има мал потенциометар за прилагодување на контрастот на дисплејот. Ако го напојувате дисплејот и не гледате ништо, обидете се да го вртите овој заврток додека текстот не стане видлив. (во видео на 02:47)

Водич за жицирање

LCD1602_wiring_ultrasonic_bb

Поврзувањето на компонентите е едноставно. I2C модулот на LCD има четири пинови кои треба да се поврзат со Arduino. Ултразвучниот сензор исто така има четири пинови.

Еве преглед на врските:

LCD1602 I2C модул на Arduino:

  • GND на Arduino GND
  • VCC на Arduino 5V
  • SDA на Arduino A4
  • SCL на Arduino A5

HC-SR04 ултразвучен сензор на Arduino:

  • VCC на Arduino 5V
  • Trig на Arduino дигитален пин 12
  • Echo на Arduino дигитален пин 11
  • GND на Arduino GND

Дијаграмот за жицирање за овој проект е прикажан во видеото.

Инсталирање на потребните библиотеки

Овој проект се потпира на две клучни библиотеки. Првата, LiquidCrystal_I2C, е потребна за контрола на LCD и не е вклучена со Arduino IDE по дифолт. Можете да ја преземете од линкот даден во описот на видеото или од веб-страницата на Robojax. (во видео на 06:16)

Втората библиотека, NewPing, се користи за интерфејс со ултразвучниот сензор. Таа го поедноставува процесот на испраќање пинг и читање на времето на ехо. Двете библиотеки може да се инсталираат преку Library Manager на Arduino IDE со одење на Sketch -> Include Library -> Manage Libraries и пребарување на нивните имиња.

Објаснување на кодот

Овој скеч ја комбинира функционалноста на LCD и ултразвучниот сензор. Кодот е структуриран да биде лесно конфигуриран за вашата специфична поставка.

На врвот на кодот, ќе ги најдете клучните променливи кои можеби ќе треба да ги прилагодите:

// Поставете ја LCD адресата на 0x27 за дисплеј со 16 карактери и 2 линии
LiquidCrystal_I2C lcd(0x27, displayChars, displayRows);

#define TRIGGER_PIN  12  // Arduino пин поврзан со trigger пинот на ултразвучниот сензор.
#define ECHO_PIN     11  // Arduino пин поврзан со echo пинот на ултразвучниот сензор.
#define MAX_DISTANCE 190 // Максимално растојание за кое сакаме да испратиме пинг (во сантиметри).
  • LCD адреса (0x27): Ова е I2C адресата на вашиот LCD модул. Повеќето модули користат 0x27, но некои може да користат 0x3F. Ако вашиот дисплеј не покажува ништо, можеби ќе треба да стартувате I2C скенер скеч за да ја најдете точната адреса и да ја ажурирате оваа вредност. (во видео на 08:11)
  • TRIGGER_PIN и ECHO_PIN: Овие ги дефинираат дигиталните пинови на Arduino поврзани со Trig и Echo пиновите на ултразвучниот сензор. Ако користите различни пинови, променете ги овие дефиниции.
  • MAX_DISTANCE: Ова го поставува максималното растојание во сантиметри кое сензорот ќе го мери. HC-SR04 може да мери до 400-500cm, но поставувањето помала вредност може да ја подобри точноста и доверливоста на читањата, особено за пократки растојанија.

Во функцијата loop(), кодот ги извршува следниве чекори:

  1. Ја користи функцијата sonar.ping_cm() за да го измери растојанието и да го зачува во променливата distance.
  2. Го чисти LCD-то и го печати текстот „Robojax.com“ на првата линија.
  3. Потоа го поставува курсорот на втората линија и печати „Distance: “.
  4. На крај, го поместува курсорот на позиција 10 на втората линија за да ја испечати измерената вредност distance проследена со „cm“.

delay(200) на крајот од јамката контролира колку често сензорот зема ново мерење и ја ажурира приказната.

Демонстрација на кодот

Откако кодот ќе се постави на вашиот Arduino, LCD-то ќе се осветли и ќе почне да го прикажува растојанието. Можете да го тестирате поставувањето со поместување на раката или некој предмет поблиску и подалеку од ултразвучниот сензор. Бројот на екранот треба да се ажурира во реално време, покажувајќи го растојанието во сантиметри. (во видеото на 38:07)

Поврзани проекти од ова видео

Поглавја

  • [00:00] Вовед во LCD1602 и преглед на проектот
  • [01:30] Објаснување на LCD1602 хардверот и I2C модулот
  • [03:14] LCD пинови и конфигурација на I2C адресата
  • [05:28] Дијаграм за поврзување на LCD1602
  • [06:16] Инсталирање на потребната LCD библиотека
  • [07:24] Основен код за печатење текст на LCD-то
  • [08:11] Пронаоѓање на I2C адресата на вашиот LCD
  • [11:10] LCD примери: Трепкачки курсор и прилагодени знаци
  • [18:51] LCD пример: Сериски приказ и лизгачки текст
  • [24:36] Прикажување на DHT11 температура и влажност на LCD-то
  • [33:00] Прикажување на напон од потенциометар на LCD-то
  • [35:56] Комбинирање на кодот за ултразвучен сензор со LCD-то
  • [38:07] Демонстрација на приказот на ултразвучното растојание

Слики

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
Јазик: 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); 
  

}

Ресурси и референци

Датотеки📁

Arduino библиотеки (zip)

Упатство за корисникот