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

基于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;}

相关文章:

  • QT文件和文件夹拷贝操作
  • NetApp ONTAP 9 故障磁盘更换操作指南
  • 《零基础入门学习Python》
  • OpenGL shader开发实战学习笔记:第十二章 深入光照
  • Linux指令合集
  • C++ STL:从零开始模拟实现 list 容器
  • ACWing——算法基础课
  • 棉花糖实验新解
  • Linux-scp命令
  • 3DMAX 常用渲染器对比及渲染 101 云平台优势
  • (EtherNet/IP 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
  • 存储器综合:内存条
  • 【NLP 69、KG - BERT】
  • linux sysfs的使用
  • μC/OS 版本演进过程 | uC/OS-II 和 uC/OS-III 有什么区别?
  • 运维:概念、模式与硬件基础
  • 使用Python可视化莫比乌斯带
  • 【leetcode题解】滑动窗口
  • STM32 栈地址起始位置不正确
  • V5验证官网滑块验证码WSS协议逆向算法分析
  • 对话地铁读书人|财务管理孟先生:老婆让我看《三体》
  • 分离19年后:陈杨梅首度露面,父亲亲手喂棉花糖给女儿吃
  • 探索未来课堂更多可能,“人工智能课堂分析循证实验室”在沪成立
  • 经济日报:“关税讹诈”拦不住中国制造升级
  • 大理州工业投资(集团)有限公司党委副书记、副总经理赵云接受审查调查
  • 网络社群的早期历史及其启示