Вывод расстояния на LCD 1602 с использованием ультразвукового датчика и Arduino

В проекте «Вывод расстояния на LCD 1602 с использованием ультразвукового датчика и Arduino» используется ультразвуковой датчик для измерения расстояния до объекта и ЖК-дисплей 1602 с интерфейсом I2C для отображения результата. При приближении объекта к датчику на расстояние менее определенного значения, информация о расстоянии выводится на экран дисплея. Проект включает инструкции по установке необходимых библиотек AlashUltrasonic и LiquidCrystal_I2C, а также пример кода для реализации этой функции. Этот проект подходит для систем безопасности, робототехники и автоматизации.

Этот проект демонстрирует, как использовать ультразвуковой датчик для измерения расстояния и отображения результата на ЖК-дисплее 1602 с интерфейсом I2C. Такой проект может быть полезен для различных приложений, включая системы безопасности, робототехнику и автоматизацию.

Полезная информация

  1. Ультразвуковой датчик HC-SR04:

  • Диапазон измерения: от 2 см до 400 см

  • Точность измерения: около 3 мм

  • Угол измерения: примерно 15 градусов

  • Частота: 40 кГц

  1. ЖК-дисплей 1602 с интерфейсом I2C:

  • Разрешение: 16 символов на 2 строки

  • Протокол: I2C (Интерфейс межсвязи)

  • Адрес по умолчанию: 0x27 или 0x3F (может варьироваться, проверьте документацию)

  1. Подключение компонентов:

  • ЖК-дисплей: Использование интерфейса I2C позволяет существенно сократить количество проводов, необходимых для подключения дисплея к Arduino. Всего два провода (SDA и SCL) используются для передачи данных и управления дисплеем.

  • Ультразвуковой датчик: Работает путем отправки звукового импульса и измерения времени, за которое импульс возвращается. Это позволяет определить расстояние до объекта.

Необходимые компоненты

  • Arduino Uno

  • Ультразвуковой датчик (например, HC-SR04)**

  • ЖК-дисплей 1602 с интерфейсом I2C**

  • Соединительные провода

  • Макетная плата (опционально)

  • Подключение компонентов

  1. Ультразвуковой датчик:

  • Vcc к 5V на Arduino

  • Trig к порту 2 на Arduino

  • Echo к порту 3 на Arduino

  • Gnd к Gnd на Arduino

  1. ЖК-дисплей 1602 с интерфейсом I2C:

  • VCC к 5V на Arduino

  • GND к GND на Arduino

  • SDA к A4 на Arduino

  • SCL к A5 на Arduino

Установка библиотек

AlashUltrasonic

  1. Перейдите на официальный репозиторий библиотеки AlashUltrasonic на GitHub по следующей ссылке: AlashUltrasonic GitHub

  2. На странице репозитория нажмите кнопку «Code» и выберите «Download ZIP» для скачивания архива с библиотекой.

  3. После скачивания архива с библиотекой, распакуйте его в удобное для вас место на вашем компьютере.

  4. Откройте Arduino IDE.

  5. Перейдите в меню «Скетч» -> «Подключить библиотеку» -> «Добавить .ZIP библиотеку…».

  6. В открывшемся окне проводника найдите и выберите скачанный и распакованный архив с библиотекой AlashUltrasonic. Нажмите «Открыть».

  7. Arduino IDE автоматически установит библиотеку, и внизу окна появится сообщение «Библиотека добавлена. Проверьте меню „Подключить библиотеку“».

LiquidCrystal_I2C

Для установки библиотеки LiquidCrystal_I2C повторите те же шаги, что и для установки библиотеки AlashUltrasonic, используя следующую ссылку на репозиторий: LiquidCrystal_I2C GitHub

Пример кода

distance_display_lcd1602.ino
#include <AlashUltrasonic.h>
#include <LiquidCrystal_I2C.h>  // Импортируем библиотеку

// Определение пинов для ультразвукового датчика и LCD
const uint8_t TRIGGER_PIN = A5;
const uint8_t ECHO_PIN = A4;

// Создание объектов для ультразвукового датчика и LCD
AlashUltrasonic sensor(TRIGGER_PIN, ECHO_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Создание объекта lcd с адресом 0x27, размером 16x2

void setup() {
  Serial.begin(9600);
  sensor.begin();
  lcd.init();       // Инициализация LCD
  lcd.backlight();  // Включение подсветки
}

void loop() {
  lcd.clear();
  float distance = sensor.getDistance();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  lcd.setCursor(0, 0);
  lcd.print("Distance:");
  lcd.print(distance);
  lcd.print(" cm");

  delay(1000);
}

Дополнительный пример: управление сервоприводом на основе расстояния

#include <Servo.h>              // Подключаем библиотеку для работы с сервомотором
#include <AlashUltrasonic.h>    // Подключаем библиотеку AlashUltrasonic для работы с ультразвуковым датчиком
Servo myservo;                  // Создаем объект сервомотора для управления
const uint8_t trigPin = A1;          // Пин для триггера ультразвукового датчика
const uint8_t echoPin = A0;          // Пин для эхо ультразвукового датчика
// Инициализация ультразвукового датчика
AlashUltrasonic sensor(trigPin, echoPin);
void setup() {
  // Инициализация серийной связи:
  Serial.begin(9600);
  myservo.attach(9);  // Подключаем сервомотор к пину 9
  sensor.begin();     // Инициализируем ультразвуковой датчик
}
void loop() {
  // Измеряем расстояние
  long distance = sensor.getDistance();
  // Условие для расстояния
  if (distance < 20) {
    myservo.write(90);  // Устанавливаем позицию серво для открытия ворот
    delay(4000);        // Задержка для удержания ворот открытыми
    myservo.write(0);   // Закрываем ворота
  } else {
    myservo.write(0);   // Держим ворота закрытыми
  }
  // Выводим расстояние в серийный монитор
  Serial.print(distance);
  Serial.print(" cm");
  Serial.println();
  delay(100);
}

Еще один пример: управление сервоприводом с помощью ультразвукового датчика

#include <Servo.h>              // Подключаем библиотеку для работы с сервомотором
#include <AlashUltrasonic.h>    // Подключаем библиотеку AlashUltrasonic для работы с ультразвуковым датчиком
Servo myservo;                  // Создаем объект сервомотора для управления
const uint8_t trigPin = A1;          // Пин для триггера ультразвукового датчика
const uint8_t echoPin = A0;          // Пин для эхо ультразвукового датчика
// Инициализация ультразвукового датчика
AlashUltrasonic sensor(trigPin, echoPin);
void setup() {
  // Инициализация серийной связи:
  Serial.begin(9600);
  myservo.attach(9);  // Подключаем сервомотор к пину 9
  sensor.begin();     // Инициализируем ультразвуковой датчик
}
void loop() {
  // Измеряем расстояние
  long distance = sensor.getDistance();
  // Условие для расстояния
  if (distance < 20) {
    myservo.write(90);  // Устанавливаем позицию серво для открытия ворот
    delay(4000);        // Задержка для удержания ворот открытыми
    myservo.write(0);   // Закрываем ворота
  } else {
    myservo.write(0);   // Держим ворота закрытыми
  }
  // Выводим расстояние в серийный монитор
  Serial.print(distance);
  Serial.print(" cm");
  Serial.println();
  delay(100);
}

Еще один пример: управление зуммером в зависимости от расстояния

#include <AlashUltrasonic.h>
// Определяем пины для ультразвукового датчика и зуммера
const uint8_t TRIGGER_PIN = A1;
const uint8_t ECHO_PIN = A0;
const uint8_t BUZZER_PIN = 11;
// Инициализация ультразвукового датчика
AlashUltrasonic sensor(TRIGGER_PIN, ECHO_PIN);
// Задаем пороговые расстояния для изменения частоты сигнала
int cm1 = 30;  // расстояние, при котором зуммер начинает издавать звук с низкой частотой
int cm2 = 20;  // расстояние, при котором зуммер издает звук со средней частотой
int cm3 = 10;  // расстояние, при котором зуммер издает звук с высокой частотой
void setup() {
  // Инициализация серийного порта для отображения информации
  Serial.begin(9600);
  // Устанавливаем режим работы пинов
  pinMode(BUZZER_PIN, OUTPUT);
  // Запускаем датчик
  sensor.begin();
}
void loop() {
  // выполняем 10 измерений и складываем результат
  int distance = sensor.getDistance();
  // Выводим расстояние в серийный монитор
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  // Задаем частоту звука в зависимости от расстояния
  int frequency;
  if (distance >= cm1) {
    noTone(BUZZER_PIN);
  } else if (distance < cm1 && distance >= cm2) {
    frequency = 1200;  // низкая частота
    tone(BUZZER_PIN, frequency, 200);
    delay(150);
  } else if (distance < cm2 && distance > cm3) {
    frequency = 1250;  // средняя частота
    tone(BUZZER_PIN, frequency, 200);
  } else if (distance <= cm3) {
    frequency = 1300;  // высокая частота
    tone(BUZZER_PIN, frequency);
  }
  // Задержка перед следующим измерением
  delay(250);
}

Заключение

Следуя этой инструкции, вы сможете установить библиотеки AlashUltrasonic и LiquidCrystal_I2C, и использовать их для создания проектов на Arduino. Этот проект демонстрирует, как использовать ультразвуковой датчик для измерения расстояния и отображать результаты на LCD дисплее, что может быть полезно в различных приложениях, таких как системы безопасности и робототехника. Экспериментируйте с настройками и компонентами, чтобы адаптировать проект под ваши нужды.