亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

项目定位

针对农田/温室环境监测与移动巡检需求,设计一款集成 土壤湿度、温度、光照、气体 多参数采集、差速驱动底盘、双模通信 (WiFi + nRF24L01)、太阳能供电 与 云端告警 (Telegram/Twilio/Mailgun) 于一体的自主巡检机器人。三大模块解耦设计,支持手动遥控/自主巡航/定点监测多模式。

系统架构三模块

模块 1:主控采集与执行单元 (Bolt WiFi + Arduino UNO)

Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

模块 2:nRF24L01 短程遥控链路

用于视距内 (<100m) 手柄遥控,规避 WiFi 延迟/盲区。双 nRF24L01 (SPI, CE/CSN=7/8) 组成透传链路:

Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

模块 3:云端告警与语音交互 (Python + Integromat + IFTTT)

核心固件代码

1. nRF24L01 发射端 (手柄 Nano)


#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CE, CSN
const byte addr[6] = "00001";

int xKey = A1, yKey = A0, pKey = A3, qKey = A2; // 两摇杆 4 通道
int xVal, yVal, pVal, qVal;
int packet; // 编码后指令码

void setup() {
  radio.begin();
  radio.openWritingPipe(addr);
  radio.setPALevel(RF24_PA_MIN);
  radio.setChannel(87);
  radio.setDataRate(RF24_250KBPS);
  radio.stopListening();
  Serial.begin(9600);
  pinMode(xKey, INPUT); pinMode(yKey, INPUT);
  pinMode(pKey, INPUT); pinMode(qKey, INPUT);
}

void loop() {
  xVal = analogRead(xKey); yVal = analogRead(yKey);
  pVal = analogRead(pKey); qVal = analogRead(qKey);
  
  // 中位 ~512,死区 400-600
  if (pVal>400 && pVal<600 && qVal>400 && qVal<600) { // 左摇杆中位,解析右摇杆=底盘运动
    if (xVal>400 && xVal<600 && yVal>400 && yVal<600) packet = 100; // 停止
    else if (xVal>400 && xVal<600 && yVal<400) packet = 200;       // 前进
    else if (xVal>400 && xVal<600 && yVal>600) packet = 300;       // 后退
    else if (yVal>400 && yVal<600 && xVal<400) packet = 400;       // 左转
    else if (yVal>400 && yVal<600 && xVal>600) packet = 500;       // 右转
    radio.write(&packet, sizeof(packet));
    delay(100);
  }
  else if (pVal<400 || pVal>600) { // 左摇杆动作 = 云台控制
    if (pVal<400) packet = 600; // 舵机归中
    else packet = 700;          // 舵机极限
    radio.write(&packet, sizeof(packet));
    delay(100);
  }
}

2. nRF24L01 接收端 (车载 UNO)


#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h>
RF24 radio(7, 8); const byte addr[6] = "00001";
Servo servo; int servoPin = 9;

void setup() {
  Serial.begin(9600);
  radio.begin(); radio.openReadingPipe(0, addr);
  radio.setPALevel(RF24_PA_MIN); radio.setChannel(87);
  radio.setDataRate(RF24_250KBPS); radio.startListening();
  servo.attach(servoPin);
  pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); // L298N IN1-IN4
}

void loop() {
  if (radio.available()) {
    int cmd; radio.read(&cmd, sizeof(cmd));
    switch (cmd) {
      case 100: stopMotors(); break;
      case 200: forward(); break;
      case 300: backward(); break;
      case 400: turnLeft(); break;
      case 500: turnRight(); break;
      case 600: servo.write(90); break;
      case 700: servo.write(180); break;
    }
  } else {
    Serial.println("Link lost"); stopMotors(); // 失联保护
  }
}

void forward()    { digitalWrite(6,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); digitalWrite(3,LOW); }
void backward()   { digitalWrite(6,LOW); digitalWrite(5,HIGH); digitalWrite(4,LOW); digitalWrite(3,HIGH); }
void turnLeft()   { digitalWrite(6,LOW); digitalWrite(5,HIGH); digitalWrite(4,HIGH); digitalWrite(3,LOW); }
void turnRight()  { digitalWrite(6,HIGH); digitalWrite(5,LOW); digitalWrite(4,LOW); digitalWrite(3,HIGH); }
void stopMotors() { digitalWrite(6,LOW); digitalWrite(5,LOW); digitalWrite(4,LOW); digitalWrite(3,LOW); }

3. 云端告警 Python 脚本 (main.py)


import requests, json, time
from boltiot import Bolt
import conf  # 含 bolt_api_key, device_id, telegram_bot_id, telegram_chat_id, threshold

mybolt = Bolt(conf.bolt_api_key, conf.device_id)

def get_sensor(pin):
    try:
        resp = mybolt.digitalRead(pin)
        data = json.loads(resp)
        if data['success'] != 1: return -999
        return int(data['value'])
    except Exception as e:
        print("Sensor read error:", e)
        return -999

def send_telegram(msg):
    url = f"https://api.telegram.org/{conf.telegram_bot_id}/sendMessage"
    payload = {"chat_id": conf.telegram_chat_id, "text": msg}
    try:
        r = requests.get(url, params=payload)
        return json.loads(r.text)['ok']
    except Exception as e:
        print("Telegram error:", e)
        return False

while True:
    val = get_sensor("4")  # 土壤湿度数字引脚
    print("Soil:", val)
    if val == -999: time.sleep(10); continue
    if val >= conf.threshold:  # 阈值触发
        send_telegram(f"⚠️ 土壤湿度超标: {val}%")
    time.sleep(100)

# conf.py
bolt_api_key = "XXXX"
device_id = "BOLTXXXX"
telegram_chat_id = "@your_channel"
telegram_bot_id = "botXXXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAA"
threshold = 700  # 根据校准调整

Telegram Bot 与 Channel 搭建全流程

  1. 安装 Telegram,注册账号
  2. 搜索 @BotFather → /newbot → 设定名称/用户名 → 获得 bot
  3. 左滑菜单 → New Channel → 公开 → 设定永久链接 (如 soil_alert_farm1) → 保存链接名
  4. Channel 信息 → Administrators → Add Admin → 搜索 Bot 用户名 → 勾选 Post Messages 权限
  5. 获取 chat_id:转发 Channel 任意消息给 @userinfobot,回复含 chat_id (如 -1001234567890)
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

语音交互链路 (Google Assistant → IFTTT → Integromat → Bolt → 短信/邮件)

  1. Integromat 新建 Scenario:IFTTT Webhook (触发) → HTTP Request (GET Bolt API) → Router → Mailgun (邮件) / Twilio (短信)
  2. HTTP Request URL:https://cloud.boltiot.com/remote/<API_KEY>/analogRead?pin=A0&deviceName=BOLTXXXX
  3. Mailgun 内容模板:提取 JSON 中 value 字段 → substring(11,14) 取数值 → 除以 10.24 得 °C → 填入邮件正文
  4. 开启 Scheduling → Run immediately
  5. IFTTT 新 Applet:Google Assistant “Say a simple phrase” (如 “send temperature”) → Webhooks “Make a web request” (POST Integromat Webhook URL)
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

硬件接线实拍 (LM35 示例)

Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车
Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车

总结与展望

Earth Analyzer 实现了“感知-决策-执行-通信”全链路打通,模块化设计便于扩展:

所有代码、原理图、3D 模型开源,欢迎 Fork 贡献:GitHub 仓库

制造工艺

  1. DIY 蓝牙控制 Arduino 间谍小车
  2. FlickMote:基于手势的智能家居红外遥控器
  3. DIY Arduino TV-B-Gone:万能关机遥控器
  4. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  5. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  6. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  7. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  8. 从零构建智能 Arduino 四足机器人:完整指南
  9. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. 利用 Arduino Nano R3 自制全功能 CNC 雕刻机
  12. 基于 Arduino Mega 与物联网传感器的高级家庭监控系统