Подключение дисплея нокия 5110 к ардуино.

Для неопытных пользователей, желающих самостоятельно создавать системы управления роботизированными устройствами или средства автоматики, на рынке IT-услуг предлагаются различные аппаратные модули и их модификации. Как правило, такие устройства имеют простую архитектуру с правом копирования и прилагающимся к ним программному обеспечению в виде простых утилит. Подобные изделия могут использоваться как самостоятельно, так и подключаться к другим компьютерным системам через проводные или беспроводные интерфейсы.

Плюсы работы с графическими дисплеями

Ранее графические монохромные дисплеи использовались очень широко в производстве сотовых телефонов.

Компания Nokia выпустила огромное количество различных моделей, оснащенных таким экраном. Времена тех телефонов прошли, но дисплеи не исчезли с рынка и продолжают активно использоваться по настоящее время. Они оказались незаменимыми и, кроме того, дешевыми приборами для вывода текстовой и дисплеи работают за счет создания на экранах матриц точек, которые и высвечивают изображение. Они экономят ресурсы и время, при этом отображая большое количество информации и расходуя малое количество энергии. Существует огромное количество различных областей, где могут использоваться устройства Nokia 5110: фото-, видео-, телеаппаратуре, медицине, и во многих других отраслях.

Перед описанием порядка подключения дисплея Nokia к аппаратному модулю Arduino необходимо привести краткое представление данных устройств.

Преимущества использования Arduino Uno

Было создано множество платформ и микроконтроллеров, являющихся аналогами представленной в данной статье платформы Arduino. Одни из таких аналогов - Netmedia"s BX-24, Parallax Basic Stamp и многие другие. Однако остановимся на Arduino Uno, так как этот конструктор имеет ряд преимуществ перед остальными контроллерами. На них и стоит обратить внимание при выборе платформы для работы. В первую очередь это низкая стоимость данных устройств. Модели с этим программным обеспечением стоят менее 45 долларов, а при желании могут быть собраны вручную, так как обладают довольно простой конструкцией. Вторым пунктом стоит отметить, что платформы Arduino могут работать со всеми операционными системами: Windows, Linux, а также Macintosh OSX, тогда как все остальные ограничиваются работой исключительно с Windows.

Описание Arduino Uno

Arduino Uno - платформа для разработки и программирования различных устройств, которая имеет 14 цифровых входов и выходов, 6 аналоговых входов, несколько разъемов (USB, ICSP, силовой) и кнопку, которая имеет функцию перезагрузки устройства. В данную платформу встроен предохранитель, препятствующий короткому замыканию и обеспечивающий безопасную работу с USB-кабелем. Он срабатывает, когда через USB-порт проходит более 500 мА тока. По сравнению с универсальными компьютерами, Arduino Uno намного плотнее взаимодействует с окружающей физической средой. Платформа построена на печатной плате и предназначена для работы с открытым кодом. Ею могут воспользоваться как студенты и любители, так и профессионалы, которые могут расширять и дополнять модели по своему усмотрению и свободно работать с открытым кодом. Платформа спроектирована таким образом, чтобы в нее без труда можно было добавить новые компоненты. Конструкция предполагает выбор разработчиком самостоятельного использования устройства, поэтому не помещена в корпус и не имеет жесткой привязки к монтажу.

Описание дисплея Nokia 5110

Графический дисплей Nokia 5110 - бюджетный монохромный дисплей с диагональю 1.6", который позволяетт отображать не только текстовую информацию, но и рисунки. Его разрешение - 48х84 px, а напряжение, при котором он может работать - 2,7-5 В. Информация на экран выводится вертикальными блоками. Их высота - восемь пикселей, в ширину размер экрана составляет шесть строк. На задней панели имеются обозначения каждого контакта, что не позволит пользователям ошибиться в их расположении.

В этом уроке мы сначала покажем некоторые данные на экране Nokia 5110, а после выведем на него данные датчика DHT22. Мы собираемся связать ЖК-дисплей Nokia 5110 и Arduino. Вы изучите интерфейс Nokia 5110 Arduino с помощью двух примеров. Во-первых, мы просто покажем некоторые данные на экране, а во втором примере мы будем читать с датчика температуры и влажности DHT22 показатели и покажем их на ЖК-экране Nokia 5110.

Nokia 5110 LCD - отличный выбор для отображения данных. Это дешевле обычных ЖК и его очень легко использовать с микроконтроллерами. Вам просто нужно подключить несколько проводов и всё готово к работе.

Для подключения Nokia 5110 к Ардуино нам нужны будут сам экран с микроконтроллером и еще ряд деталей.

  • Nokia 5110 LCD × 1
  • Многооборотный прецизионный потенциометр - 1 кОм (25 витков) × 1
  • Резистор 10 кОм × 4
  • Резистор 1 кОм × 1
  • Резистор 330 Ом × 1
  • Перемычки × 1
  • Макет (универсальный) × 1

Дополнительно нам понадобится программное обеспечение в виде , с которым вы скорее всего знакомы.

Распиновка Nokia 5110

Выводы Nokia 5110 LCD выглядит следующим образом:

RST : пин сброса
SCE : пин выбора чипа
D/C : (Данные / Команда): это вывод выбора режима. LOW означает командный режим, а HIGH означает режим данных.
DN (Data Pin): последовательные данные на входе
SCLK : последовательный тактовый сигнал
VCC : входное напряжение от 2,7 до 3,3 В
Светодиод : этот светодиод является подсветкой. Входное напряжение 3,3 В
GND : земля

Пример №1

В первом примере мы просто отобразим данные на ЖК-дисплее Nokia 5110. Принципиальная схема для соединения Nokia 5110 и Arduino показана ниже.

Схема соединения

Для работы Nokia 5110 LCD требуется 3,3 В, поэтому нам придется использовать резисторы для преобразования 5 В в 3,3 В. Если вы будете работать с Nokia 5110 без резисторов, экран будет работать, но срок службы ЖК-дисплея сократится.

  • Подключите контакт 1 (контакт RST) к контакту 6 Arduino через резистор 10 кОм.
  • Подключите контакт 2 (контакт SCE) к контакту 7 Arduino через резистор 1 кОм.
  • Подсоедините контакт 3 (контакт D/C) к контакту 5 Arduino через резистор 10 кОм.
  • Подсоедините контакт 4 (DIN контакт) к контакту 4 Arduino через резистор 10 кОм.
  • Подсоедините контакт 5 (контакт CLK) к контакту 3 Arduino через резистор 10 кОм.
  • Подсоедините контакт 6 (контакт VCC) к контакту 3,3 В Arduino.
  • Подсоедините контакт 7 (светодиодный контакт) к среднему контакту потенциометра 1 кОм через резистор 330 Ом и подключите два других контакта к VCC и заземлению.
  • Подсоедините контакт 8 (контакт GND) к заземлению Arduino.

Подключенный потенциометр используется для увеличения или уменьшения подсветки ЖК-дисплея. Вы можете подключить его к 3,3 В, если хотите, чтобы подсветка всегда была сильной, или вы можете подключить его к заземлению, если вы не хотите иметь подсветку.

Код

Скачайте библиотеку Nokia 5110 ниже.

Сам код первого примера:

#include PCD8544 lcd; void setup() { lcd.begin(84, 48); } void loop() { lcd.setCursor(0, 0); lcd.print(" WELCOME "); lcd.setCursor(0, 1); lcd.print(" To"); lcd.setCursor(0,2); lcd.print("сайт"); delay(200); }

Прежде всего, мы подключаем библиотеку для Nokia 5110 LCD. Библиотека будет включать все команды, которые нам потребуются для ЖК-дисплея Nokia 5110. Затем мы объявили переменную с именем «lcd» типа PCD8544.
#include PCD8544 lcd;

Затем в функции setup (настройка) мы установили разрешение для Nokia 5110 LCD. ЖК-дисплей Nokia5110 имеет разрешение 84х48, поэтому мы установили разрешение 84х48 в Arduino IDE.

lcd.begin(84, 48);

Затем в функции loop (цикл) мы сначала установили курсор на первую строку и напечатали «Добро пожаловать!» (WELCOME)..

Lcd.setCursor(0, 0); lcd.print(" WELCOME "); lcd.setCursor(0, 1); lcd.print(" To"); lcd.setCursor(0,2); lcd.print("сайт"); delay(200);

Пример №2

Во втором примере мы подключим датчик температуры и влажности DHT22 к Arduino и с помощью DHT22 будем считывать температуру, влажность и тепловой индекс. Затем мы покажем эти данные на ЖК-дисплее Nokia 5110. Принципиальная схема интерфейса Nokia 5110, Arduino и DHT22 приведена ниже.

Схема соединения

Соединения ЖК-дисплея Nokia 5110 с Arduino описаны в первом примере. Соедините контакты датчика DHT22 с Arduino, как показано на схеме выше:

  • Контакт 1 DHT22 на 5В Arduino.
  • Контакт 2 DHT22 к контакту 8 Arduino.
  • Контакт 4 DHT22 к контакту заземления Arduino.

Код

Скачайте библиотеки Nokia 5110 и DHT ниже.

