Весы на ардуино с дисплеем

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Весы на основе Arduino и HX711 своими руками

Микроконтроллерная платформа Arduino позволяет сделать множество несложных, но в то же время полезных в быту вещей. Одной из таких вещей можно назвать весы.

В данном примере будет показано, как самостоятельно собрать весы на основе Arduino, модуля с микросхемой HX711 и четырех весоизмерительных ячеек.

Микросхема HX711 специально предназначенf для усиления сигналов от весоизмерительных ячеек и передачи их в другой микроконтроллер. Весоизмерительные ячейки подключаются к плате с HX711, и эта плата сообщает Arduino, что именно измеряют весоизмерительные ячейки. Весоизмерительные ячейки (на 50 кг в данном случае) представляют собой металлические элементы специальной формы, к которым прикреплены тензодатчики (тензорезисторы). Тензорезисторы – это резисторы, которые меняют свое сопротивление при изгибе. Когда металлическая часть изгибается, сопротивление тензодатчика изменяется (HX711 точно измеряет это небольшое изменение сопротивления).

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

Убедитесь, что два терминала на весоизмерительных ячейках имеют наивысшее сопротивление между ними (например, черным и белым), соедините их в петлю в соответствии со цветами, например, черный-черный белый-белый черный-черный белый-белый. Затем можно подавать напряжение возбуждения на два противоположных центральных ответвления и снимать показания с другой пары центральных ответвлений. Таким образом, получим некоторое подобие моста Уитстона. Схема подключения весоизмерительных ячеек к модулю HX711 и затем к Arduino показана ниже.

Далее приведен код (скетч) для Arduino, позволяющий реализовать измерение веса. В нем используется библиотека HX711, которую можно взять на https://github.com/bogde/HX711. Перед началом полноценного использования весов, их необходимо откалибровать. Код калибровки выглядит следующим образом.

Код работы весов на основе Arduino и HX711.

Источник

Весы на тензо резисторе, модуле hx711 и arduino

Нам понадобится:

Тензорезистор как у меня на 5 кг: http://ali.pub/5icvdr

Данный тензорезистор лежал у меня несколько лет без дела. И вот дошли руки до него. Решил попробовать на нем сделать простые весы.

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

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

Библиотек также как и примеров существует несколько для модуля hx711. К каждой библиотеке идет пример с калибровкой. Калибровку нужно делать с известным весом. Либо сначала взвесить вещь на обычных весах, а потом сравнить ее уже с датчиком.

В данном проекте я использую библиотеку HX711_ADC.

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

Данная библиотека легко находится по названию по пути Скетч->Подключить библиотеку->Управлять библиотеками.

После установки библиотеки зайдем в Файл->Примеры->HX711_ADC->Calibration и загрузим данный скетч в Ардуино. Подключив датчик HX711 к аруино следущим образом (привожу сразу полную схему весов, но можно для калибровки подключить только модуль HX711):

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

Нижнюю ножку и верхнюю крышку я распечатал на 3Д принтере. Модели для печати можно скачать тут: https://yadi.sk/d/YJmAg9yWmujOaA

После того как все закрепили, запускаем ардуино, открываем монитор порта и видим следующую картину:

Здесь нам говорится, что нужно убрать груз с весов и отправить в монитор порта букву “t”. Так и делаем после чего видим следующее:

Тут нам говорится чтоб мы взяли известный нам вес и установили на весы. А сам вес вписали в монитор порта. В моем случае это будет 50 грамм. Пишем цифру 50 в монитор порта.

После того как ввели Вес, нам выдаст коэфициент калибровочный, который нужно запомнить и вписать уже в основной скетч. Запомним, что это цифра -383.50.

Теперь, собираем все по схеме указанной выше. И скачиваем скетч готовых весов от сюда: https://yadi.sk/d/0RWU2RATjOGQ9Q

Сюда мы и будем вписывать калибровочный фактор который получили ранее.

Ну и все, теперь все должно работать.

Также предусмотрена кнопка сброса веса. Она необходима для того, если у Вас например уже стоит стакан ( он имеет уже какуюто массу) и в этот стакан нужно налить 100грамм жидкости. Следовательно ставим стакан ( он к примеру весит 50 грамм) нажимаем кнопку. И весы обнуляются. Далее наливаем 100 грамм жидкости.

Данная манипуляция должна работать с любым тензорезистором.

Сборка весов, демонстрация работы, калибровка весов показана в видео:

Источник

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

Автор: Сергей · Опубликовано 12.09.2021 · Обновлено 18.02.2022

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

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

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

На плате есть два разъема 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 грамм.

Источник

Измерение веса с помощью Arduino и модуля HX711

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

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Датчик нагрузки/веса (Load cell) 40kg (купить на AliExpress).
  3. Модуль усиления датчика нагрузки HX711 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Соединительные провода.
  6. USB кабель.
  7. Макетная плата.
  8. Болты с гайкой, каркас и база.

Датчик веса и модуль усиления HX711

Датчик веса представляет собой полупроводник, который преобразует приложенные силу или давление в электрическое напряжение. Величина этого напряжения прямо пропорциональна приложенной к датчику силе. Датчик веса имеет измеритель деформации (strain gauge), который деформируется под действием приложенной силы (давления). Измеритель деформации генерирует электрический сигнал когда в результате деформации изменяется его эффективное сопротивление. Обычно датчик нагрузки состоит из 4-х измерителей деформации, объединенных по принципу моста Уитстона (моста для измерения сопротивления). Мы в нашем проекте будем использовать датчик нагрузки, способный измерять вес тел до 40 кг, однако производятся датчики нагрузки и с другим диапазоном измеряемых весов – до 5 кг, до 10 кг, до 100 кг и более.

Но электрические сигналы, генерируемые датчиком веса, весьма слабы – всего несколько милливольт. Поэтому перед их обработкой в плате Arduino они нуждаются в усилении – и для этой цели подходит модуль усиления датчика нагрузки HX711, показанный на нижеприведенном рисунке. Этот модуль содержит чип HX711, представляющий собой высокоточный 24-разрядный аналогово-цифровой преобразователь (АЦП). HX711 имеет два аналоговых входных канала, коэффициент усиления для которых можно программировать. Таким образом, модуль HX711 усиливает слабые электрические сигналы от датчика нагрузки и затем эти усиленные и оцифрованные сигналы подает на плату Arduino для их дальнейшей обработки (извлечения информации о весе).

Датчик нагрузки соединяется с модулем усиления HX711 с помощью 4 проводов: красного, черного, белого и зеленого/синего цвета. Возможны некоторые изменения цветовой гаммы этих проводов в зависимости от производителя модуля. Для соединения этих двух компонентов нашего устройства необходимо будет сделать следующие подключения как показано на ниже приведенном рисунке:
• красный провод — к E+;
• черный провод — к E-;
• белый провод — к A-;
• зеленый провод — к A+.

Установка датчика нагрузки на платформу и базу

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

Работа схемы

Схема устройства представлена на следующем рисунке.

Для подключения ЖК дисплея его контакты RS, EN, d4, d5, d6, и d7 соединяются с контактами 8, 9, 10, 11, 12 и 13 платы Arduino соответственно. Контакты DT и SCK модуля HX711 непосредственно подключаются к контактам A0 и A1 платы Arduino. Соединение датчика нагрузки с модулем усиления HX711 было описано в предыдущем разделе статьи.

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

Для начала процесса калибровки подождите пока на экране ЖК дисплея загорится надпись “put 100g” (положите 100 грамм), после этого положите 100 грамм на датчик нагрузки и подождите. Спустя несколько секунд процесс калибровки будет закончен. После этого вы можете класть на наши самодельные весы любую вещь массой до 40 кг и на экране ЖК дисплея высветится ее вес в граммах.

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

Исходный код программы

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

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

#include

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0;
float val=0;
long count=0;

После этого мы запрограммировали ниже приведенную функцию для чтения данных с модуля HX711.

unsigned long readCount(void)
<
unsigned long Count;
unsigned char i;
pinMode(DT, OUTPUT);
digitalWrite(DT,HIGH);
digitalWrite(SCK,LOW);
Count=0;
pinMode(DT, INPUT);
while(digitalRead(DT));
for (i=0;i
<
digitalWrite(SCK,HIGH);
Count=Count
digitalWrite(SCK,LOW);
if(digitalRead(DT))
Count++;
>
digitalWrite(SCK,HIGH);
Count=Count^0x800000;
digitalWrite(SCK,LOW);
return(Count);
>

После этого мы инициализировали ЖК дисплей и задали направление работы (на ввод или вывод данных) для используемых контактов в функции void setup() .

void setup()
<
Serial.begin(9600);
pinMode(SCK, OUTPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print(» Weight «);
lcd.setCursor(0,1);
lcd.print(» Measurement «);
delay(1000);
lcd.clear();
calibrate();
>

Далее, в функции void loop() мы считываем данные с модуля HX711, конвертируем их в значение веса (в граммах) и передаем их на ЖК дисплей.

void loop()
<
count= readCount();
int w=(((count-sample)/val)-2*((count-sample)/val));
Serial.print(«weight:»);
Serial.print((int)w);
Serial.println(«g»);
lcd.setCursor(0,0);
lcd.print(«Weight «);
lcd.setCursor(0,1);
lcd.print(w);
lcd.print(«g «);
if(digitalRead(sw)==0)
<
val=0;
sample=0;
w=0;
count=0;
calibrate();
>
>

Но перед этим мы создали функцию калибровки наших весов, которая калибрует их когда на датчике нагрузки находится тело массой 100 грамм.

Источник

Adblock
detector