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

В этой статье мы рассмотрим модуль hx711 Arduino, примером использования которого и будет создание весов на Ардуино.

Описание модуля

Недостаточно купить стандартный микроконтроллер Ардуино и написать пару строчек кода, чтобы считаться инженером. Когда вам надоест играть с светодиодами и делать простые замочки с одним-двумя датчиками, необходимо будет перейти к более практичным и полезным в быту проектам.

Это могут быть как автоматизированные системы, теплица, так и полноценные электронные весы, которые можно сделать своими руками.

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

Под Ардуино существует десяток разнообразных модулей и чипов, способных расширить функционал МК. И условно их можно разделить на три группы:

  1. Датчики и подобные им модули. В этой группе находятся все чипы, которые предназначены для измерения любых параметров окружающей среды и трансформации их в электронный сигнал. Именно датчики позволяют измерять вес, засечь звуковые волны при хлопке или уловить удар о поверхность. Без них большая часть проектов и систем в современном мире просто не могли бы существовать. Так что на деле их можно сравнить с трансформаторами внешних сигналов, которые они переводят во внутренние.
  2. Чипы и микроконтроллеры, позволяющие расширить стандартные возможности Ардуино. Могут, например, добавить немного постоянной или оперативной памяти, позволить подключать различные источники питания параллельным соединением. В большей своей части влияют на программную часть системы, в то время, как датчики и переходники напрямую модифицируют аппаратную. Могут быть использованы в том случае, если нет желания спаивать несколько МК, но ресурсов для выполнения вычислений не хватает.
  3. Переходники и вспомогательные средства для усиления сигнала. Именно к ним относится hx711, который усиливает сигнал от датчика веса и переводит его в цифровой, который может воспринимать Ардуино. Между предыдущим и этим пунктом есть небольшая грань, которую зачастую стирают и совмещают их в один класс. Тем не менее, если «расширители» влияют именно на программную часть, то разнообразные переходники позволяют усовершенствовать аппаратную.

Встречаются и комбинированные разновидности, например, слот под флешку, для расширения постоянной памяти стандартным физическим носителем.

Итак, мы разобрались, что hx711 – это 24-х битный АЦП, необходимый для адаптации тензодатчиков и весов в Ардуино. Однако подходит он лишь для простых систем Ардуино, где необходимы точные показание с тех же тензодатчиков.

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

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

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

Далее чип подключается уже к тем самым датчикам через мостовую схему и к МК, являясь промежуточным звеном между ними. В данном случае мы рассматриваем подключение именно к Ардуино, но на деле подойдёт любой микроконтроллер, который вам будет удобнее программировать. Аппаратных ограничений в этом плане нет.

Характеристики и распиновка 711 модуля

В самом чипе имеется несколько разъемов для подключения датчиков и МК, и для подачи питания, соответственно. J1 является разъемом для подключения датчиков, а вот E+ и Е необходимы для подключения их питания, в то же время, JP2 необходим для подсоединения чипа к микроконтроллеру Ардуино и последующей подачи питания через него.

Также присутствует несколько пинов, нужных для измерения различных данных системы: от напряжения, подаваемого на прибор, до частоты передачи данных. И, конечно, в плате присутствует интерфейс, распределённый на IIC или I2C. Всё это стоит изучить прежде, чем приступать к непосредственной пайке.

По А каналу можно установить коэффициенты усиления сигнала от датчиков, их имеется две разновидности – в 64 и в 128 раз. Это позволит измерять десятые доли килограммов, которые попадают на тензодатчики. Сам чип способен потреблять энергию не только непосредственно из Ардуино, но и из внешних источников через дополнительно подключенное питание.

Не стоит и упоминать, что на месте Ардуино может быть любой, полюбившийся вам контроллер. Напряжение плата выдерживает от 2.6 до 5.5 Вольт соответственно, это стоит учитывать, если вы беспокоитесь, о необходимости припайки резисторов к конструкции.

Распиновка HX711
Распиновка HX711

Пример использования модуля

Примеры того, как можно применять данный чип, уже частично описаны выше. Подробнее стоит рассмотреть самые популярные решения:

  1. Весы через hx711, о которых мы и поговорим ниже. Здесь система достаточно простая: состоит из датчика, МК и самого чипа. Логика построения кода и самого проекта также незамысловата, достаточно всё это подключить последовательно и в правильном порядке. Естественно, ко всему вышеперечисленному, стоит докупить интерфейс, который будет выводить полученные данные. Или же специальный блютуз модуль, позволяющий подключить систему к смартфону и смотреть всю информацию уже непосредственно на нём. Всё зависит от того, каким проект вы видите сами. Также, для большего усиления сигнала, если потребуется, можно последователь подсоединять несколько чипов.
  2. Датчики на различных устройствах, от 3Д принтера, до специальных приспособлений для тестирования продукции. Чип выдаёт данные именно о давлении, и уже через формулы в коде вы их преобразовываете в килограммы веса. Соответственно, если нужно измерить силу, достаточно применить соответствующие алгоритмы перевода единиц, и у вас на руках будет уже совершенно другое устройство. Сферы его применения зависят исключительно от фантазии инженера, но чаще всего такие датчики используют именно в 3Д-принтерах, по понятным причинам.

Как сделать Ардуино весы на hx711

Но, предположим, вы решили сделать простейшие Ардуино весы (мы публиковали отдельный урок), тогда выбирайте один из вариантов, описанных выше, для получения выходящих данных.

Это может быть блютуз или wi-fi модуль, который будет передавать всё на другое устройство. Но можно использовать и обычный LED-экран. Однако, в таком случае, учитывайте, что вам необходимо будет написать немало строчек кода и для того, чтобы этот экран научить выводить нужные вам числа, а в некоторых ситуациях и буквы.

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

Выше на картинке вы можете увидеть примерный вариант устройства весов на Arduino Uno. В комплекте с модулем HX711 идет тензорезистор. На фото к нему прикреплены два небольших куска оргстекла - как основа и как опора для измеряемого предмета.

Схема устройства самая простая:

Осталось добавить код. Но прежде - скачайте библиотеку для нашего модуля HX711 по ссылке - https://github.com/bogde/HX711.

После того как библиотека скачана мы можем добавить наш код. Сначала код программы для калибровки:

/*
 Setup your scale and start the sketch WITHOUT a weight on the scale
 Once readings are displayed place the weight on the scale
 Press +/- or a/z to adjust the calibration_factor until the output readings match the known weight
 Arduino pin 6 -> HX711 CLK
 Arduino pin 5 -> HX711 DOUT
 Arduino pin 5V -> HX711 VCC
 Arduino pin GND -> HX711 GND 
*/

#include "HX711.h"

HX711 scale(A1, A0);   // DT, CLK

float calibration_factor = -3.7; // this calibration factor is adjusted according to my load cell
float units;
float ounces;

void setup() {
  Serial.begin(9600);
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");

  scale.set_scale();
  scale.tare();  //Reset the scale to 0

  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor

  Serial.print("Reading: ");
  units = scale.get_units(), 10;
  if (units < 0)
  {
    units = 0.00;
  }
  ounces = units * 0.035274;
  Serial.print(ounces);
  Serial.print(" grams"); 
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 1;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 1;
  }
}

И сам код для весов ниже.

В коде добавлен перевод единицы измерения веса из унций в граммы.

#include "HX711.h"

HX711 scale(A1, A0);                          

float calibration_factor = -3.7;          // калибровка!
float units;
float ounces;

void setup() {
  Serial.begin(9600); 
  scale.set_scale();
  scale.tare();                              //Сбрасываем на 0
  scale.set_scale(calibration_factor);       //Применяем калибровку
}

void loop() { 

  Serial.print("Reading: ");
  
  for(int i = 0;i < 10; i ++) units =+ scale.get_units(), 10;   // усредняем показания считав 10 раз 
  units / 10;                                                   // делим на 10
   
  ounces = units * 0.035274;                                    // переводим унции в граммы              
  Serial.print(ounces);                                          // отправляем в монитор порта
  Serial.print(" grams");  
  Serial.println(); 
}

В целом на этом всё. Более подробные уроки по использованию этого модуля мы обязательно опубликуем в ближайших уроках. Подробный урок по созданию весов на данном модуле смотрите здесь.

Сделайте весы, которые способны измерять не только ваш вес, но и содержание жира в организме, а также воды. Это будет полезно для тех инженеров, которые следят за собой, но покупать дорогие оригинальные весы не хотят по очевидным причинам.

10 марта 2018 в 20:08 | Обновлено 7 ноября 2020 в 01:21 (редакция)
Опубликовано:
Статьи, ,

3 комментария

  1. Александр
    20 марта 2020 в 23:24

    А возможно ли использовать nx711 для тензодатчиков на 2-5 тонн?

    Ответить
    1. Alexander
      10 сентября 2020 в 15:54

      да, возможно, я делал 3 датчика по 1,5 тон соеденил их паралельно на один канал АЦП

      Ответить
      1. Роман
        25 ноября 2020 в 08:48

        Здравствуйте! Можно подробней? Уменя 4 датчика по 300кг. как подключить к hx711. Спасибо.

        Ответить

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *