Цифровые весы с использованием тензодатчика и Arduino

Попробуйте наш инструмент устранения неполадок





В этом посте мы узнаем о датчике нагрузки на основе тензодатчика. Мы будем изучать, что такое тензодатчик, что такое тензодатчик, влияние температуры на тензодатчик, температурную компенсацию с помощью моста Уитстона и усилителя тензодатчика HX711, и, наконец, мы узнаем, как построить весы на базе Arduino, реализовав тензодатчик как датчик веса.

Этот пост посвящен измерению веса и методам измерения, а также реализации этих методов в схеме весов на базе Arduino.



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

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



Что такое вес?

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

Масса - это количество физической материи, присутствующей в объекте.

Вес зависит от еще одного фактора: силы тяжести.

Гравитация постоянна по всему земному шару (есть незначительные отклонения в гравитации из-за неоднородной сферической формы Земли, но она очень мала). Вес в 1 кг на Земле будет весить 160 грамм на Луне с точно такой же массой, потому что Луна имеет гораздо более слабое гравитационное притяжение.

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

Что такое тензодатчик:

Тензодатчик - это преобразователь или датчик, который измеряет деформацию (деформацию) объекта. Это было изобретено инженером-электриком Эдвардом Э. Симмонсом и инженером-механиком Артуром Клодом Руге.

Иллюстрация тензодатчика:

Датчик тензодатчика

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

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

Теперь изменение сопротивления тензодатчика прямо пропорционально весу или приложенной силе на поверхности.

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

Давайте вкратце рассмотрим, что такое мост Уитстона.

Понимание моста Уитстона:

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

Уитстон.

Иллюстрация мостовой схемы Уитстона:

Схема моста уитстона

Наши современные цифровые мультиметры могут считывать значения сопротивления в диапазоне от мегаом, килоом и ом.

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

Мост из пшеничного камня состоит из 4 резисторов, из которых 3 имеют известное сопротивление, а один - неизвестное сопротивление.

Разность потенциалов (напряжение) прикладывается к точкам «A» и «C», а к точкам «B» и «D» подключается вольтметр.

Если все резисторы равны, в точках «B» и «D» не будет протекать ток, и вольтметр покажет ноль. Это называется сбалансированным мостом.

Если сопротивление резистора отличается от сопротивления трех других резисторов, между точками «B» и «D» будет протекать напряжение, и вольтметр покажет некоторое значение, пропорциональное неизвестному сопротивлению. Это называется неуравновешенным мостом.

Здесь неизвестное сопротивление - это тензодатчик, при изменении сопротивления оно отражается на вольтметре.

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

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

Влияние температуры на тензодатчик:

Тензодатчик чувствителен к температуре и может испортить фактические показания веса / силы. При изменении температуры окружающей среды металлическая фольга подвергается металлическому расширению, что напрямую влияет на сопротивление.

Мы можем свести на нет температурный эффект с помощью моста Уитстона. Давайте посмотрим, как можно компенсировать температуру с помощью моста Уитстона.

Компенсация температуры:

Мы легко можем нейтрализовать температурный эффект, заменив все резисторы на тензодатчики. Теперь все сопротивление тензодатчика будет зависеть от температуры в равной степени, а нежелательный шум будет нейтрализован характером моста Уитстона.

Что такое тензодатчик?

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

Иллюстрация тензодатчика:

Устройство тензодатчика

Этот тип датчика веса является жестким и обычно используется в промышленности. Имеется 4 винтовых крепления, одна сторона прикручена к неподвижной поверхности, а другой конец прикручен к держателю (например, корзине) для удержания объекта измерения.

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

Ячейки полного моста состоят из 4 клемм, а именно E +, E-, которые представляют собой провода возбуждения, через которые подается напряжение питания. Два других провода - это S + и S-, сигнальные провода, на которых измеряется напряжение.

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

Усилитель тензодатчиков HX711:

Иллюстрация модуля усилителя тензодатчика HX711:

Усилитель тензодатчиков HX711

Усилитель тензодатчика основан на микросхеме IC HX711, которая представляет собой 24-битный аналого-цифровой преобразователь, специально разработанный для измерения веса. Он имеет различные выбираемые коэффициенты усиления 32, 64 и 128 и работает от 2,6 до 5,5 В.
Эта коммутационная плата помогает обнаруживать крошечные отклонения в весоизмерительной ячейке. Этот модуль требует библиотеки HX711.h для работы с

Arduino или любые другие микроконтроллеры.

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

В заключение, теперь вы знаете, что такое тензодатчик, что такое мост Уитстона, влияние температуры на тензодатчик, температурная компенсация и что такое усилитель тензодатчика.

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

Разработка цифровых весов с использованием Arduino

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

Примечание. Эта схема может не соответствовать стандартам, необходимым для коммерческого внедрения.

Весы используются в различных отраслях и исследованиях, от миллиграммов до нескольких тонн. Максимальный масштаб предлагаемых весов зависит от технических характеристик вашего датчика веса. Доступны диапазоны от 500 грамм, 1 кг, 5 кг, 10 кг, 20 кг и 40 кг и т. Д.

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

Классификация класса точности тензодатчика:

Для разных приложений определены разные классы точности. Приведенная ниже классификация - от самой низкой до самой высокой точности.

Датчики веса с более низкой точностью (но достаточно точными) классифицируются как D1, C1 и C2. Для этого проекта этого достаточно. Эти датчики веса используются для измерения веса песка, цемента или воды.

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

C4, C5, C6 - лучшие в своем классе точности, эти классы весоизмерительных датчиков используются для измерения в граммах и микрограммах. Эти классы марок используются в торговых весах, при крупномасштабном мониторинге производства, упаковке пищевых продуктов, лабораторном использовании и т. Д.

Теперь перейдем к техническим деталям проекта.

Принципиальная электрическая схема:

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

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

Проект состоит из платы усилителя Arduino, датчика нагрузки и датчика нагрузки HX711 и компьютера. Выходные данные можно отслеживать на последовательном мониторе Arduino IDE.

Мозгом проекта, как всегда, является Arduino, вы можете использовать любую модель платы Arduino. HX711 - это 24-битный АЦП, который может немного прогнуться из-за веса тензодатчика. Он может работать от 2,7 В до 5 В. Питание осуществляется от платы Arduino.

Датчик нагрузки обычно имеет четыре провода, которые являются выходом тензометрического датчика, сконфигурированного с мостом Уитстона.

Красный провод - E +, черный провод - E-, зеленый провод - A- и белый провод - A +. В некоторых модулях HX711 указываются названия клемм тензодатчика, а в некоторых модулях HX711 указываются цвета проводов, такая модель проиллюстрирована на принципиальной схеме.

Вывод DATA HX711 подключен к выводу № 3 Arduino, а вывод Clock HX711 подключен к выводу № 2 Arduino.

Как установить тензодатчик:

как установить тензодатчик с Arduino

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

Как показано выше, для удерживания измерительного груза можно использовать тонкую деревянную или тонкую пластину.

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

После завершения настройки оборудования давайте загрузим код и откалибруем.

Калибровка схемы:

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

Коэффициент калибровки определяет точность измерения веса.

Загрузите библиотеку HX711 здесь: github.com/bogde/HX711

Программный код калибровки:

//-------------------- --------------------//
#include
const int out = 3
const int clck = 2
HX711 scale(out, clck)
float CalibrationFactor = -96550
char var
void setup()
{
Serial.begin(9600)
Serial.println('------------- Weight Scale Calibration --------------')
Serial.println('Press Q,W,E,R or q,w,e,r to increase calibration factor by 10,100,1000,10000 respectively')
Serial.println('Press A,S,D,F or a,s,d,f to decrease calibration factor by 10,100,1000,10000 respectively')
Serial.println('Press 'T' or 't' for tare')
scale.set_scale()
scale.tare()
long zero_factor = scale.read_average()
Serial.print('Zero factor: ')
Serial.println(zero_factor)
}
void loop()
{
scale.set_scale(CalibrationFactor)
Serial.print('Reading: ')
Serial.print(scale.get_units(), 3)
Serial.println(' Kilogram')
Serial.print('Calibration Factor is: ')
Serial.println(CalibrationFactor)
Serial.println('--------------------------------------------')
if (Serial.available())
{
var = Serial.read()
if (var == 'q')
{
CalibrationFactor = CalibrationFactor + 10
}
else if (var == 'a')
{
CalibrationFactor = CalibrationFactor - 10
}
else if (var == 'w')
{
CalibrationFactor = CalibrationFactor + 100
}
else if (var == 's')
{
CalibrationFactor = CalibrationFactor - 100
}
else if (var == 'e')
{
CalibrationFactor = CalibrationFactor + 1000
}
else if (var == 'd')
{
CalibrationFactor = CalibrationFactor - 1000
}
else if (var == 'r')
{
CalibrationFactor = CalibrationFactor + 10000
}
else if (var == 'f')
{
CalibrationFactor = CalibrationFactor - 10000
}
else if (var == 'Q')
{
CalibrationFactor = CalibrationFactor + 10
}
else if (var == 'A')
{
CalibrationFactor = CalibrationFactor - 10
}
else if (var == 'W')
{
CalibrationFactor = CalibrationFactor + 100
}
else if (var == 'S')
{
CalibrationFactor = CalibrationFactor - 100
}
else if (var == 'E')
{
CalibrationFactor = CalibrationFactor + 1000
}
else if (var == 'D')
{
CalibrationFactor = CalibrationFactor - 1000
}
else if (var == 'R')
{
CalibrationFactor = CalibrationFactor + 10000
}
else if (var == 'F')
{
CalibrationFactor = CalibrationFactor - 10000
}
else if (var == 't')
{
scale.tare()
}
else if (var == 'T')
{
scale.tare()
}
}
}
//-------------------- --------------------//

Как откалибровать:

  • После завершения настройки оборудования загрузите приведенный выше код.
  • Снимите тонкую пластину или дерево, которые используются для удержания груза, включая два винта (другая сторона датчика веса должна быть прикреплена к основанию)
  • Откройте последовательный монитор.
  • Поместите известный груз непосредственно на датчик нагрузки, скажем, 100 грамм.
  • Нажмите Q, W, E, R увеличить коэффициент калибровки на 10,100,1000,10000 соответственно.
  • Нажмите А, С, D, F для уменьшения калибровочного коэффициента на 10,100,1000,10000 соответственно.
  • Нажимайте «Enter» после каждого увеличения или уменьшения калибровочного коэффициента.
  • Увеличивайте или уменьшайте коэффициент калибровки, пока не появится правильный вес известного утяжелителя.
  • Функция тарирования предназначена для обнуления весов, это полезно, когда вы хотите измерить вес воды (скажем) без веса чаши. Сначала поставить чашу, прижать тару и налить воду.
  • Запишите калибровочный коэффициент и запишите его после появления известного веса.

Теперь он может измерять неизвестный вес.

Код программы измерения веса:

//---------------- ----------------//
#include
const int out = 3
const int clck = 2
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
void setup()
{
Serial.begin(9600)
Serial.println('Press 'T' or 't' to tare')
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
Serial.print('Weight: ')
Serial.print(scale.get_units(), 3)
Serial.println(' Kilogram')
if (Serial.available())
{
char var = Serial.read()
if (var == 't')
{
scale.tare()
}
if (var == 'T')
{
scale.tare()
}
}
}
//---------------- ----------------//

float CalibrationFactor = -12000

Замените -12000 найденным калибровочным коэффициентом. Это может быть отрицательное или положительное число.

Загрузите приведенный выше код с полной настройкой оборудования, и весы готовы.

Весы с ЖК-дисплеем

Вышеупомянутая статья объясняет систему весов на основе Arduino с использованием вашего ПК, в следующем разделе мы попытаемся создать практическую версию весов, добавив ЖК-дисплей 16 x 2, чтобы мы не зависели от ПК при измерении. веса. В этом посте предлагаются две версии: одна с ЖК-дисплеем 16 x 2 «I2C» и одна без ЖК-дисплея «I2C» 16 x 2.

Здесь представлены два варианта, чтобы читатели могли выбрать дизайн по своему усмотрению. Основное различие между ними - проводные соединения с модулем адаптера I2C, для работы ЖК-дисплея требуется всего 4 провода (Vcc, GND, SCL и SDA), тогда как без адаптера I2C вам нужно несколько проводов для подключения между Arduino и ЖК-дисплеем.

Однако обе функции абсолютно одинаковы, некоторые предпочитают I2C обычному, а некоторые наоборот, так что вот обе конструкции.

Давайте посмотрим на обычный дизайн ЖК-дисплея:

Принципиальная электрическая схема:

arduino, ЖК-дисплей 16 x 2 и потенциометр 10K для регулировки контрастности ЖК-дисплея

На приведенной выше схеме у нас есть Arduino, ЖК-дисплей 16 x 2 и потенциометр 10K для регулировки контрастности ЖК-дисплея.

3.3 В может подаваться от Arduino на ЖК-дисплей для подсветки. Предусмотрена кнопка для обнуления показаний веса, эта функция будет подробно объяснена в конце.

Это просто соединение между ЖК-дисплеем и Arduino, соединение между датчиком нагрузки и усилителем датчика нагрузки с Arduino показано в предыдущем разделе.

Код для весов с ЖК-экраном:

// -------- Program developed by R.GIRISH -------//
#include
#include
const int rs = 10
const int en = 9
const int d4 = 8
const int d5 = 7
const int d6 = 6
const int d7 = 5
LiquidCrystal lcd(rs, en, d4, d5, d6, d7)
const int out = 3
const int clck = 2
const int Tare = 4
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
void setup()
{
lcd.begin(16, 2)
pinMode(Tare, INPUT)
digitalWrite(Tare, HIGH)
lcd.setCursor(0, 0)
lcd.print(' Weight Scale')
lcd.setCursor(0, 1)
lcd.print(' Machine')
delay(2000)
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Weight:')
lcd.print(scale.get_units(), 3)
lcd.print(' Kg')
delay(200)
if (digitalRead(Tare) == LOW)
{
scale.tare()
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Tare ......')
lcd.setCursor(0, 1)
lcd.print('Setting to 0 Kg.')
delay(1000)
}
}
// -------- Program developed by R.GIRISH -------//

Теперь давайте посмотрим, как использовать эти весы с ЖК-дисплеем на базе адаптера I2C.

Принципиальная схема Arduino и ЖК-дисплей с адаптером I2C:

Arduino и ЖК-дисплей с адаптером I2C

Здесь у нас просто Arduino и ЖК-дисплей с адаптером I2C на задней панели. Теперь соединения проводов стали проще и понятнее.

Иллюстрация модуля I2C:

Модуль I2C

Этот модуль можно припаять прямо к задней части обычного ЖК-дисплея 16 x 2 или даже 20 x 4 и следовать схематической схеме.

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

Загрузите следующую библиотеку для I2C:

github.com/marcoschwartz/LiquidCrystal_I2C

github.com/PaulStoffregen/Wire

Код для схемы весов на основе I2C:

// -------- Program developed by R.GIRISH -------//
#include
#include
#include
const int out = 3
const int clck = 2
const int Tare = 4
HX711 scale(out, clck)
float CalibrationFactor = -12000 // Replace -12000 the calibration factor.
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
pinMode(Tare, INPUT)
digitalWrite(Tare, HIGH)
lcd.setCursor(0,0)
lcd.print(' Weight Scale')
lcd.setCursor(0,1)
lcd.print(' Machine')
delay(2000)
scale.set_scale(CalibrationFactor)
scale.tare()
}
void loop()
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Weight:')
lcd.print(scale.get_units(), 3)
lcd.print(' Kg')
delay(200)
if (digitalRead(Tare) == LOW)
{
scale.tare()
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Tare ......')
lcd.setCursor(0,1)
lcd.print('Setting to 0 Kg.')
delay(1000)
}
}
// -------- Program developed by R.GIRISH -------//

ПРИМЕЧАНИЕ:

Вы должны ввести коэффициент калибровки в код перед загрузкой любого кода в Arduino.

float CalibrationFactor = -12000

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

Функция тары:

Функция тарирования весов сводится к нулю показаний. Например, если у нас есть корзина, в которую загружены товары, то вес нетто будет равен весу корзины + весу товаров.

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

Если у вас есть какие-либо вопросы относительно этой практической схемы весов с ЖК-экраном на базе Arduino, пожалуйста, укажите в разделе комментариев, вы можете получить быстрый ответ.




Предыдущая статья: Цепь твердотельного контактора для мотор-насосов Далее: Как сделать понижающие трансформаторы