Весы на Arduino, HX711 и тензодатчика

Датчик веса (тензодатчик) является очень важным элементом во многих проектах Arduino. Измеряя вес, можно отследить массу, а затем выполнить некоторое действие, например можно сделать дозатор жидкости или произвести расчет массы меда в улий за лето и так далее. В статье расскажу как с помощью Arduino UNO, платы HX711 и тензодатчика собрать весы.

Технические параметры HX711:

► АЦП собран на микросхеме: HX711;
► Разрядность АЦП: 24-бит;
► Коэффициент усиления канала A: 64 или 128;
► Коэффициент усиления канала B: 32;
► Скорость измерений: 10 измерений в секунду (Гц) или 80 измерений в секунду (Гц);
► Напряжение питания: 2,6 – 5,5 В;
► Потребляемый ток: <10 мА;
► Дифференциальное входное напряжение: ±40мВ;
► Размеры: 38 х 21 х 10 мм;
► Вес: 3 г.

Общие сведенья об HX711

Микросхема HX711 производится кампанией «Avia Semiconductors» и представляет собой аналого-цифровой преобразователь (АЦП) с частотой дискретизации 24 бита и встроенным операционным усилителем. Мультиплексор позволяет выбрать один из двух доступных входных каналов. Канал А имеет программируемый выбор усиления, который может быть 64 или 128. Канал B работает с заданным коэффициентом усиления 32.
Встроенный стабилизатор напряжения встроен в микросхему HX711, что позволяет работать без внешнего стабилизатора. Так же, на вход синхронизации может подаваться любой импульсный сигнал от внешнего источника, однако АЦП позволяет работать от встроенного генератора.

На плате есть два разъема JP1 и JP2, которые имеют следующие обозначения:

Назначение контактов, разъема JP1:
E+, E- —  источник питания;
A-, A+ — дифференциальный вход канала A;
B-, B+ — дифференциальный вход канала B.

Назначение контактов, разъема JP2:
VCC, GND — источник питания;
DT, SCK — информационные шины.

Общие сведенья об тензодатчиках

Существуют несколько видов тензодатчиков: пневматические (газовые), гидравлические (жидкостные) и резистивные (тензометрические), в статье расскажу о резистивных тензодатчике.
Резистивный тензодатчик содержит тензометрические датчик, который изменяет свое сопротивление при воздействии силы. Сам датчик плоский и имеет небольшие размеры, его помещают между пластинами, когда на них действует сила датчик деформируется, следствие чего меняется его сопротивление. Это значение очень маленькое и микроконтроллеру очень трудно измерить показания, поэтому тензодатчики подключают в мостовую схему (так называемую мост Уитстона).

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

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

Схему подключения можно посмотреть ниже:

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

Схема подключения, полумост с дополнительными резисторами:

Схема подключения двух тензодатчика:

Схема подключения четырех тензодатчика:

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

Подключение тензодатчика к Arduino

Необходимые детали:
► Arduino UNO x 1 шт.
► Тензодатчик для весов до 50 кг x 4 шт.
► Модуль 24-битного АЦП/ЦАП для тензодатчиков на HX711 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Описание:
В примере покажу как подключить четыре тензодатчика на 50 кг к Arduino UNO, полученные данные будем отправлять в последовательный порт.

Подключение:
Первым делом подключаем четыре тензодатчика к плате HX711, для этого согласно схеме ниже, из четырех датчиков собираем мостовую схему и соединяем провода E+ и E-, а затем A+ и A+. Теперь осталось подключить HX711 к Arduino, для этого подключаем Vcc и GND от HX711 к выводам 5В и GND на Arduino, затем подключаем вывод DT от HX711 к 2 на Arduino и вывод SCK к 3 на Arduino, схема собрана. Для удобства приведу схему подключения ниже.

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

Установка библиотек:
Для работы с модулем необходимо установить библиотеку «HX711», для этого, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «HX711», найдите библиотеку «HX711 by Rob Tillaart» и установите данную библиотеку.

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

 Скачать скетч

Открываем мониторинг порта, после сообщения «You have 10 seconds to set your known load» кладем эталонный предмет на весы и ждем 10 секунд, следующим сообщении получим калибровочный коэффициент, в моем случаи это -0.89.

Программа расчета веса:
Все данные для расчета веса готовы, указываем в параметре «calibration_factor» коэффициент полученный выше и загружаем скетч в Arduino.

 Скачать скетч

Открываем мониторинг порта и устанавливаем любой предмет

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

Ссылки
  Библиотека HX711
 Документация на HX711

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Комплект проводов DuPont, 2,54 мм, 20 см
  Тензодатчик для весов до 50 кг
  Модуль 24-битного АЦП/ЦАП для тензодатчиков на HX711

41 комментарий для “Весы на Arduino, HX711 и тензодатчика”
  1. Не подскажете, такая ситуация, загружаю программу калибровки, кладу предмет, но вместо калибровочного фактора — Пустота. То есть пишет calibration factor: , но само значение не показывает. Делал по Вашему алгоритму. Схема с четырьмя тензодатчиками по 50 кг. У меня вопросы: нуждается ли плата HX711 в какой-нибудь прошивке осле покупки, и ещё, как я понял, в этой схеме дополнительные резисторы не нужны? На этом мои размышления о причине зашли в тупик. Пробовал загружать программа расчета веса, показывает 2-3 измерения с неправильными (очевидно) значениями, а потом останавливается. Я просто думал, что должно быть +- непрерывный процесс взвешивания. Что я никак не могу увидеть?

    1. Здравствуйте, проверьте подключение и самое главное, центр датчика должен быть свободным, то-есть цент должен свободно ходить под грузом.

  2. Здравствуйте, показания веса просто колеблются от 2 до 120 г, при условии, что лежит груз сильно тяжелее. Причём на изменение груза не реагирует никак. Просто значения постепенно растут, потом также плавно падают, чтобы снова постепенно вырасти. И всё. Можете указать на ошибку?

  3. ну.. и где «Вот и все в следующей статье расскажу о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.»

    Где статья!?

          1. Здравствуйте, мне тоже отправьте, пожалуйста.

          2. если можно тоже сбросьте , буду признателен

      1. Здравствуйте!
        Так же хотелось бы прочесть следующую статью на эту тему.
        Спасибо!

      2. здравствуйте. скиньте, пожалуйста на почту продолжение.
        спасибо

    1. Добрый день. Отправьте и мне пожалуйста. Самая лучшая статья! Как пчеловоду — очень интересно продолжение

  4. Добрый день.
    Собрал схему на 4х полумостовых тензодатчиках до 50кг.
    При калибровке показало calibration factor : 0.01 его и указал во второй части скетча (это норм цифры?)
    Но потом показания «пляшут»: при стандартном весе 1150гр показания 1238гр до 1834гр
    Если всё убрать тоже не спокойно: от -31,75гр до 490гр
    Сборку проверил, скетч весь просмотрел (местами знаю наизусть уже) подскажите пожалуйста куда еще смотреть? Быть может есть вариант проверки самих дачиков?

  5. Буду признателен за продолжение статьи в почту. Спасибо
    Калибровка — используется одна реперная точка? А если для точности нужно 2 или 3, как их можно запрограммировать?

  6. Цвет текста статьи надо сделать ещё светлее. В таком цвете текст ещё с трудом, но читается.

  7. Здравствуйте, очень хотелось бы получить информацию по следующей статье (об отправке данных раз в сутки)!

  8. Здравствуйте. Хотелось бы прочесть следующую статью на эту тему. Где можно посмотреть?

  9. Здравствуйте, Сергей! Вы написали, что » в следующей статье расскажу о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.» , а когда выйдет эта статья и где можно посмотреть (почитать)? Я собрал, но есть вопросы и хотел бы почитать о вашей версии.

  10. Добрый день.
    Буду очень благодарен если скинете продолжение статьи и мне на почту.
    Спасибо!

  11. Здравствуйте!
    Так же хотелось бы прочесть следующую статью на эту тему.
    Спасибо!

  12. Добрый день.
    Можете и мне сбросить на почту продолжения статьи?
    Спасибо.

  13. Здравствуйте! Скиньте пожалуйста и мне информацию о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.

  14. Сергей, здравствуйте!
    Если не сложно, скиньте, пожалуйста, на почту свою статью о проекте расчета веса в улье и отправка всех данных раз в сутки по смс.
    Заранее благодарен.

  15. Добрый день
    Пробую по диджитал, вообще считывать не начинает, просто пустой монитор. Скорость одинаковая
    И по уликам интересно тоже очень

  16. Ошибка в строчке 23. Должно быть:
    units += scale.get_units(), 10;

    Кроме того переменная units должна обнуляться перед входом в цикл 10 измерений.

  17. Здравствуйте! Очень заинтересовал проект расчета веса улья и передачи данных в смс сообщении, если не затруднит, пришлите, пожалуйста. Всего вам самого доброго!

  18. hx711 неточный. на ad7799 точнее работает. в инете (в vk например) опубликовал схему и инструкцию. тут фотки не выкладываются

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

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