Arduino с тензодатчиком и усилителем HX711 (цифровые весы)

В этом руководстве вы узнаете, как создать цифровые весы с Arduino, используя тензодатчик и усилитель HX711. Сначала вы узнаете, как подключить тензодатчик и усилитель HX711 к Arduino для создания весов. Затем мы покажем, как откалибровать весы, и приведём простой пример получения веса объектов. Позже мы также добавим дисплей для отображения измерений и кнопку для тарирования весов.

Arduino с тензодатчиком и усилителем HX711 — цифровые весы

В этом руководстве мы рассмотрим следующие темы:

Знакомство с тензодатчиками

Тензодатчик преобразует силу в электрический сигнал, который можно измерить. Электрический сигнал изменяется пропорционально приложенной силе. Существуют различные типы тензодатчиков: тензорезисторные, пневматические и гидравлические. В этом руководстве мы рассмотрим тензорезисторные тензодатчики.

Тензодатчик — компонент на плате

Тензорезисторные тензодатчики состоят из металлической балки с прикреплёнными тензорезисторами (под белым клеем на фотографии выше). Тензорезистор — это электрический датчик, который измеряет силу или деформацию объекта. Сопротивление тензорезисторов изменяется при приложении внешней силы к объекту, что приводит к деформации формы объекта (в данном случае — металлической балки). Сопротивление тензорезистора пропорционально приложенной нагрузке, что позволяет нам вычислить вес объектов.

Обычно тензодатчики имеют четыре тензорезистора, соединённых в мост Уитстона (как показано ниже), что позволяет получать точные измерения сопротивления. Для более подробного объяснения работы тензорезисторов прочитайте эту статью.

Мост Уитстона в тензодатчике

Провода, выходящие из тензодатчика, обычно имеют следующие цвета:

  • Красный: VCC (E+)

  • Чёрный: GND (E-)

  • Белый: Выход – (A-)

  • Зелёный: Выход + (A+)

Применение

Тензорезисторные тензодатчики могут использоваться в самых разных приложениях. Например:

  • проверка изменения веса объекта с течением времени;

  • измерение веса объекта;

  • обнаружение присутствия объекта;

  • оценка уровня жидкости в ёмкости;

  • и т.д.

Поскольку изменения деформации при взвешивании объектов очень малы, нам необходим усилитель. Тензодатчик, который мы используем, обычно продаётся вместе с усилителем HX711. Поэтому именно этот усилитель мы и будем использовать.

Усилитель HX711

Усилитель HX711 — это плата расширения, которая позволяет легко считывать данные с тензодатчиков для измерения веса. С одной стороны вы подключаете провода тензодатчика, а с другой — микроконтроллер. HX711 взаимодействует с микроконтроллером через двухпроводной интерфейс (Clock и Data).

Усилитель HX711

Вам необходимо припаять штыревые разъёмы к выводам GND, DT, SCK и VCC для подключения к Arduino. Я припаял провода тензодатчика напрямую к выводам E+, E-, A- и A+. Провода тензодатчика были очень тонкими и хрупкими, будьте осторожны при пайке, чтобы не повредить провода.

Усилитель HX711 с припаянными проводами

Для получения дополнительной информации об усилителе HX711 вы можете ознакомиться с даташитом HX711.

Настройка тензодатчика

Наш набор с тензодатчиком поставлялся с двумя акриловыми пластинами и несколькими винтами для настройки тензодатчика в качестве весов. Вы можете использовать деревянные пластины или напечатать собственные на 3D-принтере.

Комплект тензодатчика с усилителем HX711

Вы должны прикрепить пластины к тензодатчику таким образом, чтобы создать напряжение между противоположными концами металлической балки. Нижняя пластина удерживает тензодатчик, а верхняя — это то место, куда вы помещаете объекты.

Установка тензодатчика для весов

На следующем рисунке показано, как выглядит мой тензодатчик с акриловыми пластинами.

Тензодатчик — весы для Arduino

Где купить тензодатчик с HX711?

Вы можете проверить тензодатчик с HX711 на Maker Advisor, чтобы найти лучшую цену (с акриловыми пластинами в комплекте или без них). Существуют тензодатчики с различными диапазонами измерения. Наиболее распространённые максимальные веса — 1 кг, 5 кг, 10 кг и 20 кг.

Тензодатчик с усилителем HX711 — товар

Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Подключение тензодатчика и усилителя HX711 к Arduino

Усилитель HX711 взаимодействует через двухпроводной интерфейс. Вы можете подключить его к любым цифровым выводам вашей платы Arduino. Мы подключаем вывод данных (DT) к пину 2 и вывод тактового сигнала (CLK) к пину 3.

Следуйте таблице или схеме подключения ниже, чтобы подключить тензодатчик к плате Arduino.

Тензодатчик

HX711

HX711

Arduino

Красный (E+)

E+

GND

GND

Чёрный (E-)

E-

DT

Pin 2

Белый (A-)

A-

SCK

Pin 3

Зелёный (A+)

A+

VCC

5V

Схема подключения Arduino с тензодатчиком и HX711

Установка библиотеки HX711

Существует несколько различных библиотек для получения измерений с тензодатчика с помощью усилителя HX711. Мы будем использовать библиотеку HX711 от bogde. Она совместима с ESP32, ESP8266 и Arduino.

Arduino IDE

Следуйте инструкциям ниже для установки библиотеки, если вы используете Arduino IDE.

  1. Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries.

  2. Найдите «HX711 Arduino Library» и установите библиотеку от Bogdan Necula.

Установка библиотеки HX711 от Bogdan в Arduino IDE

Калибровка весов (Arduino с тензодатчиком)

На данный момент мы предполагаем, что вы подключили тензодатчик к усилителю HX711, а усилитель — к плате Arduino. У вас также должны быть настроены весы (две пластины, закреплённые на противоположных концах тензодатчика), и установлена библиотека HX711.

Прежде чем определять вес объектов, вам необходимо сначала откалибровать тензодатчик, получив коэффициент калибровки. Ваш коэффициент калибровки будет отличаться от нашего, поэтому вам не следует пропускать этот раздел.

1) Подготовьте объект с известным весом. Я использовал кухонные весы и взвесил стакан с водой (107 г).

2) Загрузите следующий код на вашу плату Arduino. Мы написали следующий код, учитывая инструкции по калибровке тензодатчика, предоставленные документацией библиотеки.

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/arduino-load-cell-hx711/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// Calibrating the load cell
#include "HX711.h"

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

HX711 scale;

void setup() {
  Serial.begin(57600);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}

void loop() {

  if (scale.is_ready()) {
    scale.set_scale();
    Serial.println("Tare... remove any weights from the scale.");
    delay(5000);
    scale.tare();
    Serial.println("Tare done...");
    Serial.print("Place a known weight on the scale...");
    delay(5000);
    long reading = scale.get_units(10);
    Serial.print("Result: ");
    Serial.println(reading);
  }
  else {
    Serial.println("HX711 not found.");
  }
  delay(1000);
}

//calibration factor will be the (reading)/(known weight)

Посмотреть исходный код

3) После загрузки откройте монитор порта на скорости 57600 бод, а затем нажмите кнопку RESET на плате Arduino.

4) Следуйте инструкциям в мониторе порта: уберите все грузы с весов (тарирование произойдёт автоматически). Затем поместите объект с известным весом на весы и подождите, пока не получите значение.

5) Рассчитайте коэффициент калибровки по формуле:

коэффициент калибровки = (показание) / (известный вес)
Калибровка тензодатчика — монитор порта Arduino

В нашем случае показание равно -49171. Известный вес составляет 107 г, поэтому наш коэффициент калибровки будет: -49171/107 = -459.542.

коэффициент калибровки = -49171/107 = -459.542

Сохраните ваш коэффициент калибровки, потому что он понадобится вам позже. Ваш будет отличаться от нашего.

