Сегодня решил подключить к предыдущему проекту «КОНТРОЛЬ ДИСТАНЦИИ НА ЭКРАНЕ LCD1602 И ДАТЧИК HC-SR04» три разноцветных светодиода. Один вариант в режиме светофора, второй- в режиме предупреждения.
Режим светофора:
- Все светодиоды выключены
- На определенной дистанции включается красный
- При дальнейшем приближении красный гаснет, а желтый включается.
- И последним включается зеленый, а желтый гаснет.
Режим предупреждения близкого приближения к объекту:
- Горит зеленый.
- На определенной дистанции включается желтый, зеленый гаснет.
- При дальнейшем приближении включается красный, желтый гаснет. Можно еще добавить звуковой сигнал.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno
- Ультразвуковой датчик HC-SR04
- Три светодиода: красный, желтый и зеленый
- Три резистора сопротивлением 220-270 Ом
- Дисплей LCD 1602 I2C
- Провода
СХЕМА ПОДКЛЮЧЕНИЯ
Интерфейс I2C позволяет подключить данный дисплей по двум проводам к ардуино, не считая проводов питания. Также хочу обратить внимание на адрес дисплея. Скорее всего адрес будет 0х27. Но у меня на одном из дисплеев не появились символы на экране. Я определил адрес с помощью скетча «Сканнер I2C адресов». Адрес оказался 0x3F.
Да, выявил следующую проблему: при загрузке скетча в ардуино на дисплее появился только один первый символ. Выяснилось, что на версиях Arduino IDE старше 1.65 есть такой глюк. Откатитесь до версии 1.65 и будет счастье.
код режим светофора:
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 59 60 61 62 63 64 65 | //подключаем нужные библиотеки #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 ledPinRed = 10; // пин 10 – красный светодиод const int ledPinYel = 9; // пин 9 – желтый светодиод const int ledPinGr = 8; // пин 8 – зеленый светодиод void setup() { pinMode(ledPinRed, OUTPUT); // задаем светодиод - выходной пин pinMode(ledPinYel, OUTPUT); // задаем светодиод - выходной пин pinMode(ledPinGr, 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) // задаем условие отключения всех светодиодов. //У меня для демонстрации задано > 20 см. { digitalWrite(ledPinRed, 0); // выключаем красный digitalWrite(ledPinYel, 0); // выключаем желтый digitalWrite(ledPinGr, 0); // выключаем зеленый lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Red, Yel, Gr off"); //печатаем красный } //else if (ultrasonic.Ranging(CM)>10) // задаем условие включения красного на дистанции более 10 сантиметром { digitalWrite(ledPinRed, 1); // включаем красный светодиод digitalWrite(ledPinYel, 0); // выключаем желтый digitalWrite(ledPinGr, 0); // выключаем зеленый lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Red on "); //печатаем красный вкл. } else if (ultrasonic.Ranging(CM)>5) // задаем условие включения желтого на дистанции от 5 до 10 сантиметром { digitalWrite(ledPinYel, 1); // включаем желтый светодиод digitalWrite(ledPinRed, 0); // выключаем красный светодиод digitalWrite(ledPinGr, 0); // выключаем зеленый lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Yellow on "); //печатаем желтый вкл. } else //иначе включаем зеленый, желтый гасим { digitalWrite(ledPinGr, 1); // включаем зеленый светодиод digitalWrite(ledPinYel, 0); // выключаем желтый светодиод digitalWrite(ledPinRed, 0); // выключаем красный светодиод lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Green on "); //печатаем зеленый вкл. } delay(100); } |
Код режим предупреждения близкого приближения к объекту:
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 | //подключаем нужные библиотеки #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 ledPinRed = 10; // пин 10 – красный светодиод const int ledPinYel = 9; // пин 9 – желтый светодиод const int ledPinGr = 8; // пин 8 – зеленый светодиод void setup() { pinMode(ledPinRed, OUTPUT); // задаем светодиод - выходной пин pinMode(ledPinYel, OUTPUT); // задаем светодиод - выходной пин pinMode(ledPinGr, 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) // задаем условие включения зеленого на дистанции более 20 сантиметром { digitalWrite(ledPinRed, 0); // выключаем красный светодиод digitalWrite(ledPinYel, 0); // выключаем желтый digitalWrite(ledPinGr, 1); // включаем зеленый lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Green on "); //печатаем зеленый вкл. } else if (ultrasonic.Ranging(CM)>10) // задаем условие включения желтого на дистанции от 10 до 20 сантиметром { digitalWrite(ledPinYel, 1); // включаем желтый светодиод digitalWrite(ledPinRed, 0); // выключаем красный светодиод digitalWrite(ledPinGr, 0); // выключаем зеленый lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Yellow on "); //печатаем желтый вкл. } else //иначе включаем красный, желтый гасим { digitalWrite(ledPinGr, 0); // выключаем зеленый светодиод digitalWrite(ledPinYel, 0); // выключаем желтый светодиод digitalWrite(ledPinRed, 1); // включаем красный светодиод lcd.setCursor(0,1); //устанавливаем курсор lcd.print("Red on "); //печатаем красный вкл. } delay(100); } |
Еще раз необходимые библиотеки:
LiquidCrystal_I2C.h
Ultrasonic.h
Статья очень понравилась, появилась даже желание самому попробовать сделать эту конструкцию. Спасибо!!!
Спасибо. Не боги горшки обжигают.