风筝
发表于: 2018-11-28 22:50:22 | 显示全部楼层

您刚刚向餐馆付款并收到一张小账单,或者从ATM机取出现金时收到交易收据。这些收据都是使用热敏打印机打印的。


热敏打印机是打印小票据或收据的现成且经济有效的解决方案。这种易于集成的解决方案随处可用。打印机使用热变色纸,这是一种特殊类型的纸张,当它暴露在一定的热量时会变成黑色。热敏打印机使用特殊的加热过程在本文上打印。打印头在特殊电气中加热,以保持一定的温度。当热敏纸通过其头部时,其热涂层变成黑色,头部被加热。


在本篇文章中,我们将热敏打印机与Arduino Uno开发板板连接。工作过程如下: -

1.    将打印机与Arduino Uno连接。

2.    将一个轻触开关与Arduino开发板连接,按下时提供“按下打印”选项。

3.    Arduino板载LED将指示打印状态。只有在打印活动进行时它才会发光。


打印机规格和连接方式

我们使用的是Cashino的CSN A1热敏打印机,它很容易买到而且价格也不算太高。

CSN-A1-Thermal-Printer.jpg

如果我们在其官方网站上看到手册,我们将看到一张表格,其中提供了详细的规格 -

CSN-A1-Thermal-Printer-Specification.png

在打印机的背面,我们将看到以下连接 -

RS232-module-to-communicate-with-Thermal-Printer.jpg


TTL连接器提供Rx/Tx连接以与微控制器单元通信。我们还可以使用RS232协议与打印机通信。电源连接器用于为打印机供电,该按钮用于打印机测试。当打印机通电时,如果我们按下打印机的自检按钮,将打印一张表格,其中将打印规格和样品线。以下是自测表 -

Self-test sheet-using-Thermal-Printer-with-PIC16F877A.jpg


我们可以看到打印机使用9600波特率与微控制器单元通信。打印机可以打印ASCII字符。通讯非常简单,只需使用UART,发送字符串或字符即可打印任何内容。


打印机工作在5-9V,我们将使用9V/2A电源,可以为打印机和Arduino Uno供电。打印机需要超过1.5A的电流来加热打印头。这是热敏打印机的缺点,因为它在打印过程中需要很大的负载电流。


所需组件

本篇文章所需的组件如下所示:

●    面包板

●    连接导线

●    带USB线的Arduino UNO开发板。

●    10k电阻

●    轻触开关

●    热敏打印机CSN A1带纸卷

●    9V/2A额定电源。


电路图和说明

使用Arduino Uno控制打印机的原理图如下:

Circuit-Diagram-for-Thermal-Printer-Interfacing-with-Arduino-Uno.jpg

电路很简单。我们使用电阻在开关输入引脚D2上提供默认状态。按下按钮时,D2将变为高电平,此条件用于触发打印。 9V 2A电源的单电源用于为热敏打印机和Arduino板供电。在将电源极性连接到Arduino UNO板之前,务必检查电源极性。它有一个桶形插孔输入,中心正极性。

我们在面包板中构建了电路并对其进行了测试。

Thermal-Printer-Interfacing-with-Arduino-Uno.jpg


Arduino程序

在本文的末尾处提供了完整的Arduino代码。这里我们对代码的一些重要部分进行解释。


首先,我们声明按钮(引脚2)和板载LED(引脚13)连接的引脚

  1. int led = 13;
  2. int SW = 2;
复制代码

然后,为去抖延迟和开关按下状态配置了一些变量

  1. int is_switch_press = 0; // For detecting the switch press status
  2. int debounce_delay = 300; //Debounce delay
复制代码

setup()函数中,我们将LED引脚配置为输出,开关配置为输入。我们还为UART配置了9600波特率。

  1. void setup() {
  2. /*  
  3. *   This function is used to set the pin configuration
  4. */
  5. pinMode(led, OUTPUT);
  6. pinMode(SW, INPUT);
  7. Serial.begin(9600);
  8. }
复制代码

loop()函数中,我们首先检查开关是否被按下,然后我们等待一会,然后再次检查以确定开关是否真正按下,如果经过延时,开关仍然按下,我们打印自定义的代码行到UART中,这样就输出到热敏打印机中。

在打印开始时,我们将板载LED设置为高电平,打印完成后,我们将其设置为低电平。

  1. void loop() {
  2.   is_switch_press = digitalRead(SW); // Reading the Switch press status

  3.   if (is_switch_press == HIGH){
  4.     delay(debounce_delay); // debounce delay for button press
  5.     if(is_switch_press == HIGH){
  6.     digitalWrite(led, HIGH);
  7.     Serial.println("Hello");
  8.     delay(100);
  9.     Serial.println("This is a Thermal printer interface");
  10.     Serial.println("with Arduino UNO.");
  11.     delay(100);
  12.     Serial.println("Circuitdigest.com");   
  13.     Serial.println ("\n\r");
  14.     Serial.println ("\n\r");
  15.     Serial.println ("\n\r");
  16.     Serial.println ("---------------------------- \n \r");
  17.     Serial.println ("Thank You.");
  18.     Serial.println ("\n\r");
  19.     Serial.println ("\n\r");
  20.     Serial.println ("\n\r");
  21.     digitalWrite(led, LOW);   
  22.     }   
  23.   }

  24.   else{
  25.     digitalWrite(led, LOW);
  26.   }   
  27. }
复制代码

本篇文章使用的完整代码如下所示: main.rar (628 Bytes, 下载次数: 84)

跳转到指定楼层
回复

使用道具 举报

wanniu
发表于: 2019-1-9 13:32:11 | 显示全部楼层

接线图可以再清楚点  RXD TXD接在哪
回复

使用道具 举报

wanniu
发表于: 2019-1-9 14:04:55 | 显示全部楼层

看懂了,谢谢楼主


打印汉字怎么做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 19:33 , Processed in 0.093742 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表