Принтер чеков arduino

Содержание

Термопринтер с интерфейсом TTL

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

Популярной библиотекой для работы с принтером является библиотека adafruit/Adafruit-Thermal-Printer-Library. Там же есть ссылка на страницу с фирменными принтерами компании. Популярным аналогом является модель термопринтера JP-QR701, ищите по этому ключевому слову. Например, один из вариантов на АлиЭкспрессе. В России подобные принтеры продаёт магазин iArduino.

Термопринтер позволяет печатать текст (включая русский), штрих-коды и изображения на термобумаге стандартной ширины 57 мм и диаметром рулона до 36 мм.

Технические характеристики

  • Напряжение питания: 5-9 В постоянного тока
  • Потребляемый ток: до 1,5 А (в режиме печати)
  • Потребляемый ток: до 10 мА (в режиме ожидания)
  • Интерфейс: TTL UART скорость 9600 бит/сек
  • Метод печати: прямая термическая печать
  • Режимы печати: печать текста, штрих-кодов, растровых изображений (с ограничениями)
  • Тип бумаги: термальная
  • Ширина бумаги: 57 мм
  • Диаметр рулона: 36 мм
  • Скорость печати: до 80 мм/с
  • Ширина печати: 48 мм
  • Размер пикселя: 1/8 мм
  • Разрешение печати: 203 DPI (8 точек на мм = 384 точек на линию)
  • Таблицы символов: ASCII, набор GB2312-80. Набор GB2312-80 включает следующие таблицы (жирным выделены таблицы с поддержкой кириллицы): CP437, KATAKANA, CP850, CP860, CP863, CP865, WCP1251, CP866, MIK, CP755, IRAN, CP862, WCP1252, WCP1253, CP852, CP858, IRAN2, LATVIAN, CP864, ISO_8859_1, CP737, WCP1257, THAI, CP720, CP855, CP857, WCP1250, CP775, WCP1254, WCP1255, WCP1256, WCP1258, ISO_8859-5, THAI2, CP856, CP874.
  • Форматы штрих-кодов: UPC_A, UPC_E, EAN13, EAN8, CODE39, CODE93, ITF, CODABAR и CODE128
  • Рабочая температура: +5. +45 °С
  • Температура хранения: -20. +60 °С
  • Габариты: 111x65x59 мм

Подключение

У моей модели пять выводов: GND, RX, TX, DTR, VH.

К принтеру прилагается цветной шлейф. Цвета даны в той же последовательности как и выводы: Чёрный, синий, зелёный, жёлтый, красный.

Термопринтер подключается к шине UART, можно использовать как аппаратную так и программную шины Arduino.

Чёрный провод (GND) — подключается в выводу GND платы Arduino. От другого вывода GND на плате следует подключиться к «-» источника питания.

Синий провод RX (вход данных в принтер от Arduino) подключается к выводу 6. Этот вывод используется в примерах, поэтому я указываю его. Но можете также использовать аппаратный UATR (указанный), либо программный UART (назначаемый).

Зелёный провод TX (выход данных из принтера в Arduino) подключается к выводу 5. Этот вывод используется в примерах, поэтому я указываю его. Но можете также использовать аппаратный UATR (указанный), либо программный UART (назначаемый).

Жёлтый провод DTR UART (готовность) не используется.

Красный провод Vin подключается к «+» источника питания.

Не подключайте вывод Vcc Arduino к красному проводу принтера! Принтер должен использовать свой источник питания.

Светодиод на корпусе термопринтера информирует о его состоянии: не горит — выключен, редко мигает — активен, постоянно горит — спящий режим. Нажатие на кнопку принтера приведёт к прокрутке кассовой ленты приблизительно на 3 стандартные строки. Если удерживать кнопку принтера при подаче питания, он распечатает тестовую страницу, как при вызове функции testPage(). Перед началом работы установите кассовую ленту и закройте крышку принтера. Принтер не будет печатать без кассовой ленты. Открытие крышки отсека чековой ленты осуществляется путём поднятия рычага рядом с крышкой.

Дополнительные принадлежности

Для подключения отдельного питания к принтеру желательно иметь также гнездо питания 2,1 мм с самозажимным клеммником или адаптер Female DC Power adapter — 2.1 мм с клемником.

Источник

Как сделать ESC-POS принтер самому

В качестве подопытного выбран принтер Fujitsu FTP-628MCL101. Просто по тому , что это один из популярных принтеров в контрольно кассовой технике.

Подключается плоским шлейфом , который имеет 30pin и шаг 1мм (переходник заказываем на али) .

Fujitsu FTP-628MCL101 — как бы своего рода стандарт. Используется этот принтер очень массово в чековых принтерах, кассовых аппаратах . И у его клонов в описании можно увидеть совместимо Fujitsu FTP-628MCL101.

Упрощаем задачу до минимума

Упростим для начала задачу : двигать ленту пока не будем, т.к. пропечатаную точку мы увидим и так , если она напечатается.

Распиновка контактов принтера:

Какие линии нам нужно задействовать видно из диаграммы:

На самом деле не очевидно в какой последовательности посылать , особенно LAT и STB. Выяснили экспериментальным путем (см. ниже).

Что мы поняли из картинок и путем экспериментов:

Сначала нужен CLK частотой до 8MHz и не надо беспокоится , чтобы частота была стабильная, все работает по фронтам 0 в 1 и 1 в 0:

Важно : не используйте цифровые выводы 0 и 1 , т.к. их будет использовать Serial для отладки!

Управление двигателем делаем через аналоговые выводы (ШИМ). Также можно будем регулировать крутящий момент обмоток.

Обязательно сначала обеспечиваем начальные значения линий , чтобы ничего не сжечь:

LAT =1 (потягиваем к питанию +5В)
STB1..6 = 0 (лучше подтянуть резисторами к земле, но можно и в скетче при старте притянуть к LOW)
DATA IN — не важно
DATA OUT — не важно
DRVER OUT — это не внешний вывод , а внутри ТПГ непонятно что.

Посылаем данные в ТПГ:

Не забываем запитать принтер от напряжения 7.4В.

1. устанавливаем CLK в 0
2. ждем 1мкс
3. в DATA IN устанавливаем значение первой точки (HIGH — это жжечь)
4. ждем 1мкс
5. поднимаем CLK в 1
6. ждем 1мкс
7. тут можно считать записанное значение из DATA OUT (но это не обязательно)

. повторяем 1..7 64 раза (для первых 64 точек, тут происходит запись значения в SHIFT REGISTER)

8. устанавливаем LAT в 0 , CLK еще в 1
9. ждем 1мкс
10. поднимаем LAT в 1 (тут происходит запись 64 точек в LATCH REGISTER)
11. ждем 1мкс

. повторяем 1..11 6 раз (для 6 частей термоголовки)

12 . устанавливаем нужный STB в 1, остальные естественно в 0
13. ждем 3 миллисекунды (нормальное время для прожига точек)
14. скидываем STB в 0.

. повторяем пп 12..14 для оставшихся 5 STB

Вот и все. Проблем тут не особых не возникло. Линия напечаталась, идем дальше.

Самое главное не сжечь термоголовку

Стоит принтер примерно всего 1000р., но тоже жалко , да и НЕ вандалы мы все-таки.
Сразу скажу мне удалось не сжеть, хотя пару раз был близок к этому.

Собираем все на брэдборде с платой ардуино UNO R3

STB 1..6 на 0
STB 1 подтягиваем к 0
GND все 4шт. на 0 (т.к. они отдельные и между собой внутри тпг не соединяются)
VH все 4шт. на +5В (между собой внутри тпг они не соединяются)
Vdd +5В с ардуино

PHK,VSEN,PHE — это встроенные в ТПГ датчики наличия бумаги выдают информацию о наличии бумаги (нам пока не нужны)
TM — это для контроля перегрева ТПГ (нам пока не надо)
MT — обмотки двигателя (нам пока не надо)

Нам понадобится вот такая платка переходник с шлейфа принтера 30 пин (1мм) на обычные пины ардуины :

Собираем макет на ардуино , выглядит это примерно так:

Переходим к двигателю принтера Fujitsu FTP-628MCL101

Фазами двигателя по даташиту надо управлять так :

Методом прозвонки поняли , что выводы A,NA,B,NB тупо идут на двигатель (питание к движку отдельно ни откуда не подается). Т.е. 7,4В = VH — это только для термоговки, а двигателем надо управлять отдельно.

Кстати такая плата с али НЕ ПОДОЙДЕТ :

Тут ULN2003 просто закорачивает на землю выводы обмоток двигателя. Питание в двигатель подается отдельным пятым проводом.

Подойдет примерно такая плата на драйвере двигателя DRV8833:

Тут в плате для двигателя 2 выхода на одну фазу (всего четыре). На один из выводов обмотки двигателя подается питание , на другой земля. Делается это мосфетами внутри микросхемы. Платку покупали в робошопе (на удивление недорогой магазин):

В результате после довольно не продолжительного времени (3-4 часа) наш двигатель принтера закрутился как надо.

Работает протяжка кстати в двух вариантах на выбор : 4 шага на 360 градусов или 8 шагов на 360 градусов !

Время подачи напряжения на обмотки для одного шага было установлено экспериментально : 1 мс вполне достаточно!

Экспериментально было установлено , что для нормального прожига точек delay(3) нормально, delay(1) — слабо видно.

Далее переходим к реализации печати символов через COM порт

В Ардуино среде изначально предусмотрено отладка и управление по COM порту через объект Serial. Просто воспользуемся им.

Для этого в Ардуина будет ждать прихода символов (завершение символ ENTER) и печать строку на принтере. Для печати будем использовать кодовую таблицу CP866 8*5 точек (просто потому,что первой нашли и скачали в интернете). В скетче можно изменением одного параметра увеличивать ширину в 2 и 4 раза.

В результате можно уже напечатать примерно такое:

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

Изучайте принтеры , изобретайте, делитесь знаниями, пользуйтесь на здоровье результатами!

Если понравилась идея делайте ссылку на страницу , делитесь с другими.

А мы в дальнейшем еще кое-чем сможем удивить.

Скачать проект Адруино UNO проект ПЕЧАТЬ СТРОКИ ИЗ COM порта на принтер Fujitsu 628 можно ниже :

Источник

Взаимодействие Arduino с термопринтером

Вы только что совершили платеж в ресторане и получили небольшой чек или сняли наличные в банкомате и получили квитанцию об операции. Эти чеки печатаются с помощью термопринтера или чекового принтера.

Термопринтер – это доступное и экономически эффективное решение для печати небольших чеков или квитанций. Это простое в интеграции решение доступно везде. В принтере используется термохромная бумага, особый тип бумаги, которая при воздействии определенного количества тепла становится черного цвета. Для печати на этой бумаге термопринтер использует специальный процесс нагрева. Головка принтера нагревается специальным электрооборудованием для поддержания определенной температуры. Когда термобумага проходит через его головку, ее тепловое покрытие чернеет там, где головка нагрета.

В данном руководстве мы будем связывать термопринтер с платой Arduino Uno. Проект будет работать следующим образом:

  1. принтер будет подключен к Arduino Uno;
  2. тактильная кнопка будет подключена к плате Arduino для обеспечения опции «нажмите для печати»;
  3. встроенный светодиод на Arduino сообщит о состоянии печати, он будет светиться только во время печати.

Взаимодействие Arduino с термопринтером

Характеристики и подключение принтера

Мы используем термопринтер CSN A1 от Cashino, который легко доступен, а цена не слишком высока.

Модель термопринтера

Если мы посмотрим его спецификацию на официальном сайте, то увидим таблицу с подробными характеристиками.

Характеристики термопринтера

Печать Метод печати Тепловая линия
Скорость печати 50-80 мм/с
Разрешение 8 точек/мм, 384 точки/строка
Эффективная ширина печати 48 мм
Символы Набор символов ASCII, GB2312-80 (китайский)
Шрифт печати ANK: (8×16, 9×17, 9×24, 12×24), GBK: (16×16, 24×24)
Характеристики бумаги Тип бумаги Термобумага
Ширина бумаги 57,5 ± 0,5 мм
Диаметр рулона бумаги максимум 40 мм
Надежность MCBF 5 миллионов линий
Интерфейс Последовательный (RS-232, TTL), USB
Источник питания Постоянное напряжение 5В–9В/12В
Физические характеристики Размеры (ширина x глубина x высота) 76,8 x 77,4 x 47,7 мм
Размер поверхности под установку 72,8 x 73,26 мм
Цвет Бежевый/черный
Окружающая среда Рабочая температура 5°C – 560°C
Влажность воздуха при работе 10% – 80%
Температура хранения -20°C – 60°C
Влажность воздуха при хранении 10% – 90%

На обратной стороне принтера мы видим следующие разъемы.

Разъемы термопринтера

Разъем TTL обеспечивает соединение Rx/Tx для связи с микроконтроллерным блоком. Мы также можем использовать интерфейс RS232 для связи с принтером. Разъем питания предназначен для подачи питания на принтер, а кнопка используется для тестирования принтера. Когда на принтер подано питание, если мы нажмем кнопку самотестирования, принтер распечатает лист, на котором будут распечатаны характеристики и образцы строк. Лист самотестирования показан ниже.

Лист самотестирования термопринтера

Как мы видим, для связи с микроконтроллерным блоком принтер использует скорость 9600 бит/с. Принтер может печатать символы ASCII. Взаимодействие очень простое, мы можем напечатать что угодно, просто используя UART и передавая через него строку или символ.

Принтер работает от блока питания 5–9В, мы будем использовать источник питания 9В 2А, который может запитать как принтер, так и Arduino Uno. Принтеру требуется ток более 1,5 А для нагрева головки. Это является его недостатком, так как он потребляет огромный ток во время процесса печати.

Что нам понадобится

Чтобы выполнить данный проект, нам понадобится следующее:

Принципиальная схема и пояснения

Схема управления принтером с помощью Arduino Uno показана ниже.

Схема подключения термопринтера к Arduino Uno

Схема проста. Мы используем резистор для обеспечения состояния по умолчанию на входном выводе кнопки D2. Когда кнопка нажата, уровень на D2 станет высоким, а это условие используется для запуска печати. Для питания термопринтера и платы Arduino используется один источник питания 9В 2А. Важно проверить полярность источника питания перед его подключением к плате Arduino Uno. У данного источника используется разъем баррель с положительным выводом в центре.

Мы собрали схему на макетной плате и проверили ее.

Собранный макет Результат тестирования схемы

Программа Arduino

Полный код программы Arduino и демонстрационное видео приведены в конце статьи. Здесь мы объясним несколько важных фрагментов кода.

Во-первых, мы объявляемы выводы кнопки (вывод 2) и светодиода на плате (вывод 13).

Затем устанавливаются несколько переменных для задержки для устранения дребезга контактов и состояния нажатия кнопки.

В функции setup мы настроили вывод светодиода на выход, а вывод кнопки на вход. Также мы настроили UART на скорость 9600 бит/с.

В основном цикле мы сначала проверяем, нажата ли кнопка, затем снова ждем некоторое время и снова проверяем, действительно ли кнопка нажата; если кнопка всё еще нажата даже после задержки, мы печатаем настроенные строки в UART, то есть на термопринтере.

В начале печати мы зажигаем светодиод на плате, а после печати гасим его.

Смотрите полный код Arduino и демонстрационное видео ниже.

Видео

Источник

Adblock
detector