Весы на 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 грамм.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include "HX711.h" // Подключаем библиотеку HX711 HX711 scale; // Создаём объект scale #define DT 2 // Указываем номер вывода, к которому подключен вывод DT датчика HX711 #define SCK 3 // Указываем номер вывода, к которому подключен вывод SCK датчика HX711 float weight_of_standard = 350; // Указываем эталонный вес float units = 0.035274; // Указываем коэффициент для перевода из унций в граммы float calibration_factor = 0; // Создаём переменную для значения калибровочного коэффициента void setup() { Serial.begin(57600); // Инициируем работу с последовательным портом на скорости 57600 бод scale.begin(DT, SCK); // Инициируем работу с платой HX711 scale.set_scale(); // Не калибруем полученные значения scale.tare(); // Обнуляем вес на весах (тарируем) Serial.println("You have 10 seconds to set your known load"); // Выводим в монитор порта текст delay(10000); // Ждём 10 секунд Serial.print("calibration factor: "); // Выводим текст в монитор последовательного порта calibration_factor = scale.get_units(10) / (weight_of_standard / units); // Считываем значение с тензодатчика Serial.println(calibration_factor); // Выводим в монитор порта значение корректирующего коэффициента } void loop() {} |
Открываем мониторинг порта, после сообщения «You have 10 seconds to set your known load» кладем эталонный предмет на весы и ждем 10 секунд, следующим сообщении получим калибровочный коэффициент, в моем случаи это -0.89.
Программа расчета веса:
Все данные для расчета веса готовы, указываем в параметре «calibration_factor» коэффициент полученный выше и загружаем скетч в Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include "HX711.h" // Подключаем библиотеку HX711 HX711 scale; // Создаём объект scale #define DT 2 // Указываем номер вывода, к которому подключен вывод DT датчика HX711 #define SCK 3 // Указываем номер вывода, к которому подключен вывод SCK датчика HX711 float calibration_factor = -0.89; // Вводим калибровочный коэффициент float units; // Задаём переменную для измерений в граммах float ounces; // Задаём переменную для измерений в унциях void setup() { Serial.begin(57600); // Инициируем работу последовательного порта на скорости 9600 бод scale.begin(DT, SCK); // Инициируем работу с датчиком scale.set_scale(); // Выполняем измерение значения без калибровочного коэффициента scale.tare(); // Сбрасываем значения веса на датчике в 0 scale.set_scale(calibration_factor); // Устанавливаем калибровочный коэффициент } void loop() { Serial.print("Reading: "); // Выводим текст в монитор последовательного порта for (int i = 0; i < 10; i ++) { // Усредняем показания, считав значения датчика 10 раз units = + scale.get_units(), 10; // Суммируем показания 10 замеров } units = units / 10; // Усредняем показания, разделив сумму значений на 10 ounces = (units * 0.035274)*10; // Переводим вес из унций в граммы Serial.print(ounces); // Выводим в монитор последовательного порта вес в граммах Serial.println(" grams"); // Выводим текст в монитор последовательного порта } |
Открываем мониторинг порта и устанавливаем любой предмет
Вот и все в следующей статье расскажу о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.
Ссылки
Библиотека HX711
Документация на HX711
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Комплект проводов DuPont, 2,54 мм, 20 см
Тензодатчик для весов до 50 кг
Модуль 24-битного АЦП/ЦАП для тензодатчиков на HX711
Не подскажете, такая ситуация, загружаю программу калибровки, кладу предмет, но вместо калибровочного фактора — Пустота. То есть пишет calibration factor: , но само значение не показывает. Делал по Вашему алгоритму. Схема с четырьмя тензодатчиками по 50 кг. У меня вопросы: нуждается ли плата HX711 в какой-нибудь прошивке осле покупки, и ещё, как я понял, в этой схеме дополнительные резисторы не нужны? На этом мои размышления о причине зашли в тупик. Пробовал загружать программа расчета веса, показывает 2-3 измерения с неправильными (очевидно) значениями, а потом останавливается. Я просто думал, что должно быть +- непрерывный процесс взвешивания. Что я никак не могу увидеть?
Здравствуйте, проверьте подключение и самое главное, центр датчика должен быть свободным, то-есть цент должен свободно ходить под грузом.
Здравствуйте, показания веса просто колеблются от 2 до 120 г, при условии, что лежит груз сильно тяжелее. Причём на изменение груза не реагирует никак. Просто значения постепенно растут, потом также плавно падают, чтобы снова постепенно вырасти. И всё. Можете указать на ошибку?
ну.. и где «Вот и все в следующей статье расскажу о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.»
Где статья!?
Здравствуйте, могу скинуть на почту.
Сергей, добрый день.
Можете скинуть мне на почту тоже?
Спасибо.
Отправил
Здраствуйте, и мне тоже скиньте, пожалуйста
Сергей, и мне скиньте на почту , пожалуйста.
Отправил
Здравствуйте, мне тоже отправьте, пожалуйста.
Отправил
если можно тоже сбросьте , буду признателен
Здравствуйте!
Так же хотелось бы прочесть следующую статью на эту тему.
Спасибо!
Салют! Скиньте пожалуйста мне тоже)
Сергей, добрый день.
Можете скинуть мне на почту тоже?
Спасибо.
здравствуйте. скиньте, пожалуйста на почту продолжение.
спасибо
Здравствуйте. И мне пришлите пожалуйста .
Можете мне скинуть статью про вес улья и отправки смс? Буду очень благодарен. rozhkov2202@gmail.com
Отправил
Добрый день. Отправьте и мне пожалуйста. Самая лучшая статья! Как пчеловоду — очень интересно продолжение
Добрый день, прошу отправьте и мне с отправкой смс с данными
Добрый день.
Собрал схему на 4х полумостовых тензодатчиках до 50кг.
При калибровке показало calibration factor : 0.01 его и указал во второй части скетча (это норм цифры?)
Но потом показания «пляшут»: при стандартном весе 1150гр показания 1238гр до 1834гр
Если всё убрать тоже не спокойно: от -31,75гр до 490гр
Сборку проверил, скетч весь просмотрел (местами знаю наизусть уже) подскажите пожалуйста куда еще смотреть? Быть может есть вариант проверки самих дачиков?
Буду признателен за продолжение статьи в почту. Спасибо
Калибровка — используется одна реперная точка? А если для точности нужно 2 или 3, как их можно запрограммировать?
Цвет текста статьи надо сделать ещё светлее. В таком цвете текст ещё с трудом, но читается.
Здравствуйте, цвет темы. спасибо за замечание, скоро поправлю.
Здравствуйте, можете мне тоже статью отправить на почту?
прошу прислать продолжение весов по смс на почту
Здравствуйте, очень хотелось бы получить информацию по следующей статье (об отправке данных раз в сутки)!
Здравствуйте. Хотелось бы прочесть следующую статью на эту тему. Где можно посмотреть?
Здравствуйте, Сергей! Вы написали, что » в следующей статье расскажу о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.» , а когда выйдет эта статья и где можно посмотреть (почитать)? Я собрал, но есть вопросы и хотел бы почитать о вашей версии.
Добрый день.
Буду очень благодарен если скинете продолжение статьи и мне на почту.
Спасибо!
Здравствуйте!
Так же хотелось бы прочесть следующую статью на эту тему.
Спасибо!
Добрый день.
Можете и мне сбросить на почту продолжения статьи?
Спасибо.
Здравствуйте! Скиньте пожалуйста и мне информацию о проекте расчета веса в улии и отправка всех данных раз в сутки по смс.
Сергей, здравствуйте!
Если не сложно, скиньте, пожалуйста, на почту свою статью о проекте расчета веса в улье и отправка всех данных раз в сутки по смс.
Заранее благодарен.
Добрый день
Пробую по диджитал, вообще считывать не начинает, просто пустой монитор. Скорость одинаковая
И по уликам интересно тоже очень
здравствуйте. можно мне тоже на почту статью о проекте. спасибо
Ошибка в строчке 23. Должно быть:
units += scale.get_units(), 10;
Кроме того переменная units должна обнуляться перед входом в цикл 10 измерений.
Добрый вечер можно мне скинуть скетч пасечных весов. Спасибо.
Здравствуйте! Очень заинтересовал проект расчета веса улья и передачи данных в смс сообщении, если не затруднит, пришлите, пожалуйста. Всего вам самого доброго!
Пожалуйста опубликуй те дальнейшую доработку пасечных весов
hx711 неточный. на ad7799 точнее работает. в инете (в vk например) опубликовал схему и инструкцию. тут фотки не выкладываются
можете ссылку дать на вашу схему
Покажите пример подключения двух мостов, на входы А и на входы В.
Сергей, добрый день.
Можете скинуть мне на почту тоже? Очень надо, я пчеловод))
Здравствуйте, можете мне тоже статью отправить на почту?
Здравствуйте! я начинающий пчеловод и меня очень заинтересовала ваша статья! Скиньте, пожалуйста, продолжение статьи, очень интересно!
Сергей,добрый день .Будьте скиньте пожалуйста мне на почту статью весы для улья.С уважением Вячеслав.
Здравствуйте!
Почему-то схема вообще не работает, значения полностью нулевые, схему перепроверял очень много раз, если кто сталкивался — расскажите, пожалуйста! Уже больше месяца бьюсь, и ничего((((
P.S. тоже хотел бы увидеть следующий проект, вдруг с ним что-то получится. Заранее спасибо
Здравствуйте. не могли бы вы скинуть статью про gsm весы? спасибо.
Здраствуйте! очень интересная статья! не могли бы вы выслать продолжение про gsm?
Сергей,добрый день .Cкиньте пожалуйста мне на почту статью весы для улья.Заранее Спасибо.
Здраствуйте! очень интересная статья! не могли бы вы выслать продолжение про gsm?
Здравствуйте . скиньте и мне продолжение. Я только заказал комлектующие, хочу сделать умный улей. Я пчеловод.