当前位置:   article > 正文

【基于STM32F103C8T6的智能饮水机系统设计】_基于stm32的智能饮水机

基于stm32的智能饮水机

前言

使用STM32F103C8T6微处理器作为主控芯片,通过DS18B20温度传感器、HX711压力传感器、OLED显示屏、HLK-V20智能语音,红外传感器、光敏传感器、蜂鸣器报警、按键,LED灯等模块,做出一个智能饮水机的模拟系统。
下面不做过多介绍,毕竟模块的介绍都是大同小异。

系统框图

体统框图

模块

STM32F103C8T6微处理器作为主控芯片

STM32被称作为32-bit微控制器,他拥有32条地址总线
STM32F103C8T6

DS18B20温度传感器

DS18B20
DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20内部构成主要由以下3部分组成: 64 位ROM,高速暂存器,存储器。
64 位ROM存储独有的序列号,ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。这样就可以实现一根总线上挂接多个DS18B20的目的。
(1)单片机拉低总线至少480us,产生复位脉冲,然后释放总线(拉高电平)。
(2)这时DS8B20检测到请求之后,会拉低信号,大约60~240us表示应答。
(3)3DS8B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示初始化成功
(4)DS18B20拉低电平60~240us之后,会释放总线。
初始化时序图


//DS18B20的启动函数,返回0,启动成功
u8 DS18B20_Startup(void)
{
	u8 data;
	
	//查看DS18B20的启动时序,配置这些参数
	DS18B20_Output_Intput(1);//向外写
	DS18B20_LOW;//置为低电平
	Delay_us(480);
	DS18B20_HIGH;//置为高电平(释放)
	Delay_us(30);
	
	DS18B20_Output_Intput(0);//读取
	//获取DS18B20的状态,成功返回0,在60-240us之内返回
	data = GPIO_ReadInputDataBit(DS18B20_PROT, DS18B20);
	Delay_us(200);
	
	return data;//把状态返回
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

写时序图:
在写时序起始后15μs到60μs期间,DS18B20处于采样单总线电平状态。如果在此期间总线为高电平,则向DS18B20写入1;如果总线为低电平,则向DSl8B20写入0。
写时序图


//总线写时序
void DS18B20_Write_Byte(u8 data)
{
	for (u8 i=0; i<8; i++)
	{
		//向外写
		DS18B20_Output_Intput(1);
		DS18B20_LOW;//先拉低
		Delay_us(2);//延时1us以上,在可以向总线写数据
		//DS18B20先出来的是低位,然后是高位
		//高位往低位移动 >>,8次,最高位就变成最低位了
		(data&0x01) ? DS18B20_HIGH:DS18B20_LOW;
		Delay_us(45);
		DS18B20_HIGH;//释放
		
		data >>= 1;
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

读时序图:
DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。
读时序图


//读
u8 DS18B20_Read_Byte(void)
{
	u8 data = 0;
	
	for (u8 i=0; i<8; i++)
	{
		data >>= 1;
		//读数据,详细看DS18B20总线读时序
		DS18B20_Output_Intput(1);
		DS18B20_LOW;
		Delay_us(2);
		DS18B20_HIGH;//释放
		
		DS18B20_Output_Intput(0);
		//查看状态,为1就可以读取
		if (GPIO_ReadInputDataBit(DS18B20_PROT, DS18B20) == SET)
		{
			data |=0x80;//或 8次低边高
		}
		Delay_us(45);
	}
	//将读到的数据返回
	return data;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

HX711压力传感器

HX711称重传感器是一种高精度的模拟数字转换器,它可以将模拟信号转换为数字信号,从而实现对物体重量的精确测量。它的工作原理是基于压阻效应和电桥原理,它可以将物体重量转换为数字信号,从而实现对物体重量的精确测量。在本次项目中,HX771芯片接STM32单片机的A口,引脚为10、11。接着定义结构体、设置串口时序脉冲,最后用Get_Weight函数进行称重,如果重量达到规定的水量要求则一切正常,如果水量达不到规定水量值则其他功能停止,蜂鸣器报警,显示屏显示“水量不足!”,此时提示加水。
引脚功能图
功能
时序图


u32 HX711_Read(void)	//增益128
{
	unsigned long count; 
	unsigned char i; 
	HX711_DOUT_H;
	Delay_us(1);
	HX711_SCK_L; 
	count=0;
	while(HX711_DOUT_Data); 
	for(i=0;i<24;i++)
	{ 
		HX711_SCK_H;
		count=count<<1; 
		Delay_us(1);
		HX711_SCK_L;
		if(HX711_DOUT_Data)
		count++; 
		Delay_us(1);
	} 
	HX711_SCK_H; 
	count=count^0x800000;//第25个脉冲下降沿来时,转换数据
	Delay_us(1);
	HX711_SCK_L;  
	return(count);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

OLED显示屏

OLED,即有机发光二极管( Organic Light Emitting Diode )。OLED同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性。分辨率为128*64,IIC 接口模块。

(1)当 SCL 线是高电平时,SDA线从高电平向低电平切换,此时就是起始信号。当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示停止信号。
时序图
(2)当SCL是高电平的时候,此时可以通过SDA传输数据,当 SCL 为低电平时,SDA 的数据无效。
时序图
(3)若想对方继续发数据,需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。
时序图

HLK-V20智能语音

HLK-V20是针对大量纯离线控制场景和产品最新推出的高性能纯离线语音识别模块,可广泛且快速的应用于智能家居、各类智能小家电、86盒、玩具、灯具、工业、医疗、物联网、汽车、安防与照明等需要语音操控的产品。
模块采用32bit RSIC架构内核,并加入了专门针对信号处理和语音识别所需要的DSP指令集,支持浮点运算的FPU运算单元,以及FFT加速器,通过神经网络对音频信号进行训练学习,提高语音信号的识别能力。
语音自定义参考 http://h.hlktech.com/Mobile/download/fdetail/93.html
HLK-V20

HLK-V20

红外传感器

该模块接入GPIOB的GPIO_Pin_12、GPIO_Pin_13两个引脚,引脚配置为50MHz(高速)的上拉输入。该模块检测是否有物体,若检测到物体,则水流出,可接水。
红外传感

光敏传感器

该模块接入GPIOB的GPIO_Pin_14、GPIO_Pin_15两个引脚,引脚配置为50MHz(高速)的上拉输入。当我们接水时,由于水杯的遮挡,该模块识别到光线变弱,输出期间通电,则水流出,可接水。
光敏传感

蜂鸣器

该模块接入GPIOA的引脚GPIO_Pin_2,引脚配置为50MHz(高速)的推挽输出。引脚输出低电平时,输出器件会通电,蜂鸣器发出警报。当压力传感器上检测不到压力(即无水时),蜂鸣器发出警报。
蜂鸣器

按键

微机键盘通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。
其抖动过程如下图10所示,抖动时间的长短与开关的机械特性有关,一般为5-10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。为了克服你、按键触点机械抖动所致的检测误判,必须采取消抖措施。按键较少时,可采用硬件消抖;按键较多式,采用软件消抖。
消抖

//进行消抖
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == RESET)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == RESET);
		Delay_ms(20);
		*KeyNum1 = 0;
		*KeyNum2 = 0;
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

独立按键式直接用I/O口线构成的单个按键电路,其特点式每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。
独立按键的软件常采用查询式结构。先逐位查询没跟I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

按键

LED灯

该模块接入GPIOB的GPIO_Pin_6、GPIO_Pin_7、GPIO_Pin_8、GPIO_Pin_9的4个引脚,分别模拟饮用水的4种状态:冷水(蓝灯)、热水(绿灯)、保温(黄灯)、加热(红灯)。引脚配置为50MHz(高速)的推挽输出,引脚输出低电平时,输出器件会通电,外设LED被点亮。起始状态若无水,灯全灭,蜂鸣器发出警报。加入冷水,红灯发光,进行加热;此时,可以接冷水(通过光敏传感与红外传感),蓝灯发光。当水温加热到指定温度,黄灯发光,进行保温。此时,冷水、热水都可以接(通过光敏传感与红外传感),对应蓝灯、绿灯发光。
LED

作品

视频展示:

基于STM32F103C8T6的智能饮水机系统设计

上干货,程序源代码
链接:https://pan.baidu.com/s/1vu5rw8rFpi0SrwwIgjeHpg
提取码:12w5

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/480680
推荐阅读
相关标签
  

闽ICP备14008679号