
HX711 + Load Cell
Avia Semiconductor — ADC; плата SparkFun · HX711, SparkFun SEN-13879; четырёхпроводный полный тензомост
24-битный ADC для мостового тензодатчика. Пример SparkFun 13879, UNO R3 и калибровка собственным эталонным грузом.
Автор: SLDV LAB
Опубликовано · Обновлено
О МОДУЛЕ
Что делает HX711, SparkFun SEN-13879; четырёхпроводный полный тензомост
HX711 усиливает малое дифференциальное напряжение тензомоста и преобразует его в цифровые отсчёты. Сам ADC не знает массу в граммах: результат зависит от механики, нуля и калибровки известным грузом.
Пример использует SparkFun SEN-13879 и четырёхпроводный полный мост. Трёхпроводные половинные мосты из напольных весов требуют другой схемы объединения. Цвета проводов тензодатчиков не универсальны: определяйте E+/E− и S+/S− по документации.
Закрепите тензодатчик в соответствии с его конструкцией, не зажимая рабочую область. Груз не должен превышать паспортную нагрузку. Вибрация, перекос, температура и ползучесть меняют результат. 24-битный формат ADC не означает 24 бита полезной точности весов. Это основа учебного прибора, а не поверенные торговые весы.
Фото: SparkFun Electronics / ESPHome, CC BY 2.0. Исходный фон удалён; реальная плата пропорционально масштабирована и размещена на фоне SLDV LAB, геометрия, контакты и детали не перерисованы. Показан только усилитель HX711 SparkFun SEN-13879; тензодатчик подключается и приобретается отдельно.
Схема распиновки
Авторская схема SLDV LAB для SparkFun SEN-13879, PCB v11 с отдельными VDD и VCC. Вид со стороны компонентов, два больших конденсатора сверху. Схема относится к этой плате и не задаёт универсальную распиновку четырёхконтактных HX711-клонов. Цветовые подписи на плате не заменяют паспорт тензодатчика; E± и A± определяйте по его документации.
Источники: страница реального модуля SparkFun SEN-13879, исходная схема производителя и PCB производителя.
Характеристики
- Формат результата ADC
- 24 бит
- Частота выдачи данных
- 10 или 80 отсчётов/с
- Усиление канала A
- 128 или 64; в примере 128
- Усиление канала B
- 32
- Цифровой интерфейс
- DOUT и PD_SCK; не I²C и не стандартный SPI
- Тензодатчик примера
- Полный четырёхпроводный мост; грузоподъёмность выбирается по задаче
- Питание модуля
- SparkFun SEN-13879: в примере VCC и VDD подключены к 5V UNO R3; по схеме каждый вход рассчитан на 2,7–5,5 В. VCC питает аналоговую часть и мост, VDD задаёт цифровые уровни. Для контроллера 3,3 В VDD должен соответствовать 3,3 В; у безымянных модулей VCC/VDD часто не разделены. Допустимое возбуждение и нагрузку самого тензодатчика проверяйте по его паспорту.
ПРАКТИКА
Подключение
| Контакт модуля | Контакт платы | Назначение |
|---|---|---|
| VCC | 5V | SparkFun 13879: аналоговое питание; не путать с E+ моста. |
| VDD | 5V | Цифровая логика UNO R3. |
| GND | GND | Общая земля. |
| DAT / DOUT | D3 | Вход данных UNO R3. |
| SCK / PD_SCK | D2 | Выход тактирования; не аппаратный SPI. |
| E+ / RED | Excitation+ тензодатчика | Питание моста от модуля; цвет провода уточнить по паспорту. |
| E− / BLK | Excitation− тензодатчика | Питание моста; это не сигнальный вывод. |
| A+ / GRN | Signal+ тензодатчика | Для ревизии SparkFun v11 по схеме; ориентироваться по A+, а не только цветовой надписи. |
| A− / WHT | Signal− тензодатчика | Если знаки изменены, коэффициент калибровки может быть отрицательным; не переставляйте питание наугад. |
| B+, B−; YLW | Не подключать | Канал B и экран в минимальном примере не используются. Если нужен экран, подключение проектируется отдельно. |
Подходит для Arduino. Выберите контакты по документации своей платы.
ВАШ ПРОЕКТ · ВАШ ДАТЧИК
Интегрируйте модуль с ChatGPT
Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.
Помоги собрать весы с HX711. Уточни точный модуль, тип моста, его паспортную нагрузку/возбуждение, контроллер и механическое крепление. Основа: SparkFun 13879, полный 4-проводный мост на A, UNO R3, DAT D3/SCK D2, VCC/VDD 5 В, bogde HX711 0.7.5. Дай схему по функциям проводов без универсальных цветов, полный скетч с тайм-аутом, тарированием и калибровкой моим известным грузом. Не подставляй выдуманный коэффициент или грузоподъёмность; объясни сохранение калибровки и проверку несколькими грузами.
Библиотеки
Установите библиотеку для своей среды и откройте пример из её документации.
Что именно прописать
- Библиотека
HX711 Arduino Library 0.7.5Автор bogde; не путать с HX711_ADC и другими несовместимыми API.
- Заголовок
#include <HX711.h>В начало скетча.
- Инициализация
scale.begin(3, 2, 128)DOUT D3, SCK D2, канал A с усилением 128.
- Частота
10 SPSШтатно замкнутая RATE-перемычка SparkFun; 80 SPS увеличивает шум.
- Калибровка
counts_per_gram = (loaded_raw - zero_raw) / known_gramsОпределяется экспериментально для собственной механики; знак сохраняется.
Arduino UNO R3 · полный скетч
cpp#include <HX711.h>
#include <math.h>
HX711 scale;
float zeroRaw = 0;
float countsPerGram = 0;
bool hasZero = false;
bool averageRaw(float &out) {
long sum = 0;
for (uint8_t i = 0; i < 10; ++i) {
if (!scale.wait_ready_timeout(1000, 1)) return false;
long raw = scale.read();
if (raw <= -8388608L || raw >= 8388607L) return false;
sum += raw;
}
out = sum / 10.0f;
return true;
}
void setup() {
Serial.begin(115200);
Serial.setTimeout(1500);
scale.begin(3, 2, 128);
Serial.println(F("Empty scale: send t. Then place known mass and send c followed by grams."));
}
void loop() {
if (Serial.available()) {
char command = Serial.read();
if (command == 't') {
float raw;
if (averageRaw(raw)) {
zeroRaw = raw;
hasZero = true;
countsPerGram = 0;
Serial.println(F("Tare done; calibrate next"));
} else Serial.println(F("Tare failed: timeout or saturation"));
} else if (command == 'c') {
float grams = Serial.parseFloat();
float raw;
if (!hasZero || !isfinite(grams) || grams <= 0) {
Serial.println(F("Tare first; enter positive known grams"));
} else if (!averageRaw(raw)) {
Serial.println(F("Calibration read failed"));
} else {
float factor = (raw - zeroRaw) / grams;
if (!isfinite(factor) || fabs(factor) < 0.0001f) {
Serial.println(F("No useful load change; check bridge and mounting"));
} else {
countsPerGram = factor;
Serial.print(F("Counts_per_gram=")); Serial.println(factor, 6);
}
}
}
}
float raw;
if (!averageRaw(raw)) {
Serial.println(F("HX711 timeout or saturation"));
} else if (hasZero && countsPerGram != 0) {
Serial.print(F("Mass_g=")); Serial.println((raw - zeroRaw) / countsPerGram, 2);
} else {
Serial.print(F("Raw=")); Serial.println(raw, 1);
}
}
Полный скетч UNO R3, Arduino AVR Boards 1.8.6 и bogde HX711 0.7.5. Объявления API и схема сверены; компиляция и аппаратный тест не выполнялись. Serial Monitor: 115200 бод, окончание строки Newline. После стабилизации пустой платформы отправьте t. Положите известный груз в пределах допустимой нагрузки и отправьте c сразу с его массой в граммах: например c100 только если груз действительно 100 г. Масса не задана константой. После калибровки снимите груз и проверьте ноль, затем используйте второй известный груз. Калибровка хранится только в RAM и сбрасывается при перезапуске или новом t. Отрицательный коэффициент допустим при противоположной полярности сигнала. Усреднение 10 отсчётов на 10 SPS занимает примерно секунду; это блокирующий учебный пример. Проверяются готовность и насыщение ADC, но обрыв тензомоста может дать правдоподобные числа и требует отдельной проверки.
Проекты с этим компонентом
Все проектыСвязанные проекты пока не опубликованы.
