Lcd 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 В. Информация на экран выводится вертикальными блоками. Их высота - восемь пикселей, в ширину размер экрана составляет шесть строк. На задней панели имеются обозначения каждого контакта, что не позволит пользователям ошибиться в их расположении.

Собирая устройства на Ардуино, мы часто сталкиваемся с необходимостью автономного вывода информации. И, как всегда, хочется чтобы решение было недорогим. И вот тут оказывается, что из недорогих устройств выбор не очень-то и богат.

Если выводимой инфы немного, удобно использовать семисегментные индикаторы. Они очень яркие и контрастные. Такие линейки из 4-х разрядов высотой в 0.36 дюйма на TM1637 продаются по 70 центов и управляются всего по 2-м пинам. Как нетрудно догадаться, заточены они, в основном, под отображение времени, хотя без труда могут отображать и, к примеру, температуру, давление и другие параметры, для которых достаточно 4-х разрядов.

Но если выводимой информации много, они не подойдут. В таких случаях чаще всего используются «народные» LCD 1602 дисплейчики, имеющие возможность вывода 2-х строк по 16 символов ценой в полтора бакса. На такой уже можно вывести информации в разы больше.

Его более продвинутый 4-х строчный собрат выведет инфы еще больше, но стоит уже заметно дороже, около 5 долларов, да и размер у него уже немаленький.

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

Герой нашего обзора, ценой менее пары баксов, ко мне пришел в прочной картонной коробке с защитной пленкой на экране, за что большое спасибо продавцу. Девайс имеет размеры печатной платы 45x45 мм красного текстолита и экран ЖК с разрешением 84x48 точек и размером 40x25 мм. Вес устройства 15 г. У него есть подсветка голубого цвета, которую можно отключить. У Ардуино этот дисплей откусит 5 цифровых пинов, не считая питания. На плате есть 2 ряда выводов, которые запараллелены между собой, поэтому можно использовать всего один ряд. Из них 5 – это управление, 2 питание и один на включение подсветки. Для включения подсветки нужно пин LIGHT замкнуть на землю (встречается другой вариант этого дисплея, как пишут - на плате синего цвета, где этот пин соединяется с питанием). Плата приходит нераспаянной, две гребенки прилагаются в комплекте.
Итак, подсоединяем выводы SCLK, DIN, DC, CE и RTS к пинам Ардуино, например, 3, 4, 5, 6, 7. Пин VCC к 3.3V (Именно 3.3, а не 5!), подсоединяем землю и качаем библиотеку .
Функции из этой библиотеки позволяют выводить графические примитивы (линия, круг, прямоугольник и т.д.), растровые картинки и текст. В составе библиотеки есть пример, показывающий ее возможности, советую посмотреть. А вот, чтобы текст выводился на русском, придется подшаманить фонт. Но, к счастью, добрые люди все уже сделали за нас и файл для подмены можно скачать .
Пример скетча я дам далее, а результат вывода текста на русском видим выше. Нетрудно подсчитать, что на самом маленьком размере шрифта (№ 1), можно вывести 84 символа (по 14 в 6 строк), чего вполне хватит для вывода, например, емких диагностических сообщений. Шрифт №2 вдвое крупнее.
Разрешение экрана позволяет выводить довольно неплохие растровые двухцветные картинки, которые в программе можно использовать в качестве иконок.

Создавать такие иконки очень просто. Под спойлером я покажу, как это делается.

Как быстро создать растровую картинку на примере логотипа сайта MYSKU

Для начала сделаем скрин экрана с логотипом (клавиша Print Screen).
Запустим Paint из стандартных программ и жмем Ctrl+V. Весь экран с логотипом в нашем распоряжении.


Выделяем нужный фрагмент и жмем кнопку ОБРЕЗАТЬ. Получим наш фрагмент.

Теперь нам нужно превратить этот фрагмент в двухцветный. С эти справится сам Paint. Жмем «Сохранить как» и выбираем тип «Монохромный риcунок (*.bmp)». Не обращаем внимания на предупреждение редактора и жмем Ок и видим такую картинку:

Теперь нужно превратить этот набор пикселей в массив кодов для Ардуино. Я нашел , который справляется с такой задачей.
Ему на вход нужно подать bmp файл, но обязательно 256 цветный! Поэтому мы снова жмем «Сохранить как» и выберем тип «256-цветный рисунок bmp». Теперь запомним размеры сторон получившегося файла, их будет нужно указать в скетче (смотрим или в Paint внизу в строке состояния или открыв Свойства файла - > вкладка Подробно) и перейдем в онлайн конвертер.


Выберем наш файл, поставим галочку на шестнадцатеричных числах и нажмем КОНВЕРТИРОВАТЬ.
Получим нужный нам массив:


Копируем этот массив в скетч, компилируем и смотрим, что получилось.


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


Как видим, и текст и значки читаются хорошо. Причем, чем ярче свет, тем лучше читабельность (эх, вспоминаю как было приятно пользоваться Nokia 1100 солнечным днем, в то время, как народ прятал свои трубки с цветными матрицами в тень, чтобы набрать номер). В общем, в таком режиме можно использовать дисплей, если освещения хватает или подсветка мешает или для экономии автономного питания. Если у кого изображение на экранчике будет плохо видно, поиграйтесь с контрастностью в скетче. Лучшая контрастность при подсветке и без нее получается при разных значениях, это надо учитывать.

Пример скетча для вывода текста и картинки

#include #include // pin 3 - Serial clock out (SCLK) // pin 4 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 6 - LCD chip select (CS) // pin 7 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); const static unsigned char PROGMEM ku59x39 = { 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0x1f, 0xff, 0xff, 0xe0, 0x0, 0x3, 0xf0, 0xfc, 0xf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0x87, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xc0, 0xff, 0xe3, 0xff, 0x0, 0x0, 0x7f, 0xff, 0x90, 0xff, 0xf1, 0xfc, 0x0, 0x7, 0xff, 0xff, 0x30, 0xff, 0xf8, 0xf0, 0x0, 0x7f, 0xff, 0xfe, 0x30, 0xff, 0xfc, 0x40, 0x3, 0xff, 0xff, 0xfc, 0x70, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, 0xf8, 0xf0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff, 0xf0, 0xf0, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xe3, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xc3, 0xf0, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x83, 0xf0, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0x0, 0x0, 0x7, 0xf0, 0xff, 0xff, 0xfc, 0x38, 0x0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0, 0xbf, 0xf0, 0xff, 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfe, 0x0, 0x3f, 0xe1, 0xff, 0xf0, 0xff, 0xff, 0xfe, 0x3, 0xf0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfe, 0xf, 0x80, 0x0, 0x0, 0xf0, 0xff, 0xff, 0xff, 0xe, 0x0, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc, 0x3, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xc0, 0xf0, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0x88, 0xf0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x9c, 0xf0, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0x38, 0xf0, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0x19, 0xf0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x3, 0xf0, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xff, 0xce, 0x7f, 0xff, 0xdf, 0xf0, 0xff, 0xff, 0xff, 0xce, 0x7f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x9e, 0x7f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x8c, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xf0 }; void setup() { display.begin(); display.setContrast(50); display.setTextSize(1); display.setTextColor(BLACK); // установка цвета текста } void loop() { display.clearDisplay(); display.drawBitmap(10, 5, ku59x39, 59, 39, BLACK); display.display(); delay(2000); display.clearDisplay(); display.setCursor(0,0); display.print("ЗРС способна поражать не только баллистические, но и аэродинамические цели - самолеты"); display.display(); delay(2000); }


Ну, и, поскольку Ардуино (Процессор+Озу+Загрузчик-BIOS)+накопитель (EEPROM) + система ввода-вывода (Пульт IRDA и Nokia 5110)- это, по сути, полноценный компьютер, то почему бы не написать для него полноценной игры? Конечно, игру типа ГТА наш ардуино-комп не потянет, но простую казуальную игрушку - запросто! Напишем игру всех времен и народов - Тетрис.
Для любого программиста - это как утренняя зарядка, легкое упражение для мозга, поэтому - вперед! Да и на муське вроде такого раньше еще не было. А в игре как раз раскроется потенциал сабжа.
В качестве системы ввода я решил использовать IRDA пульт от ЛЮБОГО устройства. При таком решении нам понадобится всего лишь один , ценой 4 руб за штуку. А IR пульт найдется в любой квартире. Для озвучки мы еще применим пьезопищалку от старой материнки - это будет наш бюджетный аналог мультимедиа)). Ко мне едет сейчас более крутой , но это уже удорожание нашего суперкомпа на целый доллар! Пока обойдемся. С ним будет уже .
На макетке коммутируем устройства вывода, ввода и нашу «мультмедиа». Получилось так:


Я использовал Arduino Uno, поскольку там нужные нам 3.3V уже есть, но если использовать Mini, то придется для экрана добыть из 5 вольт нужные 3.3. Самый несложный способ из инета - поставить последовательно два кремниевых диода (подобрать).
Чтобы не рисовать электрическую схему, просто укажу задействованные мной пины Ардуино.
Подсоединение дисплея Nokia 5110:
pin 3 - Serial clock out (SCLK)
pin 4 - Serial data out (DIN)
pin 5 - Data/Command select (D/C)
pin 6 - LCD chip select (CS)
pin 7 - LCD reset (RST)
Для подсветки пин LIGHT дисплея кидаем на GND Ардуино. (Только для платы красного цвета!). Плюс питания на 3.3V. Земля на GND.
Подсоединение IR приемника:
pin 8 - IR (управляющий). Питание на +5V и GND соответственно.
Подсоединение пьезопищалки:
pin 9 - speaker, Земля на GND.
После монтажа, заливаем скетч

Скетч игры Тетрис

//// © Klop 2017 #include #include #include #include #define rk 4 // ширина квадратика #define rz 5 // ширина места #define smeX 1 #define smeY 1 #define MaxX 10 // стакан кол-во мест по гориз #define speaker 9 #define RECV_PIN 8 // нога на IRDA приемник // pin 3 - Serial clock out (SCLK) // pin 4 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 6 - LCD chip select (CS) // pin 7 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); IRrecv irrecv(RECV_PIN); decode_results results; byte mstacan; byte Lst,SmeH, center, NumNext; byte MaxY; // стакан кол-во мест по вертик int dxx, dyy, FigX, FigY, Victory, myspeed,tempspeed; unsigned long ok, levo, pravo, vniz, myrecord; unsigned long flfirst=1234; // метка первого запуска byte fig= { {{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}}, {{0,1,0,0}, {0,1,0,0}, {0,1,0,0}, {0,1,0,0}}, {{0,0,0,0}, {0,1,1,0}, {0,1,1,0}, {0,0,0,0}}, {{0,1,0,0}, {0,1,1,0}, {0,0,1,0}, {0,0,0,0}}, {{0,1,0,0}, {0,1,0,0}, {0,1,1,0}, {0,0,0,0}}, {{0,1,0,0}, {0,1,1,0}, {0,1,0,0}, {0,0,0,0}}, {{0,0,1,0}, {0,1,1,0}, {0,1,0,0}, {0,0,0,0}}, {{0,0,1,0}, {0,0,1,0}, {0,1,1,0}, {0,0,0,0}}, {{0,0,0,0}, //8 {0,0,0,0}, {0,0,0,0}, {0,0,0,0}} }; //============================================== void mybeep() // звук {analogWrite(speaker, 100); delay(100); analogWrite(speaker, 0); } //============================================== void figmove(byte a, byte b) { for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) fig[a][i][j]=fig[b][i][j]; } //============================================== void figinit(byte a) { for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) { fig[i][j]=fig[i][j]; if (fig[a][j][i]==1) // покажем след фигуру display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, BLACK); else display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, WHITE); } display.display(); NumNext=a; tempspeed=myspeed-(Victory/30)*50; // через каждые 30 линий увеличим скорость падения; dxx=0; for (byte i=0;i0) display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, BLACK); else display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, WHITE); ds(Victory,1); display.display(); } //================================================ void ds(int aa, int b) { display.fillRect(55, 10, 29, 10, WHITE); display.setCursor(55,b*10); display.println(aa); } //================================================ bool iffig(int dx, int dy) {int i,j; bool flag=true; bool pov=false; for (i=0;iMaxX-1) dx=-1;// пробуем отодвинуть от стенки справа на 1 } } } for (i=0;i<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) if (i+FigX+dx<0 || i+FigX+dx>MaxX-1 || FigY+j+dy>MaxY-1 || mstacan>0) {flag=false; break;} // проверили на новые координаты if (flag) {FigX=FigX+dx; FigY=FigY+dy;byte k=0; for (i=0;i<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) {mstacan=1; dxx=0; } } // переместили фигуру на новые координаты else { if (pov) figmove(0,8); for (i=0;i<4;i++) // восстановили фигуру for (j=0;j<4;j++) if (fig[j][i]==1) mstacan=1; } return(flag); } //================================================ void clearstacan() { for (byte i=0;imyrecord) { myrecord=Victory; EEPROM_write(16, myrecord); } display.setCursor(5,0); display.print("Рекорд"); display.setCursor(5,10); display.print(myrecord); display.display(); display.setCursor(5,20); delay(2000);irrecv.resume(); display.println("Нажмите"); tb=getbutton(" OK"); if (tb!=ok) { ok=tb; levo=getbutton("Влево"); pravo=getbutton("Вправо"); vniz=getbutton("Вниз"); EEPROM_write(0, ok); EEPROM_write(4, levo); EEPROM_write(8, pravo); EEPROM_write(12, vniz); } display.fillRect(5, 0, (MaxX-1)*rz, 40, WHITE); myspeed=800; tempspeed=myspeed; Victory=0; } //================================================ void setup() { unsigned long tr; word gg=0; randomSeed(analogRead(0)); irrecv.enableIRIn(); // Старт ресивера IRDA display.begin(); display.setContrast(50); display.setTextSize(1); display.setTextColor(BLACK); // установка цвета текста display.clearDisplay(); Lst=rz*MaxX; // ширина стакана в пикселях MaxY=display.height()/rz+4; // Высота стакана в кубиках SmeH=display.height()%rz; // смещение сверху в пикселях для отображения random(7); EEPROM_read(0, ok); EEPROM_read(4, levo); EEPROM_read(8, pravo); EEPROM_read(12, vniz); EEPROM_read(20, tr); if (tr==flfirst) EEPROM_read(16, myrecord); else { myrecord=0; EEPROM_write(16, myrecord); EEPROM_write(20, flfirst); } newgame(); } //================================================ void dvoiki() { for (byte i=0;i
И можно ирать. Игра поддерживает привязку к любому пульту. Для этого достаточно в начале игры, на вопрос «Нажмите ОК» нажать на пульте кнопку, которая будет отвечать за вращение фигуры. Если пульт игре уже знакомый, то игра сразу запустится. Если пульт новый, то код кнопки ОК не совпадет с запомненным и игра потребует последовательно нажать кнопки «Влево», «Вправо» и «Вниз». Эти кнопки будут записаны в энергонезависимую память Ардуино и впоследствии именно этот пульт будет узнаваться сразу по нажатию кнопки «ОК».


При «проваливании» на собранную строку будет воспроизводиться писк. Он реализован на особенности нескольких пинов Ардуино (в нашем случае 9) выдавать ШИМ с заданной частотой.
Игра поддерживает все атрибуты нормальной игры. Ту и подсказка следующей фигуры и текущий счет. Игра ведет учет рекордов. Это значение хранится в энергонезависимой памяти Ардуино. Чтобы сбросить рекорд, достаточно изменить в скетче значение flfirst=1234 на любое другое. В игре также идет автоувеличение скорости падения через каждые 30 списанных строчек, так что, бесконечно долго поиграть не получится). Скетч не оптимизировался и тщательно не прогонялся, а был написан на досуге в свое удовольствие. Если кто обнаружит ошибку - пишите. О ©. Скетч разрешается править для себя как угодно. Только при публикации где-либо своих вариантов ссылку на первоисточник-муську указывайте).
Для чего делал - длинные выходные + «из любви к искусству». Была бы дочка маленькой, сделал бы ей, наверное, мини игровой автомат для кукольной комнатки на 8 марта, как раз успел бы. Добавил бы несколько игр типа Змейки и Арканоида, а корпус вырезал бы из текстолита, наверное. Только дочка в этом году уже докторскую защищает, так, что мимо, но может кому еще эта идея пригодится).

Подведем итог для дисплея Nokia 5110:
Плюсы
+Возможность вывода графики;
+Отсутствие проблем с кириллицей;
+Небольшой вес;
+Отличное соотношение габариты/кол-во выводимой информации;
+Плюсы примененной технологии ЖК - малое энергопотребление и хорошая читабельность на ярком свете;
+Отключаемая подсветка;
+Цена.

Минусы
-Подсветка неравномерная;
-Изображение черно-белое (оттенков нет);
-Необходимость позаботиться о 3.3V, не на каждой Ардуино такое напряжение есть.

Вердикт: За свои деньги по совокупности характеристик уверено занимает свою нишу, недаром и является таким долгожителем среди устройств отображения для Ардуино.

Планирую купить +102 Добавить в избранное Обзор понравился +148 +269

Новые статьи

● Проект 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.