В предыдущей статье я подключил ультразвуковой датчик HC-SR04 к Arduino Uno и измерил расстояния до препятствий.

Сегодня я подключу дисплей lcd1602 для визуального контроля расстояния до препятствия. Также добавим в скетч условие включения светодиода с выводом сообщения на экран lcd.

hcsr6

 

У меня в наличии оказались два  дисплея с интерфейсом I2C. Один двустрочный lcd1602A и второй четырехстрочный lcd2004A. В коде программы нужно только поменять размерность дисплея:

LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея. — Это для LCD1602  или

LiquidCrystal_I2C lcd(0x27,20,4);   // Задаем адрес и размерность дисплея. — Это для LCD2004.

Интерфейс I2C позволяет подключить данный дисплей по двум проводам к ардуино, не считая проводов питания. Также хочу обратить внимание на адрес дисплея. Скорее всего адрес будет 0х27. Но у меня на одном из дисплеев не появились символы на экране. Я определил адрес с помощью скетча «Сканнер I2C адресов». Адрес оказался 0x3F.

Ссылка на этот скетч

Да, выявил следующую проблему: при загрузке скетча в ардуино на дисплее появился только один первый символ. Выяснилось, что на версиях Arduino IDE старше 1.65 есть такой глюк. Откатитесь до версии 1.65 и будет счастье.

СХЕМА ПОДКЛЮЧЕНИЯ

Untitled Sketch_bb

На плате Arduino Uno есть светодиод подключенный к 13 пину. Можно использовать его. На схеме светодиод показан отдельно. Его можно подключить к свободному пину и соответственно внести в код изменения.

Вот код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//подключаем нужные библиотеки
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея
 
const int trigPin = 12; //Trig pin подключаем к Arduino pin 12
const int echoPin = 11; //Echo pin подключаем к Arduino pin 11
const int ledPin = 13;  // 13 – если будете использовать встроенный в Arduino светодиод
 
void setup()  {
  pinMode(trigPin, OUTPUT); // задаем триггер - выходной пин
  pinMode(echoPin, INPUT); // задаем эхо - входной пин
  pinMode(ledPin, OUTPUT); // задаем светодиод - выходной пин
  Serial.begin(9600); // инициализация послед. порта
  Wire.begin();
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.print("Distance:");  //печатаем текст
}
void loop()  { 
  long distance = getDistance(); // получаем дистанцию с датчика
  Serial.println(distance); // выводим в последовательный порт
  lcd.setCursor(10,0);  //устанавливаем курсор
  lcd.print(distance); //выводим на lcd 
  lcd.print("cm"); //печатаем текст cm
  lcd.print("   "); //печатаем  пробелы для стирания лишних символов при увеличении разрядности значений
  delay(300);// поставил задержку, чтобы цифры на экране не рябили
  if (distance<20) // задаем нужную дистанцию, например менее 20 сантиметров 
{
  digitalWrite(ledPin, 1); // включаем светодиод
  lcd.setCursor(0,1);  //устанавливаем курсор в начало первой строчки
  lcd.print("Attention"); //печатаем Внимание 
} 
else 
{ 
   digitalWrite(ledPin, 0); // иначе выключаем
   lcd.setCursor(0,1);  //устанавливаем курсор в начало второй строчки
  lcd.print("Normal   "); //печатаем Норма 
}   
} 
// Определение дистанции до объекта в см
long getDistance() {
  long distacne_cm = getEchoTiming() * 1.71 * 0.01; //коеффициен пересчета, аналогичен делению на 58.4
  return distacne_cm;
}
// Определение времени задержки
long getEchoTiming() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); // генерируем импульс запуска
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);
  // определение на пине echoPin длительности уровня HIGH, мксек:
  long duration = pulseIn(echoPin, HIGH); 
  return duration;
  delay(100);
}

Вот код с использованием библиотеки «Ultrasonic.h» скачать

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//подключаем нужные библиотеки
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "Ultrasonic.h"

LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея
Ultrasonic ultrasonic(12,11); //trigPin - 12; echoPin - 11;
const int ledPin = 13;  // 13 – если будете использовать встроенный в Arduino светодиод
 
void setup()  {
  pinMode(ledPin, OUTPUT); // задаем светодиод - выходной пин
  Serial.begin(9600); // инициализация послед. порта
  Wire.begin();
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.print("Distance:");  //печатаем текст  
}
void loop()  { 
  Serial.println(ultrasonic.Ranging(CM)); // выводим в последовательный порт
  lcd.setCursor(10,0);  //устанавливаем курсор
  lcd.print(ultrasonic.Ranging(CM)); //выводим на lcd 
  lcd.print("cm"); //печатаем текст cm
  lcd.print("   "); //печатаем  пробелы для стирания лишних символов при увеличении разрядности значений
 
  if (ultrasonic.Ranging(CM)<20) // задаем нужную дистанцию, например менее 50 сантиметров 
{
  digitalWrite(ledPin, 1); // включаем светодиод
  lcd.setCursor(0,1);  //устанавливаем курсор в начало первой строчки
  lcd.print("Attention"); //печатаем Внимание 
} 
else 
{ 
  digitalWrite(ledPin, 0); // иначе выключаем
  lcd.setCursor(0,1);  //устанавливаем курсор в начало второй строчки
  lcd.print("Normal   "); //печатаем Норма
}
  delay(100);
}

При расстоянии до препятсвия менее 20 см. загорается светодиод и на экран дисплея выводится соответствующее предупреждение.
hcsr8hcsr7 В коде этот параметр можно изменить.
Также вместо светодиода можно использовать какой-нибудь исполнительный элемент. Например, реле или зуммер.

Еще раз необходимые библиотеки:

LiquidCrystal_I2C.h

Ultrasonic.h

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Навигация по записям