DEV Community

Ayat Saadat
Ayat Saadat

Posted on

کود کشاورزی — Complete Guide

راهنمای جامع فناوری تولید و مصرف کود کشاورزی نوین

مقدمه‌ای شخصی: سال ۹۸ بود که در مزرعه‌ی پدربزرگم توی شوشتر، متوجه شدم با وجود این‌که سال قبل دو برابر قبلش کود دادیم، باز هم محصول گوجه‌سبز ما کم‌رنگ شد. همون تابستون بود که تصمیم گرفتم یک سیستم هوشمند برای مدیریت تغذیه گیاه راه بندازم. نتیجه‌اش شد همین داکیومنتی که جلوتون دارید.

اگر حوصله‌تون سر نرفته، در ادامه هم یه برگه‌ی تقلب (Cheatsheet) گذاشتم که بشه چسبوند به دیوار انبار کود.


فهرست مطالب

  1. پیش‌نیازها
  2. نصب و راه‌اندازی ایستگاه هوشمند تغذیه
  3. کار با API سنسورها
  4. کدنویسی برای اسپریر دقیق (Variable-Rate Application)
  5. جدول مقایسه خانواده کودها
  6. سوالات متداول
  7. عیب‌یابی سریع
  8. منابع و لینک‌های مفید

پیش‌نیازها

  • Node.js ≥ ۱۸
  • یک برد ESP-32 (یا هر بردی که I²C و UART داشته باشه)
  • ماژول NPK سنسور (کدمای دلتا K=۱۰٪)
  • شیر برقی ۱۲V درین دار برای کنترل پمپ تزریق اسید
  • لوله نازل اسپری با اتصال سری (Bsp ¾ اینچ)
  • یادتون باشه شلنگ رو قبل از جا انداختن، ۱۰ ثانیه بجوشونید تا از شرقوی ضدعفونی دربیاد (تجربه شخصی!)
  • اکانت رایگان کالاتَک برای دانلود نقشه‌های مزرعه

نصب و راه‌اندازی ایستگاه هوشمند تغذیه

1) نصب پکیج‌های npm

mkdir farm-feeder && cd farm-feeder
npm init -y
npm i serialport dotenv mqtt
npm i -D nodemon   # برای ری‌استارت خودکار در دولوپ
Enter fullscreen mode Exit fullscreen mode

2) فایل .env بسازید

# پورت سریال مربوط به ماژول NPK
NPK_PORT=/dev/ttyUSB0
# سرعتی که با ESP32 کنار اومده بود
NPK_BAUD=4800
MQTT_HOST=io.adafruit.com
MQTT_PORT=1883
MQTT_USER=mojtaba
MQTT_PASS=your_aio_key
Enter fullscreen mode Exit fullscreen mode

3) اسکریپت رو برای اجرا در package.json اضافه کنید

"scripts": {
  "dev": "nodemon index.js",
  "start": "node index.js"
}
Enter fullscreen mode Exit fullscreen mode

کار با API سنسورها

تست سریع با اسکریپت CLI

node -e "
const SerialPort = require('serialport');
const port = new SerialPort('/dev/ttyUSB0', { baudRate: 4800 });
port.on('open', () => port.write(Buffer.from([0x01, 0x03, 0x00, 0x00, 0x00, 0x03, 0x04, 0x0B])));
port.on('data', d => console.log('NPK=', d.toString('hex')));
"
Enter fullscreen mode Exit fullscreen mode

ساخت کلاس NPKSensor.js

const { SerialPort } = require('serialport');

class NPKSensor {
  constructor(path = '/dev/ttyUSB0', baud = 4800) {
    this.port = new SerialPort({ path, baudRate: baud });
  }

  query() {
    const cmd = Buffer.from([0x01,0x03,0x00,0x00,0x00,0x03,0x04,0x0B]);
    return new Promise((res, rej) => {
      let to = setTimeout(() => rej(new Error('timeout')), 1500);
      this.port.write(cmd);
      this.port.once('data', data => {
        clearTimeout(to);
        const n = data[3]/10;
        const p = data[4]/10;
        const k = data[5]/10;
        res({ n, p, k });
      });
    });
  }
}
module.exports = NPKSensor;
Enter fullscreen mode Exit fullscreen mode

کدنویسی برای اسپریر دقیق (Variable-Rate Application)

تزریق بر اساس کمبود پتاسیم

const { NPKSensor } = require('./NPKSensor');
const mqtt  = require('mqtt');

const client = mqtt.connect({
  host: process.env.MQTT_HOST,
  port: process.env.MQTT_PORT,
  username: process.env.MQTT_USER,
  password: process.env.MQTT_PASS
});

const npk = new NPKSensor();

// واحد‌ها: درصد
const DESIRED_K = 2.8;       // نیاز گیاه گوجه‌فرنگی در مراحل رشد
const TOLERANCE = 0.25;

async function adjustFlow() {
  try {
    const { k } = await npk.query();
    console.log('K soil:', k);
    if (k < DESIRED_K - TOLERANCE) {
      client.publish('feeder/k-deficiency', JSON.stringify({k, open:1}));
    } else {
      client.publish('feeder/k-deficiency', JSON.stringify({k, open:0}));
    }
  } catch (e) {
    console.error('Sensor read failed:', e.message);
  }
}

setInterval(adjustFlow, 60 * 1000);  // هر دقیقه بررسی
Enter fullscreen mode Exit fullscreen mode

روال‌های اتصال به شیر برقی

پین ESP32 عملگر توضیح
GPIO 25 MOSFET برای شیر ۱۲V – پول‌داون ۱۰kΩ
GPIO 26 LED Indic. چشمک زن در حال تزریق
GPIO 34 Flow meter وقتی پالس/ثانیه < 50 خطا بده

جدول مقایسه خانواده کودها

نوع کود فرمول اصلی قابلیت حل‌پذیری PH خاک بعد ۳۰ روز چرخه تجزیه (روز) قیمت* (تومان/کیلو)
نیترات آمونیوم NH₄NO₃ کامل 5.2 1 4,500
سولفات پتاسیم K₂SO₄ ۹۲٪ 6.8 5 6,300
سوپر فسفات ساده Ca(H₂PO₄)₂ ۸۰٪ 4.9 8 3,700
اوره CO(NH₂)₂ کامل 7.1 3 3,200
کود دامی پوسیده - ۴۰٪ 7.3 ۱۴ 1,800

*قیمت‌ها بر اساس حواله تهران، خرداد ۱۴۰۳.


سوالات متداول

سؤال: فاصله زمانی مناسب برای نمونه‌گیری NPK چقدر است؟

پاسخ: در خاک لومی، هر ۶ ساعت یک‌بار کافیه؛ اما اگر خاکتون شنیه، هر ۳ ساعت بخونید چون آب زود می‌ره پایین و کود با خودش می‌بره.

سؤال: چرا با وجود تزریق پتاسیم، هنوز K خاک پایینه؟

پاسخ: احتمالاً کاتیون‌های کلسیم زیاد شده و جذب پتاس رو رقابتی کرده. یه تست تعویض کاتیون انجام بدید یا کمی MgSo₄ اضافه کنید تا تعادل بشه.

سؤال: آیا پس‌ماندهای اسپری در لوله خطرناکه؟

پاسخ: بله، اگر زیر ۱۰ درجه باشه اوره رسوب می‌ده؛ بهتره پس از هر بار استفاده یه کم آب تمیز بگیرید و پمپ رو ریورس بدید تا لوله خالی بشه.


عیب‌یابی سریع

علامت ایراد دلیل محتمل راهکار
سنسور NPK فقط FF برمی‌گردونه آدرس Modbus اشتباه cmd[0]=0x02 بذارید
شیر برقی لرزش داره فرکانس PWM خیلی بالا کمش کنید به ۱۰۰ هرتز
MQTT Disconnect هر ۲ دقیقه QoS=2 تنظیم شده QoS=0 بذارید چون حجم‌تون بالاست
میزان K در یک مرز می‌ره بالا کالیبراسیون دما انجام نشده دمای خاک رو از سنسور DS18B20 بخونید و ضریب ۰.۰۲۵ درجه‌ی سانتی‌گراد رو اعمال کنید

منابع و لینک‌های مفید


نکته پایانی: سعی کنید همیشه یه نسخه‌ی خامه‌ای از کدتون توی فلش ۳۲ گیگ نگه دارید کنار ایستگاه. تابستون قبل یه برق پرقدرگ اومد، برد سوخت، ولی چون پشتیبان داشتم تونستم ظرف ۲۰ دقیقه دوباره بالا بیارم. موفق باشید و خاک‌تون همیشه برکت داشته‌باشه!

Top comments (0)