8-900-374-94-44
[email protected]
Slide Image
Меню

Как подключить tft дисплей к ардуино – Подключение TFT-дисплея 1.8 к Arduino – RobotChip

Содержание

TFT LCD дисплей 2.8 дюйма и Arduino||Arduino-diy.com

Тачскрин дисплей станет украшением для любого проекта на Arduino.

В этой статье мы рассмотрим touchscreen display shield со встроенным слотом для microSD карты. TFT дисплей имеет диагональ 2.8″, подсветку, в которой используется 4 белых светодиода, и возможность отображения 262000 оттенков цветов (18 бит)! Дисплей имеет разрешением 240х320 пикселей с индивидуальным управлением. Обратите внимание, что это гораздо больше, чем, например, у черно-белого LCD дисплея 5110. На шилде встроен резистивный тачскрин, что позволяет определяеть положение пальца при нажатии на экран.

Общая информация и техническые характеристики TFT LCD шилда 2.8″

TFT shield продается в полностью собранном виде, готовый к запуску. Достаточно его просто установить сверху на вашу Arduino и подключить необходимую библиотеку в Arduino IDE. Процедура установки-наладки-первого заруска займет не больше 10 минут!

На TFT шилде есть встроенный контроллер с буферизацией RAM. В результате большинство операций передается имнно шилду, а не грузят контроллер на Arduino. Для подключения шилда TFT дисплея достаточно несколько пинов: 12 пин отвечает за дисплей, 13 — за работу SD карты, если вы ее используете.

Конечно, производители не оставили нас наедине с даташитом и пожеланием «Удачи!». Есть библиотеки, которые значительно облегчат вашу работы с TFT шилдом.

Есть отличная open-source графическая библиотека, которая дает возможность рисовать пиксели, линии, прямоугольники, окружности и текст: Скачать на Github.

Кроме того, написана тач-скрин библиотека: Скачать на Github, которая определяет координаты x, y и z (давление), в которой есть пример скетча для демонстрации указанных возможностей. Данный скетч написандля Arduino, но может быть адаптирован для других микроконтроллеров!

Технические характеристики TFT дисплея:

  • Диагональ LCD TFT дисплея составляет 2.8″
  • Разрешение 240×320 пикселей, 18-bit (262000) цветовая гамма
  • Контроллер ILI9325 или ILI9328 со встроенным буфером оперативной памяти
  • Цифровой интерфейс на 8 бит, плюс 4 линейки управления
  • Использует цифровые пины 5-13 и аналоговые 0-3. Это значит, что можно использовать цифровые пины 2, 3 и аналоговые 4 и 5. Пин 12 тоже доступен, если вы не используете microSD карту
  • Совместим с любой платой Arduino ‘328 или Mega
  • Совместим с 5В! Может использовать питание логики 3.3 В и 5 В
  • Есть встроенный LDO регулятор 3.3 В @ 300 мА LDO regulator
  • Подсветка из 4 белых светодиодов. По умолчанию включена. Для управления можно подключить транзистор к цифровому пину с подсветкой
  • 4-х проводниковый резистивный сенсорный экран

Дополнительные вопросы и ответы

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

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

Задействованы все пины! Как я могу подключить еще что-то к Arduino?

Можно использовать protoshield или proto-screwshield. Вы можете подключить различные i2c датчики или аналоговые сенсоры к аналоговым пинам 4 и 5. Можно использовать i2c плату расширения, чтобы получить больше пинов. Если же пинов надо действительно много, можно использовать 8 пинов для передачи данных пока TFT не записывает данные. Это пины high-z и они не используются, пока пины WR и RD находятся в состоянии high.

Подключение TFT LCD экрана к Arduino

TFT шилд 2.8 дюйма поставляется от производителей (даже из дешевого Китая) в собранном виде. Для использования достаточно просто установить его сверху на Arduino. Никаких дополнительных проводов, никаких макеток!

Проверка LCD

Adafruit в свое время подготовили библиотеку с примером скетча для использования с этими TFT дисплеями. Библиотека не очень хорошо оптимизирована, отрабатывает не на максимальной скорости, но для знакомства с сенсорным дисплеем вполне подойдет. Кроме того, она может быть использована и для других микроконтроллеров. Как бы то ни было, сейчас нас интересует именно Arduino.

По ссылке вы сможете скачать архив с библиотекой и примерами. Распакуйте скачанный архив и не забудьте корректно интегрировать библиотеку в Arduino IDE.

Вам понадобится GFX graphics core. Постумаем аналогично. Распаковываем, перекидываем в папку с библиотеками для Arduino IDE.

Если вы используете именно шилд от Adafruit, есть еще один нюанс! Откройте файл TFTLCD.h в папке с библиотеками и раскомментируйте строку, которая находится сверху:

//comment or uncomment the next line for special pinout!

#define USE_ADAFRUIT_SHIELD_PINOUT

Перезагрузите Arduino IDE. После перезагрузки должны отработать несколько графических примеров.

Библиотека GFX Library от Adafruit

Библиотека TFT LCD library основана на графической библиотеке Adaftui GFX graphics. В GFX есть много готовых функций для основы вашего проекта. Библиотека поддерживает пиксели, линии, прямоугольники, окружности, скругленные прямоугольники, треугольники, отображение текста, поворот. Скачать ее можно по ссылке.

Пример рисования на сенсорном дисплее

Данный LCD TFT шилд имеет встроенный 2.8″ 4-х проводниковый резистивный дисплей. Его можно использовать для определения места контакта пальца, стилуса и т.п. Для работы с сенсорным дисплеем вам понадобится 4 пина на Arduino.

Скачать пример вы можете здесь: Github repository. Не забудьте разархивировать скачанный файл и переместить его в папку с библиотеками Arduino IDE.

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

  • Y+ подключается к аналоговому пину 1
  • Y- подключается к цифровому пину 7
  • X+ подключается к цифровому пину 6
  • X- подключается к аналоговому пину 2

После подключения загрузите пример tftpaint_shield, который находится в библиотеке TFTLCD library. С правой стороны на экране появятся ‘боксы с цветами’. Вы можете нажать на один из боксов для выбора цвета, которым будете рисовать. Нажав на левую часть экрана вы можете его очистить.

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

Загрузка рисунков

На TFT LCD дисплее 2.8″ дюйма есть встроенный слот для micoSD карты. Этот слот можно использовать для загрузки изображений! Предварительно отформатируйте карту в FAT32 или FAT16 ( более детально особенности работы SD карты с Arduino отображены здесь).

В большинстве скетчей-примеров SD карта не будет работать. Необходимо ее предварительно инициализировать.

Для увеличения скорости обмена данных можно загрузить дополнительную библиотеку здесь: Fixes & Updates to the Arduino SD Library. Не забудьте скопировать распакованную библиотеку в соответствующую папку в Arduino IDE.

Если вы пользуетесь Arduino Mega, внесите некоторые правки в файл SD/utility/Sd2Card.h. Надо снять тег комментария со строки #define MEGA_SOFT_SPI 1. Благодаря этому для обмена данными с SD картой, Arduino Mega сможет использовать те же пины, что и классические Arduino. Для тестировки можете загрузить это изображение тигра: Download this tiger bitmap and save it to the microsd card!

Запустите Arduino IDE и выберите скетч tftbmp_shield. Загрузите его на Arduino и вуаля! На экране отобразится следующее:

