Графический экран для Arduino NOKIA 5110 и как обычно немного DIY


По работе необходимо было изготовить небольшой стенд для проверки электроуправляемых пневматических редукторов. Выгребаем всё подходящее из стола и поехали. Мозгом данной конструкции станет приобретённая несколько лет назад с DX Arduino 1280, а лицом- купленный недавно дисплей от нокии 5110.



Дисплей я купил в магазине fasttech «на сдачу», в довесок к аккумуляторам, повербанку и куче ещё полезных мелочей. Это был мой первый заказ у них, и я остался очень доволен магазином и полученными покупками.

Итак, что же нужно от устройства, которое сегодня сделаю, и зачем на нём экран. Ардуино будет работать двухканальным вольметром. Изначально он должен был ещё выдавать управляющее напряжение, но никакого ЦАП под рукой не оказалось, а сделанный интегратор ШИМ сигнала из конденсатора и резистора оказался явно недостаточен для этих целей. Так что два аналоговых входа, на дисплей выводим напряжения по этим линиям, пересчитываем его в давление, и выводим разность давлений. Напряжение же задаём с помощью простого переменного резистора.
В данном случае экран очень сильно повысил удобство пользование стендом, отсутствие необходимости таскать за собой компьютер с консолью.

Распиновка с указанным на сайте совпадает:


Внешний вид- не очень. Отличия в маркировках и компонентах, расположенных выше экрана. На работоспособность не влияет. Гребёнку на контакты напаял уже я, мне так удобнее.


Для быстрого написания «интерфейса» воспользуемся библиотекой от Adafruit. В документации сказано как переназначить соответствие выводов экрана выводам ардуины. Подключить можно, похоже, совершенно произвольным образом, главное указать правильное соответствие. Это очень удобно. Но не удобно то что библиотека не работает с кириллической информацией. Для меня это, правда, мелочь. Комплектом к библиотеке идёт так же набор примеров, показывающих все возможности экрана и самой библиотеки- работа с линиями, с графическими объектами, анимация. Попробуйте, рекомендую -)

Вся программа для ардуино состоит из простых строчек, практически все из которых относятся к экрану:


