物联网毕设分享 - 基于stm32的智能电子秤系统 - 物联网 嵌入式 单片机


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于stm32的智能电子秤系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:3分

🔥 项目分享与指导:https://gitee.com/sinonfin/sharing

1 简介

基于stm32的智能电子秤设计,有很多功能,称重,报警,蓝牙app连接,语音播报,去皮等。

2 主要器件

  • STM32F103C8T6
  • HX711压力传感器
  • 矩阵键盘
  • 蓝牙模块
  • 电子秤

3 实现效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4 设计原理

4.1 STM32F103C8T6

简介
STM32F103C8T6是一款基于ARM Cortex-M3内核(ARM公司在ARM11以后改用Cortex命名,并分成A、R和M三类,M系列有M0、M0+、M3、M4、M7)的32位的微控制器,采用LQFP48封装,由意法半导体公司(ST)推出,属于STM32系列(ST公司还有SPC5X系列微控制器)。其程序存储器FLASH容量是64KB (64K x 8bit),RAM容量是20KB(20K x 8bit),2个12bit ADC合计12路通道(外部通道只有PA0到PA7、PB0到PB1,并不是18通道),37个通用I/O口(PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1),4个16bit定时器(TIM1(高级控制定时器,带死区插入,常用于产生PWM控制电机)、TIM2、TIM3、TIM4),2IIC,2SPI,3USART,1CAN,工作电压2V~3.6V,工作温度为-40°C ~ 85°C,系统时钟最高可到72MHz(一般是由8MHz的外部时钟经锁相环9倍频到72MHz)。

相关引脚分布

本项目中STM32主要通过ADC采集MQ-3模块的值转换为酒精浓度值显示在LCD屏幕上。同时,驱动语音播报模块、风扇和蜂鸣器。

4.2 HX711压力传感器

简介

HX711称重传感器专用模拟/数字(A/D)转换器芯片,是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B则为固定的32增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。

特点

  • 两路可选择差分输入
  • 片内低噪声可编程放大器,可选增益为64 和128
  • 片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源
  • 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟
  • 上电自动复位电路
  • 简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程
  • 可选择10Hz 或80Hz 的输出数据速率
  • 同步抑制50Hz 和60Hz 的电源干扰
  • 耗电量(含稳压电源电路):典型工作电流:<1.7mA, 断电电流:<1μA
  • 工作电压范围:2.6 ~ 5.5V
  • 工作温度范围:-20 ~ +85℃
  • 16 管脚的SOP-16 封装

原理图
在这里插入图片描述

5 部分核心代码

void Hx711_init(void)
{
	__HAL_RCC_GPIOD_CLK_ENABLE();
	GPIO_InitTypeDef  GPIO_InitStruct; 
	GPIO_InitStruct.Pin = GPIO_PIN_5;//时钟端口配置为输出		
    GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  
    GPIO_InitStruct.Pull  = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	
	HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 

	GPIO_InitStruct.Pin = GPIO_PIN_6;//数据引脚配置输入模式
	GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;  
	HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 

}

//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void)	//增益128
{
	unsigned long val = 0; 
	unsigned char i = 0; 
 
	//判断模块是否准备好
	while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));
	delay_us(1);   
	//sck 拉低
	GPIO_ResetBits(GPIOB,GPIO_Pin_0);
	//再次判断是否准备好
	while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));
  
	for(i=0;i<24;i++) 
	{ 
		delay_us(100); 
		GPIO_SetBits(GPIOB,GPIO_Pin_0);	   
		val=val<<1; 
		delay_us(1);  
		GPIO_ResetBits(GPIOB,GPIO_Pin_0);	   
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1))  
		val++; 
		delay_us(1); 
	} 
	GPIO_SetBits(GPIOB,GPIO_Pin_0); 
	val = val^0x800000; 
	delay_us(1); 
	GPIO_ResetBits(GPIOB,GPIO_Pin_0); 
	delay_us(1);  
	return val; 
}


void Delay_ms(uint8_t time)
{
  uint8_t i;
	while(time--){
	for(i=0;i<113;i++);
	}
 
}


//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void)	//增益128
{
	unsigned long data=0; 
	unsigned char i;	
	HAL_GPIO_WritePin(HX711_SCK_GPIO_Port ,HX711_SCK_Pin,GPIO_PIN_RESET);
	Delay_ms(1);
	while(HAL_GPIO_ReadPin(HX711_Dout_GPIO_Port ,HX711_Dout_Pin)==GPIO_PIN_SET);
	for(i=0;i<24;i++)
	{  
	  	HAL_GPIO_WritePin(HX711_SCK_GPIO_Port ,HX711_SCK_Pin,GPIO_PIN_SET);
		Delay_ms(1);
		data=data<<1; 
		HAL_GPIO_WritePin(HX711_SCK_GPIO_Port ,HX711_SCK_Pin,GPIO_PIN_RESET); 
		if(HAL_GPIO_ReadPin(HX711_Dout_GPIO_Port ,HX711_Dout_Pin)== GPIO_PIN_SET) 
			  data++;		
	}
  
	 HAL_GPIO_WritePin(HX711_SCK_GPIO_Port ,HX711_SCK_Pin,GPIO_PIN_SET);
	 data=data^0x800000;//第25个脉冲下降沿来时,转换数据	
	 Delay_ms(1);
	 HAL_GPIO_WritePin(HX711_SCK_GPIO_Port ,HX711_SCK_Pin,GPIO_PIN_RESET); 
 
	 	
	
	return (data);
}

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi(void)
{
	Weight_Maopi = HX711_Read()/SCALE;	
} 
 
//****************************************************
//称重
//****************************************************
void Get_Weight(void)
{

	Weight_Shiwu =HX711_Read()/SCALE;
	if(Weight_Shiwu>=Weight_Maopi)
	{
		Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
		Weight_Shiwu -= 18305;
		if(Weight_Shiwu < 0 )
			Weight_Shiwu = 0;
			
	}
	else
			Weight_Shiwu=0;
		
	
}


6 最后

🔥 项目分享与指导:https://gitee.com/sinonfin/sharing

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物联网是指通过互联网连接和交互的物理设备,嵌入式则是指集成在其他系统中的计算机系统或电子系统。基于STM32F103的智能电子秤源代码是指使用STM32F103单片机来实现智能电子秤的代码。 智能电子秤是一种可以通过数字方式显示重量,且具备连网功能的电子秤。它可以将测得的重量数据通过物联网的技术传输到云服务器或其他终端设备中,实现远程监控和数据存储等功能。 基于STM32F103的智能电子秤源代码可以使用Keil或其他开发环境编写,实现以下功能: 1. 传感器数据采集:通过外接的传感器(如压力传感器)获取待测物体的重量信息,然后将其转换为数字信号送入STM32F103单片机。 2. 数据处理:在单片机中进行数据处理和算法运算,对传感器采集到的数据进行滤波、校准和运算等操作,得到可靠的重量数据。 3. 数据显示:使用液晶显示屏或其他显示设备将处理后的重量数据以数字形式显示出来,方便用户查看。 4. 连网功能:通过与物联网模块(如Wi-Fi模块或蓝牙模块)的连接,将重量数据传输到云服务器或其他终端设备中,实现远程监控和数据存储等功能。 5. 用户界面:通过单片机上的按键和显示设备,实现用户与智能电子秤的交互操作,如调整单位、零点校准等。 为了实现上述功能,需要使用C语言或其他编程语言编写STM32F103的智能电子秤源代码,并进行调试和验证。代码中需要涉及到STM32F103的GPIO控制、模拟数字转换(ADC)、串口通信(UART)等相关知识。 当代码编写完成后,需要将其烧录到STM32F103单片机上,然后连接外部传感器和显示设备,即可实现智能电子秤的功能。 通过物联网的技术,智能电子秤可以实现远程数据传输和远程控制,方便用户进行重量监测和数据管理。并且,基于STM32F103的嵌入式设计可以提供可靠性和稳定性,适用于各种物联网应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值