Для загрузки подойдут изображения, размер которых меньше 240х320 пикселей. Рисунки надо сохранять в 24-битном BMP формате. Даже если изначально рисунок не имел 24 бита, пересохраните его, так как это самый легкий формат для чтения с помощью Arduino. Можно поворачивать рисунки с использованием процедуры setRotation().

Управление подсветкой

По умолчанию разработчики шилда считают, что вы постоянно будете использовать подсветку. Однако вы можете управлять ее яркость с помощью ШИМ выходов или вообще выключать для экономии энергии. Для этого вам понадобится немного потрудиться. Найдите на задней стороне TFT LCD шилда 2.8″ два коннектора подсветки. С помощью ножа уберите дорожку между клемами VCC и соедините два квадрата, обозначенных Pin3. После этого вы сможете управлять подсветкой с использованием цифрового пина 3.

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

arduino-diy.com

Цветной графический TFT-экран 240×320 [Амперка / Вики]

Видеообзор

Подключение и настройка

Внимание! Дисплей работает от источника питания 5 вольт, а работа логики — 3,3 вольта. Если вы используете Arduino c 5-вольтовой логикой, то подключайте управляющие пины дисплея к Arduino через резистивные делители. В противном случае TFT-экран может выйти из строя. Для плат с 3,3 вольтовой логикой резистивные делители не нужны.

В качестве примера возьмём управляющую платформу Arduino Uno. Общение с TFT-экраном происходит через шину SPI. Подключаем управляющие пины к Arduino через делители напряжения, чтобы не повредить дисплей. Руководствуйтесь схемой ниже: Для облегчения работы с TFT-экраном используйте библиотеку UTFT, которая включает в себя разнообразные готовые примеры. Библиотека подходит как для работы с контроллерами, основанными на AVR-платформе, так и с контроллерами на ARM-платформе.

Работа с дисплеем

Вывод текста

Прошейте Arduino скетчем приведённым ниже. В результате на экране вы должны увидеть надпись «HelloWorld».

240x320_text_1.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
void setup()
{
  // инициализируем дисплей
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
  // выбираем тип шрифта
  myGLCD.setFont(BigFont);
  // печатаем «Hello, world!» в центре верхней строки дисплея
  myGLCD.print("Hello, world!", CENTER, 0);
}
void loop()
{
}

Метод InitLCD – инициализирует дисплей и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации. Будучи заданной без параметров команда устанавливает горизонтальную ориентацию. Если указать параметр PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная.

Метод clrScr – очищает дисплей, стирая всю отображаемую на дисплее информацию и заливает его черным цветом. Параметров не имеет.

Метод print – выводит на дисплей текст, содержимое символьной переменной или объекта типа String. В качестве параметров передаются выводимый текст, координаты верхнего левого угла области печати. Эта команда предназначена для вывода текстовой информации. Координаты печати X и Y задаются в пикселях и могут быть переданы как явно, так и через целочисленные переменные или выражения. Существуют также три предопределенных идентификатора, предназначенные для использования в качестве координаты X:

  • LEFT – текст выравнивается по левой границе дисплея

  • CENTER – текст выравнивается по центру дисплея

  • RIGHT – текст выравнивается по правой границе дисплея

Встроенные шрифты

Библиотека UTFT позволяет работать с подгружаемыми шрифтами. Шрифты хранятся в виде массивов данных, которые размещаются в отдельных файлах и подключаются к тексту программы. Исходная библиотека включает 3 шрифта.

  • SmallFont – 95 символов 8×12

  • BigFont – 95 символов 16×16

  • SevenSegNumFont – 10 цифровых символов 32×50

Выводим текст с разными шрифтами и изменяем их ориентацию на дисплее:

240x320_text_2.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
 
// объявления встроенных шрифтов
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
 
void setup()
{
}
 
void loop()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // печатаем строку в центре верхней строки дисплея
  myGLCD.print("TFT01_22SP", CENTER, 0);
  // выбираем большой шрифт
  myGLCD.setFont(SmallFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello from Amperka!", CENTER, 50);
  // выбираем семисегментный шрифт
  myGLCD.setFont(SevenSegNumFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("12345", CENTER, 100);
  // ждём 1 секунду
  delay(1000);
 
  // инициализируем дисплей с горизонтальной ориентацией
  myGLCD.InitLCD(1);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // печатаем строку в центре верхней строки дисплея
  myGLCD.print("Hello, user!", CENTER, 0);
  // выбираем большой шрифт
  myGLCD.setFont(SmallFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("The screen is 2.2 diagonal", CENTER, 50);
  // выбираем семисегментный шрифт
  myGLCD.setFont(SevenSegNumFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("67890", CENTER, 100);
  // ждём 1 секунду
  delay(1000);
}
Система кодирования цветов

У каждого метода, отвечающего за цветность, есть три параметра: R, G, B. Допустимые значения для параметров – от 0 до 255. Задавайте уровень каждого цвета вручную или используйте готовые идентификаторы:

Идентификатор цвета Цвет
VGA_SILVER серебряный
VGA_GRAY серый
VGA_WHITE белый
VGA_MAROON красно-коричневый
VGA_RED красный
VGA_PURPLE пурпурный
VGA_FUCHSIA фуксия
VGA_GREEN зеленый
VGA_LIME лайм
VGA_NAVY темно-синий
VGA_BLUE синий
VGA_TEAL сине-зеленый
VGA_AQUA морская волна

Добавим красок в строку «HelloWorld» и выведем несколько цветовых вариантов.

240x320_color_text.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
// объявления встроенного шрифта
extern uint8_t BigFont[];
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем красный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_RED);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 108);
}
void loop()
{
}
Поворот строки

Опциональный параметр метода print позволяет печатать строки под углом от 0 до 359 градусов. Вращение задается относительно координат печати (левый верхний угол). Нулевое значение угла приводит к горизонтальной печати, далее, по мере увеличения угла, происходит вращение текста по часовой стрелке на заданный угол. Приведенный ниже пример позволяет получить необычный графический эффект:

240x320_rotate_text.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
 
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
}
void loop()
{
  // каждый цикл печатаем строку с поворотам на 20 градусов
  for (int deg = 0; deg < 360; deg += 20) {
    String text = "Amperka";
    myGLCD.print(text, 120, 160, deg);
  }
}

Методы печати не определяют выход за пределы дисплея. Так что за максимальной длиной строки придется следить самостоятельно. Если строка окажется слишком длинной, её «хвост» будет выводится поверх уже напечатанного текста.

Вывод геометрических фигур

Программно вывод геометрических фигур реализован через методы библиотеки UTFT, которые используют попиксельный вывод, массив 240×320 точек.

Метод Описание Параметры
drawPixel(x, y) Вывод пикселя x, y координата пикселя
drawLine(x1, y1 ,x2 ,y2) Вывод линии x1, y1 и x2, y2 координаты начальной и конечной точки линии
drawRect(x1, y1 ,x2 ,y2) Вывод прямоугольника x1, y1 и x2, y2 координаты двух противоположных углов
drawFillRect(x1, y1 ,x2 ,y2) Вывод закрашенного прямоугольника x1, y1 и x2, y2 координаты двух противоположных углов
drawCircle(x, y, r) Вывод окружности x, y координаты центра окружности, r радиус
drawfillCircle(x, y, r) Вывод закрашенной окружности x, y координаты центра окружности, r радиус