/*********************************************************************
This is an example sketch for our Monochrome Nokia 5110 LCD Displays

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/338

These displays use SPI to communicate, 4 or 5 pins are required to
interface

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <TimerOne.h>
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(52, 49, 48, 51, 50);
int PressureOut, PressureSet;
int PressureSet_Pin = 0;
int PressureRead_Pin = 1;
void setup()  
 {
  Serial.begin(9600);
  display.begin();
  // init done
  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);
}


void loop() 

{  
  PressureSet = analogRead(PressureSet_Pin);    
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Set pressure");
  display.setCursor(0,10);
  display.println(PressureSet * (5.0 / 1023.0));
  display.setCursor(25,10);
  display.println("V");
  display.setCursor(35,10);
  display.println(map(PressureSet, 0, 1023, 0, 20));
  display.setCursor(50,10);
  display.println("Bar");
  PressureOut = analogRead(PressureRead_Pin);  
  display.setCursor(0,30);
  display.println("Out pressure");
  display.setCursor(0,40);
  display.println(PressureOut * (5.0 / 1023.0));
  display.setCursor(25,40);
  display.println("V");
  display.setCursor(35,40);
  display.println(map(PressureOut, 0, 1023, 0, 20));
  display.setCursor(50,40);
  display.println("Bar");
  display.setCursor(0,20);
  display.setTextSize(1);
  display.println("Error B:");
  display.setCursor(47,20);  
  display.println(((PressureOut - PressureSet) * (5.0 / 1023.0))*4);  
  display.display();
  delay(10);
  display.clearDisplay();
}




И получаем вот такой удобный инструмент:



Итого. Экран отличный, и очень удобный в подключении. Благодаря библиотекам работать с ним очень просто. Вывод на экран в подобных самоделках гораздо удобнее постоянной записи в консоль. И стоит как бутылка пива -))
Планирую купить +39 Добавить в избранное +42 +88
+
avatar
  • repon06
  • 26 августа 2014, 16:55
0
что собрал такое интересное?)

я заказывал цветной экран 320х240… так он кривой пришел. время диспута про**какал) хоть все остальные безделушки в порядке были
+
avatar
  • Dru4
  • 26 августа 2014, 16:57
+1
Хочу измерить гистерезис и точность удержания давления на выходе редуктора. Всё это будущие узлы лазерного станка -)
+
avatar
  • veter82
  • 26 августа 2014, 20:18
0
хочу такой редуктор на винтовку)) ато пуружинки, боевые клапана, ударники…
+
avatar
  • Dru4
  • 26 августа 2014, 20:39
0
Тыща евро и он ваш -)) только вот не хватит у него быстродействия.
+
avatar
  • veter82
  • 26 августа 2014, 21:30
0
не, моя винтовка в сборе столько стоит)
+
avatar
  • KRAB
  • 26 августа 2014, 16:57
0
«небольшой стенд для проверки электроуправляемых пневматических редукторов»
п.с. опередили
+
avatar
  • Serg32
  • 26 августа 2014, 19:00
0
Я такой дисплей к stm32 подключал, но там питание 3,3В.
Тут питание и уровни 5-ти вольтовые?
+
avatar
  • Dru4
  • 26 августа 2014, 19:12
+1
Подсветку подключил к 5 В, Vcc на 3.3. Судя по тому что оно работает, и мега 5 вольтовая, то экранчик этот 5 В толерантный- ему все равно. Завтра воткну его полностью в 5 В, у меня, если что, есть запасной -))
+
avatar
0
Судя по тому что на нем написано 3v-5v скорее всего да
+
avatar
  • AFCrio
  • 26 августа 2014, 22:06
0
Питание обязательно 3.3, уровни толерантны к 5, подсветка по желанию.
+
avatar
  • Dru4
  • 26 августа 2014, 22:08
0
я, кажется, подавал на него кратковременно 5 В, но быстро исправился. На работе завтра могу попробовать подать на него 5 В.
+
avatar
  • AFCrio
  • 26 августа 2014, 22:55
0
Не стоит, я по дурости подал 5, секунд на 5-7 хватило.
(Сонный был, посмотрел на маркировку vcc на lcd и тупанув воткнул в 5v)
+
avatar
  • andrejt
  • 26 августа 2014, 20:06
0
Изначально он должен был ещё выдавать управляющее напряжение, но никакого ЦАП под рукой не оказалось, а сделанный интегратор ШИМ сигнала из конденсатора и резистора оказался явно недостаточен для этих целей.
R-2R? Судя по картинке, ног достаточно более чем.
+
avatar
  • Dru4
  • 26 августа 2014, 20:39
0
Думал об этом, но если честно было лень городить такого паука.
+
avatar
0
Не раскрыта тема датчиков. Внешний вид, диапазон давлений, цена.
+
avatar
  • Dru4
  • 26 августа 2014, 20:44
0
Их в китае не купить, скорее всего, маде ин германи. От 0 до 40 атм, погрешность выставления должна была быть 1%. Цена после таможни и ндс около 1000 €. Но разговор не про них -)
+
avatar
  • bowe
  • 26 августа 2014, 21:01
0
Какие-то дорогие датчики. Датские с погрешностью 0,5% после таможни и НДС в розницу около 140€. А еще скидки.
+
avatar
  • Dru4
  • 26 августа 2014, 21:09
0
Так это не только датчик, это же ещё редуктор
+
avatar
  • Soorin
  • 26 августа 2014, 21:42
0
Ну почему дисплей-то не перевернули? Проводам всё равно, откуда приходить — а было бы значительно аккуратнее…
+
avatar
  • Dru4
  • 26 августа 2014, 22:10
0
Потому что это макет проживёт буквально дня 3-4, потом будет разобран. До красоты особого дела в таких условиях нет.
+
avatar
  • Sanja
  • 26 августа 2014, 21:54
0
эти экранчики — одно огорчение. Резиновый уплотнитель, которым внутри контакты прижимаются к LCD быстро рассыхается и контрастность резко падает. Восстановить читаемость букв — невозможно (подоткнёшь, вроде восстанавливается — но тронь пальцем и всё). Экраны 2x20 и 4x20 куда практичнее.
+
avatar
  • Dru4
  • 26 августа 2014, 22:12
0
Ммм, не разу не видел таких проблем.
Экран 2х20 гораздо менее информативен, а 4х20 стоит столько, что заместо него можно уже поставить RGB 320x240
+
avatar
  • ksiman
  • 26 августа 2014, 22:03
0
Почему ЦАП на базе ШИМ + интегратор оказалось недостаточно? Это классическое стандартное решение для медленного преобразования
+
avatar
  • Dru4
  • 26 августа 2014, 22:10
0
Я, похоже, где-то напортачил, при 100% ШИМ уровень после интегратора больше 4.2 В не поднимался. Мне же нужно было строгие 5 В.
+
avatar
  • ksiman
  • 26 августа 2014, 23:20
0
После интегратора надо ставить буфер либо усилитель.
+
avatar
  • Dru4
  • 27 августа 2014, 09:23
0
да, но операционников тоже не было под рукой -(
+
avatar
  • Mplus
  • 27 августа 2014, 00:36
0
Сколько оперативки и места осталось после использования библиотек? Читал, что эти забивают все под 0
+
avatar
  • Dru4
  • 27 августа 2014, 09:22
0
Не так уж и много на неё уходит:
+
avatar
0
Очень приятно смотреть на работу человека, который может собрать из разрозненной кучи деталей одну полностью функциональную вещь. Спасибо за идею! Однозначно +!!!
+
avatar
  • ambuddy
  • 22 января 2016, 12:37
0
Здравствуйте.
У меня проблема с экраном. Вчера поначалу экран показывал отлично, но потом через час игр с ним кроме подсветки ничего не было. Как позже выяснилось, текст/изображения показывались но оооочень блекло. Сегодня с утра его подключил и он опять хорошо показывает, но буквально через полминуты опять потускнело изображение и даже слегка мерцает. Видел тут в комментах совет поставить 1 кОм между VCC и GND, поставил, но эффекта никакого. Сейчас выставил контраст на 60 и вроде уже довольно долго показывает норм. Интересно, что во время перезагрузки скетча или отключения изображение на долю секунды отображается очень ярко и четко, но потом естественно пропадает. Боюсь попробовать подключить на 5В, хотя на самом экране написано 3V-5V, или эти 5В к подсветке относятся?
+
avatar
  • ambuddy
  • 22 января 2016, 13:08
0
дальнейшие тесты: залил длинный тестовый скетч от библиотеки Adafruit_PCD8544 — pcdtest. Анимация доходит до последних угловых линий и все больше не показывает. Иногда доходит до прямоугольников
+
avatar
  • vlo
  • 01 марта 2016, 10:58
0
наткнулся на похожее, при исполнении примера с какого-то момента экран очищается и более никакой вывод не работает, хотя код исполняется. пока выявил что к такому эффекту приводит:
display.drawLine(0, 0, 83, 0, BLACK);
причем критична вторая координата: x2=83 и y2 кратное 8.
+
avatar
  • vlo
  • 02 марта 2016, 12:49
0
впрочем все проще — контакт там между платой и экраном никчерту, а уж что при этом глючит — вопрос случайности. после переборки и протирки глючить перестал, но упала контрастность.
+
avatar
  • vlo
  • 06 марта 2016, 00:47
0
решил еще раз протереть — вообще не работает, даже если прижать до упора рамкой. иногда какой-то мусор с вкраплениями нормальной картинки покажет. махнул с пост-тестером с таким же экраном и произошло удивительное, этот нормально заработал там, а тамошний — тут. контакты тут луженые и вроде бы выступают сильнее, а у посттестера желтые и на высоту печатного проводника. расположены относительно отверстий для рамки одинаково.
+
avatar
  • ambuddy
  • 09 марта 2016, 16:13
0
У меня решилось все так. Экран ведь 5В, подсветка 3.3В, так я на него и подавал 5В и на подсветку 3.3В сначала, а потом видимо что-то у меня в голове перемкнуло и стал весь экран и подсветку питать от 3.3. Теперь запитал экран от 5В и выставил контраст на 55 и стало показывать отлично! Контраст оказался очень критичным параметром: +\- 5 дают совершенно нерабочий вариант. При этом, как я понял, нужно под каждый экранчик подбирать индивидуально (обычно везде в туториалах 60 ставят). Еще сказываются помехи: при подключении к старому компу, все время мерцания, сполохи какие-то. Подключаю к ноуту мерцания почти нет. Думаю, с отдельной батарейкой вообще будет чисто показывать.
+
avatar
  • vlo
  • 10 марта 2016, 10:17
0
да не, везде пишут что именно подсветка +5 (хотя тут можно и меньше), а контроллер +3.3. насколько контроллер толерантен к +5 мнения разнятся.
в частности на пост-тестере именно 3.3.

контрастность после обмена у обоих оказалась вполне похожая, боль-менее нормальная при 60 у Adafruit_GFX. если она отличается — вполне вероятны проблемы с контактом. у меня после первого переобжима потребовалось аж 90, и то было неравномерно. тоже я думаю и насчет помех — высокое сопротивление у питания контроллера, напряжение плавает.
+
avatar
  • ambuddy
  • 10 марта 2016, 10:45
0
И правда 3.3, причем «5V is OK,but part of the screen becomes black when tested»… Но факт, что на 5В заработал почти что идеально, я то его уже выкидывать собирался.
+
avatar
  • vlo
  • 10 марта 2016, 11:30
0
имхо это тоже укладывается в гипотезу о паршивом контакте. при питании от 3.3 напряжение недостаточно, а от 5 доходит несколько больше.