项目介绍
本文是基于单片机的Nb-IoT技术的图书馆座位智能管理系统,选择STM32F103C8T6为主控芯片,通过使用红外检测模块作为输入部分,实现对座位使用信息的采集。通过使用LCD1602作为输出部分,实现对座位被预约情况的输出,再通过SIM7000Nb-IoT模块将输入部分得到的座位使用和预约数据进行上传,为了便于查看座位端的数据,本设计将数据上传至Tlink物联网平台,通过界面可查看座位使用情况并且对座位进行线上预约,实现了对座使用数据的统计和管理。通过实现图书馆座位的实时监控、预约、管理等功能,从而提高座位资源的利用率和管理的效率。
功能介绍
设计一款基于单片机的Nb-iot图书馆座位智能管理系统,该系统主要包括:处理器模块、传感器模块、电源模块等,能够实现对图书馆座位的智能化管理。
(1)实现对图书馆座位是否正在使用的检测,并在物联网平台显示;
(2)实现对座位信息向物联网平台的上传和使用历史数据统计。
(3)座位端可以显示当前座位是否有人预约,超时自动释放该座位使用权;
所用模块
系统原理图
实物图
部分代码
#include “sys.h”
#include “delay.h”
#include “1602.h”
#include “usart.h”
#include “stdio.h”
#define key1 PBin(15)
#define key2 PBin(14)
#define key3 PBin(13)
#define key4 PBin(12)
#define LED0 PCout(13)
#define IN1 PAin(0)
#define IN2 PAin(3)
#define IN3 PAin(6)
#define LED1 PAout(1) //绿
#define LED2 PAout(2) //红
#define LED3 PAout(4)
#define LED4 PAout(5)
#define LED5 PBout(0)
#define LED6 PAout(7)
u32 data1[10];
//串口1
u8 U1data=0;
void USART1_IRQHandler(void)
{
if(USART1->SR&(1<<5)) //接收到数据
{
U1data = USART1->DR;//读取数据
switch( U1data )
{
case ‘!’: if(data1[0]==0)data1[0]=30; else data1[0]=0; break;
case ‘@’: if(data1[1]==0)data1[1]=30; else data1[1]=0; break;
case ‘#’: if(data1[6]==0)data1[6]=30; else data1[6]=0; break;
}
}
}
int main( void )
{
u32 data_time=0;
u8 sc=0;
//系统时钟设置
Stm32_Clock_Init(9);
//延时初始化
delay_Init(72);
//IO重定义
RCC->APB2ENR |= 1<<0;//打开复用功能时钟
AFIO->MAPR |= 1<<25;
delay_ms(100);
//LCD初始化
LCD1602_Init();
//串口1初始化 与IOT模块通信
USART1_Init(72,115200);
RCC->APB2ENR |= 1<<2;//打开PA时钟
RCC->APB2ENR |= 1<<3;//打开PB时钟
RCC->APB2ENR |= 1<<4;//打开PC时钟
GPIOA->CRL &= 0x00000000;//复位PA0 3输入 1 2 4 5输出
GPIOA->CRL |= 0x38338338;
GPIOA->CRH &= 0xFFFFFFFF;//复位PA
GPIOA->CRH |= 0x00000000;
GPIOB->CRL &= 0xFFFFFF00;//复位PB
GPIOB->CRL |= 0x00000033;
GPIOB->CRH &= 0x00000FFF;//复位PB15 14 13 12 11 10
GPIOB->CRH |= 0x88888000;
GPIOC->CRH &= 0xFF0FFFFF;//复位PC13
GPIOC->CRH |= 0x00300000;
PBout(15)=1; PBout(14)=1; PBout(13)=1; PBout(12)=1;
LED0=1; LED1=0; LED2=0; LED3=0; LED4=0;
//标题显示
LCD1602_Show(0,0,"1:MA-00s ");
LCD1602_Show(0,1,"2:MA-00s3:MA-00s");
//显示
LCD1602_Show(8,0,"IOT");
LCD1602_Show(12,0,"STOP");
while(1)
{
//周期时间
delay_ms(1);
data_time++;
if(data_time%500==0)
{
//定时控制 自动取消
if(data1[0]!=0)data1[0]--;
if(data1[1]!=0)data1[1]--;
if(data1[6]!=0)data1[6]--;
//显示预约状态
if(data1[0]==0)LCD1602_Show(2,0,"--");else LCD1602_Show(2,0,"MA");
if(data1[1]==0)LCD1602_Show(2,1,"--");else LCD1602_Show(2,1,"MA");
if(data1[6]==0)LCD1602_Show(10,1,"--");else LCD1602_Show(10,1,"MA");
//显示时间
LCD1602_ShowNmber( 6,0,data1[0],2 );
LCD1602_ShowNmber( 6,1,data1[1],2 );
LCD1602_ShowNmber(13,1,data1[6],2 );
//座位1传感器
if( IN1==0 )
{
data1[2]=1;
LED1=1;//绿灭
LED2=0;//红开
}else
{
data1[2]=0;
LED1=0;//绿开
LED2=1;//红灭
}
//座位2传感器
if( IN2==0 )
{
data1[3]=1;
LED3=1;//绿灭
LED4=0;//红开
}else
{
data1[3]=0;
LED3=0;//绿开
LED4=1;//红灭
}
//座位3传感器
if( IN3==0 )
{
data1[7]=1;
LED5=1;//绿灭
LED6=0;//红开
}else
{
data1[7]=0;
LED5=0;//绿开
LED6=1;//红灭
}
//数据上传
if( sc==1 && data_time%2000==0 )
{
//上传 1号座位状态 2好座位状态 1号预约状态 2号预约状态
if( data1[0]!=0 )data1[4]=1;else data1[4]=0;
if( data1[1]!=0 )data1[5]=1;else data1[5]=0;
if( data1[6]!=0 )data1[8]=1;else data1[8]=0;
printf("#%d,%d,%d,%d,%d,%d#",data1[2],data1[3],data1[7],data1[4],data1[5],data1[8]);
//指示灯闪烁
LED0=!LED0;
}
}
资料下载链接
「实物制作资料 分享.rar」,来自夸克网盘分享。
夸克网盘无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
/7b80346jCs😕
链接:https://pan.quark.cn/s/3e81858eda83
提取码:Ceiz