У нас, айтишников, часто возникает задача напечатать что-то простое и одноразовое – например, логин и пароль новому сотруднику, тикет для монтажника или что-то в этом роде. Тратить бумагу и картридж на подобное очень дорого. При этом есть принтеры с ультрадешёвой скоростной печатью, про которые редко кто вспоминает, хотя видим мы их все каждый день по много раз. Речь про чековые термопринтеры.
Начну, пожалуй, с демки, чтобы вы могли оценить скорость печати – 20 см. в секунду:
(На видео принтер замедляется пару раз в секунду из-за того, что мой скрипт не успевает достаточно быстро засылать команды. Спасибо Тому Скотту за вдохновение 🙂 )
Этот принтер я добыл на Авито за полторы тысячи рублей. Модель Citizen CT-S2000, умеет печатать на лентах разной стандартной ширины – от 58 мм до 80 мм. Принтер имел на корпусе следы долгой работы на, кажется, ресторанной кухне, которые удалось оттереть мылом и спиртом. Впрочем, этот принтер фиг убьешь: если термоголовка и отрезной нож исправны, он вам ещё послужит, ломаться там больше особо нечему (а он еще и водостойкий!).
Рулон ленты шириной 80 мм и длиной до ста метров обойдётся вам меньше чем в сто рублей. Ленты 58 мм стоят ещё меньше. Также, т.к. этот принтер печатает нагревая бумагу в определенных местах, ему не нужны картриджи.
Термопринтеры обычно работают по COM-интерфейсу (нативному или эмуляцией через USB), дорогие варианты имеют на борту Ethernet, WiFi или даже Bluetooth, но они слишком дорогие.
На сайте Citizen был богатый набор вариантов подключения – от нативного драйвера под Windows, PPD для CUPS, и до библиотек для Java. Нам с вами это всё не понадобится, потому что для максимальной простоты и скорости мы не будем рендерить задания на печать на сервере, а лишь будем слать команды принтеру на стандартном языке команд «ESC/POS».
Но сначала нам нужно один раз провести настройку принтера. Citizen предлагает настроить принтер через меню, которое он вам печатает (!) – экрана-то у него нет, или воспользоваться утилитой под Windows.
У моего принтера имеются интерфейсы USB и COM на 25 pin, под который не удалось быстро найти переходник с 9 pin – поэтому пользуемся USB. Драйвер под Windows установил виртуальный COM-порт, который мы выбираем в утилите настройки.
Внимательно просмотрите все параметры – нужно проверить тип бумаги (наклейки или обычная) и указать ширину заправленной в принтер ленты. Остальные настройки, типа яркости печати, тона встроенной пищалки и прочего – на ваш вкус.
Чтобы не забивать себе голову синтаксисом языка ESC/POS, воспользуемся Python-библиотекой python-escpos . В моём случае принтером управляет одноплатный компьютер Orange PI PC с Debian, но настройки в любой ОС будут идентичны.
Командой lsusb узнаём ID принтера, в моём случае это был 2730:0fff:
Также нам нужно выяснить USB endpoints, для этого подставляем ID в команду:
Запоминаем полученные значения и создаём тестовый скрипт на Python:
Если ваш принтер есть в списке явно поддерживаемых библиотекой, например, Epson TM-T88III, то можно применить его профиль, где авторы явно прописали, что из возможностей поддерживается, а что — нет. Почитать документацию по подключению принтеров можно тут.
Пользование библиотекой – тривиально, она полностью избавляет вас от изучения ESC/POS:
Про последнюю команду – чуть поподробнее. На всех чековых принтерах выведен разъём, который отвечает за то, что сразу после выбивания чека у кассира сам открывается ящик, куда он складывает полученные от вас деньги. Стандартное напряжение – 24 вольта, ток – до одного ампера.
Не пытайтесь от него запитать Raspberry Pi или что-то подобное – в момент печати принтер обесточивает разъём. Так что для того, чтобы запитать, например, стрелку из светодиодов «возьми чек тут!» — сойдёт, но не более.
Напоследок – пример применения. В прошедшие выходные моя школа праздновала свой очередной день рождения (аж 143-й), и по традиции старшеклассники устраивали разные конкурсы и развлечения для младших классов и выпускников. Я отвечал за «Бинго» — мой принтер по нажатию кнопки печатал билеты для игроков, а на доску выводились цифры. QR-код на билете позволял проверить, правильно ли игрок вычеркнул цифры в процессе игры:
Для вандалоустойчивости Orange Pi был упрятан в фанерный подиум, накрепко прикрученный к принтеру, а команда на печать билетов была выведена на кнопки, подключённые к GPIO. Для подстраховки был добавлен I2C-экран, на который выводился IP-адрес Orange Pi, чтобы в случае чего знать, как зайти на него по SSH.
Источник
Текстильный принтер своими руками с минимумом затрат
В общем валялся в чулане в офисе Epson 1290. Сколько я тут работаю — столько он и валялся. Вроде как головы у него позасыхали и оживлять его смысла не было. В общем забираю я его себе домой с мыслью, что если что — то голову и новую куплю. Притянул, запустил, прочистил головки и чудо — печатает! Отлично! Отвертку в руки и давай его разбирать — снял все валы, снял все прижимы, снял приводной вал с мотором и датчиком вращения. Дальше — лучше. Болгарку в руки и вырезаем центральную часть металлической рамы — там у нас будет ходить изделие, на котором будем печатать. А дальше начинается самое сложное — собрать всё из того, что есть дома: совершенно случайно дома оказались: -кухонные роликовые направляющие (варварски сняты с кухни) -обрезки ПВХ подоконника (валялись на балконе) -полка из старой тумбочки -мелкий кусок плоского алюминия
Кухонные направляющие и полка из тумбочки были превращены в подвижный стол, боковинами послужили обрезки ПВХ подоконника — сверху на них ставится то, что осталось от принтера. В куске алюминия сделал отверстия под моторчик, вал — вырезал под это дело дырку в боковине (которая у нас из подоконника), плотно поместил под подвижный стол. И… профит — всё работает и печатает. Осталось только привести всё это в достойный вид и сделать не на соплях — и вот вам дешевое решения для печати хоть на майках, хоть на коробках… да в общем то можно запихать в него что угодно и печатать на этом.
Сейчас думаю сделать ему более-менее приличный корпус из ДСП, уже заказал СНПЧ и, думаю, получится не хуже аналогов за 5 тысяч зеленых. За что просят такие деньги — совершенно не понимаю.
Источник
Как сделать термопринтер своими руками
8.5 отрицательного полюса источника питания логики 5В + 5% — Определение температуры печатающей головки — термистор (Перевод с Китайского) http://www.youboy.com/s502527612.html
Сама печатающая головка имеет маркировку gp16b337 (в Гугле пусто) Немного прошелся тестером по плате, получилась (примерно) следующая распиновка:
Где: VDD — подключается (через мосфет) напрямую к блоку питания 15-й и 18-й соединены вместе sen723379d RAM FLASH MODULE — «Мозги» терминала. Запаянная коробочка и залитая эпоксидкой.
Примерная схема с некоторыми компонентами: Из распиновки складывается подозрение что принтер подключается по i2c.
Может у вас есть какие-то мысли и идеи как его запустить? Фото выложу чуть позже.
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Не могу сказать на 100% про вашу «ТермоПечатающуюГоловку», но те, с которыми я сталкивался- это «по сути» — сдвиговый регистр, в который по сигналу «строб» просто записываются «нолики» или «единички», по окончании записи этой «строки пикселей» на ТПГ поступает сигнал «нагрев» соответствующих резисторов, потом ШД перемещает бумагу на «одну строку», а в ТПГ «закачивается» следующая строка «пикселей».. Вот тут:
кто- то «баловался» с ТПГ от АМС-100..
Я так думаю, что ТПГ, «в основном» мало отличаются друг от друга — можно посмотрет, как реализуются подобные проекты на основе других ТПГ..
Последний раз редактировалось АлександрЛ Ср сен 04, 2019 22:40:27, всего редактировалось 2 раз(а).
Реклама
JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!
Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc
Вебинар поможет в выборе недорогих источников питания оптимальных для систем охраны, промышленных и телекоммуникационных приложений, а также для широкого применения. Будут представлены основные группы источников питания по конструктивным признакам и по областям применения в контексте их стоимости или их особенностей, позволяющих снизить затраты на электропитание конечного устройства.
forfrends
Вымогатель припоя
Карма: 1 Рейтинг сообщений: 10 Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 525 Откуда: Николаев / Украина Рейтинг сообщения: 0
Один из пинов определен: 16 — термистор (второй контакт идет на GND), только он прозванивается только в одну сторону. Это точно термистор. Проверял на нагрев. остаются пины: 11 — ? 15+18 — ? 22 — ? 23 — ?
Осталось определить что из них: DI — данные для регистра (1 — точка, 0 — нет ) CLK — строб для них. LAT — защёлка для регистра STB — длительность импульса нагрева для нагревателей. (От неё зависит яркость отпечатка).
Можно как-то определить? Или только экспериментальным путем?
Добавлено after 18 minutes 12 seconds: В саму Термо Печатающую Головку Шлейф заходит немного с другой распиновкой: 1 — VDD 2 — VDD 3 — . Пин 23 4 — . Пин 22 5 — GND 6 — GND 7 — Тр.Шм. Пин 18 8 — Тр.Шм. Пин 18 9 — Тр.Шм. Пин 18 10 — +3.3 11 — +3.3 12 — Термистор 13 — Тр.Шм. Пин 15 14 — Тр.Шм. Пин 15 15 — Тр.Шм. Пин 15 16 — GND 17 — GND 18 — . Пин 11 19 — NC 20 — VDD 21 — VDD
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Реклама
Реклама
Приглашаем всех желающих 13 октября 2021 г. посетить вебинар, посвященный искусственному интеллекту, машинному обучению и решениям для их реализации от Microchip. Современные среды для глубинного обучения нейронных сетей позволяют без детального изучения предмета развернуть искусственную нейронную сеть (ANN) не только на производительных микропроцессорах и ПЛИС, но и на 32-битных микроконтроллерах. А благодаря широкому портфолио Microchip, включающему в себя диапазон компонентов от микроконтроллеров и датчиков до ПЛИС, средств скоростной передачи и хранения информации, возможно решить весь спектр задач, возникающий при обучении, верификации и развёртывании модели ANN.
Карма: 1 Рейтинг сообщений: 10 Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 525 Откуда: Николаев / Украина Рейтинг сообщения: 0
Пример кода для Ардуино брал здесь: https://yadi.sk/d/xV_qJhSukBSlFg Но никак не могу заставить правильно печатать. В примере есть тестовая картинка. У меня она «троится». А именно не зеркальные копии, а три слоя печатаются на одной линии, из-за этого изображение получается сжатое по высоте:
Попробовал модифицировать скетч, но стало только хуже, прикрепляю скетч
Вложения:
termoprint.rar [9.61 KiB] Скачиваний: 315
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
_________________ Мудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет. и МЧС опаздает и таки теперь Дураки и Толерасты умирают по пятницам!
Карма: 1 Рейтинг сообщений: 10 Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 525 Откуда: Николаев / Украина Рейтинг сообщения: 0
Но все равно мне очень сложно разобраться в том как происходит сам процесс вывода данных (прожига). К тому же код нужно оптимизировать. Скорость печати просто ужасная! Я пробовал оптимизировать Вывод данных, но не вышло. Стоит немного что-то изменить в функции, как все перестает вообще печатать. То есть выходит чистая бумага. Из минусов кода — удержание в памяти буфера печати. Который занимает абсолютно всю ОЗУ Atmega328, что тоже не фонтан. В качестве контроллера возьму плату stm32f103c8t6, это решит проблему с памятью и недостатком пинов, но на скорость печати не повлияет. Остается главный вопрос: как оптимизировать скорость печати??
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
_________________ Мудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет. и МЧС опаздает и таки теперь Дураки и Толерасты умирают по пятницам!
Хоть печать и ускорилась в несколько раз, но все же очень далека от той, какой должна быть. Сейчас картинка «Панды» (тестовой картинки) размерами 384х134 (48х16 мм) печатается за (примерно) 3 секунды. А это в 7 раз медленнее чем должно быть. Вот пример работы аппарата, с которого я взял термопринтер: https://youtu.be/NpgrLEuK3cg?t=57 Вот еще пример: https://youtu.be/pXnbft-Jdpk?t=131 Такая скорость печати возможна ТОЛЬКО если «прожиг» будет происходить вместе с шагом двигателя, то есть без пауз на печать, а одновременно.
Столкнулся еще с одной неприятной вещью. Нагар на печатающей головке. Он образуется сразу же после первой печати, и с каждой последующей печатью становится только хуже. Нагар легко убрать. Но все же он образуется потому что лента во время прожига стоит на месте и прилипает к головке. Кстати, время прожига на это не влияет. «Пригорание» происходит даже на самых блеклых отпечатках. Если делать печать на движущейся ленте, то такого не происходит (проверял). НО! Текущий алгоритм не подходит для печати «на лету». Я пробовал. Происходит расслоение изображения. Каждые 32 точки происходит 1/2 шага мотора (1 прожиг), таких сегментов 12, 12 полу-шагов мотора, соответствует 3-м строкам. На одной линии (строке) это не заметно, но вот следующая строка (линия) отстоит от первой в 3 раза дальше чем должна быть. Изображение пропечатывается хорошо, но «полосатое» и в 3 раза выше чем должно быть. В общем, данный алгоритм не подходит. Если бы можно было прожигать одновременно всю линию, или несколько сегментов то проблем бы не было. Может у кого-то есть идеи как сделать одновременный прожиг? То есть как сделать запись сразу во все регистры, а не в 1 из 12?
P.S. . на заметку: скорость печати на прямую зависит от напряжения питания головки. Если напряжение питания 7-8 вольт то на прожиг одного сегмента нужно примерно 5 мс. Если напряжение 12 вольт то 1 мс вполне достаточно. Как результат — увеличение скорости в 2-3 раза.
Вложения:
termoprint.rar [9.03 KiB] Скачиваний: 326
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Вернуться наверх
forfrends
Вымогатель припоя
Карма: 1 Рейтинг сообщений: 10 Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 525 Откуда: Николаев / Украина Рейтинг сообщения: 0
Спасибо! Заработало! Немного переделал, теперь летает! На печать всего буфера (384х134 точек) уходит в среднем 600 мс. При чем скорость печати зависит от количества точек в линии: меньше точек — меньше время на прожиг — быстрее печать. А если точек в линии нет, то вообще пропускается без задержки на прожиг! Три строчки «среднего» шрифта печатаются «примерно» за 500 мс. Картинка панды печатается дольше, до 1 сек. Из-за того что там много сплошных участков.
где: FireH — максимальное время прожига линий с наибольшим заполнением. Измеряется в мс. У меня установлено значение 12 мс FireL — минимальное время прожига, если точек очень мало (на пример одна. ) Измеряется в мс. У меня установлено 2 мс StrobeEn — количество пикселей в строке 0.17667 — коэффициент: 100/566, как высчитал 566, уже не вспомню. расчеты не сохранил. Но он на прямую зависит от количества точек на головке (384). _Standby() — функция отключает питание шаговика, чтобы не перегрелся.
Функция принимает не линейное значение от 2 до 12 (FireH и FireL)
Конечно, можно было так не заморачиваться, но я хотел добиться одинаковой «яркости» линий с разным заполнением, и при этом не жечь на всю катушку. В общем пытался поймать золотую середину между пережиганием пикселей (когда точки расплываются и сливаются от нагрева) и пропусками от очень слабого нагрева. Остальной код не менял, но в будущем нужно будет переписать большинство функций. Завтра скину фотки и видео работы.
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
forfrends
Вымогатель припоя
Карма: 1 Рейтинг сообщений: 10 Зарегистрирован: Вс дек 30, 2012 00:32:06 Сообщений: 525 Откуда: Николаев / Украина Рейтинг сообщения: 1
Вот результат:
_________________ Сделать своими руками всегда интересней чем просто купить и пользоваться
Страница 1 из 2
[ Сообщений: 34 ]
На страницу 1 , 2 След.
Часовой пояс: UTC + 3 часа
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12