单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现

简介: 单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现

前言:

教师常年在课堂上上课,粉笔的灰尘会对学生的健康造成很大的危害,很多教师都会患上肺部疾病。教师在课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。本文以51单片机为核心,实现并设计一种全自动黑板檫粉尘清除装置。由黑板擦上的压力传感器进行检测,由51单片机来控制吸尘器(吸尘风机),以完成清理。本系统的主要功能包括:压力检测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板檫粉尘清除装置的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,对系统的硬件电路进行了详细的设计,并编写了相应的单片机控制软件,并进行了实际的焊接和调试。

一,环境介绍

语言环境:C语言

 

开发技术:51单片机和压力传感器等组件

二,项目简介

尘埃是我们的日常生活中的一种物质,它给我们的生活和生产造成了很多的影响。工业粉尘的悬浮微粒易于发生爆炸;生活中的尘埃不仅会对大气产生污染,还会导致沙尘暴;长期在尘土飞扬的矿井中工作的矿工,极易得尘肺病;而我们的老师,常年在教室里上课,粉笔的灰尘会对学生的身体造成很大的伤害,很多老师都会得肺部疾病。因此,在教师课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。

随着科技水平的提高,工业生产的机械化程度不断提高,如何运用现代手段处理大气中的粉尘污染,已成为人们普遍关注的问题。保护环境,保障人民身体健康,促进人与自然的协调发展,是当今社会发展的主要趋势。单片机是一种小型的微机系统,由中央处理器 CPU,随机存储器 RAM,只读存储器 ROM,多种输入/输出端口,中断系统,定时/计数系统,总线系统,等等。

本文以51单片机设计全自动黑板檫粉尘清除装置,采用STC89C52单片机为核心,实现了一种智能化的除尘系统。由黑板擦上的压力感应器进行检测,由微处理器来控制吸尘器(吸尘风机),以完成清理。主要功能包括:压力探测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板吸尘设备的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,完成了全自动黑板除尘设备的硬件电路设计,完成了单片机的编程,完成了实际焊机的焊接和调试,并对整个系统进行了总结。

2.2 主要模块的方案选择

2.2.1 主控芯片选择

针对上述问题,本文选取了STC89C52为主要控制芯片。

STC89C52是一款低功率、高性能的8位 CMOS 8位单片机,具有8 K的可重复擦写10,000次的 Flash只读存储器,该设备由 ATMEL公司的高密度非易失性存储器技术生产,与MCS-51指令系统和80C51管脚相兼容,内置8位通用 CPU和 ISP Flash存储器。STC89C52芯片的特点如下:

①指令和晶片插针与 Intel 8051兼容;

②8 KB片可编程 Flash内存;

③0-33兆赫的时钟频率;

④128字节的 RAM (RAM);

⑤32个程序输入/输出插针;

⑥2个16比特的计时/计数装置;

⑦6个干扰源,二级优先权;

⑧全双工和串口通讯;

⑨监控计时器;

⑩2个数据指示器。

STC89C52单片机40个引脚中,2个是主引脚,2个是晶振引脚,4个是控制或多路复用的引脚,32个是输入/输出引脚。

图2-1中显示了STC89C52的引脚。

 

图2-1  STC89C52单片机引脚图

2.2.2 传感器选择

压感元件是一种具有代表性的有源元件,也被称为自产生元件。它的工作原理是通过在一定的压力作用下,在一定的表面上产生电荷。

该传感器具有体积小、重量轻、结构简单、工作可靠等优点,特别适合于测量动力学,但不宜用于测量频率过低的物体,尤其是静态的。现在,它主要应用在测量加速度、动力力、压力等方面。压电元件的缺点:内阻大,功率小。功率较低,输出能量较弱,且线缆的分布电容和噪音干扰会对输出性能产生一定的影响。

电阻-应变传感器是一种结构化的传感器,它通过电阻-应变的作用,把不同的力学量转化成电信号。电阻应变片型电阻应变传感器的核心部件,其工作原理是以材料的电阻-应变效应为基础,既可以单独用作传感器,也可以与弹性元件相结合,形成力学量传感器。

在这种情况下,由于材料的机械变形,导致了导线的电阻和应变的改变。电阻应变器将应力信号转化成△ R/R后,其应变元件的应变器和电阻的变化通常很小,很难进行准确的测量,而且不方便进行处理。所以,应利用变换器将应变计的△ R/R变换为电压或电流的改变。其电桥的测量通常采用的是它的变换电路。

直流电桥具有不受各部件和线路电感、电容等因素影响的特性,具有很好的抗干扰性,但是由于其机械变形的输出信号较低,需要采用高增益、高稳定性的放大器进行放大。图2-2是一个由 DC电源链接提供的均衡电阻器电桥:

图2-2 传感器内部连接图

在电桥的输出端连接无限大的负载电阻器的情况下,可以看到的输出是断开的,这时的直流电桥叫做电压桥,也就是只有电压的输出。

在不考虑电力系统内部电阻的情况下,分压原理如下:

 

如果R1R3=R2R4被满足,也就是

 

 

 

=0,也就是电桥的平衡。平衡状态被称为(2-2)

应变片电桥在进行测试之前对电桥进行均衡,因此电桥的输出电压仅与应变片感应到的应变产生的电阻的改变相关。

当差分工作时,R1=R-△ R,R2= R+△ R,R3=R-△ R,R4= R+△ R,那么电桥的输出是:

                                             

应变片传感器具有以下特征:

1)适用范围广泛,可制作成不同的机械量传感器。

2)高分辨率、高灵敏度、高准确度。

3)结构轻巧,对试样的影响较小,适用于各种复杂的环境,适用于高温、高压、强磁场等特殊环境,具有良好的频响特性。

4)商业化、易操作、远距离、自动化测量的实现。

在对比和分析了压力传感和电阻应变传感的基础上,最后选定了第二种方法。

2.2.3 风扇清灰方案选择

方案一:采用变压器调节方式,运用电磁感应原理将220V电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电机的转速,从而控制风扇风力大小。

方案二:采用PWM波调速。

针对第一个方案,因变压器的变压调整,存在风速等级的局限性,无法满足人的需求。并且在变压时,会产生热量损失,效率低,产生热量不安全。

就方案二而言, PWM技术的一个优势在于,它不需要进行数模变换,就可以实现从处理器到被控系统的信号。保持数字格式的信号可以最大限度地减少噪音的影响。当噪音足够强大时,可以使逻辑1变成逻辑0,或者逻辑0变成逻辑1,也可以影响数字信号。PWM比模拟控制有更好的抗噪声性能,这也是 PWM在某些情况下使用 PWM作为通讯工具的重要原因。将模拟信号转换为 PWM,可以大大提高通讯距离。在接收端,采用合适的 RC或 LC网络对调制的高频方波进行滤波,使其恢复到模拟状态。

总体而言, PWM技术经济、空间节约、噪声性能好,因此本文选择了第二种方案。

2.2.4 AD转换芯片选择

HX711是一款24位模数转换芯片,专门用于高精度的压力传感器。与其他同类芯片相比,本芯片集成了稳压电源、片内时钟振荡等周边器件,集成度高,响应速度快,抗干扰能力强。该系统整体造价低,性能好,可靠性好。在晶片中,时钟振荡器无需附加设备。上电的自动重置功能使启动的初始化程序更加简单。图2-3中显示了芯片插脚的图形。

 

图2-3  HX711管脚定义

图2-4显示了HX711的典型应用电路。

 

图2-4  HX711典型应用电路

2.3 方案确定

如图2-5所示,为本次设计方案的硬件系统原理图。

 

图2-5  系统硬件原理图

其中,压力信号的获取是通过压力传感器YZC-133来完成,通过 AD变换芯片HX711将模拟信号进行数字变换,供 MCU进行读出,并通过除尘风机和继电器进行智能切换。采用模态控制模组的拨片开关,对系统进行手动/自动切换,在手动方式下,利用物理键来控制除尘风机;

三,系统展示

系统产品展示--正面展示

系统产品展示--反面展示

功能测试

 

四,核心代码展示

#include "hx711.h"
void Delay__hx711_us(void)   //短暂延时
{
  _nop_();
  _nop_();
}
unsigned long HX711_Read(void)  //增益128   读取重量
{
  unsigned long count;   //数据位数
  unsigned char i;      //变量i
  unsigned int later=0;  //延时变量计数
//  EA = 0; 
    HX711_DOUT=1;     //输出引脚置位//**All notes can be deleted and modified**//
    HX711_SCK=0;    //时钟引脚清零
    count=0;
    while((HX711_DOUT)&&(later<10000));  //等待数据处理完成
  {
    later++;
      DelayUs2x(5);
  } 
    for(i=0;i<24;i++)  //数据处理
  { 
      HX711_SCK=1; 
      count=count<<1;   //数据左移
    HX711_SCK=0; 
      if(HX711_DOUT) //读取数据
      count++; 
  } 
  HX711_SCK=1;    //时钟置位
    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
  Delay__hx711_us();  //短暂延时
  HX711_SCK=0; 
//  EA = 1;
  return(count);
}
C51 COMPILER V9.54   MAIN                                                                  05/11/2020 09:29:00 PAGE 1   
C51 COMPILER V9.54, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND TABS(2)
line level    source
   1          #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
   2          #include<stdio.h>
   3          #include "delay.h"
   4          #include "hx711.h"
   5          
   6          sbit key1 = P2^0;
   7          sbit key2 = P2^1;
   8          sbit sw = P2^2;
   9          sbit fan = P1^3;
  10          
  11          xdata char dis0[16];     //  显示暂存
  12          xdata char dis1[16];     //  显示暂存
  13          
  14          xdata unsigned long time20ms=0;   //  系统定时计数
  15          unsigned char ReadFlag=0;   //读取标志
  16          
  17          xdata long Weight_Shiwu=0;      //实物重量
  18          xdata unsigned long Weight_Maopi=0;  //读取初始化值
  19          
  20          xdata long midWeight=0;    //差值中间值
  21          
  22          bit reportFlag=0;//上报标志
  23          unsigned int timesCount = 0;//坐下计时
  24          
  25          void Init_Timer0(void);//函数声明
  26          void UART_Init(void);
  27          void uartSendByte(unsigned char dat);
  28          void uartSendStr(unsigned char *s,unsigned char length);
  29          
  30          void main (void)
  31          {     
  32   1        Init_Timer0();        //定时器0初始化
  33   1        UART_Init();
  34   1      
  35   1        DelayMs(2);          //延时有助于稳定//**All notes can be deleted and modified**//
  36   1        Weight_Maopi = HX711_Read();    //读取去皮重量
  37   1      
  38   1        DelayMs(2);//**All notes can be deleted and modified**//
  39   1        Weight_Maopi = HX711_Read();
  40   1      
  41   1      
  42   1        uartSendStr("ready ok!",9);
  43   1      
  44   1        while (1)         //主循环
  45   1        {
  46   2          if(ReadFlag==1)
  47   2          {
  48   3            ReadFlag=0;
  49   3            Weight_Shiwu = HX711_Read();      //读取实物重量
  50   3            Weight_Shiwu = Weight_Shiwu - Weight_Maopi;   //获取净重
  51   3      
  52   3            if(Weight_Shiwu > 430)  //过滤错误    
  53   3            {Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/430); }  //g计算实物的实际重量                                 
  54   3            else {Weight_Shiwu = 0;}
  55   3      
C51 COMPILER V9.54   MAIN                                                                  05/11/2020 09:29:00 PAGE 2   
  56   3            if(Weight_Shiwu<10)Weight_Shiwu = 0;      
  57   3          }
  58   2      
  59   2          if(sw == 1)   //自动模式
  60   2          {
  61   3            if(Weight_Shiwu>500) //超过重量
  62   3            {
  63   4              fan = 0;//打开 风扇   
  64   4            }
  65   3            else
  66   3            {
  67   4              fan = 1;//关闭 风扇
  68   4            }     
  69   3          }
  70   2          else
  71   2          {
  72   3            if(key1 == 0) //超过重量
  73   3            {
  74   4              fan = 0;//打开 风扇   
  75   4            }
  76   3            if(key2 == 0) 
  77   3            {
  78   4              fan = 1;//关闭 风扇
  79   4            }       
  80   3          }
  81   2      
  82   2        }
  83   1      }
  84          
  85          void Init_Timer0(void)
  86          {
  87   1      //**All notes can be deleted and modified**//
  88   1        TMOD |= 0x10;     //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响         
  89   1        TH0=(65536-20000)/256;      //重新赋值 20ms
  90   1        TL0=(65536-20000)%256;
  91   1        EA=1;            //总中断打开
  92   1        ET0=1;           //定时器中断打开
  93   1        TR0=1;           //定时器开关打开
  94   1      }
  95          
  96          void Timer0_isr(void) interrupt 1 
  97          {
  98   1        TH0=(65536-20000)/256;      //重新赋值 20ms
  99   1        TL0=(65536-20000)%256;
 100   1      
 101   1        time20ms++;
 102   1        if(time20ms%10==0)    //定时时间到
 103   1        {
 104   2          ReadFlag=1;    //读取标志置位
 105   2        }
 106   1      }
 107          
 108          void UART_Init(void)
 109          {
 110   1          SCON  = 0x50;           // SCON: 模式 1, 8-bit UART, 使能接收  
 111   1          TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
 112   1          TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
 113   1        TL1 = TH1;  
 114   1          TR1   = 1;                  // TR1:  timer 1 打开                         
 115   1          EA    = 1;                  //打开总中断
 116   1          ES    = 1;                  //打开串口中断
 117   1      }
C51 COMPILER V9.54   MAIN                                                                  05/11/2020 09:29:00 PAGE 3   
 118          
 119          void uartSendByte(unsigned char dat)
 120          {
 121   1        unsigned char time_out;
 122   1        time_out=0x00;
 123   1        SBUF = dat;       //将数据放入SBUF中
 124   1        while((!TI)&&(time_out<100))  //检测是否发送出去
 125   1        {time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时
 126   1        TI = 0;           //清除ti标志
 127   1      }
 128          
 129          void uartSendStr(unsigned char *s,unsigned char length)
 130          {
 131   1        unsigned char NUM;
 132   1        NUM=0x00;
 133   1        while(NUM<length) //发送长度对比
 134   1        {
 135   2          uartSendByte(*s);  //放松单字节数据
 136   2          s++;      //指针++
 137   2          NUM++;      //下一个++
 138   2           }
 139   1      }
 140          
 141          
 142          
MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    547    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =     48    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

五,项目总结

本文以51微处理器为核心,设计并实现了一种全自动黑板檫粉尘清除装置,其硬件部分采用STC89C52单片机为核心,其主要功能包括:压力检测、按键控制、灯光显示、风扇除尘等。本系统主要包括单片机STC89C52、拨动开关、按键、压力传感器、风扇驱动和供电电路。在软件方面,利用压力传感器检测到的数据,完成了对橡胶作业状态的采集和处理,由单片机对所收集到的数据进行报警和风机的启动和关闭,从而达到了智能化的除尘效果。


相关文章
|
7月前
|
传感器 芯片
毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计
毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计
142 0
|
6月前
技术心得记录:单片机开发过程中使用结构体简化程序
技术心得记录:单片机开发过程中使用结构体简化程序
38 0
|
7月前
|
IDE 开发工具 C++
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
|
7月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
181 0
|
7月前
|
传感器 存储 芯片
毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计
毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计
116 1
|
7月前
|
传感器 测试技术 数据处理
单片机开发|基于单片机的婴儿睡眠监测系统设计
单片机开发|基于单片机的婴儿睡眠监测系统设计
114 0
|
7月前
|
传感器 存储 芯片
毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信
毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信
135 0
|
7月前
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
|
7月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
59 1
|
7月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
110 1
下一篇
DataWorks