当前位置: 首页 > web >正文

基于STM32的HX711货物称重系统

资料下载地址:基于STM32的HX711货物称重系统(程序+原理图+pcb)

一、项目介绍

1、货物重量检测:0-20kg

2、按键设置单个货品的重量,根据测得总重,算出当前货品数量,低于3个显示货品不足,超过3个显示货品重组;

3、液晶显示相关数据;

二、视频展示

基于STM32的HX711货物称重系统

三、原理图

四、PCB

 五、程序

#include "hx711.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"
#include "sys.h"
#define SCALE      106.5f
extern uint32_t setweight;
extern u8 key;
int32_t  HX711_Buffer;
int32_t  Weight_Maopi;
int64_t  Weight_Shiwu;void Key_Init(void)
{__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef  GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; //时钟端口配置为输出GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;GPIO_InitStruct.Pull  = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}u8 KEY_Scan(void)
{if((KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || KEY3 == 0)){HAL_Delay(5);//去抖动if(KEY0 == 0)return KEY0_PRES;if(KEY1 == 0)return KEY1_PRES;if(KEY2 == 0)return KEY2_PRES;if(KEY3 == 0)return WKUP_PRES;}elsereturn 0;// 无按键按下
}void Hx711_init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitTypeDef  GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_0;//时钟端口配置为输出GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull  = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_1;//数据引脚配置输入模式GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);// 复位HX711for(uint8_t i = 0; i < 25; i++){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);HAL_Delay(1);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);}}void Delay_ms(uint8_t time)
{uint8_t i;while(time--){for(i = 0; i < 113; i++);}}//****************************************************
//读取HX711
//****************************************************
//****************************************************
//读取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;
}
int64_t oledweight = 0;
//****************************************************
//称重
//****************************************************
int64_t buf[50] = {0};
void Get_Weight(void)
{static int i = 0;Weight_Shiwu = 0;//  Weight_Shiwu += HX711_Read() / SCALE;buf[i] = HX711_Read() - Weight_Maopi;if(i ==9){Weight_Shiwu = get_average(buf,i+ 1);//       Weight_Shiwu = Weight_Shiwu - Weight_Maopi;Weight_Shiwu =  77400-Weight_Shiwu/ SCALE;if(Weight_Shiwu < 400 )Weight_Shiwu = 0;oledweight = Weight_Shiwu;i = 0;memset(buf,0,50);}
//    else
//        Weight_Shiwu = 0;i++;
}int64_t  get_average(int64_t *arr, int length)
{int i = 0;int64_t sum = arr[0];int64_t max = arr[0];int64_t min = arr[0];// 遍历数组,计算总和并找出最大值和最小值for (int i = 1; i < length; i++){sum += arr[i];if (arr[i] > max){max = arr[i];}if (arr[i] < min){min = arr[i];}}int64_t filtered_sum = sum - max - min;int filtered_count = length - 2;return filtered_sum / filtered_count;}

http://www.xdnf.cn/news/991.html

相关文章:

  • Qt界面控件中点击触发处理耗时业务的方法
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • Python学习电子书资料
  • 2025年在Ai时代下,前端如何提升
  • 精密环境守护者:M-1J1R ROSAHL 电解除湿器,重塑激光设备稳定性边界
  • 布尔差分法解析:从逻辑导数到电路优化
  • 17.整体代码讲解
  • RAG(检索增强生成) 和 Agent(智能体) 在 AI 应用开发中的核心对比分析,涵盖定义、技术架构、适用场景及优缺点
  • python@abstractmethod 是什么含义?
  • [陇剑杯 2021]内存分析(问2)
  • Maven插件管理的基本原理
  • [陇剑杯 2021]内存分析(问1)
  • Spring AI MCP
  • 计算机组成与体系结构:存储器(Memory)
  • Unity使用Rider的常用快捷键
  • 【显卡占用】kill程序后,显卡仍被占用
  • CAD文件如何导入BigemapPro
  • 基于Python的施工图与竣工图对比小工具开发方案
  • 使用 WinDbg 启动程序并捕获崩溃转储的完整流程
  • ANSYS Fluent -地下市政供热管道泄漏模型-note
  • 职坐标IT培训:人工智能职业跃迁路径
  • Timm 加载本地 huggingface 模型
  • requestAnimationFrame是什么?【前端】
  • Unreal如何实现一个Highlight高亮效果
  • 【PyQt5】@QtCore.pyqtSlot()的作用
  • 深度学习-全连接神经网络-2
  • Fluent 内置双向流固耦合FSI 液舱晃荡仿真计算
  • Java Lambda表达式指南
  • 4月21日复盘
  • 飞控系统的鲁棒性模块详解!