当前位置:   article > 正文

arduino IDE环境下ESP32使用带有HX711放大器的称重传感器_esp32 hx711

esp32 hx711

称重传感器

称重传感器将力转换为可以测量的电信号。电信号与施加的力成比例地变化。称重传感器有不同类型:应变仪、气动式和液压式。在本教程中,我们将介绍应变仪测压元件。
在这里插入图片描述应变仪测压元件由一根金属棒和附带的应变仪组成(上图中的白色胶水下)。应变仪是一种测量物体上的力或应变的电传感器。当外力施加到物体上时,应变仪的电阻会发生变化,这会导致物体形状(在这种情况下是金属棒)变形。阻力的变化与施加的载荷成正比,这使我们能够计算物体的重量。
通常,测压元件有四个连接在惠斯通电桥上的应变仪(如下所示),使我们能够获得准确的电阻测量值。
在这里插入图片描述称重传感器的导线通常具有以下颜色:
在这里插入图片描述

HX711放大器

HX711放大器是一个接线板,允许轻松读取称重传感器以测量重量。在一侧连接称重传感器导线,在另一侧连接微控制器。HX711使用双线接口(时钟和数据)与微控制器进行通信。
在这里插入图片描述需要焊接GND、DT、SCK和VCC引脚上的插头引脚才能连接到ESP32。我把测压元件导线直接焊接到E+、E-、A-和A+引脚上。称重传感器导线非常薄且易碎,焊接时要小心,以免损坏导线。
在这里插入图片描述

称重传感器和HX711放大器与ESP32的接线

HX711放大器通过双线接口进行通信。将其连接到所选微控制器的任何GPIO。将数据引脚(DT)连接到GPIO16,将时钟引脚(CLK)连接到GPIO4。也可以使用任何其他合适的引脚。

称重传感器HX111HX711ESP32
红(E+)E+GNDGND
黑(E-)E-DTGPIO 16
白(A-)A-SCKGPIO 4
绿(A+)A+VCC3.3V

在这里插入图片描述

安装HX711库

“管理库”中搜索“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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述
在我的例子中,读数是-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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

在这里插入图片描述

ESP32数字秤

使用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.");
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

效果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/800881
推荐阅读
相关标签
  

闽ICP备14008679号