
本设计的硬件构成:
STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),温度传感器、水位传感器、红外人体传感器、红外反射传感器、超声波测距模块、LCD液晶显示屏、按键、蜂鸣器、LED指示灯、继电器等电路而成;

功能介绍:
1、温度传感器采集水温,按键设置水温阈值,人体感应检测人体信号,当发现有人时并且水温低于阈值时,进行加热(继电器A),否则不加热。
2、接水口为固定区域,红外传感器检测是否有水杯,超声波传感器检测水杯里的水位高度。当有水杯时(检测到红外信号),开始加水(继电器B启动),当超声波距离小于预设值(程序中设定),停止加水。
3、水位传感器检测饮水机内水位,当饮水机水位较低时,发出蜂鸣器提示储水不足。
4、显示屏幕显示数据信息(超声波距离、 水温、水位)。
5、通过按键设置水温,按键1:设置键;按键2:加一键;按键3:减一键。
主要物料清单及型号:
显示屏:LCD1602-5V;
单片机:STM32F103C8T6;
超声波测距模块:HC-SR04;
红外人体传感器:SR602;
继电器:SRD-05V;
蜂鸣器:5V有源蜂鸣器;
原理图:

实物图1:

设计资料:
元器件清单:

程序:
int main(void)
{
u8 key_value;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
TIM3_Cap_Init(1,72-1); //以1Mhz的频率计数,第一个选项,最小只能是1
TIM2_Int_Init(499,7199);//10Khz的计数频率,计数到1000为100ms
// LED_Init(); //初始化与LED连接的硬件接口
BEEP_Init();
KEY_Init(); //初始化按键
RELAY_Init();
Adc_Init();
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
UltrasonicWave_Configuration(); //初始化超声IO
delay_ms(200);
cool_relay=0;
while(1)
{
key_value=KEY_Scan(0);
key_Handle(key_value);
APP_Handle();
if(PEOPLE==1)
{
people_flag=10;
}
if(disFlag>10) //显示标志
{
disFlag = 0;
if(people_flag>0)
people_flag--;
ceju(); //获取水位
water=Get_Adc_Average(9,10)/40;
temperature=(float)DS18B20_Get_Temp()+7; //缩小10倍为实际值
if(settemp>temperature&&people_flag>0)
{
heat_relay=0;
}
else
{
heat_relay=1;
}
if(S>10&&HR==0)
{
cool_relay=0;
}
else
{
cool_relay=1;
}
if(water<10)
{
BEEP=!BEEP;
}
else
BEEP=1;
if(set==0)
display();
}
}
}
关键字:STM32 单片机
引用地址:
基于STM32单片机的多功能水杯设计
推荐阅读最新更新时间:2026-03-22 11:14
基于STM32单片机的多功能水杯设计
本设计的硬件构成: STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),温度传感器、水位传感器、红外人体传感器、红外反射传感器、超声波测距模块、LCD液晶显示屏、按键、蜂鸣器、LED指示灯、继电器等电路而成; 功能介绍: 1、温度传感器采集水温,按键设置水温阈值,人体感应检测人体信号,当发现有人时并且水温低于阈值时,进行加热(继电器A),否则不加热。 2、接水口为固定区域,红外传感器检测是否有水杯,超声波传感器检测水杯里的水位高度。当有水杯时(检测到红外信号),开始加水(继电器B启动),当超声波距离小于预设值(程序中设定),停止加水。 3、水位传感器检测饮水机
[单片机]
STM32单片机AD4630-24驱动程序
AD4630-24是亚德诺推出的一款24位双通道支持同步采样的ADC,高昂的售价注定了这不会是一款常用芯片,我在做驱动开发期间在中文互联网基本没有找到可以参考的资料或例程。但这次毕竟做的是一款高精度同步电压电流表,这款芯片是领导亲自选的,要求很明确,就是分辨率拉满,咱也只能硬着头皮开干。 这次也是分享以下驱动开发的思路和例程,希望能够帮助到相关人士,顺便,这款芯片要求5V和1.8V双电源供电也是让硬件同事疯狂吐槽。 1.通讯接口 AD4630-24支持串行通讯,为了提高采样结果的读取速率,SDO最高支持8通道同步输出,但很可惜这次使用的单片机是STM32F407,意法连QSPI都不给,只能使用标准的SPI接口通讯,例程也
[单片机]
【STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
STM32单片机最小系统详解
STM32F103RCT6: STM32F103RCT6是一种嵌入式-微控制器的集成电路(IC),32位 Cortex-M3内核处理器,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K,封装LQFP64。 STM32单片机命名规则: STM32单片机最小系统: 所谓单片机最小系统,就是让单片机能够正常运行,最少且必须的器件所组成的系统。 单片机最小系统上电之后,单片机可以正常复位,下载程序,除此之外没有其他任何功能。 在最小系统保证正确的基础上,可以依次添加其他功能模块或器件,使之单片机具有实际功能。 STM32单片机最小系统包括一个复位电路和一个时钟电路。如下图1所示。 图
[单片机]
STM32与FPGA的SPI通信实现详解:从MCU到FPGA的互相通信实践(第3篇)
前几篇的原理与代码写得不够详细并且有疏漏得地方,在本篇中会进行纠正 首先,我们先认识到我们需要在FPGA中创建什么类型的模块,一个ROM供MCU读取,一个RAM供MCU写入,若干计数器。为了实现这些模块的通信,在这中间我们需要使用一些模块来达到目的。最为重要的模块就是充当MOSI与MISO的处理转化输入输出的模块,我们暂且简称其为SPI_BUS模块,这个模块的一个作用是处理MCU输入的32位数据,将其转化为地址和数据两部分数据发送给各个模块 由上图实例化的模块图可以看出,输出一个16位的数据和一个32位的使能标志,有关使能标志位如何寻址相应寄存器在上一章节讲过,不再赘述。而这边的I_DIN通过一个MUX选择器来选择MCU读
[单片机]
MDK Debug时No target connected,STM32 ST-LINK Utility连接不上单片机的解决办法“Can not connect to target!
芯片下载程序成功,再次下载时出现,以下错误。 点击确认后,如下提示。 或提示如下。 不管怎么设置都侦测不到芯片。 使用STM32 ST-LINK Utility连接单片机时提示下边错误 “Can not connect to target! 解决办法,可用镊子把复位脚拉低,单击STM32 ST-LINK Utility连接按钮,松开镊子,就OK了!再把数据清除了。
[单片机]
点点滴滴学习STM32单片机系列 (二)
因为最近在做Modbus方面的东西,所以准备就这个话题边做边写。 1.写在之前 epoch1 作为一个非电子学专业的人,至少在两年前我是不知道有ModBus这种高层级的通讯协议的。2年前开始学习电子是从接触arduino开始的,探索中弄清了什么是UART,什么又是RS232,RS485.就在这种薄弱的认知下开始自己稍微复杂一点的arduino项目。多传感器数据的获取,然后通过433的模块进行无线传输。 其实仅仅是传输数据还并不困难,我最早的做法是将数据打包成如下的样子。 S:1:25.00:E:S:2:100:E 所有的数据均以S开头E结尾,并且使用:符号隔开。紧随S其后的是传感器编号,而后是传感器数据。这种数据的编码方式比较简单
[单片机]
单片机 STM32 HAL uartext串口功能
/*************笔记**************** 1、CudeMX中配置串口时,需要增加DMA功能,并使能串口中断!!! Mode--Asynchronous Hardware Flow Control(RS232)--Disable 2、在stm32f1xx_it.c中,找到void USART1_IRQHandler(void),并在用户代码区加入UsartReceive_IDLE(&huart1); 备注:根据实际串口号,进行修改,变通,当出现多个串口时,在每个串口中断函数里,都要加入该函数。 extern void UsartReceive_IDLE(UART_HandleTypeD
[单片机]