ESP32Mini打印机:打印头缺纸检测模块

0 阅读2分钟

💡 ESP32 Mini打印机:打印头缺纸检测模块

实时监测打印纸状态,避免空打损坏打印头
基于原始代码的实现与原理分析


📌 为什么需要缺纸检测?

打印头在无纸情况下继续工作,可能导致:

  • 打印头损坏:热敏打印头直接接触胶辊,长时间空转磨损
  • 浪费电量:电机空转消耗电池
  • 用户体验差:用户以为在打印,实际无输出

因此,一个可靠的缺纸检测模块是打印机的必备功能。

直观理解
就像复印机没纸时会亮红灯提醒,我们的打印机也需要一双“眼睛”盯着纸有没有。


一、硬件原理简述

传感器类型

常用缺纸检测有两种方式:

  1. 光电传感器:纸张经过时反射/遮挡光线,输出电平变化
  2. 微动开关:纸张顶起机械触点,开关闭合/断开

本例使用光电传感器,有纸时输出低电平(0),无纸时输出高电平(1)。

引脚定义

#define PIN_PAPER 24  // 缺纸检测传感器输入引脚

二、代码实现(原始版本)

以下代码实现了基础的缺纸状态读取和中断触发检测。

1. 状态定义

#include <Arduino.h>

#define PIN_PAPER 24

typedef enum {
    PAPER_STATUS_NORMAL = 0,   // 有纸(低电平)
    PAPER_STATUS_LACK = 1,      // 无纸(高电平)
} paper_status_t;

volatile paper_status_t status = PAPER_STATUS_NORMAL;
  • 使用枚举提高可读性
  • volatile 修饰全局状态,因为中断中会修改

2. 轮询读取函数

void read_paper_statue(){
    if(digitalRead(PIN_PAPER) == PAPER_STATUS_NORMAL){
        Serial.println("有纸");
        status = PAPER_STATUS_NORMAL;
    } else {
        Serial.println("无纸");
        status = PAPER_STATUS_LACK;
    }
}
  • 直接读取引脚电平并更新状态
  • 打印调试信息

3. 中断服务函数

void paper_isr() {
    status = PAPER_STATUS_LACK;
}
  • 当引脚检测到上升沿(无纸)时触发,立即置为缺纸状态

4. 初始化函数

void lack_init() {
    pinMode(PIN_PAPER, INPUT);
    attachInterrupt(PIN_PAPER, paper_isr, RISING);
}
  • 设置引脚为输入模式
  • 附加上升沿中断,当无纸时触发

四、使用总结

关键词/技巧一句话记忆
pinMode(INPUT)设置输入引脚,倾听传感器的声音
attachInterrupt给引脚配个电话,一有变化就打电话
RISING 触发模式只关心无纸(上升沿)这一种变化
volatile告诉编译器这个变量可能被中断偷偷改掉
轮询 + 中断两种方式配合,确保状态及时更新

五、写在最后

缺纸检测是打印机的“眼睛”,原始代码提供了最基础的中断触发和轮询读取逻辑,能满足基本功能演示。但在实际产品中,还需要考虑消抖、状态恢复、减少调试输出等问题。