Особенности работы некоторых аппаратных средств Arduino
Ввиду того что Arduino-совместимые компоненты выпускаются множеством сторонних компаний, качество продукции которых сама компания Arduino никак не контролирует, пользователь с большой вероятностью может приобрести компонент, работающий не совсем корректно.
В отношении некоторых комплектующих для систем Arduino пользователи заметили следующее:
- Датчик температуры DHT11, поставляемый с базовым набором (StarterKit), даёт значительную погрешность в 2–3 градуса. В помещении рекомендуют применять температурный датчик DHT22, дающий более точные показания, а для установки на улицу — DHT21, способный работать при отрицательных температурах и имеющий защиту от механических повреждений.
- На некоторых микропроцессорных платах Arduino при замыкании подключённых к ним реле выходит из строя COM-порт. Из-за этого на микроконтроллер не удаётся загрузить скетч: как только начинается заливка, процессор перезагружается. Реле при этом щёлкает, COM-порт отключается и процесс загрузки скетча прекращается.
- Датчик закрытия окна/двери иногда преподносит сюрпризы в виде ложных срабатываний. С учётом этого скетч пишут так, чтобы система производила необходимое действие только по получении нескольких сигналов подряд.
- Для настройки управления процессами при помощи хлопков некоторые пользователи по неопытности вместо микрофона заказывают детектор звука с ручной настройкой порога. Для подобных целей этот компонент не подходит, так как имеет слишком малый радиус действия: хлопать приходится не далее 10 см от детектора. Кроме того, этот датчик передаёт сигналы импульсами малой продолжительности, так что при наличии большого скетча, на обработку которого уходит сравнительно много времени, микроконтроллер просто не успевает их зафиксировать.
- Для устройства противопожарной сигнализации следует использовать датчик дыма, а не датчик огня. Последний регистрирует пламя не далее 30 см от себя.
- На случай сбоя в работе микроконтроллера или ошибки в коде лучше применять нормально замкнутые реле с последовательно подключёнными ручными выключателями.
Чтобы избежать покупки низкокачественных комплектующих, бывалые пользователи рекомендуют предварительно изучать отзывы о них, опубликованные в Сети. Недорогие датчики можно покупать в нескольких вариантах, чтобы лично проверить, какой из них работает лучше.
Возможно, система «умный дом» от компании Arduino является не самой качественной, но зато широчайший выбор компонентов и их доступная стоимость точно сделали её одной из самых популярных. Воспользовавшись нашими советами, вы быстро научитесь создавать проекты Arduino, автоматизируя различные домашние процессы.
Знакомство с Arduino
Торжественно открываю новый блог на Хабре, посвящённый Arduino! Блог об универсальном opensource-микроконтроллере Arduino, который будет интересен всем любителям микроэлектроники, самодельных гаджетов и всем, кто не боится взять в руки паяльник.
Arduino представляет собой линейку электронных блоков-плат, которые можно подключать к компьютеру по USB, а в качестве периферии — любые устройства от светодиодов до механизмов радиуоправляемых моделей и роботов. Программы для него пишутся на простом и интуитивно понятном си-подобном языке Wiring (c возможностью подключения сторонних библиотек на C/C++, например, для управления LCD-дисплеями или двигателями), компилируются и загружаются в устройство одной кнопкой, после чего вы тут же получаете работающий автономный гаджет. Никакого ассемблера, никаких лишних проводов и дорогущих деталей и программаторов — чистое творчество, включай и работай!
Применение
После короткого рассказа друзьям и знакомым про Arduino («это типа электронного конструктора, микро-ЭВМ, в который можно загрузить любую программу и получить любое другое устройство») самый часто задаваемый вопрос «А зачем это всё?» или «Какая мне от этого выгода?» Скучные люди, не правда ли? Неужели среди ваших знакомых нет ни одного радиолюбителя, а может вы и сами радиолюбитель? Применение Arduino очень простое — не забавы ради, а развития мозга для. Интересно же линуксоидам ковыряться в коде ядра? Какая от этого польза? Почему бы вам не заняться «железным» (в противовес «софтовому») творчеством? Вот прямо сейчас рядом со мной сидит коллега-дизайнер и разбирается… с нейронными сетями. В общем что говорить, забыт дух технического творчества, забыты радиокружки и авиамодельные клубы. Все только сидят у своих компьютеров и сделать ничего путного в железе, кроме как воткнуть вилку в розетку, не могут Соберите свой веб-сервер, цветомузыкальную установку или прикольного робота! Сообщество любителей Arduino уже знает об успешных примерах: GPS-трекер с записью на SD-карту, простой аудиоплеер, Twitter-дисплей, электронные игры с дисплеем и тачскрином… Попробуйте купить радиодеталей и сделать что-то своё! Есть даже готовый набор для создания четырёхъядерного Arduino-кластера.
Технические характеристики
Arduino Diecimila представляет собой небольшую электронную плату (далее просто плата) ядром которой является микроконтроллер ATmega168. На плате есть: 14 цифровых входов/выходов, 6 из которых могут работать в режиме ШИМ (PWM) (а следовательно управлять аналоговыми устройствами вроде двигателей и передавать двоичные данные), 6 аналоговых входов (исходной информацией служат не логические 0/1, а значение напряжения), тактовый генератор на 16 МГц, разъёмы питания и USB, ICSP-порт (что-то вроде последовательного интерфейса для цифровых устройств), несколько контрольных светодиодов и кнопка сброса. Этого вполне достаточно, чтобы подключить плату к USB-порту компьютера, установить нужный софт и начать программировать.
- Микроконтроллер: ATmega168
- Рабочее напряжение: 5 В
- Входное напряжение (рекомендуемое): 7-12 В
- Входное напряжение (пределы): 6-20 В
- Цифровые порты ввода/вывода: 14 портов (из них 6 с ШИМ-сигналом)
- Аналоговые порты ввода: 6 портов
- Ток для портов: 40 мА
- Ток для 3.3В источника: 50 мА
- ППЗУ (Flash Memory): 16 KB (из них 2 Кб используются загрузчиком)
- ОЗУ (SRAM): 1 Кб
- ПЗУ (EEPROM): 512 байт
- Тактовая частота: 16 МГц
Питание Питание платы осуществляется двумя способами: по кабелю USB (при этом никаких других ухищрений делать не нужно, используется в процессе отладки), либо по специальному разъёму вроде того, что у ноутбуков. В радиомагазине можно купить такой разъём и присоединить к нему аккумулятор или 9-тивольтовую батарейку типа «Крона». Источники питания можно менять перемычкой на плате.
Важный нюанс по управлению через 0 и 1
Модули управления нагрузкой бывают двух видов. Привычнее воспринимается, когда реле включается при логической «1» на входе, но часто бывает и наоборот.
Причин управления через ноль несколько:
1. Меньше вероятность ситуаций с кратковременными переключениями выходов при старте и инициализации процессора (при pullup-подтяжках они вообще исключены).
2. Выше помехозащищённость (так как диапазон для «1» в общем случае пошире, чем у «0»), выше стабильность для ситуаций с устройствами с разными логическими амплитудами.
4. Подтяжка — это всегда дополнительные детали (внутренние или в обвесе), а «0» — это всегда просто земля.
3. И вроде можно даже как-то чуть-чуть сэкономить энергопотребление, но это не точно(с).
Если вам попался модуль с управлением по активному нолю, то при установке пина в «1», реле будет обесточено, а когда «0» — включено.
Самое простое в этой ситуации — инвертировать выход относительно входа. Есть два варианта:
- В коде строку digitalWrite(D4, pinValue); поменять на digitalWrite(D4, !pinValue);
- В приложении Blynk поменять местами «0» и «1» в настройках кнопки.
Есть и третий вариант: перекинуть L1 с контакта NO («нормально разъединён») на контакт NC («нормально замкнут»). В этом варианте (впрочем, как и остальных) желательно исходить из того режима, в котором реле большее количество времени будет обесточено.
Примеры:
- Кратковременно включающийся вентилятор (свет). Лучше подключить L1 к «NO».
- ненадолго отключающийся компрессор в аквариуме, нагреватель, итд. В этом случае лучше подключить нагрузку на «NC», тогда напряжение будет поступать на нагрузку при обесточенном реле.
После выбора контактов реле при необходимости корректируем управляющий уровень в коде.
OLED I2C 128 x 64 px – схема подключения к Arduino
В небольших устройствах тоже бывает нужно вывести какую-либо полезную информацию, сохраняя компактные габариты.
Обычные экраны, вроде Nokia 3310, не обеспечивают достаточного разрешения, к тому же их не видно в темноте.
В различных плеерах, электронных сигаретах и прочем давно уже используют компактные OLED-дисплеи с большим для их габаритов разрешением – так чем наши проекты хуже?
Важным плюсом OLED-экранов является работа без подсветки – каждый пиксель – сам себе подсветка. За счёт такой системы, экран потребляет крайне мало тока (фактически, его можно запитать от пина Arduino). Есть и один минус – при постоянном использовании отдельные пиксели начинают выгорать и терять яркость, но до наступления этого состояния вы успеете отладить и вывести всё, что только можно.
Дисплей подключается по высокоскоростному интерфейсу I2C (относительно высокоскоростному – до 400Кбод) и использует всего 2 сигнальных провода. Это ещё один неоспоримый плюс! Несмотря на то, что интерфейс последовательный, да ещё и данные в обе стороны идут по одной линии, на рядовой Arduino можно достичь порядка 15-20fps, чего более чем достаточно для проектов.
Стоит заметить, что дисплей монохромный – цветные картинки на него не выведешь, а для текста или графика хватит и двух цветов.
Всего у дисплея 4 пина – VCC, GND, SDA, SCL. VCC и GND подключаются к VCC и GND Arduino соответственно (чтобы перестраховаться, лучше питать дисплей от пина 3.3В – не на всех модулях стоят понижающие преобразователи), а линии данных находятся у каждой версии Arduino на разных пинах. У Uno (Nano, Pro Mini и других платах на ATMega328/168) SDA – A4, SCL – A5. У Mega – SDA – 20, SCL – 21.
На платах 3 ревизии контакты интерфейса выведены перед 13 пином на гребёнке и подписаны соответственно.
Для экрана написано множество библиотек, его поддерживает в том числе и универсальная U8g2.
Для управления дисплеем нам потребуются две библиотеки:
1) Adafruit_GFX_Library — мы её уже ставили, когда подключали Nokia 5110
2) Adafruit_SSD1306 — библиотека для управления именно OLED дисплеями
Устанавливаем обе библиотеки в Arduino IDE, и пробуем вывести наш любимый «Hello world!»:
Схема подключения OLED 128 x 64 к Arduino #include «SPI.h»
#include «Wire.h»
#include «Adafruit_GFX.h»
#include «Adafruit_SSD1306.h»
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup() {
// инициализация и очистка дисплея
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();
delay(1000);
display.setTextSize(1); // установка размера шрифта
display.setTextColor(WHITE); // установка цвета текста
display.setCursor(0,0); // установка курсора
display.println(«Hello, world!»);
display.display();
}
void loop() {
}
#include «Adafruit_GFX.h»#include «Adafruit_SSD1306.h»Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);// инициализация и очистка дисплеяdisplay.begin(SSD1306_SWITCHCAPVCC);display.setTextSize(1); // установка размера шрифтаdisplay.setTextColor(WHITE); // установка цвета текстаdisplay.setCursor(0,0); // установка курсораdisplay.println(«Hello, world!»); |
Ответить
Модификация библиотеки Adafruit SSD1306
Библиотека Adafruit SSD1306 не настроена для 128 × 64 OLED-дисплеев (используемый в данной статье). Размер экрана необходимо изменить в заголовочном файле Adafruit_SSD1306.h.
Если этого не сделать, то при компиляции мы получим сообщение об ошибке #error (“Height incorrect, please fix Adafruit_SSD1306.h!”):
Чтобы изменить заголовочный файл Adafruit_SSD1306.h, откройте Документы > Arduino. Теперь перейдите в библиотеку Adafruit_SSD1306:
Откройте файл Adafruit_SSD1306.h в текстовом редакторе (например, notepad++). Прокрутите файл вниз, чтобы найти раздел с дисплеями SSD1306 или сразу перейдите к строке №73. Закомментируйте #define SSD1306_128_32 и раскомментируйте #define SSD1306_128_64, чтобы код в этом разделе выглядел следующим образом:
Вот и все. Теперь сохраните файл и перезапустите вашу Arduino IDE.
С Arduino легко изучить электронику
Когда я впервые получил свой Arduino, у меня не было практических знаний в области электроники или схем. Я забыл все, чему научился в школе, и чувствовал себя не в своей тарелке, играя с крошечным микроконтроллером.
Но я быстро понял, что это не должно быть так сложно. Вам нужно будет изучить основы схем, если вы хотите понять, что делаете. Но где можно узнать об электронике для Arduino?
Мы бы рекомендовали начать с YouTube, где вы можете найти сотни видеороликов, связанных с Arduino.
Играя с Arduino, вы приобретете новые навыки работы с электроникой в зависимости от того, над какими проектами вы работаете. Если вы никогда раньше не работали с проводами, макетными платами или паяльными пистолетами, то это безопасный и интересный способ обучения.
Не только это, вы также сможете поиграть с множеством крутых электронных компонентов. Большинство стартовых комплектов Arduino включает светодиоды, резисторы, конденсаторы, акселерометры, моторы, кнопки, дисплеи и многое другое. Вы почувствуете себя ребенком, который снова и снова играет с деталями Lego.
Но больше всего, когда вы укрепляете уверенность в схемах и компонентах, вы, скорее всего, откроете в себе творческую сторону, о существовании которой вы даже не подозревали. Это прекрасный способ проявить практическое творчество.
Installing Library for OLED Display Module
The SSD1306 controller of the OLED display has flexible yet complex drivers. Vast knowledge on memory addressing is required in order to use the SSD1306 controller. Fortunately, Adafruit’s SSD1306 library was written to hide away the complexities of the SSD1306 controller so that we can issue simple commands to control the display.
To install the library navigate to the Sketch > Include Library > Manage Libraries… Wait for Library Manager to download libraries index and update list of installed libraries.
Filter your search by typing ‘adafruit ssd1306’. There should be a couple entries. Look for Adafruit SSD1306 by Adafruit. Click on that entry, and then select Install.
This Adafruit SSD1306 library is a hardware-specific library which handles lower-level functions. It needs to be paired with Adafruit GFX Library to display graphics primitives like points, lines, circles, rectangles etc. Install this library as well.
Known Problem with SSD1306 Controller
Although the SSD1306 has a built-in GDDRAM for the screen, we cannot read the contents of it (according to Adafruit). Therefore, it is not possible to manipulate the screen buffer to perform mathematical operations.
As an alternative, the library allocates 1KB (128×64)/8 bits) of memory from ATmega328P as buffer. So, it can manipulate the screen buffer and then perform a bulk transfer from the ATmega328P’s memory to the internal memory of the SSD1306 controller.
Подготовка Arduino IDE и прошивка
- Загружаем и устанавливаем Arduino IDE.
- Распаковываем скачанное в папку с библиотеками Arduino IDE (обычно это C:\Users\<Текущий пользователь>\Documents\Arduino\).
- Копируем полученный код в Arduino IDE.
- В примере вводим фактическое название нашей WiFi-сети и пароль.
В примере также присутствует функция вида:
BLYNK_WRITE(V1) { int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable // process received value }
Здесь:
- BLYNK_WRITE(V1) указывает, что функция выполнится при изменении виртуального пина 1,
- int pinValue = param.asInt(); объявляет переменную pinValue и загружает в неё текущее состояние виртуального пина (0 — пин выключен, 1 — пин включен).
Всего можно использовать 256 виртуальных пинов (V0-V255) — это огромный запас на все случаи жизни. Например, виртуальный пин 1 принимает значение 1 — подаём питание на физический пин NodeMcu и включаем этим реле, или виртуальный пин 2 принимает значение от 0 до 255 — изменяем ШИМ-сигнал, регулируем яркость (либо цвета RGB) диодной подсветки в 255 градациях яркости.
А теперь заставим нашу функцию включать физический пин D4 NodeMcu (в функции будем использовать событие виртуального пина 0, просто для удобства):
BLYNK_WRITE(V0) { int pinValue = param.asInt(); digitalWrite('''D4''', pinValue); }
Чтобы управлять этим выводом, в основной функции void setup() обязательно установим пин D4 как выход: pinMode(D4, OUTPUT);
В итоге получаем такой код для прошивки:
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> char auth[] = "Мой токен"; //тут токен из e-mail char ssid[] = "YourNetworkName"; //Название WiFi-сети char pass[] = "YourPassword"; //Пароль BLYNK_WRITE(V0) //функция, отслеживающая изменение виртуального пина 0 { int pinValue = param.asInt(); //переменная текущего состояния виртуального пина digitalWrite(D4, pinValue); //задаем значение на физическом пине NodeMcu D4 равное значению виртуального пина 0 } void setup() //основная функция, выполняется один раз при подаче питания на микроконтроллер { Serial.begin(9600); //открываем серийный порт, чтобы видеть как проходит подключение к серверу blynk pinMode(D4, OUTPUT); //объявляем D4 "выходным" пином Blynk.begin(auth, ssid, pass); //авторизируемся на сервере } void loop() //основная функция, которая выполняется постоянно по кругу { Blynk.run(); //запускаем работу blynk. В этом примере - постоянную проверку виртуального пина 0 }
Заливаем прошивку в NodeMcu.
Так как пример предполагает использование различных плат, то пропустим тонкости настройки Arduino IDE для работы с NodeMcu; к тому же подобную информацию найти нетрудно.
Наш выключатель готов к работе!
Также данную схему можно использовать и для включения ПК (имитации нажатия кнопки включения). Для этого параллельно пинам кнопки Power (на материнской плате пины POWER SW) нужно подключить линии L и L1 (указанные на схеме !!!НЕ 220В!!!) и немного изменить скрипт, чтобы при изменении виртуального пина реле включалось на короткий промежуток времени, имитируя короткое нажатие.
В скрипте, в блоке:
BLYNK_WRITE(V0) //функция, отслеживающая изменение виртуального пина 0 { int pinValue = param.asInt(); //переменная текущего состояния виртуального пина if (pinValue = 0){ digitalWrite(D4, HIGH); //если работает неверно, то изменить на digitalWrite(D4, LOW); а ниже наоборот delay (100); // если задержка мала, можно увеличить digitalWrite(D4, LOW); //ДА-ДА, ИМЕННО ТУТ НИЖЕ. Если работает неверно, то изменить на digitalWrite(D4, HIGH); } }
мы добавили задержку delay (100); в 100 мс и выключили после нее физический пин D4 — digitalWrite(D4, LOW);
Conclusion – Part 1
With the display on, the board consumes around 14 mAh, which is relatively a lot. I’ll study how to decrease this. It is possible to get this number lower by putting the Arduino to sleep between refreshing the display, but the most of the power will end up going to the display. There is no escape. But our watch wont be showing the time always. It will have a button to activate the display when we want it to. So let’s make another test, this time putting the display to sleep with the code and measuring the current.
Well, that ended up being a lot lower with the display off. With the brown-out enabled it was 315 uA, however, after the last time this post was edited, the current was only 238 uA (down-out disabled). Even now I believe it is still possible to lower that value. All the parts are working, and our watch is still counting the time, but at the lowest power consumption possible. At this state, a watch with a regular (and very common) CR2032 240mAh battery would last amazing 31 (improved) 42 days.
Power Supply Requirement
An OLED display works without a backlight because it makes its own light. This is why the display has such high contrast, extremely wide viewing angle and can display deep black levels. Absence of backlight significantly reduces the power required to run the OLED. On average the display uses about 20mA current, although it depends on how much of the display is lit.
The operating voltage of the SSD1306 controller is from 1.65V to 3.3V while OLED panel requires 7V to 15V supply voltage. All these different power requirements are sufficed using internal charge pump circuitry. This makes it possible to connect it to an Arduino or any 5V logic microcontroller easily without using any logic level converter.
Достоинства микроконтроллера 2560
Ардуино – популярнейшая платформа для реализации различных проектов, подходящая инженерам, которые не хотят программировать «пустые» микроконтроллеры и, в принципе, желают свести общение с программной средой к минимуму.
Но даже у неё в базовой комплектации имеются свои подводные камни, о которых лучше узнать заранее.
Постепенно ставя перед собой более сложные задачи и занимаясь новыми разработками на данном МК, вы со временем столкнетесь с двумя главными проблемами стандартных плат:
- Неоптимальные размеры, не подходящие для удобного их размещения во многих корпусах.
- Недостача в количестве пинов на ввод-вывод данных.
Проблема № 1
Минимизировать занимаемое место крайне легко – достаточно использовать специальные разновидности МК, будь то нано или мини. Здесь есть некоторые особенности, с недостатком памяти, например, на Attiny85, но для простого функционала – это не столь существенно.
Конечно, для более сложных задач можно докупить специальные модули с дополнительным объемом памяти под инструкции, но это полностью нивелирует все плюсы нано, ведь уменьшенный размер будет компенсирован дополнительным слотом под чип и занятым пином. Относится эта проблема не ко всем платам, и всё та же nano способна полностью копировать функционал уно.
Проблема № 2
Менее приятная, но и у неё есть несколько путей для решения:
Как мы видим, оба выхода из ситуации задействуют «костыли», и элегантными их не назовешь. Но это далеко не единственная проблема. Они или работают частично, или нивелируют достоинства системы, что абсолютно недопустимо для сколь-нибудь сложных проектов.
Благо, есть и третий подход, используемый всё чаще, – Ардуино Мега 2560, проекты на которой уже не страдают от обилия этих «костылей». Есть также аналог данной платы, поддерживающий usb-хосты, но давайте сначала разберёмся с основным МК.
Первое, что бросается в глаза при знакомстве с 2560, – внешний вид, ведь она в 1.8 раз длиннее уно, что является необходимым злом, дабы разместить на ней целых 54 порта.
Притом, 15 из них можно использовать в качестве источников ШИМ-сигналов, чтобы регулировать мощность тока или другие параметры системы. Регуляция осуществляется с помощью широтно-импульсных модуляций, а дополнительные 16 портов под вход могут обработать цифровые сигналы и применяться в качестве всё тех же цифровых выходов. В результате, мы получаем более тонкую, длинную и функциональную плату.
Под связь с несколькими видами устройств установлено 4-о UART интерфейсов, на 0, 1, 14, 19 пинах. Притом, один из них направлен под usb с помощью микроконтроллера ATmega8U2, применяемого в качестве замены привычному USB-TTL, который использовался повсеместно в более старых платах.
Но, что важнее, – прошивка располагается в паблик репозитории, а соответственно, доступна для скачивания и модификации любому желающему. Под связь с дисплеями присутствуют SPI и I2C технологии, которые вы также можете применить в своем проекте.
Arduino Code – Basic Drawings
In this example, we’re going to try some basic drawings. This sketch demonstrates many drawing functions, including rectangles, round rectangles, circles and triangles. Try the sketch out and then we will dissect it in some detail.
Most of the code (Including libraries and initializing display) is same as above code example, except following code snippets to draw basic drawings.
Drawing Rectangle
You can draw rectangle on the display by using function. The function takes five parameters viz. X coordinate, Y coordinate, Width, Height and color. Actually this function draws hollow rectangle with 1 pixel border. You can draw filled rectangle using function.
Drawing Round Rectangle
You can draw round rectangle on the display by using function. This function takes same parameters as drawRect() function except one additional parameter – Radius of corner rounding. Actually this function draws hollow round rectangle with 1 pixel border. You can draw filled round rectangle using function.
Drawing Circle
You can draw circle on the display by using function. The function takes four parameters viz. X coordinate of center, Y coordinate of center, radius and color. This function draws hollow circle with 1 pixel border. You can draw filled circle using function.
Drawing Triangle
You can draw triangle on the display by using function. The function takes seven parameters viz. 3 X & Y coordinates (x0, y0, x1, y1, x2 & y2) of vertices of triangle and color. (X0,y0) represents top vertex, (x1,y1) represents left vertex and (x2,y2) represents right vertex.
This function draws hollow triangle with 1 pixel border. You can draw filled triangle using function.
OLED Memory Map
Regardless of the size of the OLED module, the SSD1306 driver has a built-in 1KB Graphic Display Data RAM (GDDRAM) for the screen which holds the bit pattern to be displayed. This 1K memory area is organized in 8 pages (from 0 to 7). Each page contains 128 columns/segments (block 0 to 127). And each column can store 8 bits of data (from 0 to 7). That surely tells us we have
8 pages x 128 segments x 8 bits of data = 8192 bits = 1024 bytes = 1KB memory
The whole 1K memory with pages, segments and data is highlighted below.
Each bit represents particular OLED pixel on the screen which can be turned ON or OFF programmatically.
The 128×64 OLED screen displays all the contents of RAM whereas 128×32 OLED screen displays only 4 pages (half content) of RAM.
Here are the complete specifications:
Display Technology | OLED (Organic LED) |
MCU Interface | I2C / SPI |
Screen Size | 0.96 Inch Across |
Resolution | 128×64 pixels |
Operating Voltage | 3.3V – 5V |
Operating Current | 20mA max |
Viewing Angle | 160° |
Characters Per Row | 21 |
Number of Character Rows | 7 |
Плюсы и минусы LCD 1602
Рассмотрим плюсы и минусы дисплея LCD 1602.
- Цена. Этот модуль можно приобрести совсем по демократичной цене в китайских магазинах. Цена составляет 200-300 рублей. Иногда продается даже вместе с I2C модулем.
- Легко подключать. Вероятно, никто сейчас не подключает LCD 1602 без I2C. А с этим модулем подключение занимает всего 4 контакта, никаких «паутин» из проводов не будет.
- Программирование. Благодаря готовым библиотекам работать с этим модулем легко, все функции уже прописаны. А при необходимости добавить свой символ затрачивается всего пару минут.
За время использования тысячами радиолюбителями никаких больших минусов выявлено не было, только бывают случаи покупки брака, так как в основном используются китайские варианты дисплеев.
В этой статье было рассмотрено подключение 1602 к Arduino, а также были представлены примеры программ для работы с этим дисплеем. Он действительно является в своей категории одним из лучших, не просто так его выбирают тысячи радиолюбители для своих проектов!
LCD дисплей Arduino позволяет визуально отображать данные с датчиков. Расскажем, как правильно подключить LCD монитор к Arduino по I2C и рассмотрим основные команды инициализации и управления LCD 1602. Также рассмотрим различные функции в языке программирования C++, для вывода текстовой информации на дисплее, который часто требуется использовать в проектах на Ардуино.
Элементы платы
Дисплей
Дисплей MT-16S2H умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.
Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.
Контроллер дисплея
Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.
Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.
Контакты подключения
На плате дисплея выведено 16 контактов для подведения питания и взаимодействия с управляющей электроникой.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | VCC | Напряжение питания (5 В) |
3 | VO | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми битный режим) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | LED+ | Питания подсветки (+) |
16 | LED– | Питания подсветки (–) |
Обратите внимания, что физические контакты подсветки экрана 15 и 16 расположены не в порядком соотношении с другими пинами экрана.
Питание
Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт
Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В
Интерфейс передачи данных
Дисплей может работать в двух режимах:
-
8-битный режим — в нём используются и младшие и старшие биты (DB0-DB7)
-
4-битный режим — в нём используются только младшие биты (DB4-DB7)
Использовать восьмибитный режим не целесообразно. Для его работы требуется на четыре дополнительные ноги, а выигрыша по скорости практически нет.