Search Code

Лекција 71: Мерење растојание и прикажување на LCD екран | Arduino Чекор по чекор курс

Лекција 71: Мерење растојание и прикажување на LCD екран | Arduino Чекор по чекор курс

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

Практични апликации:

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

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

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

  • Arduino Uno (или компатибилна плоча)
  • HC-SR04 ултразвучен сензор
  • LCD 1602 дисплеј (препорачана I2C верзија)
  • Поврзувачки жици

Водич за поврзување

Поврзувањето е опишано во видеото (во видеото на 00:31). Клучните врски се:

  • Ултразвучен сензор: VCC на 5V, GND на GND, TRIG на пин 12, ECHO на пин 11.
  • LCD 1602: VCC на 5V, GND на GND, SDA на пин A4, SCL на пин A5.

%%WIRING%%

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

Кодот ја користи NewPing библиотеката за мерење на ултразвучно растојание и LiquidCrystal_I2C библиотеката за контрола на LCD (во видеото на 02:15). Клучните конфигурабилни параметри се:


#define TRIGGER_PIN  12  // Arduino пин поврзан со trigger пинот на ултразвучниот сензор.
#define ECHO_PIN     11  // Arduino пин поврзан со echo пинот на ултразвучниот сензор.
#define MAX_DISTANCE 200 // Максимално растојание кое сакаме да го измериме (во сантиметри).
// Поставете ја LCD адресата на 0x3F за дисплеј со 16 карактери и 2 линии
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int VCC2 = 2; // дополнителен VCC за LCD

TRIGGER_PIN и ECHO_PIN ги дефинираат Arduino пиновите поврзани со ултразвучниот сензор. MAX_DISTANCE го поставува максималното мерливо растојание. LCD адресата (0x3F) може да бара прилагодување во зависност од вашиот специфичен LCD модул. VCC2 пинот обезбедува дополнително напојување од 5V за LCD.

Функциите sonar.ping_cm() и sonar.ping_in() се користат за добивање мерења на растојание во сантиметри и инчи соодветно (во видеото на 05:27 и 06:01).

Жив проект/Демонстрација

Демонстрација на проектот е прикажана во видеото (во видеото на 06:42). Видеото покажува како сензорот мери растојанија до различни објекти и ги прикажува резултатите во сантиметри и инчи на LCD екранот. Серискиот монитор ги прикажува истите мерења, обезбедувајќи начин за проверка на отчитувањата.

Поглавја

  • [00:04] Вовед и преглед на проектот
  • [00:31] Дијаграм за поврзување и врски
  • [02:15] Објаснување на кодот: Поставување на ултразвучниот сензор
  • [03:19] Објаснување на кодот: Поставување на LCD1602
  • [04:21] Објаснување на кодот: Arduino поставување
  • [04:46] Објаснување на кодот: Главна јамка и приказ
  • [06:42] Жива демонстрација
  • [07:26] Заклучок
788-Using LCD1602-I2C and HC-SR04 Ultrasonic Sensor with Arduino
Language: C++
 /*
  * S08-03
 * Using LCD1602-I2C and HC-SR04 Ultrasonic Sensor with Arduino
 * Written/updated by Ahmad Shamshiri for Robojax (Robojax.com)
 * on January 16, 2019 at 15:51 in Ajax, Ontario, Canada

   
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#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 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

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

// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int VCC2 = 2;
// end of settings for LCD1602-I2C

void setup() {
  Serial.begin(9600); // Open serial monitor at 19600 baud to see ping results.

  pinMode(VCC2, OUTPUT);// extra VCC for LCD
  digitalWrite(VCC2, HIGH);//extra VCC is now HIGH (5V)
  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0,0); //
  lcd.print("Robojax LCD1602"); 
   
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
   lcd.clear();// clearn previous values from screen
  lcd.setCursor (0,0); //character zero, line 1
  lcd.print("LCD1602 HC-SR04"); // print text 

  // print distance in cm
  lcd.setCursor (0,1); //character 0, line 2
  lcd.print(sonar.ping_cm());// print distance in cm
  lcd.setCursor (3,1); //character 4, line 2 
  lcd.print("cm");// print "cm" on the display 

   // print distance in inch
  lcd.setCursor (7,1); //character 8, line 2
  lcd.print(sonar.ping_in());// print distance in cm
  lcd.setCursor (9,1); //character 4, line 2 
  lcd.print("inches");// print "cm" on the display  
  
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.print("cm");
  Serial.print(", ");
  Serial.print(sonar.ping_in());
  Serial.println("in");
  int distance = sonar.ping_cm();

}

Resources & references

No resources yet.

Files📁

No files available.