一、主要功能
打开串口调试助手,波特率设置为,系统运行后,蜂鸣器滴一声表示去皮完成,同时串口助手会显示传感器检测实时重量,若重量超过2000g,蜂鸣器报警。当按下KEY1键,物品稳定重量会显示在串口助手上。
二、硬件资源
1、STM32开发板一个(本人使用为STM32407)
2、HX711称重模块一个
3、USB线一条
4、杜邦线
三、硬件连接
蜂鸣器模块-->单片机IO BEEP-->PF8 按键模块-->单片机IO KEY0-->PA0 KEY1-->PE2 KEY2-->PE3 KEY3-->PE4 HX711称重模块(5KG)-->单片机IO DOUT-->PB10(USART3_TX) SCK-->PB11(USART3_RX) VCC-->5V GND-->GND
讯享网
(经测试,选用供电电压3.3V结果会不稳定,故采用5V供电。)
四、软件设计
1、主要框架

2、主要代码
讯享网//主函数程序 #include "system.h" #include "SysTick.h" #include "led.h" #include "usart.h" #include "hx711.h" #include "beep.h" #include "key.h" int main() { u8 res=0; u8 key=0; SysTick_Init(168); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组,分2组 USART1_Init();//波特率设置为 LED_Init();//LED初始化 BEEP_Init();//蜂鸣器初始化 KEY_Init();//按键初始化 hx711_init();//HX711模块初始化 get_plet();//获取毛皮重量 BEEP=1; delay_ms(1000); get_plet();//延时1s,再一次获取毛皮重量 BEEP=0; while(1) { LED1=!LED1;//LED1灯在正常运行中不断闪烁 res=get_suttle();//获取净重 if(res==0) { printf("实时检测重量:%d克\r\n",hx_str.suttle); if(hx_str.suttle>2000) BEEP=1; else BEEP=0; } } delay_ms(300); key=KEY_Scan(0); if(key==KEY2_PRESS) { printf("物品检测重量:%d克\r\n",hx_str.suttle); } }
//hx711部分程序 u32 hx711_read(void) { u32 count; u8 i; HX711_DOUT=1; delay_us(10); HX711_SCK=0; count=0; while(HX711_DOUT); for(i=0;i<24;i++) { HX711_SCK=1; count=count<<1; delay_us(10); HX711_SCK=0; if(HX711_DOUT) count++; delay_us(10); } HX711_SCK=1; count=count^0x;// 第25个下降沿来时,转换数据 delay_us(10); HX711_SCK=0; return(count); } //获取毛皮重量 void get_plet(void) { hx_str.plet=hx711_read(); } //正常返回0,负重返回2,超重返回1 u8 get_suttle(void) { hx_str.suttle=hx711_read(); if(hx_str.suttle>hx_str.plet) { hx_str.suttle=hx_str.suttle-hx_str.plet;//进行去皮 if(hx_str.suttle>0) { hx_str.suttle=hx_str.suttle/GapValue;//转换为实际重量,此处GapValue设置为400 if(hx_str.suttle>5000)//如果超过HX711最大5kg量程 return 1; else return 0; } else return 2; } return 1; }
五、实验现象

如需更多帮助,请私信作者。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116430.html