Добро пожаловать в самое подробное руководство по работе с тензодатчиками и Arduino! Этот подробный мануал создан для всех уровней - от школьников до профессиональных инженеров. Мы пройдем путь от основ физики до создания промышленных систем мониторинга, с подробными схемами, примерами кода и практическими проектами.
Для образовательных проектов мы рекомендуем миниатюрные тензодатчики 5кг - идеальное решение для первых экспериментов с Arduino.
Физические основы тензометрии
Закон Гука и деформация материалов
Тензодатчики работают на основе закона Гука, открытого в 1660 году. Формула закона:
F = k * ΔL
Где:
- F - приложенная сила (Ньютоны)
- k - коэффициент упругости материала (Н/м)
- ΔL - изменение длины (метры)
В реальных датчиках изменение длины под нагрузкой 1 кг составляет всего ~0.0005 мм для стальной балки длиной 10 см.
1
Металлическая балка закрепляется с одного конца
2
К свободному концу прикладывается нагрузка
3
Верхняя поверхность балки сжимается, нижняя растягивается
4
Тензорезисторы преобразуют деформацию в изменение сопротивления
Принцип работы тензорезистора
Тензорезистор меняет сопротивление при деформации:
ΔR/R = K * ε
Где:
- ΔR/R - относительное изменение сопротивления
- K - коэффициент тензочувствительности (2-5 для металлов)
- ε - относительная деформация (ΔL/L)
Практический пример: При деформации 0.1% и K=2 сопротивление изменится на 0.2%. Для измерения таких изменений требуется точная электроника.
Мост Уитстона: математика измерений
Для измерения малых изменений сопротивления используется мостовая схема:
// Уравнение баланса: R1/R2 = R3/R4 // Выходное напряжение: Vout = Vin * [R3/(R3+R4) - R2/(R1+R2)]
|
Тип моста
|
Чувствительность
|
Точность
|
Стоимость
|
|
1/4 моста
|
Низкая
|
±2-5%
|
Низкая
|
|
1/2 моста
|
Средняя
|
±0.5-1%
|
Средняя
|
|
Полный мост
|
Высокая
|
±0.1%
|
Высокая
|
Выбор компонентов
Типы тензодатчиков
1
Балка на изгиб (Bending Beam)
Самый распространенный тип для весов:
- Длина: 30-200 мм
- Материал: алюминий/нержавеющая сталь
- Точность: 0.05-0.5%
- Для проектов: кухонные весы, учебные проекты
2
S-образный датчик (S-Type)
Для подвесных систем:
- Грузоподъемность: 50 г - 50 т
- Защита: IP65-IP68
- Особенность: встроенная защита от перегрузки
3
Мембранный датчик (Shear Beam)
Для промышленных применений:
- Низкий профиль
- Устойчивость к боковым нагрузкам
- Точность: 0.02-0.1%
Глубокий анализ HX711
HX711 - специализированный АЦП для тензодатчиков:
// Ключевые характеристики: #define INPUT_RANGE ±80mV // Широкий диапазон #define RESOLUTION 24-bit // Высокая точность #define SAMPLING_RATE 10/80Hz // Гибкость настроек #define CURRENT_DRAW <1.5mA // Энергоэффективность
|
Параметр
|
HX711
|
Обычный АЦП
|
Преимущество
|
|
Разрешение
|
24 бита (эффективных 20-22)
|
10-16 бит
|
Высокая точность
|
|
Потребление
|
1.0-1.5 мА
|
0.1-100 мА
|
Энергоэффективность
|
|
Встроенный усилитель
|
PGA x128
|
Отсутствует
|
Упрощение схемы
|
Платформы Arduino
|
Плата
|
Процессор
|
Память
|
Для каких проектов
|
|
Arduino Uno
|
ATmega328P @16MHz
|
32KB Flash, 2KB RAM
|
Учебные проекты, простые весы
|
|
Arduino Nano
|
ATmega328P @16MHz
|
32KB Flash, 2KB RAM
|
Портативные устройства
|
|
ESP32
|
Xtensa LX6 @240MHz
|
4MB Flash, 520KB RAM
|
IoT весы, облачные системы
|
Совет: Начинайте с Arduino Uno - она прощает ошибки подключения. Для продвинутых проектов выбирайте ESP32.
Электрические схемы подключения
Безопасность работы
Критически важные меры предосторожности:
1
Всегда отключайте питание при переподключении проводов
2
Используйте антистатический браслет
3
Не превышайте напряжение 5В на HX711
4
Для пайки: 25-30Вт паяльник, температура 300-350°C
Подключение одиночного датчика
Схема подключения 4-проводного датчика
ARDUINO UNO HX711 MODULE ТЕНЗОДАТЧИК (4 провода)
----------- ------------ -----------------------
5V (VCC) ------> VCC
GND ------> GND
Digital 2 <------ DT (DOUT)
Digital 3 ------> SCK (PD_SCK)
E+ (Красный) ------> Красный (Питание +)
E- (Черный) ------> Черный (Питание -)
A- (Белый) ------> Белый (Сигнал -)
A+ (Зеленый) ------> Зеленый (Сигнал +)
Схема подключения 6-проводного датчика
ARDUINO UNO HX711 MODULE ТЕНЗОДАТЧИК (6 проводов)
----------- ------------ -----------------------
5V (VCC) ------> VCC
GND ------> GND
Digital 2 <------ DT (DOUT)
Digital 3 ------> SCK (PD_SCK)
E+ (Красный) ------> Красный (Питание +)
E- (Черный) ------> Черный (Питание -)
A- (Белый) ------> Белый (Сигнал -)
A+ (Зеленый) ------> Зеленый (Сигнал +)
SENSE+ (Синий) -----> Синий (Sense+)
SENSE- (Желтый) ----> Желтый (Sense-)
GND ------> Желтый (Sense-)
Параллельное подключение 4 датчиков
Для платформенных весов:
// Стандартная цветовая маркировка: // Красный: +Exc // Черный: -Exc // Белый: -Signal // Зеленый: +Signal // Схема подключения: // Все красные провода -> E+ на HX711 // Все черные провода -> E- на HX711 // Все белые провода -> A- на HX711 // Все зеленые провода -> A+ на HX711
Важно: Все датчики должны быть идентичными! Разные модели дадут неверные показания.
Программная настройка
Установка Arduino IDE
Пошаговая инструкция для Windows:
2
Запустите EXE-файл, следуйте инструкциям установки
3
Подключите Arduino через USB
4
Установите драйвер CH340 (для китайских клонов)
5
Выберите плату: Инструменты > Плата > Arduino Uno
6
Выберите порт: Инструменты > Порт > COMx
Библиотеки HX711
|
Библиотека
|
Особенности
|
Рекомендация
|
|
HX711_ADC
|
Продвинутые алгоритмы фильтрации, многоканальность
|
Для профессиональных проектов
|
|
HX711 (bogde)
|
Простая и стабильная, минималистичная
|
Для начинающих
|
// Установка через Arduino IDE: // 1. Скетч → Подключить библиотеку → Управлять библиотеками... // 2. В поиске введите "HX711" // 3. Выберите библиотеку и нажмите "Установить"
Первая программа
Базовый скетч для чтения сырых значений:
#include "HX711.h" // Подключаем библиотеку // Определяем пины #define DOUT_PIN 2 #define SCK_PIN 3 HX711 scale; // Создаем объект void setup() { Serial.begin(9600); scale.begin(DOUT_PIN, SCK_PIN); Serial.println("Система инициализирована"); } void loop() { if (scale.is_ready()) { long raw_value = scale.read(); Serial.print("Raw value: "); Serial.println(raw_value); } delay(500); // Задержка между измерениями }
Продолжение: Калибровка, проекты и промышленные решения
Калибровка системы
Теория калибровки
Калибровка устанавливает соответствие между выходным сигналом и приложенной силой:
// Основное уравнение: Weight = (RawValue - Offset) * ScaleFactor
1
Offset (Tare): Значение при нулевой нагрузке
2
ScaleFactor: Коэффициент преобразования
3
Эталонный груз: Известная масса для расчета
Практическая калибровка
Пошаговый процесс для Arduino:
#include "HX711.h" HX711 scale; float calibration_factor = -7050.0; // Стартовое значение void setup() { Serial.begin(9600); scale.begin(2, 3); Serial.println("Уберите нагрузку и отправьте 't' для тарирования"); } void loop() { if (Serial.available()) { char c = Serial.read(); if (c == 't') { scale.tare(); // Сброс нуля Serial.println("Тара установлена"); } if (c == 'c') { calibrate(); // Запуск калибровки } } // Вывод текущего веса float weight = scale.get_units(5); Serial.print("Вес: "); Serial.print(weight, 1); Serial.println(" г"); } void calibrate() { Serial.println("Поместите известный вес и введите массу в граммах"); while (!Serial.available()) delay(10); float known_weight = Serial.parseFloat(); float reading = scale.get_units(10); calibration_factor = reading / known_weight; scale.set_scale(calibration_factor); Serial.print("Калибровочный коэффициент: "); Serial.println(calibration_factor); }
Автоматическая калибровка
Процедура с сохранением в EEPROM:
#include
void saveCalibration() { EEPROM.put(0, calibration_factor); } void loadCalibration() { EEPROM.get(0, calibration_factor); if (isnan(calibration_factor)) { calibration_factor = -7050.0; // Значение по умолчанию } scale.set_scale(calibration_factor); }
Практические проекты
Умные кухонные весы
1
Компоненты:
- Arduino Nano
- Датчик 5кг
- Дисплей LCD 16x2 I2C
- Кнопки 4x
2
Схема подключения:
Arduino | Компонент
-----------------------
5V -> VCC (LCD, HX711)
GND -> GND (LCD, HX711)
A4 -> SDA (LCD)
A5 -> SCL (LCD)
D2 -> DT (HX711)
D3 -> SCK (HX711)
3
Основные функции:
void displayWeight(float weight) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Вес: "); lcd.print(weight, 1); lcd.print(" г"); // Переключение единиц измерения if (buttonPressed()) { lcd.setCursor(0,1); lcd.print(weight * 0.035, 1); lcd.print(" oz"); } }
Автокормушка для питомцев
Проект с IoT функционалом:
#include
#include
// Конфигурация WiFi const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; // Конфигурация кормления float feedAmount = 50.0; // Грамм на порцию void dispenseFood() { digitalWrite(RELAY_PIN, HIGH); delay(2000); // Время включения дозатора digitalWrite(RELAY_PIN, LOW); // Отправка данных в облако String url = "http://api.example.com/feed?amount=" + String(feedAmount); http.begin(url); http.GET(); http.end(); }
Система контроля запасов
Для склада или кухни:
struct InventoryItem { String name; float full_weight; float current_weight; float threshold; }; InventoryItem items[] = { {"Мука", 5000.0, 0, 500.0}, {"Сахар", 3000.0, 0, 300.0} }; void checkInventory() { for (int i = 0; i < ITEM_COUNT; i++) { items[i].current_weight = readWeight(i); float percent = (items[i].current_weight / items[i].full_weight) * 100; if (percent < 20) { sendAlert(items[i].name + " заканчивается!"); } } }
Интеграция с другими системами
Работа с ESP32
Отправка данных в облако через Wi-Fi:
#include
#include
void setup() { // Подключение к WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void sendToCloud(float weight) { HTTPClient http; http.begin("http://api.example.com/weight"); http.addHeader("Content-Type", "application/json"); String payload = "{\"weight\":" + String(weight) + "}"; int httpCode = http.POST(payload); if (httpCode == HTTP_CODE_OK) { Serial.println("Данные отправлены"); } http.end(); }
Подключение к PLC
Интеграция с промышленными контроллерами:
// Использование Modbus RTU #include
ModbusRTU mb; void setup() { Serial.begin(9600, SERIAL_8N1); mb.begin(&Serial); mb.slave(SLAVE_ID); // Регистры для данных mb.addHreg(WEIGHT_REGISTER); } void loop() { mb.task(); float weight = scale.get_units(10); mb.Hreg(WEIGHT_REGISTER, (uint16_t)(weight * 10)); // x10 для сохранения точности }
Промышленное применение
Логистические решения
1
Портативные весы для грузов
- Датчики: S-тип 500 кг
- Плата: ESP32 с Bluetooth
- Корпус: ударопрочный пластик IP67
2
Конвейерные весы
- Точность: ±0.5%
- Скорость: 100 взвешиваний/мин
- Интеграция с PLC через Modbus
Медицинские применения
Точные системы дозирования:
// Алгоритм дозирования void dispenseMedication(float target_dose) { float current_weight = 0; pump_start(); while (current_weight < target_dose) { current_weight = scale.get_units(5); delay(50); } pump_stop(); // Коррекция перевеса if (current_weight > target_dose) { float overfill = current_weight - target_dose; correctOverfill(overfill); } }
Схемы подключения
Схема подключения к ESP32
ESP32 DEV KIT HX711 ТЕНЗОДАТЧИК
------------ ----- -----------
3.3V --------> VCC
GND --------> GND
GPIO16 <-------- DT
GPIO17 --------> SCK
E+ ----> Красный
E- ----> Черный
A+ ----> Зеленый
A- ----> Белый
Алгоритм калибровки
НАЧАЛО
├── Установить датчик без нагрузки
├── Вызвать scale.tare()
├── Разместить эталонный груз
├── Рассчитать коэффициент:
│ coefficient = (reading - tare) / known_weight
├── Применить коэффициент: scale.set_scale()
└── Сохранить в EEPROM