STM32 Proteus仿真完整代码与报告,实物成品展示:智能水杯

仿真源码(keil+proteus)与报告链接:

https://pan.baidu.com/s/1-wEhLVSemRxeEJMB1nMWSA?pwd=gf00 
提取码:gf00 
有疑问请邮箱1902946954@qq.com

proteus上仿真和最后面包板上做的实物功能上有差异,因为是一个小课程,所以功能进行了删减。仿真是用R6,实物使用C8T6。

实物的源码链接(keil):

链接:https://pan.baidu.com/s/1l6sWPhNAZNf5NZmCil_eFQ?pwd=odh0 
提取码:odh0 

一、需求分析

在追求健康和科技的当下,喝水如何喝得健康,喝得安全,是一个很多人关注的问题。比如:1、没有养成良好的喝水习惯,常常等到渴了再喝水,而此时身体其实已严重缺水。2、不知道每天该喝多少水,喝了多少水。3、担心有有心人在水中投放异物,威胁人身安全。4、喝水时常因不知道水的温而烫伤嘴。

  面对以上问题,我们小组针对性地设计并仿真实现了多功能智能水杯。该水杯具有喝水提醒,喝水量建议,喝水量统计,电子锁安全保护,水温检测及高温预警的功能,给用户带来更丰富,更科学,更安全更具科技感的喝水体验。

二、技术方案

2.1:系统整体设计方案

系统由硬件系统与软件系统组成。硬件系统在Proteus8.14上搭建,软件(STM32芯片中的程序)用C语言编写,在MDK keil5环境中开发。

2.1.1:硬件整体设计方案

硬件系统以STM32F103R6为主控芯片,+5V直流电源供电,外部搭载温度传感器DS18B20、压力传感器(ADC模数转换器)、电机驱动ULN2003A、步进电机、0.96寸OLED显示屏、输入按键阵列、蜂鸣器、LED灯。

图2-1 硬件总体框架图

 

 图2-2 硬件总电路图

2.1.2: 软件整体设计方案

    软件设计如图所示:

 图2-3 软件主程序流程图

2.2: 各模块设计方案

2.2.1:喝水量统计功能实现方案

1.硬件选择与连接

该功能实现需用到压力传感器(ADC模数转换)、OLED显示屏。

连接如图所示

图2-4 OLED显示屏与压感模拟模块电路图

2.软件实现

①压力传感器用ADC模数转换模拟,因此将PA1引脚配置为ADC输入,可以读取模拟值并转换位数字电平输入STM32。(完整源码请参考源码文件,文档中只展示重要部分)

图2-5 ADC配置源码

②OLED显示屏采用IIC通信协议,将PB6,PB7初始化为 IIC的时钟与数据线来传输数据包。经过调用oled.c中的函数,可以实现在OLED上显示字符串。

 

图2-6 OLED IIC配置源码

③在main函数中,可通过两次模拟值相减得到喝水量。具体实现为:首先用ADC读入三次数据,当数据稳定(即三次值都相等)判断水杯稳定,则进入下一个循环并读取三次数据,若三次数据之间互不相等且差值较大,判断为有人喝水,则进入在下一个循环,再读取三次数据,若相等则判断水杯再次稳定,说明已经喝完水。将喝水前后两次数据相减即可得到喝水量。

 图2-8喝水量计算源码

2.2.2:喝水提醒功能实现方案

1.硬件选择与连接

该功能实现需用到蜂鸣器、LED灯、定时器

连接如图所示

图2-9 BEEPER与LED电路图

2.软件实现

①定时器初始化:开中断和定时器,可实现每隔一段时间就跳出正在执行的程序,执行中断程序,结束后跳回原程序执行处。

 图2-10定时器配置源码

②LED与蜂鸣器:它们都是用普通IO口推挽输出,初始化为低电平与高电平

③定时提醒:将LED电平置零和蜂鸣器置一的代码写在中断函数中即可定时提醒。

2.2.3:水温检测与高温预警功能实现方案

1. 硬件选择与连接

该功能实现需用到DS18B20温度传感器、OLED显示屏

连接如图所示

 图2-11 DS18B20温度传感器电路图

2.软件实现

①DS18B20初始化:DS18B20连接PA8引脚,PA8引脚设置为浮空输入。需要先在相应的时间复位,PA8才会读取温感的数值。

 

图2-12 DS18B20源码

②温度检测与高温预警:循环读取温度传感器值并实时显示。在打开杯盖(输入密码正确时)若水温高于70°C则将蜂鸣器电平置1起到预警作用。

2.2.4:电子锁安全保护功能实现方案

1. 硬件选择与连接

该功能实现需用到ULN2003A电机驱动、步进电机与数字输入键盘

连接如图所示

图2-13驱动ULN2003A、步进电机、矩阵键盘电路图

  1. 软件实现

2.1矩阵键盘软件实现

①软件键盘初始化:如下图所示,将列按键对应引脚PC4、PC5、PC6、PC7设置为下拉输入,将行按键PC0、PC1、PC2、PC3设置为设置为推挽输出。

 

②软件键盘功能实现:以第一行的按键为例,首先选定行数,即第一行输出引脚PC0输出高电平,其余行输出低电平。若此时第一行无按键按下,则输入列引脚PC4、PC5、PC6不会检测到输入(高电平),继续检测下一行;若此时第一行有按键按下,以第一列为例,则对应列按键“1”会连通输入输出引脚PC0、PC4。此时PC4检测到输入,故按下的按键为第一行第一列按键“1”,其它行检测过程以此类推。一次检测完成后,会进行循环,直到检测到有按键按下,执行语句num_res=num_res*10,实现连续输入。当确认键按下后,enter标志位置1,跳出循环,将数值输入到主函数中。

2.2模拟电机软件实现

①电机控制引脚初始化:如下图所示,将输出引脚PA2、PA3、PA4、PA5设置成推挽输出。

 ②步进电机功能实现:初始化信息录入时将用户设置密码存入变量中,调用键盘函数获取键值;一旦判断到键值等于已存变量,使PA的2、3、4、5引脚轮流置为高电平并延时一段时间(具体实现如下图,通过16位并行操作,依次使高电平向左移1位、2位、3位、4位并与已使用引脚相或避免干扰),控制信号通过ULN2003A对步进电机进行驱动,通过位操作左移/右移使电机正转/反转。

 

2.2.5: 提醒模式修改与间隔时间修改

1. 硬件选择与连接

该功能实现需用到3*1功能修改按键,连接如下图

 图2-14 3*1功能修改按键电路图

2.软件实现:在等待用户喝水的循环中同时检测用户是否按下了修改模式/修改间隔时间的按键。若按下则进入修改模式/间隔时间的函数。函数中可修改对应全局变量。

三、功能说明

3.1:主要功能介绍

喝水量建议功能设计:用户开始使用水杯时,系统会让使用者录入年龄,性别,体重,工作环境等信息来个性化地建议每日喝水量。

喝水量统计功能设计:通过压力传感模块(该作品通过ADC模拟数字转换来模拟)测量水对杯底的压力。在喝水前后测量压力并相减得到单次喝水量,并存入储存,并累计当日总喝水量。

电子锁安全保护功能设计:在用户初始化时通过数字键盘设置初始密码。使用时输入正确密码开锁;若连续输入三次错误密码,则蜂鸣器会报警。

水温检测及高温预警:通过温度传感器检测水温,若水温过高(>70°C)在用户开锁时会蜂鸣器提醒高温(有声模式)或灯带闪烁(静音模式)。

3.2:与市面产品比较的创新点

1.更人性化:我们喝水提醒可以根据用户需求自己修改间隔时间,还可以根据使用环境设置有声或静音模式。我们也能根据个人信息(性别年龄体重等)来提出建议的喝水量,做到因人而异,因需求而异。

2. 更安全:市面上智能水杯没有锁或其他安全措施。而我们有电子锁能防止有心之人投放异物;热水提醒也能防止用户烫伤。

3. 更丰富:市面上智能水杯功能单一,而我们将多种功能集成于一体。

四、应用前景

     万物智能化、数字化、信息化是当今发展的趋势,智能家居是其中非常重要的应用。我们小组设计仿真的多功能智慧水杯具有喝水量建议、喝水量统计、电子锁安全保护和水温检测及高温预警的功能,是智慧家居设计的一种探索。未来我们可以将智慧水杯连入智慧家居系统中,将其中的饮水数据保存并整理,作为用户健康数据的一部分,为用户的日后医疗需要或健康生活提供参考。

 

做出来的实物图如下:

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 Proteus仿真完整代码与报告,实物成品展示:智能水杯

发表评论