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

智能草本种植箱:Alexa 语音控制的自动化室内园艺系统

硬件清单 (BOM)

组件 数量 用途
Amazon Echo Dot (Alexa 语音助手) 1 语音交互入口
Arduino Uno R3 1 主控制器,读取传感器、驱动继电器
ESP8266 ESP-01 WiFi 模块 1 Arduino 联网桥接,HTTP 请求云端 API
Arduino Proto Shield 1 扩展板,焊接传感器、继电器模块
4 路继电器模块 (低电平触发) 1 隔离控制:水泵×2、植物生长灯、预留
YL-69 土壤湿度传感器 4 监测 3 盆草本 + 1 个外部扩展
12V 潜水泵 (微型) 2 分别供水两路灌溉管路
植物生长灯 (220V AC) 1 补光,继电器控制强弱电隔离
220V 转 12V 电源适配器 1 供水泵、继电器板、Arduino (经降压)
12V 转 5V 降压模块 (LM2596) 1 给 Arduino/ESP-01 供电
USB 电源线、杜邦线、气管、水管 若干 连接与管路
榉木板 (制作箱体) 1 套 激光切割/手工锯切,含花盆固定圈

系统架构概览

本项目构建了一个「边缘-云-语音」三层架构的智能种植箱:

核心功能

功能 触发方式 执行逻辑
定时湿度上报 Arduino 定时器 (默认 60s) 读取模拟值 → 发送 HTTP GET 到 /plant?action=humidity&code=LEFT&humidity=xxx
远程配置下发 Arduino 定时轮询 (60s) GET /plant?action=get&code=LEFT → 解析 JSON 更新引脚、间隔
语音查询湿度 「Alexa, ask herb box how my plants are」 Lambda → 云端 API → 返回所有植物状态 → Alexa 朗读
语音指定灌溉 「Alexa, tell herb box to irrigate basil for 5 seconds」 Lambda → 云端写入 Action 栈 → Arduino 轮询读取 → 触发对应水泵继电器 5 秒
语音控制补光灯 「Alexa, tell herb box to switch the lamp on」 同理,控制生长灯继电器
查询需水植物 「Alexa, ask herb box which plants need irrigation」 云端判断湿度阈值,返回干旱植物列表
查询上次灌溉时间 「Alexa, ask herb box when was last irrigation of basil」 云端记录灌溉日志,计算间隔小时数

关键技术实现细节

1. 土壤湿度传感器驱动 (防电解腐蚀)

byte vccPin = 6;   // 控制传感器供电的 GPIO
byte dataPin = A1; // 模拟输入

int readHumidity() {
  digitalWrite(vccPin, HIGH);   // 仅测量瞬间供电
  delay(500);                   // 稳定等待
  int value = analogRead(dataPin);
  digitalWrite(vccPin, LOW);    // 立即断电,防止电解腐蚀
  return 1023 - value;          // 值越大 = 越湿 (根据模块特性取反)
}

关键点:间歇供电 大幅延长探针寿命;1023 - value 将「干=大」转为「湿=大」符合直觉。

2. 低电平触发继电器的正确控制逻辑

// 继电器模块:IN 接低电平 (0V) → 线圈导通 → 常开触点闭合
// Arduino 引脚默认 INPUT/LOW (高阻态 ≈ 3.3V 上拉) → 继电器断开 (安全)

void activatePump(byte pin) {
  pinMode(pin, OUTPUT);       // 切为输出模式
  digitalWrite(pin, LOW);     // 输出低电平 → 继电器吸合
}

void deactivatePump(byte pin) {
  digitalWrite(pin, HIGH);    // 先输出高电平
  pinMode(pin, INPUT);        // 再切为输入 (高阻) → 继电器释放
}

这种「OUTPUT+LOW=ON, INPUT=OFF」模式利用了 Arduino 引脚上电默认高阻态,避免上电瞬间误触发高压负载。

3. ESP-01 AT 指令 HTTP 客户端 (轻量级)

为节省 Arduino RAM (Uno 仅 2KB),未使用重量级 WiFiEsp 库,直接用 SoftwareSerial 发 AT 指令实现 HTTP/1.0 短连接:

bool httpRequest(String site) {  // site 如 "/plant?action=get&code=LEFT"
  // 1. 建立 TCP 连接
  espSerial.print("AT+CIPSTART=\"TCP\",\"", API_SERVER, "\",80");
  if (!espSerial.find("OK")) return false;

  // 2. 准备发送数据长度
  String cmd = "GET " + site + " HTTP/1.0\r\nHost: " + API_SERVER + "\r\nConnection: close\r\n\r\n";
  int cmdLength = cmd.length();
  espSerial.print("AT+CIPSEND="); espSerial.println(cmdLength);
  if (!espSerial.find(">")) return false;

  // 3. 发送 HTTP 请求
  espSerial.print(cmd);
  if (!espSerial.find(":")) return false;  // 等待发送提示

  // 4. 读取响应头,跳过至 Body
  char status[32];
  espSerial.readBytesUntil('\r', status, sizeof(status));
  if (strcmp(status, "HTTP/1.1 200 OK") != 0) return false;
  if (!espSerial.find("\r\n\r\n")) return false;

  // 5. 响应体留在缓冲区,由调用者用 ArduinoJson 解析
  return true;
}

波特率从 115200 降至 9600 提高稳定性;HTTP/1.0 避免 Chunked 编码解析麻烦。

4. 云端 API 设计 (PHP + MySQL)

核心端点:

前端仪表盘用 Chart.js 绘制湿度趋势图,X-editable 实现表格内联编辑配置。

5. Alexa Skill 交互模型 (意图 Schema)


// 核心意图示例
{
  "intents": [
    {"name": "ReadHumidityIntent", "slots": [{"name": "plantName", "type": "PLANT_NAME"}]},
    {"name": "IrrigatePlantIntent", "slots": [
      {"name": "plantName", "type": "PLANT_NAME"},
      {"name": "durationSeconds", "type": "AMAZON.NUMBER"}
    ]},
    {"name": "SwitchIntent", "slots": [{"name": "switchState", "type": "ON_OFF"}]},
    {"name": "ReadIrrigateIntent"},
    {"name": "ReadLastIrrigationIntent", "slots": [{"name": "plantName", "type": "PLANT_NAME"}]}
  ],
  "types": [
    {"name": "PLANT_NAME", "values": [{"name":{"value":"basil"}},{"name":{"value":"mint"}},{"name":{"value":"parsley"}}]},
    {"name": "ON_OFF", "values": [{"name":{"value":"on"}},{"name":{"value":"off"}}]}
  ]
}

支持中英文双语言模型 (locale: en-US, de-DE)。Lambda 函数仅做透传:https.post(myApiUrl, eventJson)。

6. Arduino 端任务调度 (StensTimer 非阻塞定时器)


// 主循环极简
void loop() {
  stensTimer->run();  // 处理所有注册的定时任务
}

// 任务注册示例 (setup 中)
stensTimer->setInterval(&apiTimer, ACTION_PLANT_UPDATE, 60000);      // 60s 同步配置/心跳
stensTimer->setInterval(&actionBuffer, ACTION_ECOACTION_READ, 1000); // 1s 轮询云端指令
stensTimer->setTimer(&leftPlant, ACTION_PLANT_CHECKHUMIDITY, 60000); // 单株定时上报

所有耗时操作 (网络、传感器读取) 均在定时器回调中异步触发,loop() 仅跑调度器,保证实时性。

箱体制作要点

项目成果演示

最终实现的语音交互示例 (支持中/英/德):

配套 Web 仪表盘可实时查看湿度曲线、修改灌溉策略、手动触发动作。

待实现功能 (Roadmap)

代码仓库结构


WhiteWalnut.ino          // 主程序入口,任务注册
Plant.h / Plant.cpp      // 植物对象:湿度读取、定时上报、配置同步
EcoActionBuffer.h/cpp    // 动作缓冲:轮询云端指令、执行继电器动作、定时关闭
WhiteWalnutApi.h/cpp     // 网络层:WiFi连接、HTTP请求、JSON解析(ArduinoJson)
StensTimer.h             // 非阻塞定时器库 (需单独安装)
ArduinoJson.h            // JSON 解析 (v5 语法)

完整代码、PHP 后端、Alexa Skill 模型、激光切割图纸请访问项目 GitHub 仓库 (链接见原文)。这是一个融合嵌入式、云端、语音 AI 的完整物联网实战项目,极适合进阶学习全栈 IoT 开发。

制造工艺

  1. 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
  2. DIY 蓝牙控制 Arduino 间谍小车
  3. SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
  4. 紧凑型气象站:Arduino Nano + ESP8266 双核方案 (BMP280 + OLED/Nokia 双屏)
  5. 智能地下室通风系统:Arduino 驱动的湿度自动控制
  6. 基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
  7. 无线Arduino编程盾:HC-05蓝牙模块实现免USB线烧录
  8. Arduino智能防碰撞预警系统:超声波测距+声光分级报警
  9. Arduino Nano 专用 2.8 英寸 TFT 扩展板 – 320×240 SPI 显示屏
  10. 适用于 Arduino UNO/MEGA 的 Nixie 管时钟扩展板 NCS314 – 兼容 IN-14/IN-12 型号
  11. Arduino Mega 2560 驱动的开源植物生长箱控制器:固件与硬件全指南
  12. Arduino 智能安防系统:超声波测距 + 舵机扫描 + 声光报警