使用红外传感器监测座位使用情况,拥有安装便利,成本低,容易实现,后期维护简单等特点,同时可以实时监测每一座位,解决了图书馆占座和座位资源无法合理分配等问题。该系统可自动分辨出座位上是否被使用,并将信息上传至上位系统,配合上位机系统的预约、可视化管理等功能,方便同学找座和图书管理员管理,大大提高了图书馆座位的利用率。
2.系统构成
红外传感器用于监测座位的使用情况,每个红外传感器配备了一个红外光源和一个光接收装置。传感器工作时,红外光源不断发射红外光,当座位被使用时,人体将红外光反射至接收器,接收器接收到红外光后,会向控制芯片传递信号“1”,表示座位正在被使用。相反,如果接收器未接收到红外光,那么它会向控制芯片传递信号“0”,表示座位未被使用;显示模块主要用于直观地展示红外传感器的监测结果。一旦红外传感器检测到座位有人使用,显示模块就会显示出数字1,以表明座位正在被使用;如果红外传感器没有检测到座位被使用,那么显示模块就会显示出数字0,以表明座位处于空闲状态;数据传输模块用于将红外传感器的信号通过串口通信发送至上位机。由此上位机就可以实时了解到各个座位的使用情况,便于进行进一步的座位管理和监管。
系统总体表现为:首先,红外传感器检测座位的使用情况,并将检测结果转化为信号传递给STM32芯片。然后,STM32芯片再将这些信号分别发送至OLED显示屏和上位机。在OLED显示屏上,我们可以看到单个座位的使用情况;而在上位机上,我们可以得到图书馆全部座位的使用情况。
Figure1.Systemframework
图1.系统框架
3.硬件设计
Figure2.OLEDmodulewiringdiagram
图2.OLED模块接线图
STM32F103C8T6型芯片用于处理红外传感器采集的信息,并对外部连接设施进行控制,实现芯片和上位系统的信号传递。本系统将STM32芯片的I/O口与显示模块连接,使用I2C通信协议进行数据传递,每个红外传感器均通过单总线协议与STM32芯片进行通信,这一通信方式有效降低了系统的复杂性并减少了所需的I/O端口数量,同时将读取到的信号传递到显示模块,可视化地展示每个座位的状态,即被占用(显示为1)或未被占用(显示为0),并将此信号通过串口通信传输到上位机。
Figure3.Infraredsensormodule
图3.红外传感器模块
在本座位监测系统中,数据传输的需求相对简单,主要涉及二进制状态信息——即座位被占用或空置的实时数据。鉴于此,系统设计采用了串口通信作为数据传输手段。串口通信的优势在于其简洁性和成本效益,能够在最小化硬件需求的情况下实现数据的序列化传输;仅通过发送(TXD)和接收(RXD)两根信号线,便能完成从STM32至上位计算机的数据通信。
当红外传感器检测到人体存在时,STM32将编码为“1”的信号通过串口通信发送至上位机,表示相应的座位正被占用。相反,若红外传感器未检测到人体,则STM32发送编码为“0”的信号,表示座位当前处于未被占用的状态。
Figure4.Serialcommunicationwiringdiagram
图4.串口通信接线图
4.系统软件设计
1)第一部分为红外检测模块,其用于检测座位使用情况。
2)第二部分为显示模块,用于实时显示座位的使用情况。
3)第三部分为串口通信模块,其用于实时将座位使用情况传输至上位机。
Figure5.Programflowchart
图5.程序流程图
4.1.红外检测模块软件设计
首先设置打开STM32中GPIOB的时钟,并定义一个结构体,命名为GPIO_InitStructure,接着初始化B13引脚,模式选择为IPU上拉输入,输出速度设定为50MHz。为了方便书写和使用,定义InfraredSensor_get()函数,其使用内置函数GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)返回连接在B13端口的红外传感器的值。
4.2.显示模块软件设计
4.3.串口通信模块软件设计
首先设置打开STM32中GPIOB的时钟,输出类型设置为复用推挽输出,波特率采用9600,8字长,停止位长度1,无校验位,硬件流控制,只需要发送。然后,初始化Serial,初始化代码使用模块自带的默认初始化参数。最后,完成的函数包括Serial_SendByte()(发送单个字符);Serial_SendArray()(发送数组);Serial_SendString()(发送字符串);Serial_SendNumber(uint32_tNumber,uint8_tLength)(发送十进制数字)。本系统主要使用Serial_SendNumber()向上位机传输信号,故上位机在接收信号时需选择文本模式接收。
4.4.主函数软件设计
构建循环while(1),使程序持续运行,再使用InfraredSensor_get()返回红外传感器的值x,判断红外传感器的值,然后使用OLED_ShowNum(1,1,x,1)将红外传感器的结果显示于OLED显示屏并使用Serial_SendNumber(x,1)将此结果通过串口通信发送至上位机。
5.运行调试结果
(a)(b)(c)
Figure6.Seatsareused.(a)Physicalimageofsensoryorgan;(b)OLEDdisplayscreen;(c)Serialcommunicationresult
图6.座位被使用。(a)传感器实物图;(b)OLED显示屏;(c)串口通信结果
Figure7.Seatsareunused.(a)Physicalimageofsensoryorgan;(b)OLEDdisplayscreen;(c)Serialcommunicationresult
图7.座位未被使用。(a)传感器实物图;(b)OLED显示屏;(c)串口通信结果