Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

13 0 Новини високих технологій

Кожен радіоаматор після деякої кількості простих саморобок приходить до мети сконструювати щось грандіозне з використання датчиків і кнопок. Адже набагато цікавіше виводити дані на дисплей, ніж на монітор порту. Але тоді постає питання: який дисплей вибрати? І взагалі, як підключати його, що потрібно для підключення? Відповіді на ці питання будуть розглянуті в цій статті.

Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

LCD 1602

Серед безлічі варіантів серед дисплеїв окремо хочеться відзначити саме дисплей LCD1602 на базі контролера HD4478. Існує цей дисплей в двох кольорах: білі літери на синьому фоні, чорні букви на жовтому тлі. Підключення LCD 1602 до Arduino також не викличе жодних проблем, так як є вбудована бібліотека, і нічого завантажувати додатково не потрібно. Дисплеї різняться не тільки ціною, але і розміром. Найчастіше використовується радіоаматорами 16 x 2 тобто 2 рядки по 16 символів. Але існує також і 20 x 4 де 4 рядки по 20 символів. Розміри і колір не грають ніякої ролі в підключенні дисплея lcd 1602 до Arduno, підключаються вони однаково. Кут огляду становить 35 градусів, час відгуку дисплея - 250 мс. Працювати може при температурах від -20 до 70 градусів за Цельсієм. При роботі використовує 4 мА на екран і на підсвітку 120 мА.


Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

Де використовується?

Цей дисплей має свою популярність не тільки у радіоаматорів, але і у великих виробників. Наприклад, принтери, кавові апарати так само використовують LCD1602. Це обумовлено її низькою ціною, варто цей дисплей на китайських майданчиках 200-300 рублів. Купувати стоїть саме там, так як в наших магазинах націнки на цей дисплей дуже високі.

Підключення до Arduino

Підключення LCD 1602 до Arduino Nano і Uno не відрізняється. З дисплеєм можна працювати у двох режимах: 4 біта і 8. При роботі з 8-бітним використовуються і молодші, і старші біти, а з 4-бітним - тільки молодші. Працювати з 8-бітним особливого сенсу немає, так як додасться для підключення ще 4 контакту, що не доцільно, адже швидкості вище не буде, межа оновлень дисплея - 10 разів в секунду. Взагалі, для підключення lcd 1602 до Arduino використовується багато проводів, що доставляє певні незручності, але існує особливі шилды, але про це пізніше. На фотографії зображено підключення дисплея до Arduino Uno:


Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення
Приклад програмного коду:

#include //Додаємо необхідну бібліотеку
LiquidCrystal lcd(765 432); //(RS, E, DB4 DB5 DB6 DB7)

void setup(){
lcd.begin(16 2); //Задаємо розміри екрану

lcd.setCursor(0 0); //Встановлюємо курсор в початок 1 рядка
lcd.print("Hello, world!"); //Виводимо текст
lcd.setCursor(0 1); //Встановлюємо курсор в початок рядка 2
lcd.print("fb.ru"); //Виводимо текст
}

void loop(){
}

Що ж робить код? Першим ділом підключається бібліотека для роботи з дисплеєм. Як вже говорилося вище, ця бібліотека вже входить до складу Arduino IDE і додатково завантажувати і встановлювати її не треба. Далі визначаються контакти, які підключені до висновків: RS, E, DB4 DB5 DB6 DB7 відповідно. Після чого визначається розмір екрану. Так як ми працюємо з версією, де 16 символів і 2 рядки, то пишемо такі значення. Встановлюємо курсор в початок першого рядка і виводимо наш перший текст Hello World. Далі ставимо курсор на другий рядок і виводимо назву сайту. От і все! Було розглянуто підключення lcd 1602 до Arduino Uno.


<script type="text/javascript">
var blockSettings2 = {blockId:"R-A-271049-5",renderTo:"yandex_rtb_R-A-70350-39",async:!0};
if(document.cookie.indexOf("abmatch=") >= 0) blockSettings2.statId = 70350;
!function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings2)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/javascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");

Що таке I2C і навіщо він потрібен?

Як вже говорилося вище, підключення дисплея займає дуже багато контактів. Наприклад, при роботі з декількома датчиками і дисплеєм LCD 1602 контактів може просто не вистачити. Найчастіше радіоаматорами використовуються версії Uno або Nano, де не так багато контактів. Тоді люди придумали спеціальні шилды. Наприклад, I2C. Він дозволяє підключати дисплей всього у 4 контакту. Це в два рази менше. Продається модуль I2C як окремо, де самому потрібно припаювати, так і вже припаяний до дисплею LCD 1602.

Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

Підключення за допомогою I2C модуля

Підключення LCD 1602 до Arduino Nano з I2C займає мало місця, всього 4 контакту: земля, харчування і 2 виходи для передачі даних. Харчування і землю підключаємо на 5V і GND на Arduino відповідно. Залишилися два контакти: SCL і SDA підключаємо до будь аналоговим пинам. На фотографії можна побачити приклад підключення lcd 1602 до arduino з I2C модулем:

Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

Програмний код

Якщо для роботи з дисплеєм без модуля необхідно було скористатися тільки однією бібліотекою, то для роботи з модулем потрібно дві бібліотеки. Одна з них вже є у складі Arduino IDE - Wire. Іншу бібліотеку, LiquidCrystal I2C, треба скачувати окремо та встановлювати. Для установки бібліотеки Arduino вміст скачаного архіву необхідно завантажити в кореневу папку Libraries. Приклад програмного коду з використанням I2C:


<script type="text/javascript">
var blockSettings3 = {blockId:"R-A-271049-6",renderTo:"yandex_rtb_R-A-70350-44",async:!0};
if(document.cookie.indexOf("abmatch=") >= 0) blockSettings3.statId = 70350;
!function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings3)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/javascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");
  #include  
#include
LiquidCrystal_I2C lcd(0x27162); //Встановлюємо дисплей
void setup()
{
lcd.init();
lcd.backlight();//Включаємо підсвічування дисплея
lcd.print("FB.ru");
lcd.setCursor(8 1);
lcd.print("LCD 1602");
}
void loop()
{
//Установлюємо курсор на другий рядок і нульовий символ.
lcd.setCursor(0 1);
//Виводимо на екран кількість секунд з моменту запуску ардуины
lcd.print(millis()/1000);
}

Як можна побачити, код майже не відрізняється.

Як додати свій символ?

Проблемою цих дисплеїв є те, що немає підтримки кирилиці і символів. Наприклад, вам необхідно якийсь символ завантажити дисплей, щоб він міг його відображати. Для цього дисплей дозволяє створити до 7 своїх символів. Уявіть таблицю:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Якщо 0 - там нічого немає, якщо 1 - це зафарбований ділянку. У наведеному вище прикладі можна побачити створення символу "усміхнений смайл". На прикладі програми Arduino це буде виглядати наступним чином:

  #include  
#include //Лобавляем необхідну бібліотеку
//Бітова маска символу посмішки
byte smile[8]=
{
B00010
B00001
B11001
B00001
B11001
B00001
B00010
};
LiquidCrystal lcd(765 432); //(RS, E, DB4 DB5 DB6 DB7)

void setup(){
lcd.begin(16 2); //Задаємо розміри екрану

lcd.createChar(1 smile); //Створюємо символ під номером 1

lcd.setCursor(0 0); //Встановлюємо курсор в початок 1 рядка
lcd.print("1"); //Виводимо смайлик (символ під номером 1) - "1"
}

void loop(){
}

Як можна побачити, була створена бітова маска така ж, як і таблиця. Після створення її можна виводити як змінну в дисплей. Пам'ятайте, що в пам'яті можна зберігати лише 7 символів. В принципі, цього буває достатньо. Наприклад, якщо потрібно показати символ градуси.

<script async="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">

<script> (adsbygoogle = window.adsbygoogle ||[]).push({});
Підключення LCD 1602 до Arduino: опис, функції, інструкції, особливості, проблеми і їх рішення

Проблеми при яких дисплей може не працювати

Бувають такі випадки, коли дисплей не працює. Наприклад, включається, але не показує символи. Або зовсім не включається. Спочатку подивіться, чи правильно ви підключили контакти. Якщо ви використовували підключення lcd 1202 до Arduino без I2C, то дуже легко заплутатися в проводах, що може стати причиною некоректної роботи дисплея. Також слід упевнитися в тому, що контрастність дисплея збільшена, так як при мінімальній контрастності навіть не видно, включений LCD 1602 чи ні. Якщо це не допомагає, то, можливо, проблема криється в пайку контактів, це при використанні модуля I2C. Також частою причиною, за якої дисплей може не працювати, є неправильна установка I2C адреси. Справа в тому, що багато виробників, і вони можуть ставити різний адресу, виправляти потрібно тут:


<script type="text/javascript">
var blockSettings = {blockId:"R-A-70350-45",renderTo:"yandex_rtb_R-A-70350-45",async:!0};
if(document.cookie.indexOf("abmatch=") >= 0) blockSettings.statId = 70350;
!function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/javascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");
  LiquidCrystal_I2C lcd(0x27162);  

В дужках можна побачити два значення, 0x27 і 162 (16 2 - є розміром дисплея, а 0x27 як раз таки адреса I2C). Замість цих значень можна спробувати поставити 0x37 або 0x3F. Ну і ще однією причиною є просто несправний LCD 1602. Враховуючи, що практично все для Arduino виготовляється в Китаї, то не можна бути впевненим на 100%, що придбаний товар не є шлюбом.

Плюси і мінуси LCD 1602

Розглянемо плюси і мінуси дисплея LCD 1602. Плюси
  • Ціна. Цей модуль можна придбати зовсім за демократичною ціною в китайських магазинах. Ціна становить 200-300 рублів. Іноді продається навіть разом з I2C модулем.
  • Легко підключати. Ймовірно, ніхто зараз не підключає LCD 1602 без I2C. А з цим модулем підключення займає всього 4 контакту, ніяких "павутин" з проводів не буде.
  • Програмування. Завдяки готовим бібліотекам працювати з цим модулем легко, всі функції вже прописані. А при необхідності додати свій символ витрачається всього пару хвилин.
  • Мінуси
  • За час використання тисячами радіоаматорами ніяких великих мінусів виявлено не було, тільки бувають випадки купівлі шлюбу, так як в основному використовуються китайські варіанти дисплеїв.
  • У цій статті було розглянуто підключення дисплея LCD 1602 до Arduino, а також були представлені приклади програм для роботи з дисплеєм. Він дійсно є в своїй категорії одним з кращих, не просто так його вибирають тисячі радіоаматори для своїх проектів!