Выведем их на экран.

240x320_figure.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
 
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
}
 
void loop()
{
  // устанавливаем чёрный цвет «чернил» для печати и рисования
  myGLCD.setColor(0, 0, 0);
  // вывод закрашенного прямоугольника
  myGLCD.fillRect(1, 1, 240, 320);
 
  // выводим 5 прямоугольников разными цветами
  for (int i = 1; i < 6; i++) {
    switch (i) {
      case 1:
        myGLCD.setColor(255, 0, 255);
        break;
      case 2:
        myGLCD.setColor(255, 0, 0);
        break;
      case 3:
        myGLCD.setColor(0, 255, 0);
        break;
      case 4:
        myGLCD.setColor(0, 0, 255);
        break;
      case 5:
        myGLCD.setColor(255, 255, 0);
        break;
    }
    myGLCD.fillRect(40+(i*20), 30+(i*20), 100+(i*20), 90+(i*20));
  }
  delay(2000);
 
  // устанавливаем чёрный цвет «чернил» для печати и рисования
  myGLCD.setColor(0, 0, 0);
  // вывод закрашенного прямоугольника
  myGLCD.fillRect(1, 1, 240, 320);
 
  // выводим 5 прямоугольников разными цветами
  for (int i = 1; i < 6; i++) {
    switch (i) {
      case 1:
        myGLCD.setColor(255, 0, 255);
        break;
      case 2:
        myGLCD.setColor(255, 0, 0);
        break;
      case 3:
        myGLCD.setColor(0, 255, 0);
        break;
      case 4:
        myGLCD.setColor(0, 0, 255);
        break;
      case 5:
        myGLCD.setColor(255, 255, 0);
        break;
    }
    myGLCD.fillCircle(170-(i*20), 60+(i*20), 30);
  }
  delay(2000);
}

Мы рассмотрели команды рисования графических примитивов. Кстати, для библиотеки UTFT существует дополнение UTFT_Geometry, которое позволяет выводить на дисплей треугольники (контурные и заполненные), дуги окружностей и сектора кругов.

Вывод изображений

Метод drawBitmap позволяет выводить на дисплей специально подготовленное растровое изображение. В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение. Опциональный параметр scale позволяет управлять масштабированием изображения при выводе на дисплей.

Подготовим изображение для вывода на дисплей. Нам понадобиться графический редактор GIMP и утилита ImageConverter565, которая поставляется вместе с библиотекой и располагается в папке Tools.

  • В графическом редакторе GIMP откройте картинку, которую хотите отобразить на дисплее.

  • Преобразуйте картинку до размеров дисплея, не больше чем 240×320. Советуем изменить только один параметр, второй автоматически откалибруется сам. Это позволит сохранить пропорции изображения.

  • Теперь выставьте размер холста 240×320. Если всё сделано правильно, картинка не должна выходить за пределы холста.

  • Сохраните изображение в формате .jpeg и откройте в программе ImageConverter565.

  • Изображение размером 240×320 пикселей займет непозволительно много места в памяти контроллера, поэтому мы уменьшим его в 2 раза (120×160 пикселей) и воспользуемся масштабированием. Для этого установите флаг «Reduce size to» и задайте требуемые размеры картинки (120×160).

  • В переключателе «Save As» выберем «.c»

  • Для AVR-платформы, в переключателе «Target Board» выберем «AVR», для ARM-платформу — «ARM/PIC32»

  • В поле «Array Name» задайте имя картинки и нажмите «Save».

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

Теперь выведем изображение на дисплей:

240x320_Bitmap.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
 
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
// объявления двух массив изображений
extern unsigned int amperka[0x400];
extern unsigned int raspberry[0x400];
 
void setup()
{
  // инициализируем дисплей с горизонтальной ориентацией
  myGLCD.InitLCD();
}
 
void loop()
{
  // закрашиваем дисплей белым цветом
  myGLCD.fillScr(255, 255, 255);
  int x = 0;
  for (int s = 0; s < 4; s++) {
    x += (s*32);
    myGLCD.drawBitmap(x, 0, 32, 32, amperka, s+1);
  }
  x = 0;
  for (int s = 4; s > 0; s--) {
    myGLCD.drawBitmap(x, 224-(s*32), 32, 32, raspberry, s);
    x += (s*32);
  }
 
  delay(1000);
}

Характеристики

  • Наименование: TFT01-22SP

  • Контроллер: ILI9340C

  • Диагональ: 2,2 дюйма

  • Напряжение питание: 5 В

  • Напряжение сигналов: 3,3 В

  • Разрешение: 240 x 320 (RGB)

  • Интерфейс: SPI

  • Дополнительно: разъём для SD-карты

  • Размер экрана: 37×48 мм

  • Размер модуля: 40×67 мм

Ресурсы

Заметки на полях

  • При длительной работе в закрытом корпусе возможен нагрев экрана. Нагрев можно уменьшить, если отключить подсветку экрана, или делать её менее яркой при помощи PWM через какой-нибудь транзистор в те моменты, когда экран не используется.

wiki.amperka.ru

Цветной графический TFT-экран 480×320 [Амперка / Вики]

Видеообзор

Подключение и настройка

Общение с TFT-экраном происходит через 16-битный параллельный интерфейс.

Для работы с платформами форм-фактора Arduino mega 2560, вставьте дисплей сверху методом «бутерброда». Для коммуникации микроконтроллером дисплей задействует пины: D25-D28, D32-D40, D44-D53. Остальные пины можно использовать по своему усмотрению.

Для облегчения работы с TFT-экраном используйте библиотеку UTFT, которая включает в себя разнообразные готовые примеры. Библиотека подходит как для работы с контроллерами, основанными на AVR-платформе, так и с контроллерами на ARM-платформе.

Работа с дисплеем

Вывод текста

Прошейте Arduino скетчем приведённым ниже. В результате на экране вы должны увидеть надпись «HelloWorld».

TFT_480x320_text_1.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
void setup()
{
  // инициализируем дисплей
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
  // выбираем тип шрифта
  myGLCD.setFont(BigFont);
  // печатаем «Hello, world!» в центре верхней строки дисплея
  myGLCD.print("Hello, world!", CENTER, 0);
}
void loop()
{
}

Метод InitLCD – инициализирует дисплей и задает горизонтальную или вертикальную ориентацию. В качестве параметра указывается идентификатор ориентации. Будучи заданной без параметров команда устанавливает горизонтальную ориентацию. Если указать параметр PORTRAIT или 0 – будет выбрана вертикальная ориентация, если указать LANDSCAPE или 1 – горизонтальная.

Метод clrScr – очищает дисплей, стирая всю отображаемую на дисплее информацию и заливая дисплей черным цветом. Параметров не имеет.

Метод print – выводит на дисплей текст, содержимое символьной переменной или объекта типа String. В качестве параметров передаются выводимый текст, координаты верхнего левого угла области печати. Эта команда предназначена для вывода текстовой информации. Координаты печати X и Y задаются в пикселях и могут быть переданы как явно, так и через целочисленные переменные или выражения. Существуют также три предопределенных идентификатора, предназначенные для использования в качестве координаты X:

  • LEFT – текст выравнивается по левой границе дисплея

  • CENTER – текст выравнивается по центру дисплея

  • RIGHT – текст выравнивается по правой границе дисплея

