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

Programming Arduino UNO to Measure Weight in Kgs

Calibration Sketch

For this program to run you need HX711 Library Download from here hx711-master

/*
 * https://circuits4you.com
 * 2016 November 25
 * Load Cell HX711 Module Interface with Arduino to measure weight in Kgs
 Arduino 
 pin 
 2 -> HX711 CLK
 3 -> DOUT
 5V -> VCC
 GND -> GND

 Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/

#include "HX711.h"  //You must have this library in your arduino library folder

#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

//Change this calibration factor as per your load cell once it is found you many need to vary it in thousands
float calibration_factor = -96650; //-106600 worked for my 40Kg max scale setup 

//=============================================================================================
//                         SETUP
//=============================================================================================
void setup() {
  Serial.begin(9600);
  Serial.println("HX711 Calibration");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press a,s,d,f to increase calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press z,x,c,v to decrease calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press t for tare");
  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);
}

//=============================================================================================
//                         LOOP
//=============================================================================================
void loop() {

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

  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 3);
  Serial.print(" kg"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
    else if(temp == 's')
      calibration_factor += 100;  
    else if(temp == 'x')
      calibration_factor -= 100;  
    else if(temp == 'd')
      calibration_factor += 1000;  
    else if(temp == 'c')
      calibration_factor -= 1000;
    else if(temp == 'f')
      calibration_factor += 10000;  
    else if(temp == 'v')
      calibration_factor -= 10000;  
    else if(temp == 't')
      scale.tare();  //Reset the scale to zero
  }
}
//=============================================================================================

Preamplifier Function

This chip is mainly suitable for weight measurement applications. The load cells that are used in weight scaling applications give very low output voltage. This output voltage is usually in the order of millivolts. Conventional, ADC ICs such as ADC0804 can not measure such low voltage with good resolution or accuracy. HX711 ADC can measure these low scale voltages and convert them into digital values.  Because it has a preamplifier inside the chip which makes it suitable for such applications.

HX711 Pin Configuration

Pinout diagram shows the pin assignment of each pin. This ADC has 16 pins. As you can depict from pinout that it has two ADC channels and each channel converts an analog signal into a 28-bit long digital value.

Pin#15: RATE

Digital input pin. It controls data rate at output. When this pin is low, data rate is 10Hz. When it is high, data rate is 80Hz.

Load Cell Connection diagram and its Pinout

HX711 Module

HX711 Module

Most Load cell have four wires red, black, green and white. On HX711 board you will find E+, E-, A+, A- and B+, B- connections. Connect load cell

Red wire to E+

Black wire to E-

Green wire to A-

White wire to A+

Load Cell

Load cell comes in various weights depending on your application select the load cell weight specification, In this tutorial I have used 40Kg, Precision Grade C2 load cell. Load cell also have precision type. 

Precision classes explained: Which load cell for which application?

Load cells are ranked, according to their overall performance capabilities, into differing accuracy classes or grades. A specific accuracy grade specifies an error envelope for certain parameters, such as linearity, hysteresis, temperature effects, creep, etc. In practice, certain system accuracy parameters depend considerably on the application of use, physical load introduction to the transducer and disturbing factors such as Zener barriers and surge protection devices.

Load Cell Classification

Load cells with different accuracy classes are required depending on the application. The chart provides an overview of typical applications, ranging from the lowest to the highest accuracy class.

Load cells with relatively low accuracy classified D1 to C2 are sufficient forsimple building materials scales used to weigh sand, cement or water.

Adding the right proportion of additives to building materials is essential. For this purpose, special building materials scales using accuracy class C3 load cells are available for mixing additives such as ash or sand .

Accuracy class C3 load cells are widely used in machine construction as well. Here, scales contribute to quality assurance, for example, when ball bearingsare checked.

However, increased accuracy is needed with shop-counter scales or scales used in filling machines. Grams or micrograms are required here. Load cells used in these applications comply with accuracy classes C3 to C6.

Weigh scale Application Example Circuit

Now let’s understand the interfacing of hx711 with any microcontroller and a load cell.

In this circuit, we connect a load cell output terminals with channel A inverting and non-inverting pins. Because we can directly interface bridge sensors ( having differential inputs)  with this analog channel.

Note: Do not connect the bridge sensor directly with channel B.

Also, you can observe from the circuit diagram that we power the load cell from the HX711 chip. Therefore, this ADC chip eliminates the need for external power regulator. Consequently, it will make your design cost-effective.

Working Principle

Working Principle of the circuit is very simple.

  • When we apply weigh on the load cell, it produces an analog voltage at the output pins according to the magnitude of the load.
  • Channel A reads sensors output through a programmable gain amplifier and input mux.
  • Gain amplifier adjusts the magnitude of the input signal and passed this signal to the digital conversion interface circuit.
  • The digital interface circuit converts the analog input signal into a 26-bit digital signal and sends signals to I2C output pins.
  • After that, we can use any microcontroller such as Arduino, PIC16F877A which has I2C Communication support.
  • We can easily read data from the I2C port using any microcontroller.

You can check these I2C communication tutorials:

  • I2C COMMUNICATION WITH PIC MICROCONTROLLER
  • I2C LCD interfacing with ESP32 and ESP8266 in Arduino IDE

Подключение тензодатчика к плате Ардуино

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

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

Шаг 1. Что нам понадобится

Arduino — в нашем уроке мы используем стандартный Arduino Uno, другие версии Arduino или клоны должны также работать.

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

Датчик нагрузки на 5 кг. Датчик нагрузки представляют собой металлические детали специальной формы к которым приклеиваются тензодатчики. Тензорезисторы — это резисторы, которые меняют свое сопротивление, когда они изогнуты. Когда металлическая часть изгибается, сопротивление тензодатчика изменяется (HX711 точно измеряет это небольшое изменение сопротивления). Вы можете купить HX711 и весоизмерительную ячейку здесь, например, на Амазоне — https://www.amazon.com/Degraw-Load-Cell-HX711-Combo/dp/B075317R45/.

Прочная плоская монтажная поверхность (x2) — идеальная жесткая деталь из твердой древесины или металла.

Провода разных цветов для подключения всех частей.

Электропитание для Arduino.

Библиотека HX711.h

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

#define DT A0 #define SCK A1 #include «HX711.h» HX711 scale; // структура через которую будет идти обращение

Название Параметры по порядку На выходе Описание
begin() A1 — Вывод Ардуино, где DT,

A3 — разрядность датчика 32(B), 64 или 128(A). По умолчанию 128

Ничего Инициализация
is_ready() Ничего True — готов, False — не готов Тест состояния АЦП
set_gain() 32,64,128 Ничего Установка значения усиления
read() Ничего Сырое значение АЦП Возвращает «чистый» ответ HX711 без поправочных сведений
read_average() Сколько делать проб Возвращает среднюю цифру от выполненных проб (унция) Получить усредненные данные
get_value() Сколько делать проб На выходе средняя масса (унция) без упаковки Получение поправленного значения без веса упаковки
get_units() Сколько делать проб Усредненная поправленная масса (унция) Возвращает массу с учетом упаковки и поправочных значений.
Tare() Сколько делать проб Масса упаковки (унция) Получение массы упаковки
set_scale() Коэффициент Ничего Задание значения корректировки
get_scale() Ничего Значение Получение текущего значения заданного set_scale()
set_offset() Вес (унция) Ничего Ручная установка веса упаковки
Get_offset() Ничего Масса (унция) Запрос установленного вручную параметра упаковки
power_down() Ничего Ничего Перевести HX711 в состояние «сна»
power_up() Ничего Ничего Вывод модуля АЦП из «сна»

Зачем все это необходимо

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

Пригодится аппарат и пасечникам — объединив весы с передатчиком Bluetooth или GSM-модемом можно контролировать «налет» веса пчел в различные периоды года. Достаточно знать чистую массу улья. Все что выше, как раз и будет воск, пчелы и мед.

Тензорезистивный метод

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

Конструкция типичного металлического датчика

Плёночный тензорезистор. На подложку через фигурную маску в вакууме напылена или сформирована методами фотолитографии плёнка металла. Для подключения электродов выполнены контактные площадки (снизу). Метки облегчают ориентацию при монтаже.

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

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

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

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

Тензорезистор включается с помощью электрических проводников во внешнюю электрическую измерительную схему.

Измерительная схема

Измерительный мост с вольтметром в диагонали. Тензорезистор обозначен Rx.

Обычно тензорезисторы включают в одно или два плеча сбалансированного моста Уитстона, питаемого от источника постоянного напряжения (диагональ моста A—D). С помощью переменного резистора R2 производится балансировка моста, так, чтобы в отсутствии приложенной силы напряжение диагонали сделать равным нулю. С диагонали моста B—C снимается сигнал, далее подаваемый на измерительный прибор, дифференциальный усилитель или АЦП.

При выполнении соотношения R1 / R2 = Rx / R3 напряжение диагонали моста равно нулю. При деформации изменяется сопротивление Rx (например, увеличивается при растяжении), это вызывает снижение потенциала точки соединения резисторов Rx и R3 (B) и изменение напряжения диагонали B—C моста — полезный сигнал.

Изменение сопротивления Rx может происходить не только от деформации, но и от влияния других факторов, главный из них — изменение температуры, что вносит погрешность в результат измерения. Для снижения влияния температуры применяют сплавы с низким ТКС, термостатируют объект, вносят поправки на изменение температуры и/или применяют дифференциальные схемы включения тензорезисторов в мост.

Например, в схеме на рисунке вместо постоянного резистора R3 включают такой же тензорезистор, как и Rx, но при деформации детали этот резистор изменяет своё сопротивление с обратным знаком. Это достигается наклейкой тензорезисторов на поверхности по-разному деформируемых зон детали, например, с разных сторон изгибаемой балки или с одной стороны, но со взаимно перпендикулярной ориентацией. При изменении температуры, если температура обоих резисторов равна, знак и величина изменения сопротивления (вызванного изменением температуры) равны, и температурный уход при этом компенсируется.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выше на картинке вы можете увидеть примерный вариант устройства весов на Arduino Uno. В комплекте с модулем 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(); 
}

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий