Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Создание пользовательских анимаций на ЖК-дисплеях 16x2

Компоненты и расходные материалы

Arduino UNO
Любая плата Arduino.
× 1
Стандартный ЖК-экран Adafruit - 16x2, белый на синем
Здесь подойдет любой ЖК-дисплей размером 16x2, совместимый с Hitachi HD44780.
× 1
Резистор 220 Ом
Любой резистор в диапазоне 220 - 1 кОм. Чем больше значение, тем ярче экран.
× 1

Приложения и онлайн-сервисы

IDE Arduino
Пользовательский генератор глифов

Об этом проекте

Библиотека LiquidCrystal упрощает использование ЖК-дисплеев с Arduino. Особенно интересной функцией из этой библиотеки является функция createChar ():вы можете создавать собственные глифы (символы), каждый из которых описывается массивом из восьми байтов, по одному для каждой строки. Пять младших битов каждого байта определяют пиксели в этой строке. Написание байтов вручную для создания произведений искусства - не совсем идеальный процесс для художника, поэтому я сделал веб-инструмент в котором вы можете рисовать глифы, а код создается для вас .

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

Подключение ЖК-дисплея к Arduino

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

См. Симуляцию на TinkerCad по этой ссылке.

Создание искусства

Перейдите к инструменту по адресу https://tusindfryd.github.io/screenduino/ и создайте свое искусство. Одновременно можно использовать до 8 секций, поэтому, если вы не можете выбрать новый квадрат, убедитесь, что вы уже не используете 8 секций.

Генерация кода

Когда вы закончите со своим первым изображением, снимите флажок the коробка "просто the функция " . Скопируйте код в буфер обмена и загрузите его на свой Arduino. На этом этапе вы должны увидеть свое изображение на ЖК-дисплее.

Создание дополнительных рамок

Убедитесь, что ваш код сохранен. Теперь вы можете создать вторую рамку. Просто нарисуйте другое изображение. Когда вы закончите, проверьте the коробка "просто the функция " . Скопируйте функцию и вставьте ее в конец своего кода. Переименуйте новую функцию во что-нибудь другое, например image01 () , чтобы вы могли отслеживать. Теперь вам нужно переместить вызов в image () . из setup () функцию в loop () функция, добавьте задержку, вызовите image01 () , и снова добавьте задержку. Попробуйте переименовать image () в image00 () для консистенции. Ваш loop () функция должна выглядеть примерно так:

  недействительный цикл () {image00 (); задержка (250); image01 (); задержка (250);}  

Загрузите эскиз на свой Arduino. Попробуйте добавить больше кадров или изменить время задержки.

Код

  • Анимация "Метаморфоза бабочки"
Анимация «Метаморфоза бабочки» Arduino
Это пример кода (код анимации метаморфозы бабочки из гифки).
 / * анимация метаморфозы бабочки 2021 ~ от tusindfryd этот код находится в общественном достоянии * / # include  LiquidCrystal lcd (12, 11 , 5, 4, 3, 2); // RS, E, D4, D5, D6, D7void setup () {lcd.begin (16, 2);} void loop () {image00 (); задержка (250); image01 (); задержка (250); image02 (); задержка (250); image03 (); задержка (700); image04 (); задержка (250); image05 (); задержка (250); image06 (); задержка (700); image07 (); задержка (1250);} void image00 () {lcd.clear (); байт image22 [8] ={B00110, B01101, B11011, B10011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (byte (4));} void image01 () {lcd.clear (); байт image22 [8] ={B00110, B00101, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B11001, B10111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image06 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00011}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение06); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (5, 0); lcd.write (byte (5));} void image02 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00001, B00111, B00100, B11001, B10111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (byte (4));} void image03 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11010}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image24 [8] ={B00010, B00111, B00111, B00111, B00111, B00111, B00010, B00000}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение24); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (7, 1); lcd.write (byte (5));} void image04 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10001, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11010}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image24 [8] ={B00010, B00100, B01011, B10101, B11010, B10101, B11010, B01110}; байтовое изображение25 [8] ={B00000, B00000, B00000, B10000, B10000, B00000, B00000, B00000}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение24); lcd.createChar (6, изображение25); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (7, 1); lcd.write (байт (5)); lcd.setCursor (8, 1); lcd.write (byte (6));} void image05 () {lcd.clear (); байт image24 [8] ={B01010, B10100, B01011, B10101, B11010, B10101, B11010, B01110}; байтовое изображение25 [8] ={B00000, B00000, B00000, B10000, B10000, B00000, B00000, B00000}; байт image23 [8] ={B01101, B01010, B01101, B00111, B00000, B00000, B00000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00011}; байт image08 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B10000}; lcd.createChar (0, изображение24); lcd.createChar (1, изображение25); lcd.createChar (2, изображение23); lcd.createChar (3, изображение07); lcd.createChar (4, изображение08); lcd.setCursor (7, 1); lcd.write (байт (0)); lcd.setCursor (8, 1); lcd.write (байт (1)); lcd.setCursor (6, 1); lcd.write (байт (2)); lcd.setCursor (6, 0); lcd.write (байт (3)); lcd.setCursor (7, 0); lcd.write (byte (4));} void image06 () {lcd.clear (); байт image08 [8] ={B00000, B00100, B01010, B01010, B10001, B00011, B00110, B01100}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00001, B00010, B00010, B00001}; байт image09 [8] ={B00000, B00000, B10000, B11000, B00000, B00000, B11000, B00100}; байт image24 [8] ={B00100, B00100, B00011, B00000, B00000, B00000, B00000, B00000}; байтовое изображение25 [8] ={B10000, B00000, B00000, B00000, B00000, B00000, B00000, B00000}; lcd.createChar (0, изображение08); lcd.createChar (1, изображение07); lcd.createChar (2, изображение09); lcd.createChar (3, изображение24); lcd.createChar (4, изображение25); lcd.setCursor (7, 0); lcd.write (байт (0)); lcd.setCursor (6, 0); lcd.write (байт (1)); lcd.setCursor (8, 0); lcd.write (байт (2)); lcd.setCursor (7, 1); lcd.write (байт (3)); lcd.setCursor (8, 1); lcd.write (byte (4));} void image07 () {lcd.clear (); байт image24 [8] ={B10101, B01110, B01110, B00100, B10101, B01110, B00100, B11111}; байт image08 [8] ={B00000, B00100, B01010, B01010, B10001, B00011, B00110, B01100}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00001, B00010, B00010, B00001}; байт image09 [8] ={B00000, B00000, B10000, B11000, B00000, B00000, B00000, B00000}; lcd.createChar (0, изображение24); lcd.createChar (1, изображение08); lcd.createChar (2, изображение07); lcd.createChar (3, изображение09); lcd.setCursor (7, 1); lcd.write (байт (0)); lcd.setCursor (7, 0); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (8, 0); lcd.write (byte (3));} 

Схема


Производственный процесс

  1. CDS:3D-прозрачные ЖК-дисплеи
  2. ЖК-панель с Arduino для симулятора полета
  3. ЖК-анимация и игры
  4. Отображение изображения на ЖК-экране TFT с помощью Arduino UNO!
  5. Осциллограф 10 Гц-50 кГц для самостоятельного изготовления на ЖК-дисплее 128x64
  6. Как создать веб-сайт, взаимодействующий с Arduino с помощью PHP
  7. Монитор сердечного ритма MAX 30102 на ЖК-дисплее 16x2
  8. Метеостанция Arduino
  9. Простой будильник с DS1302 RTC
  10. Процесс прототипа печатной платы:5 шагов для создания пользовательской печатной платы