数字负载秤是现代工程设计的另一个奇迹。是的,我们谈论的是在大多数杂货店和其他地方经常看到的电子秤,但是您是否想知道电子秤的工作原理?为了回答这个问题,在这个项目中,我们将研究称重传感器及其工作原理。最后,我们将使用HX711重量传感器构建一个基于Arduino的便携式负载秤,该传感器可以测量最大10kg的重量。
这款称重机非常适合当地商店存储大量物品。像商业产品一样,我们的体重秤将带有一个零按钮,用于将体重秤归零。此外,它还可以设置测量重量,当测量重量达到设定重量时,蜂鸣器会快速鸣叫并在设定重量等于测量重量时停止。这样,用户可以只听声音就可以打包,而不必看显示器。因为这是一个非常简单的项目,所以我们将使用Arduino和应变仪称重传感器等组件轻松构建此项目。因此,现在就开始进行讨论吧!
在上一篇文章中,我们使用流行的HX711称重传感器放大器模块制作了基于Raspberry Pi的重量传感器和具有电子邮件警报和Web监视功能的IoT智能容器等项目。因此,请检查是否满足您的要求。
Arduino称重机工作
该项目的主要组件是称重传感器和HX711称重传感器放大器模块。如您所见,一侧标有10公斤。另外,您会注意到称重传感器上有某种白色的保护胶,并且四种不同颜色的电线出来了,这将在本文后面揭露白色保护胶和这些四色电线的功能的秘密。
称重传感器是将力或压力转换为电输出的传感器。它有两个侧面,比如说右侧和左侧,它是由铝块制成的。如您所见,通过在中间放置一个大孔可以使材料变薄。这就是为什么当将负载放置在安装侧时,该点会变形的原因。现在想象一下,右侧传感器安装在基座上,而左侧是放置载荷的位置,由于中间有一个大孔,这种配置会使应变仪载荷传感器变形。
当将负载放在称重传感器的负载侧时,顶部将受到拉力,而底部将受到压缩。这就是铝棒在左侧向下弯曲的原因。如果我们测量这种变形,就可以测量施加在铝块上的力,这正是我们要做的。
现在,问题仍然是白色保护胶里面有什么?在这种保护胶中,我们会发现一个非常薄的弹性部件,称为应变仪。应变仪是用于测量应变的组件。如果我们仔细看一下这个组件,我们会看到两个连接垫,然后我们得到了具有重复偏转的导线图案。该导线具有确定的电阻。当我们弯曲它时,电阻值会改变吗?因此,将应变仪的一侧安装并固定在一个地方,如果将重物放在铝条的另一侧,这将迫使应变仪弯曲,从而导致电阻变化。实际情况如何?应变计的导电图形是由铜制成的,该导线将具有一定的面积和长度,因此这两个单位将提供导线的电阻。导线的电阻与电流相对。现在很明显,如果导线的面积变小,越少的电子可以通过,意味着电流越低。现在,如果我们增加面积,它将增加导体的电阻。如果对这根导线施加一定的力,这将拉伸区域,同时变小,电阻增加。但是,这种电阻变化非常低。如果我们拉伸应变计,则阻力将增加,而如果对其进行压缩,则阻力将降低。要测量力,我们需要测量阻力。直接测量电阻并不总是可行的,因为变化很小。因此,代替测量电阻,我们可以轻松地测量电压。因此,在这种情况下,我们需要将仪表输出从电阻值转换为电压值。如果对这根导线施加一定的力,这将拉伸区域,同时变小,电阻增加。但是,这种电阻变化非常低。如果拉伸应变仪,则电阻会增加,如果压缩它,则电阻会降低。要测量力,我们需要测量阻力。直接测量电阻并不总是可行的,因为变化很小。因此,我们可以轻松地测量电压,而不是测量电阻。因此,在这种情况下,我们需要将仪表输出从电阻值转换为电压值。如果对这根导线施加一定的力,这将拉伸区域,同时变小,电阻增加。但是,这种电阻变化非常低。如果我们拉伸应变计,则阻力将增加,而如果对其进行压缩,则阻力将降低。要测量力,我们需要测量阻力。直接测量电阻并不总是可行的,因为变化很小。因此,代替测量电阻,我们可以轻松地测量电压。因此,在这种情况下,我们需要将仪表输出从电阻值转换为电压值。阻力会降低。要测量力,我们需要测量阻力。直接测量电阻并不总是可行的,因为变化很小。因此,我们可以轻松地测量电压,而不是测量电阻。因此,在这种情况下,我们需要将仪表输出从电阻值转换为电压值。阻力会降低。要测量力,我们需要测量阻力。直接测量电阻并不总是可行的,因为变化很小。因此,代替测量电阻,我们可以轻松地测量电压。因此,在这种情况下,我们需要将仪表输出从电阻值转换为电压值。
我们可以在惠斯通电桥的帮助下做到这一点。如果电桥平衡,我们将应变仪放在惠斯通电桥中,中间点的电压应为零(之前我们已经建立了一个项目,描述了惠斯通电桥的工作原理,您可以检查一下是否要了解有关该主题的更多信息)。当应变计改变其电阻时,它将使电桥不平衡,并且电压也将发生变化。因此,这就是惠斯登电桥将电阻变化转换为电压值的方式。
但是此电压变化仍然很小,因此要增大此电压,我们需要使用HX711模块。HX711是24位差分ADC,通过这种方式,我们可以测量非常小的电压变化。它将给出从0到2的指数24的值。
基于Arduino的称重机所需的组件
为了使该项目尽可能简单,我们使用了非常通用的组件,您可以在任何本地爱好商店中找到它们。下图将使您对这些组件有所了解。此外,我们还有下面列出的物料清单(BOM)。
- 称重传感器(我们使用的是10公斤称重传感器)
- HX 711放大器模块
- Arduino纳米
- I2C LCD 16X2 –兼容I2C
- 1k电阻-2号
- LED -2
- 蜂鸣器
- 普通PCB
- 7.4V电池(如果您希望便携式)
- LM7805稳压器
基于Arduino的称重机-电路图
称重传感器有四根导线,分别是红色,黑色,绿色和白色。颜色可能会因制造商而异,因此最好参考数据表。将红色连接至HX711板的E +,将黑色连接至E-,将白色连接至A +,将绿色连接至A-,Dout,并将板的时钟分别连接至D4和D5。将按钮的一端连接到D3,D8,D9,另一端接地。我们有I2C LCD,因此将SDA连接到A4,将SCL连接到A5。将LCD,HX711和Arduino的地面连接到地面,还将VCC连接到Arduino的5Vpin 。所有模块均在5V电压下工作,因此我们添加了LM7805稳压器。如果您不希望它具有便携性,则可以使用USB电缆直接为Arduino供电。
在点缀的穿孔板上制作电路
我们已将所有组件焊接在一个普通的点状穿孔板上。我们使用母接头将Arduino和ADC与电路板焊接在一起,还使用电线连接所有按钮和LED。在完成所有焊接过程之后,我们确保从LM7805发出适当的5V电压。最后,我们放置了一个开关来打开/关闭电路电源。完成所有操作后,便如下图所示。
为基于Arduino的称重机构建外壳
如您所见,称重传感器有一些螺纹,因此我们可以将其安装在基板上。我们将使用PVC板作为秤的基础,为此,我们首先从PVC板上切出20 * 20 cm的正方形和四个20 * 5的矩形。然后,使用硬胶将每块胶粘在一起,并制成一个小的外壳。
记住,我们没有固定一侧,因为我们需要在其上放置按钮,LED和LCD。然后,我们在秤的顶部使用了一块塑料板。在永久设置此设置之前,我们需要确保从地面到称重传感器有足够的空间,以便能够弯曲,因此我们在称重传感器和基座之间放置了螺钉和螺母。称重传感器和顶部之间有一些塑料垫片。我们使用圆形的塑料片作为天平的最高智能。
然后,我们将LCD,LED和按钮置于前面板,所有组件均通过长绝缘线连接。完成接线过程后,我们将前面板以一定的角度粘贴到主机座上,这样我们就可以很容易地从LCD读取值。最后,我们将主开关连接到天平的侧面,仅此而已。这就是我们制作体重秤的方式。
您可以根据自己的想法进行设计,但请记住像图像中一样放置称重传感器。
Arduino称重机-代码
现在我们已经完成了数字秤的构建过程,现在可以进入编程部分了。为了便于编程,我们将使用HX711库,EEPROM库和LiquidCrystal库。您可以从官方GitHub存储库下载HX711库,或转到 工具>包含 库>管理 库, 然后使用关键字HX711搜索库,下载该库后,将其安装到Arduino ide中。
首先,我们需要校准称重传感器并将该值存储在EEPROM中,为此,请转到 文件>示例> HX 711_ADC, 然后选择校准代码。上载代码之前,请将天平放在稳定的平面上。然后将代码上传到Arduino并打开串行监视器。然后将波特率更改为572600。现在监控器询问重量,为此我们需要按t并输入。
现在,我们需要在天平上放置已知重量,即194克。放置已知的砝码后,在串行监视器上键入砝码,然后按Enter。
现在,串行监视器询问您是否要将值保存在EEPROM中,因此键入Y以选择是。现在我们可以在串行监视器上看到重量。
该项目的主要代码,是我们从HX711库的示例草图中开发的。您可以从下面下载该项目的代码。
在编码部分,首先,我们添加了所有三个库。HX711库用于获取称重传感器值。EEPROM是Arduino ide的内置库,用于将值存储在EEPROM中,而LiquidCrystal库用于l2C LCD模块。
#包括
然后为不同的引脚定义整数并分配值。 HX711_ADC称重传感器 功能用于设置Dout和时钟引脚。
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell(HX711_dout,HX711_sck); const int calVal_eepromAdress = 0; 长时间 const int Up_buttonPin = 9; const int Down_buttonPin = 8; 浮动buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
在设置部分,首先,我们启动了串行监视器,这仅用于调试。然后我们定义了引脚模式,所有按钮都定义为输入。借助Arduino PULL UP功能,我们通常将引脚设置为逻辑高电平。因此,我们不想为此使用任何外部电阻。
pinMode(tpin,INPUT_PULLUP); pinMode(6,输出); pinMode(12,输出); pinMode(Up_buttonPin,INPUT_PULLUP); pinMode(Down_buttonPin,INPUT_PULLUP);
以下代码行用于设置I2C LCD。首先,我们使用 LCD.print() 函数显示欢迎文本,两秒钟后,我们使用 lcd.clear () 清除显示 内容 。也就是说,开始时,显示屏将ARDUINO BALANCE显示为欢迎文本,两秒钟后,它将清除并显示测量重量。
lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(“ ARDUINO BALANCE”); lcd.setCursor(0,1); lcd.print(“ let's measure”); delay(2000); lcd.clear();
然后开始阅读使用从称重传感器的值 loadCell.begin() 函数,在这之后,我们读取校准值的EEPROM,我们做的是通过使用 EEPROM.get() 函数。也就是说,我们已经使用校准草图将值存储在 EEPROM地址中,我们只是重新获取该值。
LoadCell.begin(); EEPROM.get(calVal_eepromAdress,标定值);
在循环部分中,首先,我们使用 LoadCell.update( )检查来自称重传感器的任何数据是否可用,如果可用,我们读取并存储该数据,为此,我们使用 LoadCell.getData() 。接下来,我们需要在LCD中显示存储的值。为此,我们使用了 LCD.print() 函数。同样,我们打印设定的重量。设定重量借助按钮计数器进行设定。上一节对此进行了解释。
如果(LoadCell.update())newDataReady = true; 如果(newDataReady) { 如果(millis()> t + serialPrintInterval){ float i = LoadCell.getData(); lcd.setCursor(0,0); lcd.print(“ set wei:”); lcd.setCursor(9,0); lcd.print(buttonPushCounter); lcd.setCursor(14,0); lcd.print(“ GM”); lcd.setCursor(0,1); lcd.print(“ weight:”); lcd.setCursor(9,1); lcd.print(i); lcd.setCursor(14,1); lcd.print(“ GM”);
接下来,我们设置皮重值,为此,首先,我们使用 digitalRead() 函数读取皮重按钮 的状态,如果状态为低,则将该皮重设为零。该体重秤的去皮功能是将读数归零。例如,如果我们有一个盛有物品的碗,那么净重就是碗的重量+物品的重量。如果在装载东西之前用碗在称重传感器上按去皮按钮,则篮子的重量将被抵消,我们可以单独测量东西的重量。
如果(digitalRead(tpin)== LOW){ LoadCell.tareNoDelay();
现在,我们需要为不同的指示设置条件,例如设置蜂鸣器的延迟和指示灯状态。我们使用 if 条件进行操作,总共有三个条件。首先,我们计算设定重量和测量重量之间的差,然后将该值存储在变量k中。
float k = buttonPushCounter-i;
1.如果设定重量与测量重量之差大于或等于50gms,则蜂鸣器会发出200毫秒的延迟蜂鸣声(缓慢)。
如果(k> = 50) { digitalWrite(6,HIGH); 延迟(200); digitalWrite(6,LOW); 延迟(200); }
2.如果设定重量和测量重量之间的差值小于50且大于1克,则蜂鸣器会发出50毫秒的蜂鸣声(更快)。
if(k <50 && k> 1) { digitalWrite(6,HIGH); 延迟(50); digitalWrite(6,LOW); 延迟(50); }
3.当测量重量等于或大于设定值时,这将打开绿色指示灯,并关闭蜂鸣器和红色指示灯。
if(i> = buttonPushCounter) { digitalWrite(6,LOW); digitalWrite(12,HIGH); }
我们还有两个void功能()用于设置设定的重量(用于计数按钮按下次数)。
每按一次该功能将设定值增加10gms。这是通过使用Arduino的 digitalRead 函数来完成的,如果引脚为低电平,则意味着按下了按钮,这将使该值增加10gms。
up_buttonState = digitalRead(Up_buttonPin); 如果(up_buttonState!= up_lastButtonState){ 如果(up_buttonState == LOW){ bPress = true; buttonPushCounter = buttonPushCounter + 10; }
同样,
checkdown用于将每次按下的设置值减少10gms。
down_buttonState = digitalRead(Down_buttonPin); if(down_buttonState!= down_lastButtonState){ if(down_buttonState == LOW){ bPress = true; buttonPushCounter = buttonPushCounter-10; }
这标志着编程部分的结束。
这种基于Arduino的电子秤非常适合测量高达10kg的重量(我们可以通过使用额定值更高的称重传感器来增加此限制)。与原始测量相比,此精度为99%。
如果您对此基于Arduino的LCD重量平衡机电路有任何疑问,请将其张贴在评论部分,谢谢!