На приёмке урожая вес — это деньги. Буквально: рабочему платят за килограммы, перекупщику продают по весу, на склад принимают по весу. И вот этот самый вес в большинстве хозяйств измеряется напольными весами из «Ашана» за 2 000 ₽ с точностью ±500 грамм, а записывается от руки в тетрадку.
В этом материале соберём электронные весы на ESP32 и тензодатчике HX711, которые сами записывают результаты взвешивания в Google Таблицу. Точность — до 20 грамм при максимуме 200 кг. Бюджет — около 2 800 ₽. Результат — полная автоматизация учёта взвешивания без ручных записей.
Проблема с обычными весами
Магазинные напольные весы имеют три проблемы для сельского хозяйства. Первая — точность. Бытовые весы при нагрузке 50–100 кг дают погрешность 200–500 грамм. Это звучит несущественно, но при 200 взвешиваниях в день суммарная ошибка достигает 50–100 кг. При цене продукции 80 ₽/кг — это 4 000–8 000 ₽ в день или 120–240 тысяч за сезон.
Вторая проблема — учёт. Рабочий ставит ведро на весы, кричит «двенадцать шесть», приёмщик записывает в тетрадку. Через 200 взвешиваний приёмщик путает цифры, устаёт, записывает «12,6» как «12,0» или «13,6». Ошибка в каждом десятом замере — обычное дело.
Третья проблема — подтверждение. Если нет цифрового лога — нет доказательства. Рабочий говорит «я сдал 180 кг», приёмщик записал 160 кг. Кто прав? Конфликт. А если данные автоматически попадают в таблицу с временной меткой — спорить не о чем.
Что такое тензодатчик и HX711
Тензодатчик (load cell) — это металлическая балка, которая чуть-чуть изгибается под нагрузкой. В неё впаяны тензорезисторы (strain gauges), которые меняют сопротивление при деформации. Изменение микроскопическое — нановольты. Нужен специальный усилитель для чтения.
HX711 — это именно такой усилитель (АЦП для тензодатчиков). 24-битное разрешение, стоит 50 ₽, весит меньше монеты. Подключается к любому микроконтроллеру двумя проводами (clock + data). Для ESP32 есть готовая библиотека — написать код смогут даже те, кто впервые открыл Arduino IDE.
Тензодатчики продаются на разный максимум: 5 кг, 10 кг, 20 кг, 50 кг, 100 кг, 200 кг. Для приёмки урожая оптимально — 200 кг. Четыре датчика на 50 кг, собранные в мост, дают тот же результат и более равномерную нагрузку по платформе.
Список компонентов
- ESP32 DevKit v1 — ~450 ₽
- HX711 модуль — ~50 ₽
- Тензодатчик 200 кг (или 4 шт. × 50 кг) — ~600 ₽
- Платформа — два листа фанеры 40×40 см (12 мм) — ~300 ₽
- OLED-дисплей SSD1306 0.96" — для отображения веса, ~180 ₽
- Кнопка тактовая — для подтверждения взвешивания, ~10 ₽
- Аккумулятор 18650 + держатель + модуль зарядки TP4056 — ~350 ₽
- Понижающий модуль 3.3V — ~60 ₽
- Провода, клеммники, боксик — ~300 ₽
Итого: около 2 300 ₽ с одним датчиком 200 кг или 2 800 ₽ с четырьмя по 50 кг. Вариант с четырьмя датчиками точнее — нагрузка распределяется равномерно по платформе, и не важно, куда поставили ведро.
Сборка платформы
Если используете один датчик 200 кг — конструкция простейшая. Датчик крепится к нижнему листу фанеры двумя болтами (через одни крепёжные отверстия), верхний лист фанеры крепится к другому концу датчика. Получается «бутерброд»: нижняя фанера (опора) → датчик → верхняя фанера (платформа). Нагрузка на платформу изгибает датчик — HX711 считывает деформацию.
Вариант с 4 датчиками по 50 кг: датчики ставятся по углам между двумя листами фанеры. Провода соединяются по схеме моста Уитстона (красные вместе, чёрные вместе, белые — попарно крест-накрест). На маркетплейсах есть готовые комплекты «4 тензодатчика + HX711 + провода» за 400–600 ₽ — искать по запросу «тензодатчик 50 кг комплект весы».
На верхний лист фанеры приклейте резиновые ножки (чтобы ведро не скользило), на нижний — тоже (чтобы весы стояли устойчиво). Влагозащита: покройте фанеру яхтным лаком в два слоя — это даст 2–3 сезона на открытом воздухе.
Подключение HX711 к ESP32
HX711 → ESP32:
- VCC → 3.3V
- GND → GND
- DT (Data) → GPIO 16
- SCK (Clock) → GPIO 17
OLED SSD1306 → ESP32 (I2C):
- VCC → 3.3V
- GND → GND
- SDA → GPIO 21
- SCL → GPIO 22
Кнопка: один контакт → GPIO 4, второй → GND. В коде включаем внутренний подтягивающий резистор (INPUT_PULLUP).
Общее количество проводов — 11. Все можно собрать на макетной плате без пайки для прототипа. Для постоянного использования — спаять на монтажной плате и залить термоклеем.
Прошивка: калибровка и взвешивание
Код использует три библиотеки: HX711 (Bogdan Necula), Adafruit SSD1306, WiFi. Все ставятся через менеджер библиотек Arduino IDE.
#include <HX711.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <HTTPClient.h>
// Пины
const int HX711_DT = 16;
const int HX711_SCK = 17;
const int BUTTON_PIN = 4;
// Wi-Fi
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASSWORD";
// Google Apps Script URL (для записи в таблицу)
const char* SHEET_URL = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec";
HX711 scale;
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// Калибровочный коэффициент (подбирается при калибровке)
float calibrationFactor = -420.0;
float currentWeight = 0;
int weighCount = 0;
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Инициализация дисплея
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
// Инициализация HX711
scale.begin(HX711_DT, HX711_SCK);
scale.set_scale(calibrationFactor);
scale.tare(); // обнуление (платформа без груза)
showMessage("Готово!");
// Wi-Fi
WiFi.begin(WIFI_SSID, WIFI_PASS);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
attempts++;
}
}
void loop() {
// Непрерывное взвешивание (среднее из 5 замеров)
if (scale.is_ready()) {
currentWeight = scale.get_units(5);
if (currentWeight < 0.05) currentWeight = 0; // убираем дрейф нуля
// Показать на дисплее
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.println("Вес:");
display.setTextSize(3);
display.printf("%.1f", currentWeight);
display.setTextSize(1);
display.println(" кг");
display.printf("\nЗаписей: %d", weighCount);
display.display();
}
// Кнопка — записать взвешивание
if (digitalRead(BUTTON_PIN) == LOW) {
delay(50); // антидребезг
if (digitalRead(BUTTON_PIN) == LOW) {
if (currentWeight > 0.1) {
weighCount++;
sendToSheet(currentWeight);
showMessage("Записано!");
delay(1000);
}
while (digitalRead(BUTTON_PIN) == LOW) delay(10);
}
}
delay(200);
}
void sendToSheet(float weight) {
if (WiFi.status() != WL_CONNECTED) return;
HTTPClient http;
String url = String(SHEET_URL) + "?weight=" + String(weight, 1)
+ "&count=" + String(weighCount);
http.begin(url);
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
http.GET();
http.end();
}
void showMessage(const char* msg) {
display.clearDisplay();
display.setCursor(0, 20);
display.setTextSize(2);
display.println(msg);
display.display();
}
Калибровка: подбор коэффициента
Калибровочный коэффициент (calibrationFactor) — это число, которое переводит сырые данные HX711 в килограммы. У каждого тензодатчика оно своё. Подобрать просто:
- Загрузите скетч с calibrationFactor = 1.0
- Положите на весы гирю с известным весом (5-литровая бутылка воды = 5 кг)
- Посмотрите, что показывает дисплей (например, -2100)
- Коэффициент = показание / реальный вес = -2100 / 5 = -420
- Подставьте в код: calibrationFactor = -420.0
Проверьте с другим весом (10 кг, 20 кг). Если ошибка больше 1% — проведите двухточечную калибровку (коэффициент чуть-чуть нелинеен при больших нагрузках). Для большинства задач одноточечная калибровка достаточна.
Важный момент: тензодатчики «ползут» — при постоянной нагрузке показания медленно дрейфуют. Поэтому взвешивание должно быть быстрым: поставил → подождал 2 секунды → нажал кнопку → снял. Не оставляйте груз на платформе надолго.
Google Таблица: автоматическая запись
Чтобы данные попадали прямо в Google Таблицу, нужен простой Google Apps Script. Откройте таблицу, Extensions → Apps Script, вставьте:
function doGet(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var weight = e.parameter.weight;
var count = e.parameter.count;
sheet.appendRow([
new Date(), // дата и время
Number(weight), // вес в кг
Number(count) // порядковый номер
]);
return ContentService
.createTextOutput("OK")
.setMimeType(ContentService.MimeType.TEXT);
}
Нажмите Deploy → New deployment → Web app → Execute as me → Access: Anyone. Скопируйте URL и вставьте в скетч ESP32 (переменная SHEET_URL).
Каждое нажатие кнопки на весах — новая строка в таблице: время, вес, номер. Никаких тетрадок, никаких ошибок переписывания. В конце дня открываете таблицу — полный отчёт с точностью до 20 грамм и временной меткой каждого взвешивания.
Автономное питание
Весы для приёмки стоят в поле или на краю сада — розетки рядом нет. Поэтому автономное питание обязательно:
Аккумулятор 18650 (3,7V, 3000 мАч) через модуль зарядки TP4056 и понижающий конвертер до 3,3V. ESP32 потребляет ~80 мА при активном Wi-Fi и ~20 мА в режиме лёгкого сна. HX711 — ~1,5 мА. Дисплей OLED — ~20 мА.
Итого при активной работе: ~100 мА. Батарея 3000 мАч хватит на ~30 часов непрерывной работы. При рабочем дне 10 часов — три дня без подзарядки. Зарядка — micro-USB от любого блока питания за 3–4 часа.
Можно добавить солнечную панель 5V 1W (~200 ₽) через TP4056 — тогда аккумулятор подзаряжается днём и весы работают практически бесконечно.
Защита от непогоды
Электроника боится воды. Весы стоят на улице. Решение — герметичный корпус для ESP32/HX711/батареи и влагозащита датчиков.
Для электроники: распределительная коробка IP65 (~200 ₽). Дисплей — за прозрачной крышкой. Кнопку поставьте через стенку корпуса (сделать отверстие, вставить кнопку, залить герметиком). Провода к датчикам — через кабельные вводы (гланды).
Тензодатчики: купите с классом защиты IP67 (стоят на 100–200 ₽ дороже обычных). Или покройте обычные датчики эпоксидной смолой — дёшево и работает. Главное — не залить клеем саму деформируемую часть, только клеммы и провод.
Продвинутые функции
Базовый вариант записывает просто «вес + время». Но при желании можно добавить:
Идентификация рабочего. RFID-считыватель RC522 (~120 ₽) + бирки на шнурке для каждого сотрудника. Рабочий прикладывает бирку → вес записывается с его именем. Никакой путаницы «кто сдал сколько» — всё автоматически. Интеграция с агро-платформами типа ТерраКвант позволит связать данные взвешивания с учётом поля и бригады.
Вычет тары. Кнопка «Тара» (второй GPIO) обнуляет вес с пустым ведром на платформе. Это встроенная функция HX711 (scale.tare()), достаточно привязать к кнопке.
Звуковой сигнал. Пьезо-пищалка (~20 ₽) — короткий бип при записи, двойной при ошибке. Когда вокруг шумно и на дисплей не смотришь — очень помогает.
Итоги за смену. После последнего взвешивания — нажать длинное удержание кнопки, дисплей покажет: всего взвешиваний, общий вес, средний вес. Добавляется 10 строчек кода.
Сколько экономит
Хозяйство в Краснодарском крае — сбор яблок, 8 рабочих, сезон 45 дней. До весов с автозаписью: приёмщик записывал вручную, ошибки ~3% (занижение и завышение примерно поровну, но рабочим «округляли вверх» чтобы не было конфликтов). Фактическая переплата — около 5% от ФОТ.
С электронными весами: точность записи — 100%, конфликтов по весу — ноль, переплата — ноль. Экономия на ФОТ за сезон — около 85 тысяч рублей. Стоимость трёх комплектов весов (три точки приёмки) — 8 400 ₽. Окупаемость — три дня работы.
Плюс бонус: полные данные по производительности каждого рабочего. Кто собирает 120 кг в час, кто 80 кг — видно в таблице. Это основа для справедливой сдельной оплаты и объективного управления бригадой.
Точность vs. цена: сравнение вариантов
Давайте честно сравним наши самодельные весы с альтернативами:
Бытовые напольные весы (2 000 ₽). Точность ±300 г при нагрузке до 150 кг. Без записи — только ручной учёт. Не защищены от влаги. Батарейку хватает на 3–6 месяцев. Главная проблема — показания «плавают» при изменении температуры и со временем. Заводская калибровка ухудшается после полугода активного использования.
Товарные весы CAS (15 000–40 000 ₽). Точность ±50 г, до 300 кг. Профессиональная вещь: металлическая платформа, дисплей, иногда RS-232 для подключения к компьютеру. Но Wi-Fi и автозаписи в Google нет — для этого нужны модели от 60 000 ₽. Плюс каждый год — метрологическая поверка (3 000–5 000 ₽).
Наши ESP32-весы (2 800 ₽). Точность ±20 г, до 200 кг. Автоматическая запись в облако, автономная работа, уведомления. Минусы: нет сертификата метрологии (для внутреннего учёта не нужен), фанерная платформа (для тяжёлых условий нужно перейти на сталь). По соотношению цена/функционал — вне конкуренции.
Для хозяйств, которым нужна метрологическая поверка (для торговли на рынках и сертификации продукции) — самоделка не подойдёт. Но для внутреннего учёта — приёмки от бригад, контроля остатков, расчёта с рабочими — это идеальное решение.
Типичные ошибки при сборке
Неправильное крепление датчика. Тензодатчик должен быть закреплён так, чтобы деформировалась только его рабочая часть. Если прикрутить слишком крепко — сжимается корпус, показания неверные. Если слишком слабо — шатается, показания прыгают. Золотая середина: затянуть болт «от руки плюс четверть оборота».
Длинные провода без экрана. Провод от тензодатчика до HX711 длиннее 50 см? Нужна экранированная витая пара. Иначе наводки от двигателя помпы, мотора или даже светильника дадут шум в ±100 г. Посмотрите на показания — если цифры прыгают на дисплее без груза (0.0 → 0.3 → -0.1) — дело в наводках.
Перегрузка датчика. Тензодатчик на 200 кг при нагрузке 250 кг деформируется необратимо. После этого калибровка уплывёт и точность упадёт навсегда. Простое решение — механический ограничитель: подложите под платформу опоры высотой «зазор минус 2 мм». При перегрузке платформа упрётся в опоры, и датчик не пострадает.
Калибровка «наскоро». Не калибруйте 200-килограммовые весы пятилитровой бутылкой воды. Используйте максимально тяжёлый эталон, который найдёте. Мешок цемента (25 кг), гиря от штанги (20 кг), несколько мешков одновременно. Чем ближе калибровочный вес к рабочему диапазону — тем точнее будет при реальных нагрузках.
Альтернативная прошивка: ESPHome
Если вы уже знакомы с Home Assistant и ESPHome — есть вариант вообще без написания кода. ESPHome имеет встроенную поддержку HX711:
sensor:
- platform: hx711
dout_pin: GPIO16
clk_pin: GPIO17
name: "Вес контейнера"
update_interval: 1s
unit_of_measurement: "кг"
filters:
- calibrate_linear:
- 0 -> 0
- -84000 -> 20.0
- sliding_window_moving_average:
window_size: 5
Всё: прошивка, калибровка, усреднение — в YAML-файле. Данные попадают в Home Assistant, оттуда — в любую базу данных или таблицу через автоматизации. Вариант для тех, кто уже в экосистеме «умного дома» и не хочет писать C-код.
Реальное применение: четыре сценария
Приёмка урожая с поля. Рабочий подносит ведро, ставит на весы, прикладывает RFID-бирку (или просто нажимает кнопку), результат записан. Следующий. За час через весы проходит 80–100 взвешиваний — попробуйте записать руками столько без ошибок.
Учёт на складе. Мешки с зерном, ящики с овощами — при поступлении и отгрузке. Сотрудник взвешивает каждую единицу, данные автоматически сверяются с накладной в Google Таблице. Раcхождение видно мгновенно: «по накладной 500 кг, фактически 487 кг» — и можно разбираться по горячим следам, а не через неделю при инвентаризации.
Контроль урожайности участков. Поставьте весы на краю каждого поля (или перевозите одни). Записывайте вес убранного по участкам. За сезон вы получите карту урожайности: какой участок дал 3 тонны с гектара, какой — 5 тонн. Это данные для принятия решений: где менять культуру, где увеличить подкормку, где проблема с почвой.
Аттестация бригад. Данные с весов — объективная метрика производительности. Бригада А собирает 1,2 тонны яблок за смену, бригада Б — 0,8 тонны при тех же условиях. Без субъективности бригадира, без «они нормальные ребята, просто медленные». Числа не спорят.
Итог
За 2 800 ₽ и пару вечеров вы получаете весы, которые точнее магазинных, записывают каждое взвешивание автоматически и работают от батарейки. Это один из тех проектов, где «самоделка» объективно лучше покупного решения — потому что промышленные весы с автозаписью и Wi-Fi стоят от 40 000 ₽.
В следующей статье поговорим о том, как данные с поля теряются между бригадиром и агрономом — и что с этим делать.




