|
在本篇文章中,我们将使用Arduino开发板、称重传感器、HX711分线板模块以及LCD液晶显示屏制作一款电子秤。本文是一个非常简单的Arduino重量测量项目。
电子秤使用称重传感器来测量由负载产生的重量,此处大多数称重传感器都参照应变计的方法,该应变计将压力转换为电信号,这些称重传感器具有四个应变计,嵌在惠斯通电桥结构(Wheatstone bridge)中。
所需的组件 为了使用称重传感器和HX711模块设计Arduino电子秤,我们使用以下组件: ● Arduino UNO开发板 ● HX711分线板模块 ● 称重传感器 ● 1602 LCD显示屏 ● 按钮开关 ● 面包板 ● 连接线 ● 称重传感器的安装结构(螺母、螺栓、框架、底座) ● 标准重量块(100克)
称重传感器是什么? 称重传感器是用于产生电信号的传感器。它将诸如张力、压力或扭矩之类的力转换为可以测量和标准化的电信号。随着施加到称重传感器上的力增加,电信号按比例变化。称重传感器用于测量重量。称重传感器进行的应变测量有助于在压力下保持设备的完整性,并保护附近的人员和设备。 
称重传感器通常由一个弹簧元件组成,在该弹簧元件上已放置了应变仪。弹簧元件通常由钢或铝制成。这意味着它非常坚固,但弹性也很小。顾名思义,弹簧元件表明,钢在载荷作用下会发生轻微变形,但随后会返回到其初始位置,对每种载荷都具有弹性。这些极小的变化可以通过应变仪获得。然后,最后由分析电子设备解释应变计的变形以确定重量。
HX711称重传感器放大器分线板模块 称重传感器放大器是基于HX711的小型分线板模块,可让您轻松读取称重传感器以测量重量。通过将放大器模块连接到微控制器,您将能够读取称重传感器的电阻变化,并且通过一些校准,您将可以获得非常准确的重量测量值。
HX711使用两线接口(时钟和数据)进行通信。任何微控制器的GPIO引脚都可以连接,并且已经编写了许多库,从而可以轻松地从HX711读取数据。称重传感器使用四线惠斯通电桥配置连接到HX711。这些通常是红色、黑色、白色、绿色和黄色。每种颜色对应于称重传感器的常规颜色编码: 1. 红色(励磁+或VCC)。 2. 黑色(励磁或GND)。 3. 白色(放大器+,信号+或输出+)。 4. 绿色(A-、S-或O-)。 5. 黄色(外壳)。
称重传感器和HX711的连接电路:

称重传感器的底座 还需要使用螺母和螺栓将基座固定在其上方的称重传感器。在这里,我们使用了一个硬质胶合板作为框架,用于在其上放置物品,并使用了一块轻木板作为基础。这是必需的,因为在称重传感器上施加一定的重量时,称重传感器会略微弯曲。
Arduino连接HX711称重传感器的连接电路图 如下图所示连接电路图
工作说明 在使整个电路正常工作之前,有必要使用HX711校准称重传感器。我们首先放置100g重量的砝码,调整直到在LCD显示屏上显示100g重量。一旦在称重传感器上测得100g的重量,就完成校准。现在,您只需放置任何重量即可进行99.9%的精度测量。
称重传感器是放大器,可感测重量,并向HX711负载放大器模块提供模拟电电压。然后,将这个放大后的值馈送到Arduino,将HX711的输出转换为以克为单位的重量值。输出结果显示在1602 LCD上。
HX711称重传感器与Arduino连接的源代码 只需复制此代码并将其上传到Arduino开发板即可。确保与电路图中的连接相同。 - #include <LiquidCrystal.h>
- LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
- #define DT A0
- #define SCK A1
- #define sw 9
- long sample=0;
- float val=0;
- long count=0;
- unsigned long readCount(void)
- {
- unsigned long Count;
- unsigned char i;
- pinMode(DT, OUTPUT);
- digitalWrite(DT,HIGH);
- digitalWrite(SCK,LOW);
- Count=0;
- pinMode(DT, INPUT);
- while(digitalRead(DT));
- for (i=0;i<24;i++)
- {
- digitalWrite(SCK,HIGH);
- Count=Count<<1;
- digitalWrite(SCK,LOW);
- if(digitalRead(DT))
- Count++;
- }
- digitalWrite(SCK,HIGH);
- Count=Count^0x800000;
- digitalWrite(SCK,LOW);
- return(Count);
- }
- void setup()
- {
- pinMode(SCK, OUTPUT);
- pinMode(sw, INPUT_PULLUP);
- lcd.begin(16, 2);
- lcd.print(" Weight ");
- lcd.setCursor(0,1);
- lcd.print(" Measurement ");
- delay(1000);
- lcd.clear();
- calibrate();
- }
- void loop()
- {
- count= readCount();
- int w=(((count-sample)/val)-2*((count-sample)/val));
- lcd.setCursor(0,0);
- lcd.print("Measured Weight");
- lcd.setCursor(0,1);
- lcd.print(w);
- lcd.print("g ");
- if(digitalRead(sw)==0)
- {
- val=0;
- sample=0;
- w=0;
- count=0;
- calibrate();
- }
- }
- void calibrate()
- {
- lcd.clear();
- lcd.print("Calibrating...");
- lcd.setCursor(0,1);
- lcd.print("Please Wait...");
- for(int i=0;i<100;i++)
- {
- count=readCount();
- sample+=count;
- }
- sample/=100;
- lcd.clear();
- lcd.print("Put 100g & wait");
- count=0;
- while(count<1000)
- {
- count=readCount();
- count=sample-count;
- }
- lcd.clear();
- lcd.print("Please Wait....");
- delay(2000);
- for(int i=0;i<100;i++)
- {
- count=readCount();
- val+=sample-count;
- }
- val=val/100.0;
- val=val/100.0; // put here your calibrating weight
- lcd.clear();
- }
复制代码
|