arduino IDE环境下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);
}

在这里插入图片描述
在我的例子中,读数是-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数字秤

使用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.");
  }
}

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

  • 49
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
安装ESP32Arduino IDE开发环境可以按照以下步骤进行: 步骤1:下载Arduino IDE 首先,你需要下载最新版本的Arduino IDE。你可以在Arduino官方网站上找到适合你操作系统的版本,并进行下载和安装。 步骤2:添加ESP32开发板管理器URL 打开Arduino IDE,在菜单栏选择“文件”,然后选择“首选项”。在“首选项”窗口的底部找到“附加开发板管理器网址”一栏。在这里添加ESP32开发板管理器的URL:https://dl.espressif.com/dl/package_esp32_index.json 步骤3:安装ESP32开发板管理器 在Arduino IDE的菜单栏选择“工具”,然后选择“开发板”,再选择“开发板管理器”。在“开发板管理器”窗口中,搜索“esp32”。找到“esp32 by Espressif Systems”并点击安装。安装完成后,你就可以在开发板列表中找到ESP32。 步骤4:选择ESP32开发板和端口 在Arduino IDE的菜单栏选择“工具”,然后选择“开发板”,再选择“ESP32 Dev Module”或者其他你所使用ESP32开发板。接下来,在“端口”菜单中选择你的ESP32设备所连接的串口。 步骤5:上传示例程序 现在,你可以从Arduino IDE的“文件”菜单中选择“示例”来查看ESP32的示例程序。选择一个你感兴趣的示例程序,并点击“上传”按钮将其烧录到ESP32开发板上。 这样,你就成功安装了ESP32Arduino IDE开发环境,并上传了示例程序到开发板上。你可以根据自己的需求编写和上传自己的代码了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值