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

Тензометрический датчик для Ардуино или тензодатчик (от латинского слова tensus — напряженный) преобразует деформацию в электрический сигнал. Существует несколько способов измерения деформаций, но для электронных весов наибольшее распространение получили тензорезистивные датчики. Рассмотрим, как подключить тензодатчик к Arduino и дадим пример программы с библиотекой hx711.h.
Тензодатчик. Принцип работы, характеристики
Модуль для весов состоит из самого тензорезистивного датчика, который встроен в прочную конструкцию. Микросхема HX711 предназначена для усиления сигнала от тензорезистора и передачи данных в микроконтроллер. После калибровки модуля, можно вычислить степень деформации тензорезистивного датчика по изменению его сопротивления, и рассчитать силу, приложенную к конструкции (вес).

Рабочий элемент модуля – тензорезистор (проволока на гибкой подложке), которую приклеивают к измеряемому предмету. При деформации меняется сопротивление резистора, а соответственно меняется сигнал. Если откалибровать модуль и собрать надежную конструкцию весов на Arduino, то можно добиться хорошей точности. Отметим, что сам датчик может быть рассчитан на разный вес — от 2 кг и более.
Как подключить тензодатчик к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль тензодатчика hx711;
- провода «папа-папа», «папа-мама»;
- паяльник и немного фантазии.
Для датчика потребуется придумать и собрать некую конструкцию весов, а также иметь под рукой весы, чтобы сравнивать данные с модуля с эталоном. Для сборки весов на Ардуино в датчике имеются отверстия с резьбой. Основным элементом модуля (см. картинку ниже) является 24 битный аналого-цифровой преобразователь для весов — микросхема HX711, к которой подключается тензодатчик.

После сборки весов на Ардуино, необходимо откалибровать тензорезистивный датчик. Подключите датчик к модулю HX711, согласно схеме размещенной выше, а сам модуль необходимо подключить к плате Ардуино. Порты DT и SCK можно подключить к любым цифровым портам микроконтроллера (в примере кода мы использовали 2 и 3 порт). После сборки схемы загрузите скетч для калибровки датчика в плату Arduino.
Счетч для калибровки тензодатчика HX711
#include <HX711.h> HX711 scale(2, 3); // порты DT, CLK float calibration_factor = -3.7; // калибровка датчика float units; float ounces; void setup() { Serial.begin(9600); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor"); scale.set_scale(); scale.tare(); // сбрасываем датчик на 0 long zero_factor = scale.read_average(); Serial.print("Zero factor: "); Serial.println(zero_factor); } void loop() { scale.set_scale(calibration_factor); // применяем калибровку Serial.print("Reading: "); units = scale.get_units(), 10; // выполняем замеры 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; } }
Пояснения к коду:
- на монитор порта будет выведен поправочный коэффициент, который следует использовать далее в работе с датчиком для весов;
- при необходимости корректировки коэффициента, через монитор порта следует отправлять «+» или «-» на плату Ардуино.
Счетч для тензодатчика (hx711) Ардуино
#include <HX711.h> HX711 scale(2, 3); // порты DT, CLK 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(); }
Пояснения к коду:
- используя поправочный коэффициент из первой программы, ваши весы должны показывать довольно точные показания в граммах;
- скачать библиотеку hx711.h Arduino с описанием команд можно на нашем сайте на странице Библиотеки Ардуино.
Добавить комментарий