Код для второго примера ниже:

#include #include "DHT.h" #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(84, 48); dht.begin(); } void loop() { lcd.clear(); float hum = dht.readHumidity(); float temp = dht.readTemperature(); //Reading the temperature in degrees float fah = dht.readTemperature(true); //Reading the temperature in fahrenheit if (isnan(hum) || isnan(temp) || isnan(fah)) { //Checking if the arduino have recieved the values or not lcd.println("Failed to read from DHT sensor!"); return; } float heat_index = dht.computeHeatIndex(fah, hum); //Reading the heat index in fahrenheit float heat_indexC = dht.convertFtoC(heat_index); //Reading the heat index in degrees lcd.setCursor(0, 0); lcd.print("Humi: "); lcd.print(hum); lcd.print(" %\t"); lcd.setCursor(0, 1); lcd.print("Temp: "); lcd.print(temp); lcd.print(" *C "); lcd.setCursor(0,2); lcd.print("Temp: "); lcd.print(fah); lcd.print(" *F\t"); lcd.setCursor(0,3); lcd.print("Hi: "); lcd.print(heat_indexC); lcd.print(" *C "); lcd.setCursor(0,4); lcd.print("Hi: "); lcd.print(heat_index); lcd.println(" *F "); delay(2000); }

Прежде всего, мы включили библиотеки для Nokia 5110 LCD и датчика температуры и влажности DHT22. После этого мы инициализировали контакт 8 для DHT22 (DHTPIN 8) и определили тип датчика DHT. Также доступны другие модели датчиков DHT, но мы использовали DHT22 из-за его высокой точности. Затем мы объявили переменную «lcd» типа PCD8544 для ЖК-дисплея и переменную «dht» типа DHT для датчика DHT22.

#include #include "DHT.h" #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE);

Затем в функции настройки setup мы установили разрешение для Nokia 5110 LCD. ЖК-дисплей Nokia5110 имеет разрешение 84х48, поэтому мы установили разрешение 84х48 в Arduino IDE. После этого мы начали получать данные с датчика DHT22 с помощью команды dht.begin() .

Lcd.begin(84, 48); dht.begin();

В функции цикла loop мы читаем значения влажности, температуры и индекса тепла из DHT22 и сохраняем в переменных. В конце мы напечатали их на ЖК-экране Nokia 5110.

Float hum = dht.readHumidity(); float temp = dht.readTemperature(); float fah = dht.readTemperature(true); . . . lcd.setCursor(0,4); lcd.print("Hi: "); lcd.print(heat_index); lcd.println(" *F ");

Новые статьи

● Проект 16: Графический индикатор. Подключение дисплея Nokia 5110

В этом эксперименте мы рассмотрим графический дисплей Nokia 5110, который можно использовать в проектах Arduino для вывода графической информации.

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

Жидкокристаллический дисплей Nokia 5110 - монохромный дисплей с разрешением 84×48 на контроллере PCD8544, предназначен для вывода графической и текстовой информации. Питание дисплея должно лежать в пределах 2.7-3.3 В (максимум 3.3 В, при подаче 5 В на вывод VCC дисплей может выйти из строя). Но выводы контроллера толерантны к +5 В, поэтому их можно напрямую подключать к входам Arduino. Немаловажный момент - низкое потребление, что позволяет питать дисплей от платы Arduino без внешнего источника питания.
Схема подключения Nokia 5110 к Arduino показана на рис. 16.1.

Рис. 16.1. Схема подключения Nokia 5110 к Arduino

Для работы с дисплеем Nokia 5110 будем использовать библиотеку Adafruit_GFX, которая имеет богатые возможности для вывода графики и текста. В нашем эксперименте мы будем получать данные освещенности с фоторезистора, подключенного к аналоговому входу Arduino A0, и выводить данные освещенности в числовом и графическом представлениях. Схема подключения показана на рис. 16.2.

Рис. 16.2. Схема подключения Nokia 5110 и фоторезистора к Arduino

Код скетча нашего эксперимента показан в листинге 16.1. Мы считываем данные с фоторезистора и отображаем числовое значение, а также в графическом виде (прогресс-бар) значение освещенности в процентах от максимального значения. Значения минимальной и максимальной освещенности берем из эксперимента 13.

// Подключение библиотеки #include #include // PIN 7 - RST Pin 1 on LCD // PIN 6 - CE Pin 2 on LCD // PIN 5 - DC Pin 3 on LCD // PIN 4 - DIN Pin 4 on LCD // PIN 3 - CLK Pin 5 on LCD Adafruit_PCD8544 display = Adafruit_PCD8544(3 , 4 , 5 , 6 , 7 ); const int LIGHT=A0; // Контакт A0 для входа фоторезистора const int MIN_LIGHT=200 ; // Нижний порог освещенности const int MAX_LIGHT=900 ; // Верхний порог освещенности // Переменная для хранения данных фоторезистора int val1,val2 = 0 ; void setup () { display.begin(); // установить контраст фона экрана // очень важный параметр! display.setContrast(60 ); display.clearDisplay(); // очистить экран delay(2000 ); } void loop () { val1 = analogRead(LIGHT); // Чтение показаний фоторезистора drawText(val1,1 ); // вывести текст // масштабирование значения потенциометра к 0-75 val2= map (val1, MIN_LIGHT, MAX_LIGHT, 0 , 75 ); // вывод черного прямоугольника в % display.fillRect(5 , 25 , val2, 10 , 1 ); // вывод белой части прямоугольника display.fillRect(5 +val2,25 , 75 -val2, 10 , 0 ); display.display(); delay(1000 ); // пауза перед новым измерением drawText(val1,2 ); // стереть текст } // процедура вывода текста void drawText (unsigned long num,int color) { display.setTextSize(2 ); // размер шрифта display.setCursor(20 ,5 ); // позиция курсора if (color==1 ) display.setTextColor(BLACK); // вывести значение else display.setTextColor(WHITE); // стереть (белым по белому) display.print(num); }
Порядок подключения:

1. Подключаем датчик дисплея Nokia 5110 и фоторезистор по схеме на рис. 16.2.
2. Загружаем в плату Arduino скетч из листинга 16.1.
3. Перекрывая рукой поток света, смотрим на экране дисплея изменение показаний освещенности.

Листинги программ

Инструкция

Подключим ЖК экран от Nokia 5110 к Arduino по приведённой схеме.

Для работы с этим LCD экраном написано много библиотек. Предлагаю воспользоваться этой: http://www.rinkydinkelectronics.com/library.php?id=44 (скачивание файла LCD5110_Basic.zip ).
Для установки разархивируем файл в директорию Arduino IDE/libraries/ .
Библиотека поддерживает следующие возможности.
LCD5110(SCK, MOSI, DC, RST, CS); - объявление ЖК экрана с указанием соответствия пинам Arduino;
InitLCD(); - инициализация дисплея 5110 с опциональным указанием контрастности (0-127), по умолчанию используется значение 70;
setContrast(contrast); - задаёт контрастность (0-127);
enableSleep(); - переводит экран в спящий режим;
disableSleep(); - выводит экран из спящего режима;
clrScr(); - очищает экран;
clrRow(row, , ); - очистка выбранной строки номер row, от позиции start до end;
invert(true); и invert(false); - включение и выключение инверсии содержимого LCD экрана;
print(string, x, y); - выводит строку символов с заданными координатами; вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8;
printNumI(num, x, y, , ); - вывести целое число на экран на заданной позиции (x, y); length - желаемая длина числа; filler - символ для заполнения "пустот", если число меньше желаемой длины; по умолчанию это пустой пробел " ";
printNumF(num, dec, x, y, , , ); - вывести число с плавающей запятой; dec - число знаков после запятой; divider - знак десятичного разделителя, по умолчанию точка ".";
setFont(name); - выбрать шрифт; встроенные шрифты называются SmallFont и TinyFont; вы можете определить свои шрифты в скетче;
invertText(true); и invertText(false); - инверсия текста вкл./выкл.;
drawBitmap(x, y, data, sx, sy); - вывести картинку на экран по координатам x и y; data - массив, содержащий картинку; sx и sy - ширина и высота рисунка.

Напишем такой скетч. Сначала подключаем библиотеку, затем объявляем экземпляр класса LCD5110 с назначением выводов.
В процедуре setup() инициализируем ЖК экран.
В процедуре loop() очищаем экран и пишем маленьким шрифтом произвольный текст, под ним - средним шрифтом выводим счётчик секунд.

Давайте выведем на экран картинку. Для этого подготовим монохромное изображение, которое хотим вывести на экран Nokia 5110. Помните, что разрешение экрана 48 на 84 точки, и картинка должна быть не больше. На странице http://www.rinkydinkelectronics.com/t_imageconverter_mono.php преобразуем изображение в массив битов. Скачаем полученный файл с расширением "*.c" и добавим его к проекту через меню: Эскиз -> Добавить файл... или просто поместим файл в директорию скетча, а затем перезагрузим среду разработки Arduino IDE.

Ранее в этом блоге было рассмотрено несколько ЖК-дисплеев / индикаторов и их использование из Arduino. Существенным их недостатком является довольно большой размер, а также вес. Зачастую это не является проблемой. Например, если вы собираете DIY паяльную станцию в самодельном корпусе, там как-то без разницы, какого размера дисплей. С другой стороны, если вам нужен дисплей, скажем, на квадрокоптере , тут вес и размер становятся критически важными. Поэтому сегодня мы научимся работать с очень маленьким и легким экранчиком от телефона Nokia 5110.

Примечание: Другие посты по теме экранчиков — Научился выводить текст на ЖК-индикатор из Arduino , Об использовании экранчиков 1602 с I2C-адаптером , Работаем с LCD на базе HD44780 без библиотек , и Цифровой термометр из ЖК-матрицы, TMP36 и Arduino .

Не беспокойтесь, покупать эффективно не существующий нынче телефон Nokia 5110, выковыривать из него экранчик и выбрасывать все остальные детали не придется. Экранчик от Nokia 5110 являются очень распространенным самостоятельным модулем для радиолюбителей и стоит где-то от 2 до 5$, в зависимости от магазина. В России модуль можно купить, например, на tpai.ru , arduino-kit.ru , amperkot.ru , compacttool.ru , chipster.ru или electromicro.ru . Ну и, конечно же, по самой низкой цене экранчики продаются на AliExpress, но придется подождать месяц или два, пока они придут из Китая.

Как это часто бывает в мире Arduino, для модуля уже существуют готовые библиотеки, и не одна. Мне понравилась библиотека LCD5110, выложенная на сайте rinkydinkelectronics.com. У этой библиотеки есть две версии. Первая называется LCD5110_Basic . Она попроще и способна выводить только текст шрифтами разного размера. Есть возможность создания собственных шрифтов. Вторая версия называется LCD5110_Graph . Она имеет все возможности первой библиотеки и в дополнение к ним умеет рисовать отрезки, прямоугольники, круги и так далее.

В рамках этого поста будет использована LCD5110_Basic. Обе библиотеки прекрасно документированы и имеют множество примеров использования, так что при необходимости в LCD5110_Graph вы без труда разберетесь самостоятельно. Стоит однако отметить, что чтобы LCD5110_Basic компилировалась без warning’ов, мне пришлось внести пару небольших правок в ее код.

Итак, пример использования библиотеки:

#include

extern uint8_t BigNumbers ;
extern uint8_t MediumNumbers ;
extern uint8_t SmallFont ;

/* SCK / CLK, MOSI / DIN, DC, RST, CS */
LCD5110 lcd(2 , 3 , 4 , 6 , 5 ) ;

void setup()
{
lcd.InitLCD () ;
}

int ctr = 0 ;
void loop()
{
lcd.clrScr () ;

Lcd.setFont (BigNumbers) ;
lcd.printNumI (ctr, RIGHT, 0 ) ;

Lcd.setFont (MediumNumbers) ;
lcd.printNumF (12.34 , 2 , RIGHT, 24 ) ;

Lcd.setFont (SmallFont) ;
lcd.print ("Line 1" , 0 , 8 * 0 ) ;
lcd.print ("Line 2" , 0 , 8 * 1 ) ;
lcd.print ("Line 3" , 0 , 8 * 2 ) ;
lcd.print ("L 4" , 0 , 8 * 3 ) ;
lcd.print ("L 5" , 0 , 8 * 4 ) ;
lcd.print ("0123456789ABCD" , 0 , 8 * 5 ) ;

Ctr + = 5 ;
if (ctr >= 1000 )
ctr = 0 ;

Delay(500 ) ;
}

Как это выглядит в действии:

Надеюсь, что код разжевывать не требуется. Заметьте, что модуль питается от 3.3 В, но команды от Arduino при этом понимает нормально безо всяких преобразователей логических уровней. Соответственно, пины VCC (питание) и BL (подсветка) подключаем к 3.3 В, GND подключаем к земле, остальные пять пинов подключаем к цифровым пинам Arduino. Номера пинов передаем конструктору класса LCD5110 в соответствии с комментариями в приведенном коде.

Просто, не правда ли? Полную версию исходников к этой заметке вы найдете в этом репозитории на GitHub . Дополнения и вопросы, как всегда, всячески приветствуются.

Дополнение: Автор библиотеки для работы с экранчиком от Nokia 5110 также является автором библиотеки OLED_I2C, предназначенной для работы с не менее популярными OLED-экранчиками с I2C-интерфейсом. Пример использования OLED_I2C вы найдете в посте Используем джойстик от Sega Genesis в проектах на Arduino . Как можно было ожидать, эти две библиотеки имеют похожий интерфейс.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: