Мы расскажем как любой школьник может сделать принтер для печати на термоленте в среде Ардуино? И хватит нам для этого самой дешевой из плат Ардуин - Ардуино Uno.
Как оказалось в этом нет ничего сложного:
Выбираем принтер Fujitsu FTP-628MCL101#57
Почему именно принтер FTP-628MCL101#57 - потому , что он недорогой , надежный и очень распространенный.
Подключение принтера:
Для подключения принтера понадобится примерно такая плата:
Распиновка контактов:
Собираем примерно такой макет на Ардуино UNO:
Для того, чтобы напечатать точки на термо бумаге достаточно соединить всего несколько линий:
#define TH_LATCH 2
#define TH_STROBE_1 3
#define TH_STROBE_2 4
#define TH_STROBE_3 5
#define TH_STROBE_4 6
#define TH_STROBE_5 7
#define TH_STROBE_6 8
#define TH_Clock 11
#define TH_DATA_Input 10
#define btn 13 // так для прогона ленты на всякий случай
Далее желательно не забыть обеспечить начальные уровни сигналов:
LAT подтягиваем резистором примерно 10КОм к +5В
STB1..6 = 0 (желательно подтянуть резисторами к земле)
Для лучшего понимания можно посмотреть на внутреннюю организацию термо-головки:
И конечно надо взглянуть на диаграммы сигналов , которые надо подавать с ардуины на принтер:
Частота CLK условная (не фиксированная) - на самом деле все работает по фронтам вверх или вниз.
Алгоритм управления термо-головкой такой:
Не забываем запитать принтер от напряжения 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
Исходники проекта находятся здесь : https://kkmspb.ru/development/arduino/Fujitsu-FTP-628MCL101.php
Управление двигателем принтера для протяжки термо бумаги
Используем примерно такую плату драйвера двигателя DRV8833 :
Заодно кстати разносим код по разным файлам для удобства.
Определяем выводы для управления двигателем:
Поскольку цифровых выводов нам уже не хватает на ардуине, напрашивается управление обмотками двигателя подключить к аналоговым выходам (с ШИМ). Заодно можно и менять крутящий момент обмоток двигателя.
#define motorA 14 // IN1 DRV8833
#define motorNA 15 // IN2 DRV8833
#define motorB 16 // IN3 DRV8833
#define motorNB 17 // IN4 DRV8833
Двигатель закрутился на радость очень ровно и быстро. Код смотрите в скетче внизу по ссылке (закладка motor4).
И наконец реализуем посылку строки на COM порт Ардуины и ее печать на принтере
Через Serial.readString() читаем строку из COM порта. Далее с помощью таблицы шрифтов (см. закладку в проекте font_8_5) преобразуем символы в точки.
И вуаля первый опыт удался :
Проект полностью открытый, разрешенный к доработке и доступный с исходниками для скачивания.
Полный код скетча можно скачать на странице https://kkmspb.ru/development/arduino/Fujitsu-FTP-628MCL101.php
Ждем ваших комментариев , предложений и пожеланий!
Готовы помочь энтузиастам , есть лишние платы переходники FPC-30P 1.0мм, DRV8833 и др.