많이

Raspberry Pi Pico 및 STONE TFT LCD 기반 주차 관리 시스템용 열전사 프린트 헤드

간략한 소개

열전사 프린터는 우리 일상 생활에서 매우 일반적이며 레스토랑, 주차장 및 쇼핑에서 열전사 프린터의 예가 있습니다. 이 기사에서는 주차 시스템에 열전사 프린터를 적용하는 데 중점을 둘 것입니다.

Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.

사용할 재료

  • 스톤 STWI101WT-01
  • FTP 열전사 프린터 헤드
  • 라즈베리 파이 피코
    • 동전 주입식 기계
    함수제어 기능은 직렬 화면에 표시되고 메인 인터페이스는 층을 선택하고 메인 인터페이스에 들어간 후 주차 공간을 선택하는 동시에 오른쪽 상단의 텍스트 상자에 주차 공간 번호를 표시한 다음 선택합니다. 체류 시간, 그것은 두 개의 스크롤 텍스트 선택기이며, 총 가격을 얻기 위해 체류 시간을 곱한 고정 단가에 따라 오른쪽 상단의 텍스트 상자에 주문 정보도 표시됩니다. 그러면 주차공간과 숙박시간을 선택해야만 결제버튼으로 이동이 가능하며, 그렇지 않을 경우 무효입니다. 결제 화면 진입 후, 코인 수납기가 사용됩니다. 그러면 화면에 넣을 코인의 개수와 이미 넣은 코인의 개수가 표시됩니다. 코인을 넣으면 결제 성공 메시지가 표시됩니다. 그런 다음 작은 티켓을 인쇄하여 감열지에 장소 번호와 시간을 인쇄하도록 선택할 수 있습니다.디자인 프로세스처음에는 사용하고 싶었지만 라즈베리 파이 피코 작은 프린터를 만들기 위해 그런 다음 부품을 선택하는 과정에서 열전사 프린터가 더 편리하다고 생각하고 프로그램을 결정한 후 하드웨어를 구입하기 시작했습니다. 사실 온라인 구매 과정에서 좋은 드라이버 회로를 가진 열전사 프린터가 많이 있다는 것을 알게 되었고, 대부분이 stm의 칩을 사용하여 만들어지고 자체 지침 세트로 설계되었습니다. 예를 들어, 그의 지시를 사용하여 프린터가 문자를 인쇄하거나 용지를 이동하게 하지만 이 프린터의 실용성은 매우 높지만 배울 가치가 없습니다. 라인의 직렬 포트를 통해 명령을 전송하는 것으로 프린터를 조작할 수 있습니다. 그래서 프린트 헤드를 사서 직접 개발해야겠다고 생각했습니다. 그런 다음 프린트 헤드에 대해 ftp 열전사 프린트 헤드를 선택했습니다.ftp 열전사 프린트 헤드
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 이 프린트 헤드는 국제적으로 사용 가능해야 하며 기본 원칙은 유사합니다. 왼쪽은 스테퍼 모터입니다. 그런 다음 중간 헤드는 6개의 가열 장치입니다. 각 가열 ​​장치에는 64개의 가열 지점이 있습니다. 따라서 총 384개의 가열 포인트가 있습니다. 그 다음 아래에는 걸쇠가 있습니다. 래치 아래에는 시프트 레지스터가 있습니다. 마지막으로 제공할 클럭 신호가 있습니다. 따라서 전체 작동 원리는 프린트 헤드에 클록 신호를 제공한 다음 클록 주기마다 데이터를 보내는 것입니다. 384개의 클록 신호와 384개의 데이터를 보낸 후 시프트 레지스터의 데이터가 래치에 저장됩니다. 그런 다음 래치가 낮은 레벨로 설정됩니다. 그런 다음 384개의 가열 포인트는 각 데이터가 0인지 1인지에 따라 가열할지 여부를 선택합니다. 동시에 스테퍼 모터를 회전시켜 감열지를 구동하여 원하는 문자를 디자인합니다. 열전사 인쇄를 받은 후 머리, 가서 데이터 시트를 요청했는데 30핀 fpc 케이블이었습니다. 따라서 피코에 직접 연결하는 것은 분명히 그리 편리하지 않습니다. 그래서 백플레인 회로를 설계하는 것이 좋겠다고 생각했습니다. STONE 시리즈 화면 는 12v 전원 공급 장치이고 열전사 헤드 인쇄 전압은 기준 값이 7.6v이고 최대 값이 8v이고 약 7.6v의 전압을 제공합니다. 또한 논리 전압이 3.3v이고 Raspberry Pi pico 최대 지원 5v 전원 공급 장치와 3.3v 출력 전압이 있는 경우 전원 공급 장치 설계는 12v 전원 공급 장치, 하나의 dcdc 출력 7.6v와 함께 5개의 dcdc를 사용할 수 있습니다. 열전사 프린트 헤드에 전원을 공급하기 위해 다른 dcdc 출력 3.3v를 pico로 출력한 다음 pico에서 12v를 사용하여 열전사 프린트 헤드 논리 전압에 전원을 공급합니다. 그런 다음 XNUMXv는 직렬 화면으로 직접 연결됩니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 그런데 해당 열전사 프린트 헤드의 스테퍼 모터도 구동되어야 합니다. 통합형 Darlington 튜브 적분기가 있습니다. 그런데 너무 크고, 스트레이트 플러그인이라 그냥 드라이버칩 사세요. 그러면 드라이브 모터의 이러한 측면도 괜찮습니다. 인쇄하려면 글꼴 디자인이 필요합니다. 기본적으로 모든 사람이 글꼴 저장을 위해 spi 플래시를 사용하고 있는데 이는 거대한 프로젝트입니다. ASCII 코드만 100이 넘으니 SPF 플래시를 하나 더 구입해야 합니다. 그러면 전체적인 계획은 거의 이렇습니다.
    STONE Designer (GUI 디자이너 소프트웨어)데스데:https://www.stoneitech.com/support/download/software
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 회로 설계그런 다음 다음과 같이 회로를 설계하기 시작했습니다. 먼저 전원 공급 장치를 찾으십시오. 사실 처음에는 회로가 간단하기 때문에 2492 단자 전압 조정기를 사용했습니다. 만든 후 가열 상황이 디버깅 중에 더 심각하고 만지기에 매우 뜨거워서 사용하도록 변경합니다. DCDC 회로도를 수행하려면 칩 데이터 시트를 직접 따르십시오. 여기에서 mt2를 선택했지만 중요한 매개 변수는 인쇄 헤드 작동 전류를 무시했습니다. 이 칩의 최대 출력 전류는 2.3A이지만 인쇄 헤드 작동 전류는 0.3A, 차이는 XNUMXA이며 사용할 수도 있습니다. 하지만 효율은 그리 높지 않습니다. 구체적인 효과에 대해서는 나중에 이야기하겠습니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 그런 다음 내가 구입한 모터 드라이버 칩은 lv8548입니다. 타이밍에 따라 스테퍼 ​​모터 드라이브 타이밍 다이어그램이 있는 프린트 헤드 데이터 시트를 참조하여 XNUMX방향 pwm 신호를 제공합니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 다음은 플래시 칩으로, by25q32bs, 32Mbit의 용량이 상당히 크며 Pico에 연결되어 Pico에 의해 호출되기를 기다리고 있습니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 그 후, 전체 회로도는 이렇습니다. 왼쪽 상단 모서리는 통신 소켓과 전원 공급 소켓이고, 아래에는 부저(회로에서 실제로 사용되지 않음)가 있고, 오른쪽에는 발광 다이오드가 있고, 오른쪽 하단 모서리는 프린트 헤드를 연결하기 위한 30핀 fpc입니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 완료하고 사용할 수 있는 것은 아래와 같이 라즈베리 파이 피코용 보드에 핀 헤더 리셉터클을 남겨두고 직접 꽂을 수 있습니다.
    라즈베리 파이 피코
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 먼저 피코와 프린트 헤드에 연결되지 않은 전원을 켜고 dcdc의 출력 전압을 측정합니다. 일반적인 경우 하나는 약 7.5v이고 다른 하나는 약 5v입니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 그런 다음 프린트 헤드, 직렬 화면 및 피코를 연결하고 논리 전압이 약 3.3v인지 측정하면 문제가 없으면 프로그램을 작성할 수 있습니다.
    프로그램먼저 스테퍼 모터를 조정하려고 합니다. 이 부분은 조정하기 쉽습니다. 데이터 시트의 타이밍 다이어그램을 살펴보세요. 8개의 클럭 주기, 모든 클럭 주기는 별도로 모터의 8개 핀에 논리 신호를 제공해야 하며, 5개의 주기 후에 모터는 켜고 속도를 조정하지만 중간에 듀티 비율을 조정하기 위해 지연을 추가해야 합니다. 그렇지 않으면 너무 빨리 회전합니다. 제가 설정한 지연 시간은 약 XNUMXms이고 회전시킨 후 레벨을 제공해야 합니다. 그렇지 않으면 모터가 회전하지 않는 것 같습니다. 사실 내부 코일은 여전히 ​​전원이 켜져 있습니다. 오랜 시간이 지나면 타는 냄새를 맡을 수 있습니다. 그런 다음 함수를 작성하고 몸체를 루프에 넣으면 사이클 수가 나타냅니다. 모터 회전 길이가 좀 길어 보이는데, 그냥 다른 곳에 두고 호출을 기다려 보세요.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 이는 몇 가지 변경 후의 기능으로, 속도와 지속 시간이 메인 프로그램에 전송됩니다. 아직 최적화가 많이 필요합니다.그럼 프린트 헤드를 조정하는 지점인데 이 부분이 저한테는 어렵습니다. 클럭 신호가 필요하고, 데이터 시트에는 최대 8M 이라고 적혀 있는데, 대략 8M 정도의 신호가 필요하다고 생각했습니다. 주파수, 어렵습니다. 먼저 io 플립 레벨로 주파수를 측정했는데 차이가 너무 큽니다. 그러다가 pio를 써보고 싶어서 하루종일 연구했는데 결과가 좋지 않고, 개인 능력도 한계가 있어서 rp2040 칩 매뉴얼을 깊이 공부해야 할 것 같습니다. 그런 다음 레벨 384 기간을 뒤집어서 시도해 보세요. 이와 같은 작업 흐름에서는 데이터 입력 1핀, 래치 1핀, 클럭 신호 1핀, 6개의 인쇄 장치 핀을 초기화한 다음 래치 외에 다른 모든 핀을 로우로 풀고 사이클링 후 한 클럭 기간 내에 하나의 데이터를 보냅니다. 384 래치를 0으로 설정하고, 6번 인쇄 단위를 1로 설정한 다음, 어느 지점에 데이터가 있고 어느 지점이 가열될지 확인합니다. 세트를 구현한 후 레벨을 되돌립니다. 그런 다음 프로그램을 작성하고 테스트를 시작한 후 실제로 작동하지 않았습니다. 실제로 너무 많은 인쇄 단위가 제어되었지만 전류가 충분하지 않았기 때문에 더 적은 양을 제공하도록 변경했습니다. 두 개의 인쇄 단위를 높은 수준으로 유지하고 다시 테스트하십시오.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 정말 효과가 있어요! 수평선을 인쇄했습니다. 이는 클럭 주파수에 하한이 없다는 것을 의미합니다. 그러면 스테퍼 모터를 실행하여 수직선을 인쇄할 수 있습니다. pico 이중 스레드를 사용하고 다른 스레드가 모터를 동기식으로 실행하도록 한 다음 프로그램을 작성하고 실행합니다. 수직선이 나옵니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 수평선과 수직선을 사용하여 대각선을 얻은 다음 하나의 인쇄 단위에 64 포인트가 있다는 점에 주의하십시오. 이 점은 32와 같은 길이를 정의한 다음 32 x 384 주기를 순환하며 각 기간은 처음 64 데이터만 1로 설정합니다. 다음 320 데이터를 0으로 설정한 다음 첫 번째 단위에서만 32번씩 점을 인쇄한 다음 증분 주기를 조정하고 스테퍼 모터의 속도와 결합하여 조정하고 마지막으로 64*32 크기를 조정합니다. 대각선으로 먼저 문자 Z를 철자할 수도 있습니다.  
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 그런 다음 프로그램의 개요가 있습니다. 단어를 인쇄하려면 먼저 글꼴을 지정해야 합니다. 먼저 정의 목록과 함께 대문자 A, 32 * 32 크기를 수행합니다. 여기서 pin.value()로 수행할 계획이므로 글꼴을 만든 다음 호출할 이진 값의 32행과 32열을 사용합니다. 시프트를 하기 위해 꺼내서 pin.value()에 전달하므로 이것이 구현 과정입니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 배경이 0이고 전경이 1인 경우 실제 구현 프로세스는 다음과 같습니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 가장 바깥쪽의 큰 주기 32는 32줄의 주기를 나타냅니다. 즉, 32줄을 인쇄한 다음 내부의 처음 32주기는 첫 번째 가열 장치의 절반을 가열하고 나머지 352주기는 0으로 설정하고 그런 다음 1까지 매번 31에서 0을 뺀 다음 왼쪽에서 오른쪽으로 가열해야 하는 지점의 첫 번째 줄을 계산한 다음 래치가 384으로 설정되고 가열 장치가 0로 설정되면 완료될 1 주기마다 계산할 수 있습니다. 다시 32번 반복한 후 출력할 수 있습니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 여전히 굵게, 이런 종류의 도트 매트릭스 단어는 온라인에서 직접 수행할 수 있는 도구가 있습니다. 앞면에 0b를 더한 다음 뒷면에 쉼표를 추가한 다음 자신의 아이디어에 따라 재생합니다. 글꼴은 실제로 처음에 의도된 것입니다. 플래시 칩에 저장했지만 오랜 시간 동안 여전히 열 수 없습니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 문제가 어디에 있는지 모르겠습니다. 시간이 지나면 다시 조정할 것입니다. 좋은 점은 Pico 자체에 16mbit 크기의 플래시가 있고 ASCII 라이브러리를 저장하는 것으로 충분하다는 것입니다.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • 사전으로 정의하고 별도의 조각에 넣은 다음 기본 프로그램에서 다시 호출합니다. Then after debugging, the available version looks like this.from machine import Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motor#import sysdelaytime = 0.0000001 # Printer clock delaymotor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character libraryshuru = input(“Please enter text:”)line_word = []for item in range(len(shuru)):    line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 12:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# print(motor_speed)motor_speed = len(shuru)line = (len(shuru) // 12) + 1if (len(shuru) % 12) == 0:    line -= 1lins = 0supper = 0slower = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))_thread.start_new_thread(motor.run_stop, (motor_speed, 1))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word))line_word.clear()I am separate control printing unit, because the current is not enough so like this, but in order to print clear, making my printing speed becomes particularly slow, the more words the slower, and then the lowercase letters is 24 * 32 dot matrix, that it is less print points to use, but can not give it to leave 32 heating points of space then the character spacing is large, so the capital letters and lowercase letters are separated, the numbers are still 32 * 32.
  • Raspberry Pi pico 및 STONE TFT LCD IOT PlatoBlockchain Data Intelligence를 기반으로 하는 주차 관리 시스템용 열전사 프린트 헤드입니다. 수직 검색. 일체 포함.
  • Finally, the whole program is attached.from machine import UART,Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motorfrom os import uname#import sysuart1 = UART(0, baudrate = 115200, tx =Pin(0), rx = Pin(1))floor1 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’1′]floor2 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’2′]floor3 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’3′]button_cmd = [16,1]selector_cmd = [16,129]print(uname()[0])delaytime = 0.0000001 # Printer clock delaycoin = Pin(22, Pin.IN,Pin.PULL_UP)coin_num = 0motor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character library# shuru = ‘aa’# line_word = []# for item in range(len(shuru)):#     line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 6:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# # print(motor_speed)# # line = (len(shuru) // 12) + 1# if (len(shuru) % 12) == 0:#     line -= 1lins = 0supper = 0slower = 0danjia = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))# _thread.start_new_thread(motor.run_stop, (motor_speed, line))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def pay(pay):    global coin_num    line_word = {‘line_word1’:[‘s’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0′],’line_word2’:[‘0′,’d’,’a’,’y’,’2′,’h’,’o’,’u’,’r’],’line_word3′:[‘t’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′]}    line_wors = {‘line_word1’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word2′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],                 ‘line_word3’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]}#     line_word1 = [‘S’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0’]#     line_word2 = [‘1′,’D’,’a’,’y’,’1′,’H’,’o’,’u’,’r’]#     line_word3 = [‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′]#     line_word4 = [‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]#     line_word1[8]=str(pay[0])#     line_word2[0]=str(pay[1])#     line_word2[4]=str(pay[2])#     line_word4[6]=str(pay[3])    (line_word[‘line_word1’])[8]=str(pay[0])#     (line_word[‘line_word2’])[0]=str(pay[1])#     (line_word[‘line_word2’])[4]=str(pay[2])#     (line_word[‘line_word4’])[6]=str(pay[3])    sleep(1)    uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value4″,”value”:’+str(pay[3])+’}>ET’)#     sleep(2)#     print(line_word.get(‘line_word’+str(1))[0])#     print(‘zfdszfz’,line_word)#     sleep(2)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message5″,”text”:”F1 – ‘+pay[0]+'”}>ET’)#     uart1.sendbreak()#     sleep(1)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message6″,”text”:”‘+str(pay[1])+'”}>ET’)#     uart1.sendbreak()#     sleep(1)# #     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(pay[2])+'”}>ET’)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message8″,”text”:”‘+str(pay[3])+'”}>ET’)    while True:        if coin.value()==0:            coin_num += 1            print(“Number of coins deposited:”,coin_num)            sleep(0.1)            uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value2″,”value”:’+str(coin_num)+’}>ET’)            if coin_num == pay[3]:                uart1.write(‘ST<{“cmd_code”:”set_visible”,”type”:”widget”,”widget”:”image37″,”visible”:true}>ET’)                     if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘print’ and coin_num == pay[3] and rx1[13] == 2:                    data_name2=”                    _thread.start_new_thread(motor.run_stop, (9, 4))                    for iii in range(1,3):                        for linss in range(32):                            supper=slower=0                            for lins in range(9):#                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])#                                 print(temp_list,type(temp_list))                                if (line_word.get(‘line_word’+str(iii))[lins]).islower():                                    word_size24 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    slower += 1                                else:                                    last_word_size32 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    supper +=                         sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1#                     sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1def floor1def():    day_jia = 0    hour_jia = 0    day_flag = False    hour_flag = False    price_flag = False    posltion = False    zongjia = 0    pay1 = [0,0,0,0]    print(“floor1 now”)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)    uart1.sendbreak()    while True:        if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘position’:                    posltion = True                    pay1[0]=rx2[15]                    write1(rx2[15])                elif data_name2 == ‘pay’ and posltion and price_flag:                    uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)                    pay(pay1)#                 if data_name2 == ‘pay’ and posltion = True and (day_flag or hour_flag):#                     posltion = True#                     uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)            if rx1[3:5:1] == selector_cmd:                data_name_len = rx1[6] – 4                data_name = rx2[7:data_name_len+7:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘time_day1’:                    pay1[1]=rx2[19]                    write2(ord(rx2[19]))                    day_jia = ord(rx2[19])                    day_flag = True                elif data_name2 == ‘time_hour1’:                    pay1[2]=rx2[20]                    write3(ord(rx2[20]))                    hour_jia = ord(rx2[20])                    hour_flag = True            if hour_flag or day_flag:                price_flag = True                zongjia = (day_jia*48) + (hour_jia*2)                pay1[3]=zongjia                print(str(zongjia))                uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message4″,”text”:”‘+str(zongjia)+'”}>ET’)                hour_flag = day_flag = Falsedef floor2def():    passdef floor3def():    passdef write1(num):    #print(ss)    for item in range(49,55):        uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+chr(item)+'”,”image”:”nocar_bg”}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+num+'”,”image”:”selectedcar_bg2″}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message1″,”text”:”F1 – ‘+num+'”}>ET’)def write2(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message2″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def write3(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        STB4.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        STB4.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)   def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)while True:    if uart1.any()>1:        rx2 = []        data_name2 = ”        bin_data = uart1.read(40)        uart1.sendbreak()        rx1 = list(bin_data)        for item in rx1:            rx2.append(chr(item))        print(rx2)        if rx2[7:13:1] == floor1:            floor1def()        elif rx2[7:13:1] == floor2:            floor2def()        elif rx2[7:13:1] == floor3:            floor3def()for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word)line_word.clear()
  • 출처: 플라톤 데이터 인텔리전스