Встроенные шрифты

Библиотека UTFT позволяет работать с подгружаемыми шрифтами. Шрифты хранятся в виде массивов данных, которые размещаются в отдельных файлах и подключаются к тексту программы. Исходная библиотека включает 3 шрифта.

  • SmallFont – 95 символов 8×12

  • BigFont – 95 символов 16×16

  • SevenSegNumFont – 10 цифровых символов 32×50

Выводим текст с разными шрифтами и изменяем их ориентацию на дисплее:

TFT_480x320_text_2.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенных шрифтов
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
 
void setup()
{
}
 
void loop()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // печатаем строку в центре верхней строки дисплея
  myGLCD.print("CTE32HR", CENTER, 0);
  // выбираем большой шрифт
  myGLCD.setFont(SmallFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello from Amperka!", CENTER, 100);
  // выбираем семисегментный шрифт
  myGLCD.setFont(SevenSegNumFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("12345", CENTER, 200);
  // ждём 1 секунду
  delay(1000);
 
  // инициализируем дисплей с горизонтальной ориентацией
  myGLCD.InitLCD(1);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // печатаем строку в центре верхней строки дисплея
  myGLCD.print("Hello, user!", CENTER, 0);
  // выбираем большой шрифт
  myGLCD.setFont(SmallFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("The screen is 3.2 diagonal", CENTER, 100);
  // выбираем семисегментный шрифт
  myGLCD.setFont(SevenSegNumFont);
  // печатаем строку в указанной строке позиции
  myGLCD.print("67890", CENTER, 200);
  // ждём 1 секунду
  delay(1000);
}
Система кодирования цветов

У каждого метода, отвечающего за цветность, есть три параметра: R,G,B. Допустимые значения для параметров – от 0 до 255. Задавайте уровень каждого цвета вручную или используйте готовые идентификаторы:

Идентификатор цвета Цвет
VGA_SILVER серебряный
VGA_GRAY серый
VGA_WHITE белый
VGA_MAROON красно-коричневый
VGA_RED красный
VGA_PURPLE пурпурный
VGA_FUCHSIA фуксия
VGA_GREEN зеленый
VGA_LIME лайм
VGA_NAVY темно-синий
VGA_BLUE синий
VGA_TEAL сине-зеленый
VGA_AQUA морская волна

Добавим красок в строку «HelloWorld» и выведем её несколько цветных вариантов.

TFT_480x320_color_text.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенного шрифта
extern uint8_t BigFont[];
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем красный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_RED);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 108);
}
void loop()
{
}
Поворот строки

Еще один опциональный параметр метода print позволяет печатать строки под углом от 0 до 359 градусов. Вращение задается относительно координат печати (левый верхний угол). Нулевое значение угла приводит к горизонтальной печати, далее, по мере увеличения угла, происходит вращение текста по часовой стрелке на заданный угол. Приведенный ниже пример позволяет получить необычный графический эффект:

TFT_480x320_rotate_text.ino
// библиотека для работы с дисплеем
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
void setup()
{
  // инициализируем дисплей с горизонтальной ориентацией
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
}
void loop()
{
  // каждый цикл печатаем строку с поворотам на 20 градусов
  for (int deg = 0; deg < 360; deg += 20) {
    String text = "Amperka";
    myGLCD.print(text, 240, 160, deg);
  }
}

Методы печати не умеют определять выход за пределы дисплея. Так что за максимальной длиной строки придется следить самостоятельно. Если строка окажется слишком длинной, то ее «хвост» может быть выведен поверх уже напечатанного текста.

Вывод геометрических фигур

Программно вывод геометрических фигур реализован через методы библиотеки UTFT, которые используют попиксельный вывод, массив 480×320 точек:

Метод Описание Параметры
drawPixel(x, y) Вывод пикселя x, y координата пикселя
drawLine(x1, y1 ,x2 ,y2) Вывод линии x1, y1 и x2, y2 координаты начальной и конечной точки линии
drawRect(x1, y1 ,x2 ,y2) Вывод прямоугольника x1, y1 и x2, y2 координаты двух противоположных углов
drawFillRect(x1, y1 ,x2 ,y2) Вывод закрашенного прямоугольника x1, y1 и x2, y2 координаты двух противоположных углов
drawCircle(x, y, r) Вывод окружности x, y координаты центра окружности, r радиус
drawfillCircle(x, y, r) Вывод закрашенной окружности x, y координаты центра окружности, r радиус

Выведем их на экран.

TFT_480x320_figure.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
}
 
void loop()
{
  // устанавливаем чёрный цвет «чернил» для печати и рисования
  myGLCD.setColor(0, 0, 0);
  // очищаем экран
  myGLCD.clrScr();
 
  // выводим 5 прямоугольников разными цветами
  for (int i = 1; i < 6; i++) {
    switch (i) {
      case 1:
        myGLCD.setColor(255, 0, 255);
        break;
      case 2:
        myGLCD.setColor(255, 0, 0);
        break;
      case 3:
        myGLCD.setColor(0, 255, 0);
        break;
      case 4:
        myGLCD.setColor(0, 0, 255);
        break;
      case 5:
        myGLCD.setColor(255, 255, 0);
        break;
    }
    myGLCD.fillRect(70+(i*20), 60+(i*20), 150+(i*20), 140+(i*20));
  }
  delay(2000);
 
  // устанавливаем чёрный цвет «чернил» для печати и рисования
  myGLCD.setColor(0, 0, 0);
  // очищаем экран
  myGLCD.clrScr();
 
  // выводим 5 окружностей разными цветами
  for (int i = 1; i < 6; i++) {
    switch (i) {
      case 1:
        myGLCD.setColor(255, 0, 255);
        break;
      case 2:
        myGLCD.setColor(255, 0, 0);
        break;
      case 3:
        myGLCD.setColor(0, 255, 0);
        break;
      case 4:
        myGLCD.setColor(0, 0, 255);
        break;
      case 5:
        myGLCD.setColor(255, 255, 0);
        break;
    }
    myGLCD.fillCircle(300-(i*20), 100+(i*20), 40);
  }
  delay(2000);
}

Мы рассмотрели команды рисования графических примитивов. Кстати, для библиотеки UTFT существует дополнение UTFT_Geometry, которое позволяет выводить на дисплей треугольники (контурные и заполненные), дуги окружностей и сектора кругов.

Вывод изображений

Метод drawBitmap позволяет выводить на дисплей специально подготовленное растровое графическое изображение. В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение. Опциональный параметр scale позволяет управлять масштабированием изображения при выводе на дисплей.

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

  • В графическом редакторе GIMP откройте картинку, которую хотите отобразить на дисплее.

  • Далее преобразуйте картинку, так чтоб она вписалась в дисплей, то есть не больше чем 480×320. Советуем менять, только один параметр картинки, а второй откалибруется сам, что бы сохранилась пропорция изображения.

  • Теперь выставьте размер холста 480×320, при это если всё правильно сделали картинка не должна выходить за пределы холста.

  • Сохраните изображение в формате .jpeg и откройте в программе ImageConverter565.

  • Фоновое изображение размером 480×320 пикселей займет непозволительно много места в памяти контроллера, поэтому мы используем изображение, уменьшенное в 2 раза (240×160 пикселей) и воспользуемся масштабированием. Для этого установите флаг «Reduce size to» и задайте требуемые размеры картинки (240×160).

  • В переключателе «Save As» выберем «.c»

  • Если используете AVR-платформу, то в переключателе «Target Board» выберем «AVR», а если ARM-платформу, то — «ARM/PIC32»»

  • В поле «Array Name» задайте имя картинки и нажмите «Save».

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

Теперь выведем изображение на дисплей:

TFT_480x320_Bitmap.ino
// библиотека для работы с дисплеем
#include <UTFT.h>
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
 
// объявления двух массив изображений
extern unsigned int amperka[0x1000];
extern unsigned int raspberry[0x1000];
 
void setup()
{
  // инициализируем дисплей с горизонтальной ориентацией
  myGLCD.InitLCD();
}
 
void loop()
{
  // закрашиваем дисплей белым цветом
  myGLCD.fillScr(255, 255, 255);
  // выводим изображение
  int x = 0;
  for (int s = 0; s < 3; s++) {
    x += (s*96);
    myGLCD.drawBitmap(x, 0, 64, 64, amperka, s+1);
  }
  x = 0;
  for (int s = 3; s > 0; s--) {
    myGLCD.drawBitmap(x, 320-(s*64), 64, 64, raspberry, s);
    x += (s*64);
  }
 
  delay(1000);
}

Вывод изображений с SD-карты

Если вам не хватает объёма памяти микроконтроллера для хранения изображений, вы можете загружать их прямо с SD-карты. Для облегчения работы c выводом изображений на дисплей вам понадобится скачать и подключить библиотеки UTFT_SdRaw и SdFat.

Метод load библиотеки UTFT_SdRawпозволяет выводить на дисплей специально подготовленное растровое графическое изображение.

myFiles.load(x, y, sizeX, sizeY, name, scale)

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

Подготовим изображение для вывода на дисплей. Для этого понадобится:

  • Графический редактор GIMP.
  • Утилита ImageConverter565, которая поставляется вместе с библиотекой UTFT и располагается в директории Tools.

Далее необходимо выполнить некоторый ряд действий:

  1. В графическом редакторе GIMP откройте картинку.

  2. Далее преобразуйте изображение, так чтоб оно вписалось в дисплей, то есть не больше чем 480×320.

  3. Теперь выставьте размер холста 480×320, при это если всё правильно сделали картинка не должна выходить за пределы холста.

  4. Сохраните изображение в формате .jpeg.

  5. Откройте картинку в программе ImageConverter565.

  6. Установите флаг «Reduce size to» и задайте требуемые размеры картинки (480×320).

  7. В переключателе «Save As» выберите .raw

  8. Если используете AVR-платформу, то в переключателе «Target Board» выберем «AVR», а если ARM-платформу, то — «ARM/PIC32»»

  9. В поле «Array Name» задайте имя изображения и нажмите «Save».

В результате работы конвертера вы получите файл с расширением .raw, в котором будет храниться информация о картинке и закодированное изображение. Скопируйте этот файл на SD-карту. Далее вставьте SD-карту в слот с обратной стороны дисплея и прошейте Arduino скетчем приведённым ниже.

TFT_480x320_SD_Bitmap.ino
/*
В качестве примера скопируйте файл «Arduino.raw» 
входящим в состав библиотеки «UTFT_SdRaw» на SD-карту
*/
 
#include <SPI.h>
// расширенная библиотека для работы с SD-картой
#include <SdFat.h>
// библиотека для работы с дисплеем
#include <UTFT.h>
// библиотека для вывода изображений на дисплей с SD-карты
#include <UTFT_SdRaw.h>
 
// пин ChipSelect к которому подключена SD-карта
#define SD_CHIP_SELECT  53
 
// создаём объект работы с SD-картой
SdFat sd;
 
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера управляющих пинов
UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
 
// объявления встроенного шрифта
extern uint8_t BigFont[];
 
// создаём объект для работы и вывода изображений на дисплей
UTFT_SdRaw myFiles(&myGLCD);
 
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD();
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
 
  // ждём успешной инициализации SD-карты
  while (!sd.begin(SD_CHIP_SELECT)) {
    // устанавливаем красный цвет «чернил» для печати и рисования
    myGLCD.setColor(VGA_RED);
    // печатаем строку в указанной строке позиции
    myGLCD.print("SD Card failed!", CENTER, 100);
    delay(1000);
  }
 
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("SD Card initialised", CENTER, 100);
  // ждём 1 секунду
  delay(1000);
 
  // выводим изображение с SD-карты на дисплей
  myFiles.load(0, 0, 480, 320, "Arduino.raw");
}
 
void loop()
{
}

Характеристики

  • Наименование: CTE32HR

  • Контроллер: HX8357B

  • Диагональ: 3,2 дюйма

  • Рабочее напряжение: 3,3-5 В

  • Разрешение: 480×320 (RGB)

  • Интерфейс: 16-битный параллельный интерфейс

  • Дополнительно: разъём для SD-карты

  • Размер экрана: 70×43 мм

  • Размер модуля: 89×54 мм

Ресурсы

wiki.amperka.ru

Arduino часы на LCD TFT 3,5″

Arduino часы на LCD TFT 3,5"
Сегодня я хочу поделится инструкцией по изготовления оригинальных часов с датчиком температуры. В качестве контролера Arduino Uno. Для отображения часов, даты и температуры я буду использовать цветной LCD TFT экран. Экран использует много контактов Arduino, поэтому мы обойдемся без модуля RTC.

Для реализации данного проекта нам понадобится:
— Arduino Uno
— LCD TFT 3.5” Shield для подключения к Arduino Uno
— Датчик температуры ds18b20
— Резистор 4.7 Ком 0.25 Вт
— Резистор 62 Ом 2 шт
— Аккумулятор Ni-Mn, 1.2V, 1000mA 6 шт
— Синий светодиод 5мм 4 шт
— Фанера толщиной 10 мм
— Немного тонкого пластика или картона
— Наждачная бумага
— Электролобзик
— Термоклей
— Паяльник
— Припой, канифоль
— Изолента
— Двусторонний скотч
— Соединительные провода
— Акриловая краска
— Красители для акриловой краски
— Дрель
— Сверла по дереву 5 мм и 3 мм
— Саморезы по дереву 3 х 30 мм

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

У вас он может немного отличаться, их много разновидностей. Подсветка экрана запитана через стабилизатор на 3.3 вольта и резистор от 5 вольт с Arduino. Это хорошо видно на фото:

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

Теперь экран готов к установке

Шаг 2 Подготовка Arduino Uno.
Экран использует много контактов Arduino, кроме этого на плате с экраном часто размещают слот под SD карту. Еще одна проблема заключается в том, что при соединении экрана и Arduino оставшиеся выводы Arduino становятся не доступны. Поэтому надо выбирать аналог Arduino Uno с подготовленными дополнительными посадочными гнездами для выводов. Таким образом мы сможем припаять гребенку к свободным выводам в обратную сторону. Итак, мы откажемся от слота SD карты в пользу свободных выводов. Распаиваем в обратную сторону следующие выводы: D0, D1, D10, D11, D12, D13, A5. Также с обратной стороны нам понадобятся выводы +5 вольт, GND, RES. Для питания будем использовать Ni-Mn аккумуляторы, и будет необходимо их заряжать, для этих целей припаиваем провода к разъему питания Arduino, таким образом мы сможет и заряжать аккумуляторы и питать Arduino во время зарядки. В конечном итоге получаем следующее:



Можно перейти к корпусу.

Шаг 3 Изготовление корпуса.
Начнем с изготовления корпуса для наших часов. За основу возьмем фанеру толщиной 10 мм. Форма может быть разной и, если вам не понравилась выбранная мною форма, вы можете изготовить шаблон и вырезать своей формой. Но если вы решили сделать такой же, как и у меня, тогда распечатываем следующую картинку на любом принтере в масштабе 100%:

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

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

Кладем заготовку из фанеры на ровную поверхность, внутрь кладем экран. Ровная поверхность нужна чтобы экран и передняя часть заготовки находилась в одной плоскости. Обратите внимание чтобы вырезы под USB и разъем питания Arduino совпадали с их фактическим расположением. Используя термоклеевой пистолет приклеиваем экран к фанере, заодно можно приклеить и провода подсветки, чтобы их случайно не выдрать:

С лицевой стороны будет выглядеть так:

Покрываем нашу заготовку акриловой краской. Я выбрал акриловою краску так как она не пахнет и быстро сохнет. Используя колер придаем белой краске нужный нам цвет. Мне нравится фиолетовый. Вы можете покрасить в любой понравившийся вам цвет:

Теперь переходим ко второй заготовке, в ней необходимо вырезать прямоугольник размером 75 мм на 35 мм, для доступа к выводам Arduino. А также надо сделать пять отверстия диаметром 5 мм для светодиодов. И прорезь для выключателя. И отверстия 3 мм под саморезы. Также, как и первую заготовку красим вторую:

Для соединения этих частей из фанеры той же толщины изготовим два прямоугольники размером 20 мм на 40 мм и один квадрат со стороной 20 мм. И просверливаем в них отверстия 3 мм под саморезы:

Шаг 4 Электрика.
Ставим Arduino на место:

Прикручиваем наши соединительные прямоугольники как показано на фото:

Берем аккумуляторы, спаиваем их последовательно по три штуки, выводим провода и скручиваем изолентой. Размещаем их в нижних частях лицевой заготовки, с обратной стороны и приклеиваем на термоклей. Провод от минусового контакта разъема питания Arduino припаиваем к минусу первой тройки аккумуляторов. Плюс от первой тройки припаиваем к минусу второй тройки аккумуляторов. Плюс от второй тройки паяем к одному из контактов выключателю. Провод от плюсового контакта разъема питания Arduino паяем ко второму контакту выключателя. Проше говоря: все аккумуляторы должны быть соединены последователь, минус от них припаян к минусу разъема питания Arduino, а плюс через выключатель к плюсу разъема питания:

Переходим к задней части. В проделанные отверстия вставляем светодиоды и фиксируем их термоклеем. Спаиваем их параллельно по два светодиода и не забываем про резисторы на плясовой провод. Минус от светодиодов подключаем к GND, плюс к D11 Arduino.

В верхнее отверстие вставляем датчик температуры ds18b20. Он обладает высокой точностью измерения, погрешность не более 0,5 °C. Датчик откалиброван при изготовлении, какой-либо дополнительной настройки не требуется. Диапазон измерения температуры -55 … + 125 °C. Есть два режима работы: с внешним источником питания и «паразитного питания». Мы будем использовать внешнее питание, так как при этом он работает стабильнее. Подключение следующее:

Так же фиксируем его термоклеем. В конечном итоге должно получится следующее:

Контакт DQ датчика температуры подключаем к D10 Arduino. Не забудьте припаять подтягивающий резистор между DQ и +5(VDD).
Перед окончательной сборкой еще раз проверьте чтобы все было припаяно и подключено:

Шаг 5 Собираем все вместе.
Аккуратно, чтобы не порвать провода, переворачивает заднюю часть и кладем ее на лицевую часть. В местах крепления соединительных прямоугольников проделываем отверстия и вкручиваем саморезы, соединяя таким образом обе части:

Теперь из тонкого пластика вырезаем полости толщиной 35 мм. На двусторонний скотч клеим эти полости по кругу на боковины наших часов:


Также из тонкого пластика вырезаем внутренние элементы бумажного шаблона и наклеиваем их на лицевую сторону часов:

Для зарядки аккумуляторов и работы часов во время зарядки необходим блок питания напряжением 7.2 – 8 V, с ограничение тока в 600 mA. Если у вас будут другие аккумуляторы, то и блок питания нужно подбирать другой, главное чтобы ток зарядки не превышал 10% от емкости аккумуляторов.

На этом сборка закончена, осталось только отредактировать и записать скетч.

Шаг 6 Подготовка среды и заливка скетча.
Для редактирования и заливки скетча вначале надо установить Arduino IDE с официального сайта:
www.Arduino.cc.

Затем установить следующие библиотеки. Для работы с экраном библиотека UTFT:

utft.rar [2.39 Mb] (скачиваний: 409)

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

Для установки этих библиотек распакуйте архивы и поместите распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить .Zip библиотеку». Не забудьте после всего этого перезагрузить Arduino IDE. Скетч для часов:

Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства — 64-разрядный код. Чтобы каждый раз не искать этот адрес, подключаем датчик к Arduino, заливаем в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты — Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес вашего датчика. Открываем скетч Ard_LCD_TFT_Term, ищем строку:

byte addr[8]={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика

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

Доставка новых самоделок на почту

Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!

*Заполняя форму вы соглашаетесь на обработку персональных данных

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

usamodelkina.ru

Какие бывают Arduino LCD дисплеи — Arduino Mania

При разработке проектов Arduino, часто приходится использовать дисплеи для вывода информации. Дисплеи эти бывают разные и иногда начинающий разработчик ставит перед собой вопрос, — какой использовать? Давайте разберемся в этих непонятных аббревиатурах: LCD, TFT, OLED

Все имеющиеся в продаже Arduino LCD дисплеи можно поделить на две основные группы:

  • Сегментные – экраны простого типа, ныне используются в основном для отображения небольшого количества информации, вроде температуры.
  • LCD или ЖК-дисплеи (жидкокристаллические) – на экраны такого рода уже можно вывести информации побольше. Например, температуру с информационным словом (Temp — 16С).

Сегментный дисплей – это тема отдельной статьи, здесь будем говорить только о ЖК дисплеях.

 

Разновидности Arduino LCD дисплеев

 

В интернет – магазинах часто встречаются экраны трех видов:

    • LCD — это обычный монохромный дисплей, который позволяет выводить символы определенного количества и размера. Отличным примером может служить lcd дисплей arduino 1602. Экран может отображать две строки по 16 символов каждая. Обычно этого хватает с лихвой для отображения информации в проектах Arduino для начинающих. Есть варианты с кнопками – lcd keypad shield.
    • TFT — это графический дисплей, который позволяет отображать не только символы, но и изображения. Качество изображения зависит от разрешения экрана. TFT экраны стоят на порядок дороже, особенно сенсорные. Но и результат гораздо выше.Дисплеи Arduino LCD TFT отлично подходят для проектов с построением графиков. Есть варианты с шилдов с возможностью подключения SD – карты. Сенсорные варианты хороши возможностью реализации кнопок на одном шилде с экраном, что в свою очередь позволяет экономить на цифровых выходах.
    • OLED — это тот же TFT экран только вместо жидких кристалов используются светодиоды, что дает большой угол обзора, сочную картинку и меньшее потребление энергии. Однако, их цена на сегодняшний день очень велика, чтобы использовать в проектах Arduino для начинающих.

Видео проектов с применением LCD дисплеев Ардуино

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

Отличное видео демонстрации работы дисплея arduino tft. Паренек рассказывает, как подключить его, показывает примеры вывода графической и текстовой информации на экран. Еще упоминает о выводе текста в Arduino tft на русском языке. Интересное видео, рекомендую.

Пример работы с OLED LCD Display Module I2C 0.96 в среде Arduino. Подробная видео инструкция по применению, от подключения, до установки библиотеки.

К выбору экрана нужно подходить из требований проекта. Например, если в планах выводить временной график температуры, то лучше использовать TFT дисплей, если нужно отображать пару значений, достаточно обойтись arduino lcd 1602 или даже сегментным. OLED дисплеи Ардуино можно применить, когда остро встает проблема потребления электроэнергии.

Метки: Метки LCD LCD 1602 oled tft дисплей

arduinomania.ru

Подключение TFT LCD к Arduino

Подключение TFT LCD к Arduino [Sep. 25th, 2013|01:32 pm]

Cообщество любителей Arduino


Коллеги, кто как справляется с подключением 2.2 TFT LCD дисплея? Вот описание, фото и программа.

Народ пишет, что дисплею нужны уровни 3.3 В. Я запитываю его от ардуиновского 3.3 В, сигнальные провода подключаю напрямую.

http://forum.arduino.cc/index.php?topic=181679.0 — тут пишут, что нужен преобразователь уровней 5 -> 3.3.

Где правда и что делать?

Comments:

у ардуины стабилизатор 3.3В очень слабый, скорее всего потому и пишут, что не тянет он в долгосрочной перспективе такой дисплей

o, кто умеет читать, тот выигрывает по жизни
я вопрос понял неправильно 🙂

если дисплей не 5V-tolerant, то нужны преобразователи или как минимум резисторные делители, иначе есть опасность пожечь защитные диоды входов

Подключаю от 5 вольт через делитель на резисторах. Сигнальные линии тоже через делители.

Лапшу из резисторов не хочется городить.

Ищите тогда LCD который работает с уровнями 5в. Лапша кстати в smd варианте получается весьма компактная.

UPD: выглядит примерно вот так:

Edited at 2013-09-25 10:10 am (UTC)

а кто-нибудь пробовал 5 в напрямую подключать к 3.3 оборудованию?

при 5v-tolerant inputs без проблем

3,3 В на ардуине вроде идет с FT232? Там токи копеечные, можно его и выжечь невзначай. При этом сама плата у Вас питается от USB 5В и соответственно сигнальные выводы идут тоже 5В. Надо нормальный 3,3 В преобразователь поставить (LM1117) и да, резисторные делители, либо стабилитроны маленькие ставить. Надежнее всего микруха-преобразователь уровней.

ru-arduino.livejournal.com

2.4 TFT Touch screen — Arduino

Дисплей 2.4 TFT 240х320 сенсорный + MicroSD


 Модуль является бескорпусным цветным ЖКИ монитором QVGA с сенсорным экраном, имеющим диагональ 2,4 дюйма. Он предназначен для работы совместно с микроконтроллерами разных типов и процессорными системами. Несмотря на возможность отображения полноцветных фотографий, основное применение – отображение простой графики и символьных данных с использованием 16 цветов. На экран можно выводить анимацию:
 

 
Графических возможностей монитора достаточно для создания изображения клавиатуры работающей благодаря сенсорным поверхностям. Одновременно с обработкой нажатий дисплей 2.4 TFT 240х320 сенсорный + MicroSD отображает результаты выполнения команд оператора и индицирует значения контролируемых параметров. Применение значительно упрощает устройства ввода-вывода прибора. ЖКИ индикатор имеет постоянно включенную подсветку. Есть одна кнопка. На плате расположен контейнер для SD карты.
 
Характеристики 2.4 TFT 240х320
 
Питание
            Напряжение 5 В
            Ток 300 мА
Напряжение входных сигналов 5 или 3,3 В
Диагональ 2,4 дюйма
Разрешающая способность 320 X 240 точек с индивидуальным контролем
Максимальное количество оттенков 262144
Подсветка белая
Интерфейс 8080
Максимальный объем microSD карты 32 Гб
Размеры 71 x 52 x 7 мм
 
Контакты
 

ЖКИ индикатор использует 8 контактов модуля для передачи данных и 4 контакта для сигналов управления. Сенсорная часть дисплея использует 4 контакта совместно с ЖКИ. Работа с Micro SD картой требует 4 контакта.
 
Контакт
3.3V                                       Питание
5V                                          Питание
GND                                      Питание
J4-1                                        Кнопка
 
            ЖКИ индикатор и сенсорная поверхность
 
LCD_RD                                управление ЖКИ, чтение
LCD_WR TOUCH_YP          управление ЖКИ, запись или данные сенсорной поверхности
LCD_RS TOUCH_XM          управление ЖКИ, команда/данные или данные сенсорной поверхности
LCD_CS                                управление ЖКИ, выбор устройства
LCD_RST                              сброс
LCD_D2                                 данные ЖКИ
LCD_D3                                 данные ЖКИ
LCD_D4                                 данные ЖКИ
LCD_D5                                 данные ЖКИ
LCD_D6 / TOUCH XP          данные ЖКИ / данные сенсорной поверхности
LCD_D7 / TOUCH YM         данные ЖКИ / данные сенсорной поверхности
LCD_D0                                 данные ЖКИ
LCD_D1                                 данные ЖКИ
 
            Micro SD
 
SD_CS                                    выбор
SD_DI SD                              вход данных
SD_DO                                  выход данных
SD_SCK                                тактирование данных
 

Дисплей 2.4 TFT 240х320 сенсорный + MicroSD может устанавливаться в соединители Arduino.
 
Подключение к Arduino UNO:
 

 
При установке в контакты Arduino UNO перед включением следует проверить отсутствие касания контактами платы разъема USB и при необходимости на плату приклеить изолятор.
 

 
Схема
 

Дисплей 2.4 TFT 240х320 сенсорный + MicroSD.
 
Питание 5 вольт поступает на цепи схемы и микросхему U1 стабилизатор напряжения 3,3 вольта. Информационные сигналы проходят через микросхемы 74xx541 – буферы шин данных. IC1 микросхема ADS7843  – контроллер сенсорных экранов. Это 12 битный АЦП с устройством выборки-хранения, синхронным последовательным интерфейсом и низкоомными ключами управления сенсорными контактами.
Основной компонент модуля – TFT1 совмещенный со специализированным контроллером жидкокристаллический экран. Ссылки на описание ЖКИ и различных типов контроллеров в конце страницы.
 
Кнопка
 
На краю платы модуля расположена кнопка. Кроме сенсорной клавиатуры дисплей 2.4 TFT 240х320 сенсорный + MicroSD имеет механическую кнопку. Ее контакты соединяют с общим проводом контакт 1 соединителя J4. Это расположенный с краю соединителя J4 возле контакта 3V3 неподписанный контакт. Кнопка может использоваться для нужд компонуемого прибора. При работе совместно с Arduino контакт 1 соединителя J4 подключается к линии сброс. Нажатие кнопки вызывает сброс Arduino.
 
Начало работы
 
Большая часть обеспечения работы модуля принадлежит программе микроконтроллера. Для этого удобно использовать опубликованные в интернете существующие программные решения. За основу берут написанные для Arduino программы и модифицируют их под аппаратные средства разрабатываемого прибора.
Когда мы пытаемся обуздать дисплей 2.4 TFT 240х320 сенсорный + MicroSD можно получить неожиданные результаты: белый экран, весь экран с шумом, сенсорные функции не работают или инвертируется позиция по координате Y, инвертируются цвета. Дело в том, что в дисплей различные производители устанавливают различные типы основного контроллера ЖКИ: ST7781, Spfd5408, IL9341, Sitronix ST7783262K, S6D0154 и другие. Их описания в конце страницы. Прежде всего нужно определить какой тип контроллера дисплея применен в вашем модуле. Микросхема и ЖКИ экран это одно устройство. Установить тип можно только программным путем. Для этого используют микроконтроллерный модуль Arduino UNO и программу LCD_ID_Reader Version 1.2, которая читает идентификатор микросхемы. LCD_ID_Reader не требует установки дополнительных библиотек. Также есть программа определения типа контроллера в библиотеке самурай, речь о ней пойдет далее.
 
Программное обеспечение Arduino
 
Для различных контроллеров ЖКИ разработаны различные библиотеки.
 
Для контроллера SPFD5408 используется библиотека JoaoLopesF. По сути это доработанная для SPFD5408 библиотека от Adafruit. В ней есть возможность калибровки сенсорного экрана.
 
Для контроллеров
S6D0154 диагональ 2,8 дюйма
ILI9488 диагональ 3,95 дюйма 320 x 480 точек
ILI9327 диагональ 3,6 дюйма
ILI9341
NT35702, совместим с ILI9327
Библиотека самурай
По умолчанию эта библиотека предназначена для экранов с диагональю 2,8 дюйма. На меньших пропадает часть изображения. Для диагонали 2,4 дюйма в файле TFTLCD-Library/Adafruit_TFTLCD.cpp надо нейтрализовать строки:
 
//#define TFTWIDTH 320
//#define TFTHEIGHT 480
 
и убрать символы комментария в строках:
 
#define TFTWIDTH 240
 #define TFTHEIGHT 320
 
Программа определения типа контроллера ЖКИ – graphicstest. В монитор последовательного порта будет выведен тип контроллера ЖКИ.
Для работы сенсорного экрана измените #define YP A1 #define XM A2 #define YM 7 #define XP 6
 
Для контроллеров
ILI9325
ILI9328
И для контроллера с кодом идентификации 0xC505
Библиотека adafruit/TFTLCD-Library
 
Для ILI9325D библиотека UTFT
 
Для контроллера ST7781 установить:
Smoke-And-Wires/TFT-Shield-Example-Code
adafruit/Adafruit-GFX-Library
adafruit/Touch-Screen-Library
 
Установка библиотеки, тестирование, описание библиотеки, шрифты, определение координат нажатия, работа с микроSD картой, конвертирование из формата 24-bit в 16-bit здесь
 
Сенсорная поверхность
 

 
Дисплей 2.4 TFT 240х320 сенсорный + MicroSD передает программе три величины: координаты нажатия (X и Y) и давление Z. Используется резистивная технология сенсорного экрана.
 

 
Поверхность состоит из двух полимерных слоев, покрытых резистивным материалом, выступающим в качестве электродов. Слои склеиваются по краям. Под управлением программы данные поступают из микросхемы IC1 для обнаружения нажатия. Микроконтроллер прибора получает 10-битное число (0..1023) для каждой оси. Программно эта величина масштабируется в соответствии с размерами экрана.
 

Пять проводов сенсорной поверхности (четыре сигнальных и один общий) подключены через тонкий шлейф к контроллеру ЖКИ.
 
Для контроллера SPFD5408 используется библиотека 4-wire resistive touchscreens . Скопируйте разархивированные и переименованные папки:
 

 
Для контроллера ЖКИ ST7781 применяется библиотека контроля нажатия. Также установите. Скачайте и разархивируйте демонстрационный код . Скопируйте папку SWIFT-Shield из извлеченного архива в папку библиотек Arduino.
 
Графический тест
 
Для модуля с контроллером IL9341.
 

Подключите дисплей 2.4 TFT 240х320 сенсорный + MicroSD к Arduino UNO. Загрузите библиотеки adafruit/TFTLCD-Library и Adafruit-GFX-Library.
 

 
Попробуйте пример graphictest в библиотеке adafruit/TFTLCD. На экране должно быть изображение как показано выше. Если дисплей 2.4 TFT 240х320 сенсорный + MicroSD ничего не отображает или показывает только статическую картинку, то можно попробовать изменить программу graphictest. Модификация программы заключается в жесткой установке типа контроллера дисплея. Строку 60 замените на:
 
uint16_t identifier = 0x9341; //Need hardcode here (IC)
 
Для контроллера ЖКИ SPFD5408.
 

 
Создайте два графических файла формата BMP со следующими параметрами: 320 точек ширина картинки, цвет 24 бит и объем не превышающий 250 Кбайт. Имя файла должно состоять из восьми латинских букв. Скопируйте файл в корневой каталог карты microSD. Если эксперимент пройдет удачно, то на карту можно записать много картинок. Тест будет выводить их на экран поочередно.
 
Скачать следующие библиотеки :
TFT-Shield-Example-Code
Распакуйте и скопируйте в папку SWTFT-Shield в библиотеки Arduino.
 
Adafruit GFX graphics
Переименуйте распакованные папки в Adafruit_GFX. Они должны содержать .cpp и .h файлы.
Если имя папки отличается, то Arduino не распознает ключевые слова из библиотеки.
 
Arduino library resistive touchscreens
Переименуйте раскрытую папку в TouchScreen.
 

 
Библиотеки, примеры и картинки можно скачать отсюда
 
Подключите USB-кабель к ПК и откройте Arduino IDE. Далее откройте Under File—>Examples –> SWTFT-Shield.
 

 
Результаты работы программных примеров.
 

Graphicstest
 

Graphicstest

 
Rotationtest.
Откройте последовательный монитор Arduino IDE и выберите скорость 9600 и New Line в нижней части окна. При нажатии на кнопку Send будут появляться различные изображения.
 

 

 
 
Ttfbmp.
Файлы BMP записанные на micro SD карту будут выводится на экран.
 

 
Ttfpaint.
Можете выбрать любой цвет чтобы рисовать или писать на сенсорном экране.


 
Проект: Осцилограф на основе Arduino UNO R3 и дисплея 2.4 TFT 240х320

Работа совместно с Arduino Mega
            01
            02
            видео
 
Описание ЖКИ индикатора монитора на основе контроллера SPFD5408A
 
Описания контроллеров ЖКИ
            SPFD5408A
            ILI9320
            ILI9325
            ILI9328
            ILI9341
            S6D1121

Библиотека Arduino для подключения TFT дисплеев на чипе ILI9341

Библиотека UTFT для цветных TFT дисплеев для Arduino

Библиотека Arduino для подключения TFTLCD

Touch Screen Library

TFT LCD Library

GFX Library

Latest SD Card Library
 

it4it.club

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *