Измерение освещенности на arduino и вывод на дисплей nokia 5110

Содержание

Подключаем экран Nokia 5110 к Ардуино

В этом уроке мы соединим плату Ардуино и экран Nokia 5110, а затем выведем на дисплей данные датчика DHT22.

Комплектующие

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

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

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

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

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

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

Распиновка 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 ниже.

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

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

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

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

Пример №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.

Если вы хотите узнать больше о взаимодействии DHT с Arduino, прочитайте наш урок Датчик температуры и влажности DHT22.

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

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

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

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

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

На этом урок можно считать завершенным. Теперь вы вкратце понимаете как подключать дисплеи от Nokia к Arduino.

Графический LCD дисплей 84×48 – Nokia 5110 и Arduino

Помните те времена, когда мобильные телефоны были “дубовые”, у них была отдельная кнопочная клавиатура и маленький монохромный жидкокристаллический дисплей?

Теперь этот рынок принадлежит всяким iPhone, Galaxy и т.п., но дисплеи находят себе новое применение: diy-проекты!

Черно-белый дисплей 84х48 пикселей, который мы будем рассматривать, использовался в телефонах Nokia 3310. Основное их преимущество – легкость в управлении. Подобный дисплей отлично впишется в ваш проект для интерактивного обмена информацией с пользователем.

В статье мы рассмотрим управление этим графическим дисплеем с помощью Arduino. Рассмотрены все особенности подключения, технические характеристики дисплея и программа для Arduino.

  • Arduino или ее клон.
  • Коннекторы.
  • Монтажная плата.

Технические характеристики дисплея Nokia 5110

Перед подключением дисплея и программированием Arduino давайте рассмотрим общую информацию о нем.

Распиновка

Для подключения и передачи данных на дисплее используются два параллельных ряда 8 коннекторов. На задней части дисплея нанесены обозначения каждого пина.

Как уже было сказано, пины параллельно соединены между собой. Информация о назначении каждого коннектора приведена ниже.

Питание

Вы уже обратили внимание, что на LCD дисплее 5110 два коннектора для питания. Первый – самый важный – питание логики дисплея. В datasheet указано, что оно должно выбираться в диапазоне 2.7 – 3.3 В. В нормальном режиме работы дисплей будет потреблять от 6 до 7 мА.

Второй коннектор питания предназначен для подсветки дисплея. Если вы снимете сам дисплей с платы (это делать не обязательно, можно просто посмотреть на рисунок ниже), вы увидите, что подсветка реализована очень просто : четыре белых светодиода, которые расположены по углам платы. Обратите внимание, что токоограничивающих резисторов нет.

Так что с питанием надо быть аккуратнее. Можно использовать токоограничивающий резистор при подключении пина ‘LED’ или использовать максимальное напряжение питания 3.3 В. Не забывайте, что светодиоды могут поглощать большие токи! Без ограничения, они потянут около 100 мА при напряжении питания 3.3 В.

Управляющий интерфейс

В дисплее встроен контроллер: Philips PCD8544, который преобразовывает массивный параллельный интерфейс в более удобный серийный. PCD8544 управляется помощью синхронным серийным протоколом, который подобен SPI. Обратите внимание, что есть пины счетчика времени (SCLK) и ввода серийных данных (DN), а также активный-low выбор чипа (SCE).

Выше рассмотренных серийных коннекторов установлен еще один коннектор – D/C, по которому поступает информация о том, могут ли быть отображены данные, которые передаются.

Для перечня команд, ознакомьтесь с разделом “Instructions” из даташита PCD8544 (страница 11). Есть команды, которые очищают дисплей, инвертируют пиксели, отключают питание и т.п.

Сборка и подключение дисплея 5110

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

Сборка

Для “сборки” дисплея вам могут пригодится коннекторы. 8 штук будет достаточно. Можно использовать прямые ноги или расположенные под 90 градусов. Зависит от дальнейшего использования. Если вы планируете использовать монтажную плату, рельса с прямыми коннекторами, скорее всего, будет оптимальным выбором.

LCD дисплей от Nokia 5110, установленный на мини-монтажной плате:

Можно и напрямую запаять переходники к дисплею.

Подключение дисплея 5110 к Arduino

В данном примере мы подключим LCD дисплей к Arduino. Подобную методику можно легко адаптировать к другим платам и микроконтроллерам. Для подключения пинов передачи данных – SCLK и DN(MOSI) – мы используем SPI пины Arduino, которые обеспечивают быструю передачу данных. Выбор чипа (SCE), перезагрузка (RST), и пин данные/управление (D/C) могут быть подключены к любому цифровому пину. Выход от светодиода подключается к пину на Arduino, который поддерживает ШИМ-модуляцию. Благодаря этому возможна гибкая настройка яркости подсветки.

Читайте также:  Viper design software

К сожалению, максимальное напряжение питания дисплея 5110 может достигать 3.6 вольт, так что подключать напрямую к стандартному выходу 5 V на Arduino нельзя. Напряжение надо настраивать. Соответственно, появляется не колько вариантов подключения.

Прямое подключение к Arduino

Самый простой вариант подключения к Arduino напрямую. В этом случае надо использовать платы Arduino Pro 3.3V/8MHz или 3.3V Arduino Pro Mini. Вариант, предложенный ниже работает с платами Arduino 5V. Это рабочий вариант, но срок работы дисплея может несколько сократиться.

Пины подключаются следующим образом:

Хороший и недорогой вариант для обеспечения дополнительной защиты – установка резисторов между пинами пинами передачи данных от Arduino к LCD 5110. Если вы используете Arduino Uno (или подобную 5-ти вольтовую плату), можно использовать резисторы номиналом 10 кОм и 1 кОм. Схема подключения дисплея с использованием резисторов приведена на рисунке ниже:

Подключение такое же как и в первом примере, но в каждой цепи сигнала установлен резистор. Резисторы на 10 кОм установлены между пинами SCLK, DN, D/C и RST. Резистор номиналом 1 кОм – между пинами SCE и пином 7. Ну и 330 Ом остается между пином 9 и пином со светодиодом. and pin 7.

Преобразователи уровня

Третий вариант подключения – с использованием преобразователей уровня для переключения между 5 и 3.3 В. Для этих целей можно использовать модули Bi-Directional Logic Level Converter или TXB0104.

К сожалению, на дисплее пять входов для сигнала 3.3 В, а на преобразователях уровня – четыре. Можно оставить выход RTS в состоянии high (подключив его с использованием резистора на 10 кОм). В результате вы лишаетесь возможности управления перезагрузкой дисплея, но все остальные функции будут доступны.

Первый пример скетча для Arduino: LCD Demo

После благополучного подключения можно переходить к загрузке скетча и отображения данных на дисплее!

Программа для Arduino

Ниже приведена ссылка, по которой вы можете скачать скетч для управления LCD. Копируйте код в Arduino IDE и загружайте на плату:

Комментарии в коде выше должны вам помочь разобраться в программе. Большинство действий происходит в пределах функции lcdFunTime().

Скетч в действии

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

После отработки скетча, монитор перейдет в режим передачи данных по серийному протоколу. Откройте серийный монитор (со скоростью передачи данных 9600 бит в секунду). То, что вы напечатаете в серийном мониторе, отобразится на LCD мониторе.

Если вас заинтересовали возможности отображения растровых изображений, читайте дальше. Мы рассмотрим как именно можно импортировать собственное растровое изображение 84х48 и отобразить его на экране.

Второй пример скетча для Arduino: загрузка и отображение растровых изображений

В этом примере мы создадим новое растровое изображение 84х48, интегрируем его в код Arduino и отправим на LCD монитор.

Находим/Создаем/Изменяем растровое изображение

Для начала найдите изображение, которое вы хотите отобразить на LCD экране 5110. Сильно развернуться на 84х48 пикселей не получится, но все же можно. Вот некоторые примеры:

После выбора изображения, надо его подкорректировать: сделать монохромным (2-битным цветом); выдержать размер 84х48 пикселей. Для этого можно использовать большинство редакторов изображений. В том числе и Paint, если у вас Windows. Сохраните полученное изображение.

Преобразование растрового изображения в массив

Следующий шаг – преобразовать этот файл в 504-байтный массив символов. Для этого можно воспользоваться различными программами. Например, LCD Assistant.

Для загрузки изображения в LCD Assistant, перейдите в меню File > Load Image. Должно открыться окно с превью картинки. Убедитесь, что картинка правильного размера – 84 пикселя в ширину, 48 пикселей в высоту, а настройка Byte orientation установлена в режим Vertical, Size endianness в Little. Остальные настройки по умолчанию должны быть выставлены корректно (8 pixels/byte)

После этого перейдите во вкладку File > Save output, чтобы сгенерировать временный текстовый файл. Откройте этот текстовый файл, чтобы рассмотреть ваш новый замечательный массив. Измените тип массива на char (не unsigned и не const). Также убедитесь, что массив корректно назван (без тире, не начинается с числа и т.п.).

Импортируйте в скетч и рисуйте!

Скопируйте созданный массив в скетч для Arduino. Можете использовать скетч из первого примера. Вставьте ваш массив в любом месте. Теперь, чтобы отобразить ваш рисунок, замените setup() и loop() в скетче строчками, которые приведены ниже (при этом остальные функции и переменные остаются неизменными):

// . переменные, константы и массив растрового изображения определены выше

lcdBegin(); // Настройка пинов и инициализация LCD дисплея

setContrast(60); // Настройка контраста (предпочтительный диапазон – от 40 до 60)

setBitmap(flameBitmap); // flameBitmap надо заменить названием вашего массива

updateDisplay(); // Обновление дисплея, чтобы отобразить массив

// Функции для управления и графики на LCD-дисплее определены ниже.

Правда, прикольно получилось? Помимо всего прочего, вы можете импортировать несколько изображений и создавать небольшие анимации! Попробуйте, уверен, вам понравится!

Ссылки для скачивания дополнительных программ, библиотек и даташитов

Даташиты на LCD-дисплей и драйвера

Библиотеки Arduino и скетчи

Программы для создания растровых изображений

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

NOKIA 5110 подключение

Сегодня я расскажу как подключать дисплей от некогда очень известного телефона НОКИА – 5110.
Мы научимся выводить текст и рисовать различную графику.
Вот примеры того, что будет в этом уроке.
Для подключения к Ардуино была написана библиотека, а для отображения кириллицы создан русификатор.
Он переводит UTF-8 в Windows-1251. Вот его мы и сможем увидеть на экране.
Нам потребуется две библиотеки от компании Adafruit

  1. Adafruit_GFX
  2. Вторая, Adafruit_PCD8544

Скачать можно с гитхаба или по ссылке в описании к видео.
Nokia-5110 – это Монохромный дисплей. Разрешение этого дисплея 84×48 точек.

Для подключения у него 8 посадочных мест, как сверху, так и снизу. Это сделано для удобства расположения дисплея в устройствах.


В комплекте так же идут штырьки для распайки.
На этом экране можно выводить как графику, так и просто текст или цифры. Очень простое подключение к платам Ардуино.


Важно не забыть, что питание дисплея 3,3 вольта. НЕ 5 ВОЛЬТ.
Тоже относится и для питания подсветки дисплея.

Подключение оставшихся выводов так же рассчитано на питание 3,3 вольта.
Я уже давно использую такие дисплеи и у меня на канале есть несколько видео где показаны разные устройства с выводом информации на Nokia-5110.
Подключаю напрямую к выводам Ардуино, БЕЗ РЕЗИСТОРОВ, и всё работает уже долгое время. Как будете делать вы я не знаю.
Можете подключать через дополнительные резисторы, или использовать преобразователи, которые получая на вход 5 вольт преобразуют его в 3,3 вольта.

Есть различные варианты дисплеев. Например, отличаются по цветам платы. Если у вас красная плата, и вывод обозначается как LIGHT – то он подключается к + 3,3 вольта.
Если синяя, и вывод обозначается как BL – то он подключается к земле.
Но лучше уточнить у продавца. Всегда могут быть исключения.

Так же я всегда устанавливаю подстроечный резистор на 10 кОм, чтобы регулировать яркость дисплея вручную. Вывод подсветки подключается к центральному контакту резистора, а два крайних – это +3,3 и GND.

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

Рассмотрим первый скетч.
Скачать его можно по ссылке в описании к видео.
Я прокомментировал каждую строчку кода на нашем ВЕЛИКОМ и МОГУЧЕМ, что бы было понятно что и для чего.

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup() <
display.begin();
display.setContrast(50); // установка контраста
display.clearDisplay();
>

void loop() <
display.setTextSize(1); // размер шрифта 1
display.setTextColor(BLACK); // цвет текста темный
display.println(“Hello, world!”); // отображаем надпись
display.setTextSize(2); // увеличиваем шрифт на 1
display.println(random(1,10000)); // выводим число от 1 до 10000
display.setTextSize(3);
display.print(random(1,10000));
display.display();
delay(1000); // задержка в секунду
display.clearDisplay(); // очищаем дисплей
>

Теперь попробуем вывести русский текст.
Загружаем скетч-2

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup() <
display.begin();
display.cp437(true);
display.setContrast(50); // установка контраста
display.clearDisplay();
>

void loop() <
display.clearDisplay();
// Рисуем квадрат
display.drawRect(0, 0, 84, 48, BLACK); // отступ – Слева Сверху Ширина Высота

display.setTextSize(2); // размер шрифта 2
display.setTextColor(BLACK); // цвет текста чёрный
display.setCursor(8,5); // Устанавливаем курсор в то место откуда будем писать Лево-Верх
display.println(utf8rus(“Привет”));
display.setTextSize(2); // размер шрифта 2
display.setTextColor(BLACK); // цвет текста чёрный
display.setCursor(8,25);
display.println(utf8rus(“народ!”));

display.display();
delay(1000); // задержка в секунду
display.clearDisplay(); // очищаем дисплей
>

/* Функция перевода UTF-8 to Windows-1251 */
String utf8rus(String source)
<
int i,k;
String target;
unsigned char n;
char m[2] = < '0', '' >;

k = source.length(); i = 0;

if (n >= 0xC0) <
switch (n) <
case 0xD0: <
n = source[i]; i++;
if (n == 0x81) < n = 0xA8; break; >
if (n >= 0x90 && n = 0x80 && n

Теперь попробуем вывести русский текст.

И-и-и-и-и, ничего у нас не получилось.
Вместо русских букв получаются кракозябры.

Но не переживайте. Сейчас исправим.
Скопируем файл glcdfont.c в папку с библиотеками Ардуино.

Обычно это находится по адресу
Admin – Documents – Arduino – libraries – Adafruit-GFX-Library
копируем туда файл glcdfont.c с заменой

В setup добавляем строчку

void setup() <
display.begin();
display.cp437(true);

И в самый конец, после функции loop() копируем функцию перевода UTF-8 в Windows-1251

/* Функция перевода UTF-8 to Windows-1251 */
String utf8rus(String source)

И,… вуаля, теперь можно работать с русским шрифтом.

Нарисуем окружность.
Заполним весь экран кругами.
Раньше мы всегда писали чётными чернилами, а что если белыми?
Посмотрим?

Читайте также:  Индикатор топлива и напряжения акб для автомобиля v.4

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup() <
// инициализация и очистка дисплея
display.begin();
display.clearDisplay();
display.display();

display.setContrast(50); // установка контраста
delay(1000);
>

// окружность в центре
display.clearDisplay();
display.drawCircle(display.width()/2, display.height()/2, 20, BLACK);
display.display();
delay(5000);
display.clearDisplay();

for (int16_t i=0; i

for (int16_t i=0; i

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

Дисплей Nokia 5110 имеет разрешение 84×48 точек. Поэтому и картинки должны быть не больше этого размера. В принципе здесь нет ничего нового.
Как делать массивы из картинок .bmp, я подробно рассказывал в видео про матрицу 16*16. Если не смотрели, то обязательно посмотрите.
Здесь нас интересует только 2 строчки.

static const unsigned char PROGMEM leoBmp[]

Где мы пишем название нашего массива

2. где мы его вызываем.
Цифры – это размер картинки.

display.drawBitmap(0, 0, leoBmp, 84, 48, BLACK);

А теперь выведем какой-нибудь логотип.
Например, льва.

Смотрите в видео.

Не забываем подписываться на канал, если вам интересно что я делаю.
Ставим лайк и оставляем комментарии – этим вы покажете мне, что я не просто так делаю обучающие уроки.
До встречи.

Подключение дисплея Nokia 5110 к Arduino

В данной статье мы научимся работать с графическими LCD дисплеями на примере экрана Nokia 5110. Это довольно популярный дисплей, выделяющийся низкой стоимостью и возможностью выводить в удобном виде не только текстовые, но и графические данные (графики, изображения и т.д.). Разрешение экрана Nokia 5110 – 48×84 точки. Мы узнаем, как подключать дисплей Нокиа к Ардуино и приведем пример скетча для работы с ним.

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

Для начала давайте рассмотрим подключение данного дисплея к Arduino и разберемся с интерфейсом передачи данных. На плате дисплея имеются 8 выводов:

  • RST — Reset (сброс);
  • CE — Chip Select (выбор устройства);
  • DC — Data/Command select (выбор режима);
  • DIn — Data In (данные);
  • Clk — Clock (тактирующий сигнал);
  • Vcc — питание 3.3В;
  • BL — Backlight (подсветка) 3.3В;
  • GND — земля.

Соединение

Как вы уже могли заметить, питание дисплея (Vcc) должно осуществляться напряжением не выше 3.3В, то же напряжение является максимальным и для подсветки дисплея (BL). Тем не менее, логические выводы толерантны к 5В логике, используемой Arduino. Но все же рекомендуется подключать логические выводы через резисторы 10 кОм, тем самым вы сможете продлить срок службы дисплея.

Также стоит отметить, что существуют версии дисплеев (как правило с красной платой) с выводом LIGHT вместо BL. В таком случае включение подсветки осуществляется подключением данного вывода к минусу питания (GND).

Пин RST (активный LOW) отвечает за перезагрузку дисплея, а с помощью пина CE (активный LOW) контроллеру дисплея сообщается что обмен данными происходит именно с ним. Вход DC отвечает за режим ввода – ввод данных, либо ввод команд (LOW – данные, HIGH – команды). Вход Clk позволяет контроллеру дисплея определять скорость передачи данных, а через пин DIn происходит непосредственно передача данных в контроллер дисплея.

Скетч и библиотека для работы с дисплеем

Для работы с данным дисплеем существует множество библиотек, мы же будем использовать весьма простую и функциональную библиотеку , доступную по адресу http://www.rinkydinkelectronics.com/library.php? >

ФункцияНазначение
LCD5110(SCK, MOSI, DC, RST, CS)Объявление дисплея с указанием пинов подключения.
InitLCD([contrast])Инициализация дисплея с опциональным указанием контрастности (0-127), по умолчанию используется значение 70.
setContrast(contrast)Изменение контрастности (0-127).
enableSleep()Переводит экран в спящий режим.
disableSleep()Выводит экран из спящего режима.
clrScr()Очищает экран.
clrRow(row, [start], [end])Очищает выбраную строку (номер row), от позиции start до end (опционально).
invert(true), invert(false)Включает и выключает инверсию содержимого LCD экрана.
print(string, x, y)Выводит строку символов (string) с заданными координатами (x, y); вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8.
printNumI(num, x, y, [length], [filler])Выводит целое число (num) на экран на заданной позиции (x, y); опционально: length – количество символов, резервируемых для числа; filler – символ для заполнения «пустот», если число меньше желаемой длины length (по умолчанию это пробел ” “).
printNumF(num, dec, x, y, [divider], [length], [filler])Выводит число (num) с плавающей запятой; dec – число знаков после запятой; опционально: divider – знак десятичного разделителя, по умолчанию точка “.”, length и filler – по аналогии с предыдущей функцией.
setFont(name)Выбирает шрифт; встроенные шрифты – SmallFont, MediumNumbers и BigNumbers.
invertText(true), invertText(false)Инвертирует текст, выведенный с помощью функций print, printNumI и printNumF (вкл./выкл.).
drawBitmap(x, y, data, sx, sy)Выводит картинку на экран по необходимым координатам (x, y); data – массив, содержащий картинку; sx и sy – ширина и высота рисунка.

Рассмотрим работу с дисплеем с помощью данной библиотеки на примере простого скетча:

После того как мы рассмотрели базовые функции библиотеки, остановимся более подробно на функции drawBitmap и рассмотрим особенности вывода изображений на экран.

Для начала нам понадобится интересующее изображение в формате .bmp.

Далее необходимо скачать программу Image Generate от Alex_EXE по адресу https://alex-exe.ru/programm/image-generate/. В окне программы устанавливаем необходимое разрешение нашего изображения на дисплее (должно быть меньше, чем 84 пикселя по горизонтали и 48 по вертикали), нажимаем «установить новый размер».

Нажимаем «установить новый размер»

После этого нажимаем «Картинка», «Открыть», выбираем наш файл, жмем «преобразовать».

Жмем «преобразовать»

Нажимаем «Применить»

Теперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетч.

Теперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетч

Выводы

Таким образом, мы подробно рассмотрели базовые возможности работы с дисплеем Nokia 5110 с помощью библиотеки LCD5110_Basic, научились быстро и просто выводить собственные изображения на экран и разобрали нюансы, связанные с подключением дисплея к платформе Arduino.

Самодельный измеритель освещённости (люксметр) на BH1750, ARDUINO и Nokia 5110

Всем привет! Сегодня мы продолжим создавать крутые устройства на основе ЖК-дисплея Nokia 5110. На это раз мы соберём люксметр (измеритель освещённости), используя высокочувствительный люксметр BH1750.

Освещённость (измеряется в люксах) — световой поток, падающий на поверхность единичной площади. Она показывает воспринимаемое человеком количество света. Эта величина является редуцированной — в отличие от энергетических, такие величины скорректированы согласно различной чувствительности человеческого глаза к излучениям с различными длинами волн. (См. — спектральная световая эффективность монохроматического излучения.)

Освещённость можно измерить в любой точке пространства, на любом расстоянии от источника света. И эта величина характеризует световой поток с точки зрения восприятия именно человеческим глазом. Таким образом, люксметр позволяет определить, насколько хорошо освещено то или иное пространство. И именно такое устройство мы и будем создавать в ходе этого руководства.

На рисунке справа — уже собранное устройство, измеряющее освещённость снаружи ярким утром.

Для проекта нам понадобятся следующие компоненты:

BH1750 — цифровой датчик освещённости с превосходными точностью и диапазоном измерения. Он подключается к микроконтроллеру или процессору посредством шины I²C.

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

Некоторые характеристики датчика BH1750:

  • Шина I²C (поддерживаются скоростные режимы Fast и Standard)
  • Спектральная чувствительность примерно соответствует чувствительности человеческого глаза
  • Преобразователь освещённости в цифровые данные. Широкий диапазон и высокое разрешение (1–65535 люкс)
  • Низкий ток благодаря функции выключения
  • Подавление шумов освещения 50 и 60 Гц
  • Возможность выбора из 2‑х типов адреса ведомого устройства
  • Измерения с учётом и без учёта влияния оптического окна (с использованием этой функции возможно измерить минимум 0,11 лк, максимум 100 000 лк)
  • Малые колебания измерения (±20%).

Схема

Соедините элементы, как показано на нижеследующей схеме, созданной с помощью программы Fritzing (полный обзор программы по ссылке).

Датчик BH1750 оснащён встроенным 16‑битным АЦП, который может напрямую передавать цифровой сигнал по протоколу I²C, поэтому датчик подключается к выводам интерфейса I²C платы Arduino (аналоговые выводы 4 (SDA) и 5 (SCL)).

Таблица соединения выводов приведена ниже:

BH1750Arduino Uno
VCC5V
GNDGND
SCLA5
SDAA4

Подробное руководство, как использовать модуль дисплея от Nokia 5110 совместно с платформой Arduino, можно найти здесь. Оно поможет лучше понять принцип работы дисплея и способ его подключения к плате Arduino.

На всякий случай таблица подключения выводов дисплея и платы (согласно схеме), используемая именно в этом проекте, приведена ниже:

LCD Nokia 5110Arduino Uno
Pin 1(RST)D12
Pin 2(CE)D11
Pin 3(DC)D10
Pin 4(DIN)D9
Pin 5(CLK)D8
Pin 6(VCC)VCC
Pin 7(LIGHT)GND
Pin 8(GND)GND

Перепроверьте подключение всех элементов, прежде чем приступать к коду.

Как и во многих наших проектах, чтобы упростить работу с датчиком освещённости BH1750, нам понадобится для него библиотека. В рамках этого проекта мы будем использовать библиотеку BH1750.h, которую можно найти здесь. Скачайте библиотеку и установите её в среду разработки Arduino IDE, распаковав и скопировав её в папку среды, в которой находятся библиотеки.

Для дисплея Nokia 5110 нам понадобится библиотека LCD5110_Graph.h, которую можно скачать отсюда. Её также необходимо установить в среду разработки. Дополнительную информацию о дисплее Nokia 5110 можно найти в руководстве, которое упоминалось выше.

После установки библиотек, можно запустить среду Arduino IDE и приступить к работе.

Первое, что мы делаем в нашем коде, это включаем библиотеки, которые собираемся использовать: для датчика BH1750 и дисплея Nokia 5110, а также библиотеку для интерфейса I²C.

Rus59Wolf › Блог › Гигрометр на ардуино, dht22 и nokia5110 lcd.

Или два дня жестоких тупняков и извращений.
Эта запись скорее для меня самого, однако вполне возможно что кому нибудь она тоже пригодится. Прошу отнестись к ней скорее как к записи в блокноте для самого автора нежели как к законченной статье, однако вполне возможно что немного годноты здесь всеже будет.

Читайте также:  Автомобильный контроллер подсветки приборной панели

Однажды меня попросили гигрометр. У человека, очень для меня близкого смею заметить, есть проблемы, связанные с сухостью воздуха.Человеку был задарен увлажнитель воздуха однако гигрометра там не было а померить хотелось чего-же там за воздух то в обычной квартире в обычном панельном доме. Собственно мжно было просто купить прибор и не мучатся, но наши руки не для скуки. Обычный психрометр меня крайне не устраивал ибо пользую такой на работе и меряет он явно фигню всякую. Плюс за ним следить надо постоянно и обслуживать не забывать. Можно купить готовый электронный дешевый китайский но там как повезет. С другой стороны в заначке вполне нормально лежат и пылятся без дела несколько мелких ништячков, вполне достаточных для сборки. Это и привело к решению прибор не покупать а собрать.

Нужно понимать что у меня все было кроме датчика. Просто лежало и пылилось. Даже антистатические пакеты были не вскрыты. Следовательно стоимость готового прибора лично для меня приравнивалась к стоимости датчика. Прецезионный конечно хотелось но земноводное не спало и поэтому рассматривались только китайские dht11 и dht22. 22й стоит дороже но и диапазон измерения шире. В китае по нынешнему курсу можно нарыть такой рублей за 200. Но ждать от месяца и до бесконечности. Вполне нормальный вариант, но надо было срочно поэтому искал в этой стране. Как ни странно но самый дешевый магазинный оказался именно в перми причем в шаговой доступности от места сборки. 400р это всяко не 900 как в чип и дипе плюс можно купить по дороге за хлебушком а не ждать неделю почту россии. Так я и поступил. Интернет магазин весьма сомнительного дизайна выдал мне номер и адрес. Звонок, договоренность и через крайне малое время я стою на пороге обычной квартиры и меняю кровные 4ре бумажки на датчик в антистат пакет у обычного такого молодого человека. Забавное немного ощущение если честно. Этакий магазин на диване. Ну и за хлебом заодно сходил, куда уж без этого.

Дальше я буду рассказывать про сборку но говорю сразу — если кто то будет также собирать прибор по этому описанию, то пусть сначала прочитает до конца потому что я рассказываю историю по порядку а не составляю оптимальный гад по сборке.

Теперь немного о том, из чего все собиралось.
New design Pro Mini atmega328 5V 16M — мозг
FT232RL USB to Serial adapter module USB TO RS232 Max232 for Arduino download — у мозга нет юсб и нужен usb-uart преобразователь для заливки прошивки.
Датчик dht22
LCD Module White backlight adapter PCB for Nokia 5110 Arduino — дисплей он и в африке дисплей. Нравятся они мне — эти старые дисплеи.
DC-DC USB 0.9V-5V to 5V dc Boost Step-up Power Supply Module — стабилизатор по сути. Задача батареечные 3.7 (4.1) поднять до стабильных 5в
5V Micro USB 1A 18650 Lithium Battery Charging Board Charger Module — заряжалка лития
батарейкодержатель формата 18650 и аккумулятор. В виде соединителей немного кроссировки (связисты поймут) и старый IDE шлейф, очень уж удобно его резать и цеплять модули. Получается на модуль один аккуратный шлейф вместо множества проводков. Кнопки россыпью с фиксацией и без. Резистор на 10КОм
Все это добро легко гуглится и вопросов обычно не вызывает. Было куплено на ебэе очень давно из рассчета беру два и один на запас мало ли сдохнет. Еще раз говорю что у меня не было только датчика, если покупать это все для такого простого прибора как у меня то земноводное просто взвоет.

Собирал я все это хозяйство прям при будущем владельце. Собирал на трезвую, хотя иногда по старой кодерской привычке очень хотелось полирнуть. Прошу сразу не ругаться, по тексту поймете почему такое желание возникло. Ну и лень матушка прям таки заставила не брать свой бук с установленными дровами и средой. Я же помню что там все просто. Хотя чтото такое внутри посвербывало.

Сборку я начал с плана. Взял таки большую бумажку, ручку и пошел писать. Очень люблю читать Терри Пратчета и там описан маленький народец великих раздолбаев, которые однажды написали на бумажке ПЛН и стали практически непобедимы (серия про Тиффани Болид если что). Согласно плану я должен был припаять к дуинке дисплей, датчик, оттестить прогу и запаять линию питания. Очень часто встречал упоминание о нелюбви нокиевских дислеев к питанию 5в. Вот вроде как 3,3 им надо и хоть убейся. Однако китайцы вроде как 5 переносят спокойно. Надо сказать что свой я на 5 паял ранее и проблем не было но тут решил собрать делитель напряжения. От скуки неиначе. Еще надо было распаять сопротивление на датчик. Сопротивляшки у меня были, делитель подобрал быстро, немного задумался о компоновке но коробочки у меня не было и решил все повесить на шлейфы. Резисторы решил напаивать прямо на элементы дабы не плодить сущности. На дуинку при таком раскладе просто распаивались шлейфы.

Ровно через 10 минут у мну был распаян датчик, повешен на шлейф и припаян к дуинке, которая в свою очередь подцеплена к компу через адаптер, а я уже довольно потирал лапки распаковывая среду разработки и качая дрова. Среда поставилась, библиотечка по работе с датчиком легла куда надо, тестовый пример нормально скомпилировался. При чем именно скомпилировался потому что на мк я его не заливал. Дальше начался какойто адЪ. Дрова я взял свежие, подложил в систему и чегото начало происходить. Система вин 7 х64 проф сп1(просто для справки. обычно я работаю с хр). Для тех кто не знает или уже забыл эта самая ттл (адаптер usb-uart) определяется в системе, хавает свои дрова и определяется как два виртуальных устройства — конвертер и усб порт который потом превращается в виртуальный com порт.

Дрова загуглил легко и качнул отсюда www.ftdichip.com/Drivers/VCP.htm версию 2.12.16. Устройство весело дровишки подкинуло и бук почемуто моргнул дисплеем и перезагрузился. Я почувствовал приближение пушного зверька ибо бук не мой но вроде все загрузилось. Однако устройство работать отказалось — вторая половина дров не стала, контроллер появился а ком порта не было, зато было некое неивестное устройство, на которое дрова не получалось поставить от слова совсем. Печаль. Потыркался со сносом и преустановкой, поподсовывал другие версии. Печалька начала превращаться в жопку. Масло в огонь подливала хозяйка бука, которой ессно не нравились все эти процессы на ее родном зверьке. Промаявшись так два часа мы утопали на кино. Как раз хотели сходить на зверополис — крайне неплохой мультфильм, лично мне понравился весьма он) Во всей этой катавасии меня устойчиво непокидало ощущение беспомощности. Как бы фиг с ним с буком, ничего ему не будет. Да и с хозяйкой как нибудь договоримся. Но прибор то я не соберу получается да еще словил какуюто фигню с которой не понимаю что делать. Как то некруто это все.

Следующая стадия этого балета наступила вечером. Я в принципе понимал все так — либо семерке на буке не нравится этот девайс вообще и его дрова в частности, либо девайс мне достался конченый ибо свои более ранние поделки я шил другим девайсом который кудато благополучно замылил и поэтому взял новый. Либо был третий вариант. К этому моменту я уже узнал про интересную штуку — оказывается производителя этих адаптеров порядком подзадрали китайские плагиатчики и этот самый производитель решил подгадить всем. В дровах версии 2.10 была программная закладка, которая проверяла чип адаптера на подлинность и всем неверным делала атата путем записи в энергонезависимую память чипа бяки изменяющей pid устройства. Короче дрова убивали пиратские копии чипа, перепрошивая им мозг, после чего девайс не определялся и не работал с родными дровами. Падлы. Странность была в том что моя проблема под симптомы не подходила — у меня пид был нормальным, дрова ставились но ком порт не определялся.

Погрустив немного я загуглил лечение от этой беды и попробовал таки ее вылечить. Лечил по этой инструкции тыц, подтверждаю что инструкция работоспособная для вин 7 х64. Естественно я дрова не патчил ибо у меня все работало. Прошивка от идеальной отличалась только не тем выбранным элементом в списке usb vidpid. Привел в соответствие с картинкой и о чудо — в диспетчере устройств стало возможно поставить дрова на usb-port, что в свою очередь превратило его в нормальный com-порт. На будущее для всех — просто ставьте дрова до версии 2.10, например 2.8.14, которые мозг не любят и девайс не убивают. Алилуйа, у меня появилась возможность прошивки мк, но чет времени было уже поздновато.

На всякий случай вечером выкроил 5 минут и залил тестовый скетч для работы с датчиком. Все залилось, датчик завелся и начал отдавать циферки в монитор последовательного порта. С чувством оооочень глубокого морального удовлетворения отложил все на завтра и приступил к лечению нервов излюбленным русским способом. Для страждущих — простейшая и наипонятнейшая инструкция по подключению датчика dht со ссылкой на библиотеку с тестовым примером, пользуйтесь на здоровье. з.ы. по поводу терминологии. В среде ардуинщиков программа написанная в среде разработки для заливки этой самой средой называется скетчем. Лично я считаю что это просто безобидный фетиш ибо это както отделяет программистов пишущих программу, индусов лячкающих говнокод от ардуинщиков творящих скетчи. Разница какбы есть но какбы несущественна. Но раз терминология уже сложилась то и не будем выеживаться — сказано скетч, пусть будет скетч. Еще я надеюсь что установка студии и заливка в нее сторонних библиотек проблем не вызывает, ну да на всякий случай

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector