赞
踩
称重传感器将力转换为可以测量的电信号。电信号与施加的力成比例地变化。称重传感器有不同类型:应变仪、气动式和液压式。在本教程中,我们将介绍应变仪测压元件。
应变仪测压元件由一根金属棒和附带的应变仪组成(上图中的白色胶水下)。应变仪是一种测量物体上的力或应变的电传感器。当外力施加到物体上时,应变仪的电阻会发生变化,这会导致物体形状(在这种情况下是金属棒)变形。阻力的变化与施加的载荷成正比,这使我们能够计算物体的重量。
通常,测压元件有四个连接在惠斯通电桥上的应变仪(如下所示),使我们能够获得准确的电阻测量值。
称重传感器的导线通常具有以下颜色:
HX711放大器是一个接线板,允许轻松读取称重传感器以测量重量。在一侧连接称重传感器导线,在另一侧连接微控制器。HX711使用双线接口(时钟和数据)与微控制器进行通信。
需要焊接GND、DT、SCK和VCC引脚上的插头引脚才能连接到ESP32。我把测压元件导线直接焊接到E+、E-、A-和A+引脚上。称重传感器导线非常薄且易碎,焊接时要小心,以免损坏导线。
HX711放大器通过双线接口进行通信。将其连接到所选微控制器的任何GPIO。将数据引脚(DT)连接到GPIO16,将时钟引脚(CLK)连接到GPIO4。也可以使用任何其他合适的引脚。
称重传感器 | HX111 | HX711 | ESP32 |
---|---|---|---|
红(E+) | E+ | GND | GND |
黑(E-) | E- | DT | GPIO 16 |
白(A-) | A- | SCK | GPIO 4 |
绿(A+) | A+ | VCC | 3.3V |
“管理库”中搜索“HX711 Arduino Library”并安装Bogdan Necula的库。
将称重传感器连接到HX711放大器,并将放大器连接到ESP32。设置好磅秤(称重传感器两端连接的两块板),并安装好HX711库。
在称重之前,需要首先通过获得校准系数来校准称重传感器。校准系数不同,不要跳过。
1) 准备一个已知重量的物体。
2) 将以下代码上传到ESP32。
// 校准称重传感器 #include <Arduino.h> #include "soc/rtc.h" #include "HX711.h" // HX711电路接线 const int LOADCELL_DOUT_PIN = 16; const int LOADCELL_SCK_PIN = 4; HX711 scale; void setup() { Serial.begin(115200); rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); } void loop() { if (scale.is_ready()) { scale.set_scale(); Serial.println("等待... 移除托盘重物"); delay(5000); scale.tare(); Serial.println("皮重测量完成..."); Serial.print("放已知重量物体..."); delay(5000); long reading = scale.get_units(10); Serial.print("结果: "); Serial.println(reading); } else { Serial.println("HX711离线."); } delay(1000); }
在我的例子中,读数是-141449。已知重量为300克,因此我的校准系数为:-141449/300=-471.497。
既然知道了校准系数,就可以使用称重传感器对物体进行称重。从已知重量的物体开始称重,如果数值不准确,则重复校准过程。
将以下代码复制到Arduino IDE中。在上传之前,不要忘记在代码的第43/44行插入校准系数。
#include <Arduino.h> #include "HX711.h" #include "soc/rtc.h" // HX711接线 const int LOADCELL_DOUT_PIN = 16; const int LOADCELL_SCK_PIN = 4; HX711 scale; void setup() { Serial.begin(115200); rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M); Serial.println("HX711 示例"); Serial.println("初始化"); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); Serial.println("无校准:"); Serial.print("读数: \t\t"); Serial.println(scale.read()); // 打印ADC的原始读数 Serial.print("读数平均值: \t\t"); Serial.println(scale.read_average(20)); // 打印ADC 20个读数的平均值 Serial.print("获取值: \t\t"); Serial.println(scale.get_value(5)); // 打印ADC的5个读数的平均值减去皮重(尚未设置) Serial.print("获取单位: \t\t"); Serial.println(scale.get_units(5), 1); // 打印ADC的5个读数的平均值减去皮重(未设置) // 通过传感器参数(尚未设置) scale.set_scale(INSERT YOUR CALIBRATION FACTOR); //scale.set_scale(-471.497);//该值是通过用已知重量校准天平而获得的 scale.tare(); //将刻度重置为0 Serial.println("设置磅秤后:"); Serial.print("读书: \t\t"); Serial.println(scale.read()); // 设置磅秤后 Serial.print("read ave: \t\t"); Serial.println(scale.read_average(20)); // 打印ADC 20个读数的平均值 Serial.print("获取值: \t\t"); Serial.println(scale.get_value(5)); // 打印ADC的5个读数的平均值减去皮重,用皮重()设置 Serial.print("获取单位: \t\t"); Serial.println(scale.get_units(5), 1); // 打印ADC的5个读数的平均值减去皮重,除以 //通过使用set_scale设置的S传感器参数 Serial.println("Readings:"); } void loop() { Serial.print("one reading:\t"); Serial.print(scale.get_units(), 1); Serial.print("\t| average:\t"); Serial.println(scale.get_units(10), 5); scale.power_down(); // 将ADC置于睡眠模式 delay(5000); scale.power_up(); }
使用ESP32创建一个简单的数字秤。添加一个OLED显示屏来显示结果,并添加一个按钮来称重。
#include <Arduino.h> #include "HX711.h" #include "soc/rtc.h" #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Pushbutton.h> // HX711 circuit wiring const int LOADCELL_DOUT_PIN = 16; const int LOADCELL_SCK_PIN = 4; HX711 scale; int reading; int lastReading; //REPLACE WITH YOUR CALIBRATION FACTOR #define CALIBRATION_FACTOR -471.497 //OLED Display #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Button #define BUTTON_PIN 19 Pushbutton button(BUTTON_PIN); void displayWeight(int weight){ display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 10); // Display static text display.println("Weight:"); display.display(); display.setCursor(0, 30); display.setTextSize(2); display.print(weight); display.print(" "); display.print("g"); display.display(); } void setup() { Serial.begin(115200); rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); display.clearDisplay(); display.setTextColor(WHITE); Serial.println("Initializing the scale"); scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); scale.set_scale(CALIBRATION_FACTOR); // this value is obtained by calibrating the scale with known weights; see the README for details scale.tare(); // reset the scale to 0 } void loop() { if (button.getSingleDebouncedPress()){ Serial.print("tare..."); scale.tare(); } if (scale.wait_ready_timeout(200)) { reading = round(scale.get_units()); Serial.print("Weight: "); Serial.println(reading); if (reading != lastReading){ displayWeight(reading); } lastReading = reading; } else { Serial.println("HX711 not found."); } }
效果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。