前言
基于STM32的智能快递柜,主控使用STM32F103ZET6,在正点原子的精英板上开发(本人也在野火板子上测试成功)。
一、任务书1.1设计(研究)目标:
我们研究一种基于STM32的智能快递柜。该系统以STM32F103作为主控芯片﹐配备了红外传感器、电话通信﹑信息录入以及继电器模块等一系列模块,能够自动根据送货员提供的客户手机号,在合适的时间自行通知客户进行取件,保证时间不凑巧的客户也能安全领到自己的快递,在实现了安全便捷存取快递的同时,也提升了快递行业的服务质量。
1.2设计(研究)内容:
1、题目的意义;
2、各种传感器及设备的一般技术和特殊技术的学习:
3、通信以及控制器的技术要求;
4、总体方案的选型设计;
5、STM32单片机及其外围设备的软硬件系统的技术开发:
6、系统的调试和总体运行原理
7、其他设计内容;具体要求:
1、硬件要求1张1号以上的大图:
2、软件以流程图方式表示:
3、有调试的说明。
2.1 项目背景与目的
一般来说,传统快递服务方式是人对人,即快递员进行揽件派送,与签收人进行面对面签收,确认无误后服务终止。这种传统快递方式虽然保证了包裹的一定安全,但效率低下,花费了双方大量的时间成本。而智能快递箱的诞生使得快递服务变得高效,它不再是门对门,或者是人对人的服务方式,智能快递箱就好比是中介,使得配送方和接收方的时间成本大大减少,更加自由。现在智能快递箱的应用在国内逐渐广泛。
智能快递箱是基于GSM与单片机系统下的一款全天24小时自助服务的服务设备。智能快递箱以单片机STC89C52作为最小控制系统,GSM模块能够插入手机卡,快递人员输入密码进行解锁放柜处理,然后通过矩阵键盘输入手机号进行短信发送,完成将物品投递入柜的功能。取件人通过手机收到的短信,输入对应验证码能够解锁快递箱门,拿取对应快递,完成取件功能。
3 系统设计
智能快递箱设计是以单片机作为最小的控制系统,由GSM模块插入的手机移动通信卡辅助实现整个系统运行。在矩阵键盘上输入手机号发送短信,输入对应验证码可以解锁对应柜子编号,成功取得快递。
该设计的技术难点有以下几个:
(1)矩阵键盘是否能够完成对11位手机号码和6位验证码的正确输入。
(2)取件人的手机号码输入完成后,GSM模块是否能够自动向取件人对应的手机发送取件码。
(3)输入正确的取件码后,单片机需要对电控锁进行正确打开。成功的依据是显示屏能够显示之前的编号。
(4)二次开发时,设计能力有限可能无法发挥产品的全部功能。
3.1 系统架构
(1) 该项目主要分为硬件系统与软件系统两个部分组成。 硬件系统由控制平台、 显示模块、 GSM 模块等组成。 软件系统则有 KEIL 软件上编译 C 程序以及刻录软件构成。
(2) 在掌握单片机工作原理的基础上, 还需要雄厚的 C 语言编译技术作为知识基底, 利用 KEIL 程序, 在其上面编写 C 语言, 以实现本次设计所需要的功能。
3.2 硬件部分3.2.1 GMS模块
GSM 模块是将 GSM 射频芯片、 基带处理芯片、 存储器、 功放器件等集成在一块线路板上, 具有独立的操作系统、 GSM 射频处理、 基带处理并提供标准接口的功能模块, 包括发送短信, 语音通话以及数据传输的基本通信功能。
3.3 软件部分3.3.1 主程序设计
主程序主要要解决两部分问题, 一是快递员存储快递, 二是取件人拿去快递。
快递员存储快递后需输入命令, 即输入用户11 位手机号码。 GSM 模块接收到 AT 指令后, 生成验证码并将指令转化成信号发送至单片机上。
单片机接收到信号, 生成信息发送至取件人的手机上。 取件人可以依据收到的短信中的验证码进行取件步骤, 如若输入正确的验证码, 快递箱门将会成功打开, 继续等下一个指令; 否则, LED 显示灯将会显示警告并且蜂鸣器电路会工作进行报警。
主程序主要要解决两部分问题, 一是快递员存储快递, 二是取件人拿去快递。
快递员存储快递后需输入命令, 即输入用户11 位手机号码。 GSM 模块接收到 AT 指令后, 生成验证码并将指令转化成信号发送至单片机上。
单片机接收到信号, 生成信息发送至取件人的手机上。 取件人可以依据收到的短信中的验证码进行取件步骤, 如若输入正确的验证码, 快递箱门将会成功打开, 继续等下一个指令; 否则, LED 显示灯将会显示警告并且蜂鸣器电路会工作进行报警。
3.3.2 GMS程序设计
GSM 程序设计主要解决的问题就是收到 AT 指令时, 能够成功生成验证码及发送验证码到对应收件人的手机上。 在设置短息的号码时, 因为手机号码为11 位, 所以我在编写程序时, 将两位数字位置颠倒, 确保了取件人可以接收到消息。
3.4 实现效果3.5 部分相关代码
// 键盘部分代码
void KeyDown()
{
char a = 0;
GPIO_KEY=0x0f;
while(1)
{
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay10ms(1);//延时 10ms 进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=4;break;
case(0X0d): KeyValue=8;break;
case(0X0e): KeyValue=12;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue+3;break;
case(0Xb0): KeyValue=KeyValue+2;break;
case(0Xd0): KeyValue=KeyValue+1;break;
case(0Xe0):KeyValue=KeyValue;break;
}
……
显示模块部分源代码
void get_rand(void)
{
bit_0 = rand(); //获取随机数
user_pass[0] = (bit_0 % 10000)/1000;
user_pass[1] = (bit_0 % 1000)/100;
user_pass[2] = (bit_0 % 100)/10;
user_pass[3] = bit_0 % 10;
bit_1 = rand(); //获取随机数
user_pass[4] = (bit_1 % 10000)/1000;
user_pass[5] = (bit_1 % 1000)/100;
// password[6] = (bit_1 % 100)/10;
// password[7] = bit_1 % 10;
/*
LcdWriteCom(0x01); //清屏
data_clean();
PuZh_2[0] = user_pass[0]+0x30;
PuZh_2[1] = user_pass[1]+0x30;
PuZh_2[2] = user_pass[2]+0x30;
PuZh_2[3] = user_pass[3]+0x30;
PuZh_2[4] = user_pass[4]+0x30;
PuZh_2[5] = user_pass[5]+0x30;
display(); //显示
*/
}
void one_data(uchar *str) //显示第一行数据
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_1[y]=*str;
str++;
}
}
void two_data(uchar *str)//显示第一行数据
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_2[y]=*str;
str++;
}
}
void interface_dist()
{
one_data(" WELCOME ");
two_data(" ");
}
void input_pass()
{
unsigned char j=0,z=0,x=0,y=0;
LcdWriteCom(0x01); //清屏
one_data(" EMS INPUT ");
two_data(" ");
display(); //显示
j=6;
z=0;
// x=0;
for(;;)
…
GSM 模块部分源代码
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式 1
TMOD=0X20; //设置计数器工作方式 2
TH1=0XFd; //计数器初始值设置, 注意波特率是 9600 的
TL1=0XFd; //11.0592 晶振
// PCON=0X80; //波特率加倍
// TH1=0XF3; //计数器初始值设置, 注意波特率是 4800 的
// TL1=0XF3; //12.0000 晶振
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
//串行口连续发送 char 型数组, 遇到终止号/0 将停止
void Uart1Sends(uchar *str)
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
str++;
}
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
}
void pass_word()
{
char i;
for(i=0;i<6;i++)
{
SBUF=0x30;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x30;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x33;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x30+user_pass[i];
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
}
}
void send_code()
{
get_rand();
Uart1Sends("AT+CMGF=1\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSCS=\"UCS2\"\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSCA?\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSMP=\"17,167,0,24\"\r\n");
Delay10ms(200);//延时 2 秒
//
Uart1Sends("AT+CMGS=\"00310035003800310033003300360036003500380035\"\r\n");//
此处修改为对
Delay10ms(200);//延时 2 秒
Uart1Sends("8BF753D65FEB90129A8C8BC17801");
pass_word();
// Uart1Sends("9A8C8BC17801");//修改短信内容
// Uart1Sends("00310033003300330033003300330039003200340033");//修改短信内容
Delay10ms(200);//延时 2 秒
Uart1Send(0x1a);
Delay10ms(200);//延时 2 秒
}
void main(void)
{
unsigned char j=0,z=0,x=0;
UsartConfiguration();
// TMOD = 0X01; //设置定时器 T0 16 位
// EA = 1; //打开中断
// ET0 = 1; //打开 TO 定时器
// TR0 = 1; //开启中断
// TH0 = (65536-5000)/256;
// TL0 = (65536-5000)%256;
time = 0;
BELL = 0;
power = 0;
LcdInit();
error = 0;
Delay10ms(50);
i=0;
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面显示
Delay10ms(50);
display(); //显示
while(1)
{
KeyDown();
if(num == 10)
{
input_pass(); //输入密码
if(error == 0)
{
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND MESSAGE ");
display(); //显示
send_code();
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND SUCCESS ");
display(); //显示
Delay10ms(200);
}
}
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面显示
Delay10ms(50);
display(); //显示
if(num==12)
{
user_input();
}
}
}
完整代码可以进群免费领取。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:
一时之间,到处都是进京小哥的身影。
15日夜间,在重庆飞往北京的飞机上,有网友看到机舱里坐着很多穿工服的快递员。
夜幕下的,大兴机场和首都机场的出站大厅,也到处都是穿着工服的快递员在集合。
“给大家准备了棉服,北京冷。”在首都机场大厅,网友看到,接机人用麻袋装着棉服,在接机安顿来京的小哥。
从菜鸟获悉,15日晚9时17分,菜鸟由重庆调集的第四批快递员,搭乘航班落地北京大兴机场,于16日投入北京药品以及生活物资的配送。
截至目前,菜鸟首批从天津和河北急调的快递员,已在北京万博园快递站投入药物和生活物资的配送。从贵州和四川调集的第二批和第三批快递员,也于15日早些时候乘机落地北京,于16日投入配送。
同时,在京菜鸟驿站基本全部开放,700多家菜鸟驿站正在末端提供免费保管和送货上门,保障民生物品快递及时接收。
据悉,菜鸟已经成立保障在京配送工作组,向在京配送人员调配抗原检测试剂盒、口罩、消毒用品、感冒药、退烧药等常规防护物品,提升一线员工抵抗力,保障在岗率。目前菜鸟已经在北京调集千名快递员,优先配送药品,全力保障北京的物资配送。
转自:央广网
来源: 新华社