Поскольку выходной сигнал датчика пропорционален силе, приложенной к тензодатчику, вы можете откалибровать весы, используя любую единицу измерения, которая имеет смысл для вас. Я использовал граммы, но вы можете использовать фунты, килограммы или даже порции кошачьего корма (как в этом видео Andreas Spiess).


Взвешивание объектов (Arduino с тензодатчиком)

Теперь, когда вы знаете свой коэффициент калибровки, вы можете использовать тензодатчик для взвешивания объектов. Начните с взвешивания объектов с известным весом и повторите процесс калибровки, если значения неточные.

Скопируйте следующий код в Arduino IDE. Перед загрузкой на плату не забудьте вставить свой коэффициент калибровки в строку 43/44 кода. Следующий код является примером, предоставленным библиотекой, который демонстрирует использование большинства её функций.

/**
 * Complete project details at https://RandomNerdTutorials.com/arduino-load-cell-hx711/
 *
 * HX711 library for Arduino - example file
 * https://github.com/bogde/HX711
 *
 * MIT License
 * (c) 2018 Bogdan Necula
 *
 **/

#include <Arduino.h>
#include "HX711.h"

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

HX711 scale;

void setup() {
  Serial.begin(57600);
  Serial.println("HX711 Demo");
  Serial.println("Initializing the scale");

  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());      // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);  // print the average of 5 readings from the ADC minus tare weight (not set) divided
            // by the SCALE parameter (not set yet)

  scale.set_scale(-459.542);
  //scale.set_scale(-471.497);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();               // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
            // by the SCALE parameter set with set_scale

  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);

  delay(5000);
}

Посмотреть исходный код

Как работает код

Начните с подключения необходимой библиотеки.

#include "HX711.h"

Следующие строки определяют пины, которые вы будете использовать для подключения к усилителю HX711. Мы выбрали пин 2 и пин 3. Вы можете использовать любые другие цифровые пины.

const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

Затем создайте экземпляр библиотеки HX711 с именем scale, который вы будете использовать позже для получения измерений.

HX711 scale;

setup()

В функции setup() инициализируйте монитор порта.

Serial.begin(57600);

Инициализируйте тензодатчик, вызвав метод begin() на объекте scale и передав цифровые пины в качестве аргументов.

scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);

Затем вызываются несколько методов, которые можно использовать для получения показаний с помощью библиотеки.

  • read(): получает необработанное показание с датчика

  • read_average(количество показаний): получает среднее значение последних заданных показаний

  • get_value(количество показаний): получает среднее значение последних заданных показаний за вычетом веса тары;

  • get_units(количество показаний): получает среднее значение последних заданных показаний за вычетом веса тары, делённое на коэффициент калибровки — это выдаст показание в желаемых единицах измерения.

Serial.println("Before setting up the scale:");
Serial.print("read: \t\t");
Serial.println(scale.read());      // print a raw reading from the ADC

Serial.print("read average: \t\t");
Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

Serial.print("get value: \t\t");
Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight (not set yet)

Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1);  // print the average of 5 readings from the ADC minus tare weight (not set) divided
// by the SCALE parameter (not set yet)

В следующей строке не забудьте вставить ваш коэффициент калибровки. Используется метод set_scale().

scale.set_scale(ВСТАВЬТЕ ВАШ КОЭФФИЦИЕНТ КАЛИБРОВКИ)

Затем вызовите метод tare() для тарирования весов.

scale.tare();               // reset the scale to 0

После этой настройки весы должны быть готовы к точным измерениям в желаемых единицах. Пример вызывает те же предыдущие методы, чтобы вы могли увидеть разницу до и после настройки весов.

Serial.print("read: \t\t");
Serial.println(scale.read());                 // print a raw reading from the ADC

Serial.print("read average: \t\t");
Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

Serial.print("get value: \t\t");
Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight, set with tare()

Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
// by the SCALE parameter set with set_scale

loop()

В функции loop() пример вызывает метод get_units() двумя разными способами: для получения одного показания (без параметров) и для получения среднего значения последних 10 показаний.

Serial.print("one reading:\t");
Serial.print(scale.get_units(), 1);
Serial.print("\t| average:\t");
Serial.println(scale.get_units(10), 5);

Он переводит АЦП, считывающий датчик, в спящий режим с помощью метода power_down(). Затем ожидает 5 секунд, включает АЦП (power_up()), и loop() повторяется. Таким образом, вы будете получать новые показания в мониторе порта каждые 5 секунд.

scale.power_down();  // put the ADC in sleep mode
delay(5000);
scale.power_up();

Демонстрация

Загрузите код на вашу плату Arduino. После загрузки откройте монитор порта на скорости 115200 бод.

Подождите несколько секунд, чтобы код успел настроить весы (вы увидите сообщение в мониторе порта). Затем поместите любой объект на весы для измерения, и вы получите результаты в мониторе порта.

Демонстрация тензодатчика — монитор порта Arduino IDE

Я экспериментировал с несколькими объектами и сравнивал их с показаниями моих кухонных весов, и результаты совпали. Поэтому могу сказать, что мои весы на Arduino по крайней мере так же точны, как мои кухонные весы.


Цифровые весы с Arduino

В этом разделе мы создадим простые цифровые весы с Arduino. Мы добавим OLED-дисплей для отображения результатов и кнопку для тарирования весов.

Цифровые весы на Arduino

Необходимые компоненты

Вот список компонентов, необходимых для этого проекта:

Схема подключения

Добавьте OLED-дисплей и кнопку к вашей предыдущей схеме на следующих пинах:

OLED-дисплей

Arduino

VCC

3.3V или 5V*

GND

GND

SDA

A4

SCL

A5

*подключите к 3.3V или 5V в зависимости от модели.

Не знакомы с OLED-дисплеем? Читайте: Руководство по I2C OLED-дисплею с Arduino.

Подключите кнопку через подтягивающий к земле резистор 10 кОм к пину 4. Другой вывод кнопки должен быть подключён к 5V. Вы можете использовать любой другой цифровой пин Arduino.

Вы можете следовать следующей схеме подключения для соединения ваших компонентов.

Схема подключения цифровых весов на Arduino

Код цифровых весов на Arduino

Для простоты мы будем обрабатывать кнопку с помощью простой библиотеки, которая определяет нажатия кнопки с устранением дребезга (поэтому нам не нужно беспокоиться об этом в нашем коде). Для записи на OLED-дисплей мы будем использовать библиотеки Adafruit SSD1306 и Adafruit GFX.

Библиотека кнопки

Существует множество библиотек с различными функциями для работы с кнопками. Мы будем использовать библиотеку pushbutton от pololu. Это простая библиотека, но в ней есть всё, что нам нужно для этого проекта. В Arduino IDE перейдите в Sketch > Include Library > Manage Libraries и найдите «pushbutton». Установите библиотеку pushbutton от pololu.

Библиотека Pushbutton от Pololu в Arduino IDE

Также, если вы не хотите использовать библиотеку, вы можете добавить код устранения дребезга самостоятельно (это несложно). Для примера кода устранения дребезга в Arduino IDE вы можете перейти в File > Examples > Digital > Debounce.

Библиотеки OLED

Мы будем использовать следующие библиотеки для управления OLED-дисплеем. Убедитесь, что эти библиотеки установлены:

Вы можете установить библиотеки с помощью менеджера библиотек Arduino. Перейдите в Sketch > Include Library > Manage Libraries и найдите название библиотеки.

Код

Скопируйте следующий код в Arduino IDE. Перед загрузкой на плату Arduino вам нужно вставить свой коэффициент калибровки (полученный ранее).

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/arduino-load-cell-hx711/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// Library HX711 by Bogdan Necula: https://github.com/bogde/HX711
// Library: pushbutton by polulu: https://github.com/pololu/pushbutton-arduino

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Pushbutton.h>

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

HX711 scale;
int reading;
int lastReading;
//REPLACE WITH YOUR CALIBRATION FACTOR
#define CALIBRATION_FACTOR -476.592

//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 4
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(57200);

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

Посмотреть исходный код

Как работает код

Начните с подключения необходимых библиотек:

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Pushbutton.h>

Определите пины для HX711 (тензодатчика) — мы используем те же, что и в предыдущих примерах:

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;

Создайте экземпляр HX711 с именем scale.

HX711 scale;

Следующие переменные будут хранить текущее показание веса и последнее показание веса. Мы хотим обновлять OLED-дисплей только при появлении нового показания, поэтому нам нужны эти две переменные. Кроме того, мы не хотим измерять доли грамма, что сделало бы весы слишком чувствительными для нашего приложения — поэтому эти переменные являются целочисленными. Если вам нужны десятичные дроби в измерениях, вы можете определить переменные типа float вместо этого.

int reading;
int lastReading;

Не забудьте заменить следующее значение на ваш коэффициент калибровки. В моём случае эта строка кода выглядит следующим образом (моё значение отрицательное):

#define CALIBRATION_FACTOR -459.542

Далее нам нужно определить ширину и высоту OLED:

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

И создать экземпляр библиотеки Adafruit_SSD1306 с именем display.

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Определите GPIO, который вы будете использовать для чтения кнопки, и создайте объект Pushbutton с именем button на этом пине.

#define BUTTON_PIN 4
Pushbutton button(BUTTON_PIN);

Функция displayWeight()

Мы создали функцию displayWeight(), которая принимает в качестве аргумента вес, который вы хотите отобразить на OLED.

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();
}

Не знакомы с OLED-дисплеем? Читайте: Руководство по I2C OLED-дисплею с Arduino

setup()

В функции setup() инициализируйте монитор порта.

Serial.begin(57200);

Инициализируйте OLED-дисплей:

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
scale.tare();               // reset the scale to 0

loop()

Библиотека кнопки позволяет нам ожидать события в случае нажатия или отпускания кнопки. В данном случае мы проверяем, была ли кнопка нажата, с помощью метода getSingleDebouncedPress() и вызываем функцию tare(), если кнопка была нажата.

if (button.getSingleDebouncedPress()){
  Serial.print("tare...");
  scale.tare();
}

HX711 предоставляет неблокирующий метод для получения показаний. Он определяет максимальный тайм-аут ожидания инициализации оборудования и не блокирует ваш код в случае отключения весов или аппаратных сбоев.

if (scale.wait_ready_timeout(200)) {
  reading = round(scale.get_units());
  Serial.print("Weight: ");
  Serial.println(reading);

В loop() мы постоянно получаем новые показания и сравниваем их с последним показанием. Если мы получили новое измерение, мы вызываем функцию displayWeight() для обновления OLED-дисплея.

if (reading != lastReading){
  displayWeight(reading);
}

Демонстрация

После загрузки кода на вашу плату вы можете начать взвешивать объекты с помощью тензодатчика. Показания будут отображаться на OLED-дисплее. Вы можете тарировать весы, нажав кнопку.

Демонстрация цифровых весов на Arduino

Опять же, показания на моих цифровых весах Arduino соответствуют показаниям моих кухонных весов.

Сравнение цифровых весов с кухонными весами

Заключение

В этом руководстве вы узнали, как подключить тензорезисторный тензодатчик к плате Arduino с помощью усилителя HX711. Выходной сигнал тензодатчика пропорционален приложенной силе. Поэтому вы можете откалибровать его для использования в граммах, килограммах, фунтах или любых других единицах, которые имеют смысл для вашего проекта.

Подведём итог: вы научились калибровать весы и определять вес объектов. Вы также узнали, как создать простые цифровые весы с Arduino, используя OLED-дисплей для отображения измерений и кнопку для тарирования весов.

Мы надеемся, что это руководство оказалось полезным для начала работы с тензодатчиком. Помимо того, что он полезен для измерения веса объектов, он также может быть полезен во многих приложениях, таких как обнаружение присутствия объекта, оценка уровня жидкости в резервуаре, вычисление скорости испарения воды, проверка наличия корма в миске вашего питомца и т.д.

У нас есть руководства по другим популярным датчикам, которые могут быть вам полезны: