24-битный АЦП для тензодатчиков — из него и балки получаются весы. Два провода к контроллеру, калибровка грузом известной массы.
Как работает
Тензодатчик — мост из резисторов, которые чуть меняют сопротивление при изгибе балки. Сигнал — милливольты, поэтому нужен HX711: усилитель с коэффициентом 128 и АЦП на 24 бита. Данные читаются по двум проводам — DT (данные) и SCK (такт).
Библиотека HX711: scale.begin(DT, SCK), scale.tare() — обнулить пустые весы, scale.set_scale(k) — коэффициент, scale.get_units(10) — среднее из десяти измерений в граммах.
#include <HX711.h>
// Весы: тензодатчик и усилитель HX711 на выводах 4 и 5.
//
// Микросхема отдаёт двадцать четыре разряда, вытактованные вручную по
// двум проводам. Это не шина и не аналоговый вход: собственного
// аналогового входа у Uno на такой сигнал не хватило бы — мост даёт
// милливольты, а разрешение нужно в тысячные доли.
//
// Сырые отсчёты сами по себе не значат ничего. Их превращают в граммы
// две настройки, и обе делаются один раз руками.
//
// **Тарирование** — сколько показывает пустая платформа. Это ноль, и
// он уезжает от температуры, поэтому tare() зовут при каждом запуске.
//
// **Масштаб** — сколько отсчётов приходится на грамм. Кладут известный
// груз, делят разницу на его вес и записывают число в скетч. Другого
// способа нет: коэффициент зависит от конкретного датчика и от того,
// как он закреплён.
HX711 scale;
const int DT = 4;
const int SCK_PIN = 5;
void setup() {
Serial.begin(9600);
scale.begin(DT, SCK_PIN);
// Число из калибровки. У вашего датчика оно будет другим.
scale.set_scale(420.0);
Serial.println(F("уберите груз — тарирую"));
delay(500);
scale.tare();
Serial.println(F("готово"));
}
void loop() {
// Среднее по пяти измерениям: одиночный отсчёт дрожит на единицы
// граммов, и по нему ничего не решают.
float grams = scale.get_units(5);
Serial.print("g:");
Serial.println(grams, 1);
delay(500);
}
В железе
Балка подключается к HX711 четырьмя проводами: обычно красный — E+, чёрный — E−, белый — A−, зелёный — A+. Если вес растёт в минус — поменяйте местами A+ и A−.
Частые ошибки
Нет калибровки — числа в тысячах вместо граммов. Положите груз известной массы и подберите коэффициент.
Нет tare() при старте — весы показывают вес платформы.
Показания медленно уплывают — прогрев тензодатчика и HX711. Дайте поработать пару минут и тарируйте снова.
Балка закреплена неправильно — стрелка на балке должна смотреть в сторону нагрузки, а изгибаться должна середина.