В предыдущей статье я подключил ультразвуковой датчик HC-SR04 к Arduino Uno и измерил расстояния до препятствий.
Сегодня я подключу дисплей lcd1602 для визуального контроля расстояния до препятствия. Также добавим в скетч условие включения светодиода с выводом сообщения на экран lcd.
У меня в наличии оказались два дисплея с интерфейсом 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 и будет счастье.
СХЕМА ПОДКЛЮЧЕНИЯ
На плате 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 см. загорается светодиод и на экран дисплея выводится соответствующее предупреждение.
В коде этот параметр можно изменить.
Также вместо светодиода можно использовать какой-нибудь исполнительный элемент. Например, реле или зуммер.
Еще раз необходимые библиотеки: