АЦП для аналоговых весов HX711

  • Обзор
  • Технические характеристики модуля
  • Подключение
  • Пример использования
  • Часто задаваемые вопросы FAQ

Arduino-модуль HX711 (рис. 1) на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков ( датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711, имеет АЦП с разрешением 24 бит, благодаря чему обеспечивается высокая точность измерений (для сравнения – разрешение АЦП, встроенного в Arduino 10 бит). Модуль имеет 2 канала  А и В, к которым можно подключить два тензодатчика.  Для канала A коэффициент усиления равен 64 или 128, для канала B коэффициент усиления равен 32. Модуль работает с частотой измерения 80 Гц.

Аналогово цифровой преобразователь HX711

Рисунок 1. Arduino-модуль HX711


Технические характеристики HX711

  • Напряжение питания – 6-5.5 В;
  • Рабочее напряжение – 5 В;
  • Количество каналов подключения тензодатчиков – 2;
  • Коэффициент усиления – 32, 64, 128
  • Дифференциальный вход с напряжением – ± 40 мВ
  • Разрядность АЦП – 24 бит;
  • Частота измерений – 80 Гц;
  • Рабочий ток <10 мА;
  • Рабочая температура – -40 – 85 °С;
  • Размеры: 38x21x10 мм.

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

Модуль HX711 имеет два разъема J1 и J2 (см. рис. 2).

arduino-modul-hx711

Рисунок 2. Arduino-модуль HX711

Назначение контактов разъема  JP1:

  • E+, E- питание тензодатчиков;
  • A-, A+ дифференциальный вход канала А;
  • B-, B+ дифференциальный вход канала B.

Назначение контактов разъема  JP2:

  • VCC — напряжение питания;
  • GND – общий контакт;
  • DT – линия данных;
  • SCK – линия синхронизации.

Схема соединений модуля HX11, тензодатчика и платы Arduino показана на рис. 3.

skhema-soedinenij-modulya-hx711-tenzodatchika-arduino

Рисунок 3. Схема соединений модуля HX711, тензодатчика и платы Arduino


Пример использования АЦП для аналоговых весов HX711

В качестве примера использования рассмотрим, как исполдьзовать модуль HX711 при создании создание весов до 1 кг. Нам потребуются следующие компоненты:

Соединение деталей по схеме соединений на рис. 3.

Тензодатчик ( в нашем случае тензорезистор) – это резистор, сопротивление которого изменяется в зависимости от его деформации. Тензорезистор располагается под слоем белого защитного полимера (см. рис. 4).

Тензодатчик до 1 кг

Рисунок 4. Тензодатчик до 1 кг

Направление приложения груза и максимальный вес измерения указаны на датчике, там же указывается и вес, на который рассчитан этот датчик. Схема измерителя на этом датчике является полумостовой – один тензорезистор сверху (на растяжение), второй снизу (на сжатие).  Один конец тензодатчика необходимо жестко зафиксировать (рис. 5 – с помощью тисков).

Весы в сборе

Рисунок 5. Весы в сборе

Для работы с Arduino будем использовать библиотеку HX711, скачать которую можно с github (https://github.com/bogde/HX711). Перед использованием тензодатчика его необходимо откалибровать. Загружаем на плату Arduino скетч из листинга 1.  Открываем монитор последовательного порта, при этом на весах не должно быть груза. Затем ставим груз известной массы (например гири) и смотрим показания. Если они недостоверны, необходимо поменять значение переменной float calibration_factor, пока для груза не будут выводиться правильные данные. Для моего датчика 1 кг – подобрал calibration_factor=64.80. Здесь получаются достаточно точные значения (см. рис. 6-10).

Листинг 1

//  Скетч к обзору модуля HX711

//  Калибровка весов

//  makerplus.ru



// Подключение библиотеки

#include "HX711.h"

// создание экземпляра объекта

// 15(A1) – пин подключения DT

// 14(A0) – пин подключения SCK

HX711 weight(15, 14);

// значение калибровочного коэффициента (делать подбор для своих весов)

float scale_calibration = -3.7;

// переменные

float weight_units;

float weight_gr;



void setup() {

// Инициализируем последовательный порт

Serial.begin(9600);

Serial.println("HX711 calibration …");



scale.set_scale();

// Сбрасываем весы на 0

scale.tare();



}



void loop() {

// Устанавливаем калибровочный коэффициент

scale.set_scale(scale_calibration);

// получить данные

Serial.print("Read data: ");

weight_units = scale.get_units(), 10;

// если <0 то 0

if (weight_units < 0) {

weight_units = 0.00;

}

// перевод из унций в граммы

weight_gr = weight_units * 0.035274;

// вывод данных в последовательный порт

// вес

Serial.print("weight_gr =");

Serial.print(weight_gr);

Serial.print(" gr");

// калибровочный коэффициент

Serial.print("scale_calibration=");

Serial.println(scale_calibration);

}

06 07

08 09

Рисунок 6-9. Калибровка (подбор значения calibration_factor)

Теперь весы откалиброваны и готовы к использованию. Для измерения загружаем на плату Arduino скетч из листинга 2. И можем измерять вес необходимых вещей.

Листинг 2

//  Скетч к обзору модуля HX711

//  Измерение веса

//  makerplus.ru



// Подключение библиотеки

#include "HX711.h"

// создание экземпляра объекта

// 15(A1) – пин подключения DT

// 14(A0) – пин подключения SCK

HX711 weight(15, 14);

// значение калибровочного коэффициента (делать подбор для своих весов)

float scale_calibration = 64.80;

// переменные

float weight_units;

float weight_gr;



void setup() {

Serial.begin(9600);

scale.set_scale();

//Сбрасываем на 0

scale.tare();

//Применяем калибровку

scale.set_scale(scale_calibration);

}



void loop() {

Serial.print("Read data … ");

// усредняем показания

for(int i = 0;i < 10; i ++) units =+ scale.get_units(), 10;

weight_units / 10;

// перевод из унций в граммы

weight_gr = weight_units * 0.035274;

// вывод данных в последовательный порт

Serial.print("weight_gr =");

Serial.print(weight_gr);

Serial.println(" gr");

}

Часто задаваемые вопросы FAQ

   1. Выдаются заведомо неверное значение веса предмета

  • Проверьте правильность подключения модуля.
  • Проведите калибровку весов с эталонным весом.

   2. При калибровке выдает нулевое значение веса

  • Проверьте правильность подключения модуля.
  • Пробуйте более тщательно подбирать значение калибровочного коэффициента.