听说自动种菜,很多人会以为是一辆自己满地跑的小车。FarmBot 不是。它像 3D 打印机:铝架钉在苗床两边的导轨上,只在这块地里按坐标前后、左右、上下动,把种子点进格子、把水浇到指定位置,再拍照看苗在不在。它完全开源,硬件原理图和源码都公开,公司也卖 Genesis / Express 套件。软件协议以 MIT 为主。官网 farm.bot,设备端系统 github.com/farmbot/farmbot_os。
真正会翻车的点不是「会不会写代码」,而是:种植图里的格子,和龙门真实坐标对不上。没回零、没标定步距,序列照样能点「播种」——只是种子落在空地或压到已有苗上。网页画得再漂亮,MCU主控只认毫米。
它怎么从网页走到苗床上
图1:电脑画图,机器去种菜
浏览器(种植图 · 序列 · 日程 · 手动点动) ↕ HTTP 存档 + MQTT/AMQP 实时消息 树莓派 FarmBot OS · 和网页同步植物、序列、日志 · USB 串口下发 G 码 / F 码 Farmduino(Arduino 架构控制板) · 步进电机、工具头、电磁阀、编码器 · 限位 / 堵转检测后回传网页负责「这块地哪一格种什么、几点浇水」。树莓派不自己规划整片菜地的路径规划算法,它把网页上的序列拆成运动指令,经 USB 发给 Farmduino。Farmduino 才是动手的那一层:走轴、吸种、开阀。和 Klipper 很像——Host 算事,MCU 守节拍——对象从热床换成了苗床。
摄像头接在树莓派上,不经过 Farmduino。拍照、杂草检测、上传缩略图,都是 Pi 侧的活。Genesis 一类机型还有UTM(通用工具座):播种器、浇水嘴、除草铲、土壤传感器可以换;Express 常见是三合一工具头固定在 Z 轴上,图省事,扩展少。
当前 Genesis 文档里的电脑是树莓派 4B,电机四台 NEMA 17,驱动常见 TMC2130,带编码器做闭环位置。Express 用过 Pi Zero,算力弱,同步和拍照更容易卡。自己抄作业,优先按 Genesis 的「Pi + Farmduino」来理解,别把 Zero 当主力脑。
软件里不是一个「开始种菜」按钮
图2:电脑、树莓派、控制板、种菜架
网页不是一个大按钮「开始种」。它拆成几块,搞混了就会觉得「软件是不是有bug」:
| 概念 | 干什么 |
|---|---|
| 种植图(Farm Designer) | 在地图上摆植物、工具、种子盒、拍照点 |
| 序列(Sequence) | 一组动作:移动、读传感器、播种、浇水、拍照、检测杂草 |
| 方案(Regimen) | 按植物生长阶段套序列,例如出苗后每隔几天浇一次 |
| 事件(Event) | 把序列或方案挂到日历上,到点执行 |
| Lua | 序列里嵌脚本,做判断、HTTP、发消息;给会写代码的人 |
一次「把生菜种上」,时间线上大概是:图上先有生菜的坐标和工具座位置 → 序列写清「去种子盒吸种 → 移到格子 → 下 Z 点种 → 回工具座」→ 事件定在今天 9:00。到点后网页经 MQTT 通知设备;Pi 执行序列,一条条变成 G00 移动和 F 开头的 FarmBot 专用指令。固件文档写得很直白:配置没批准前,轴不会动;要先完成配置,再G00 X… Y… Z…。
杂草检测也不是摄像头「看见就铲」。标准流程是:先标定颜色阈值,再在图上铺一圈拍照点,序列对每个点「移动 + Detect Weeds」,识别结果变成待处理杂草点,你再决定铲还是忽略。阈值没调、光照一变,不是漏检就是把菜认成草。
技术栈大概长什么样
设备端FarmBot OS用Elixir,靠Nerves编成一张可刷的镜像,不是你在树莓派桌面里apt install出来的普通系统。和网页之间走 HTTP(配置、图、序列落库)和 MQTT(实时控制、日志)。配网用机载Configurator:设备自己开热点,手机连上去填家里 Wi‑Fi 和网页账号。
网页 FarmBot Web App(Ruby on Rails + 前端 + MQTT) · 官方实例 my.farm.bot · 可自建,官方明确劝普通用户别建 ↕ 树莓派 FarmBot OS(Elixir / Nerves) · 同步账户数据、跑序列、拍 USB 摄像头 · 可选 Lua;旁路电脑可用 farmbot-py ↕ USB 串口 Farmduino 固件(C++ / Arduino) · G 码移动,F 码开关工具和读针脚自建网页要 Docker、PostgreSQL、环境变量里的API_HOST/MQTT_HOST。官方说这是给改代码、做审计用的,家庭种菜用my.farm.bot更稳。免费额度按他们的说法够家用;超过约 3m×6m、很多植物并发、多机多用户,可能要付费或自建。树莓派没有可靠 RTC 时,NTP 对不上,日程和证书都会乱——完全离线不是他们的目标场景,硬离线还得自己供时间源。
一句话:Rails 网页 + MQTT + Nerves 镜像 + Arduino G 码龙门。栈是为「按格子种菜」收的,不是通用农机自动驾驶。
怎么把它跑起来
图3:先对准位置,再真正播种
买套件或按开源 BOM 抄,机械校直比刷系统更耗时间。导轨不平行、皮带松、Z 轴晃,后面所有标定都是在给误差找补。官方对非套件 DIY不提供排障,问题走社区论坛。
1. 刷 FarmBot OS。按当前软件文档写卡,不要拿普通树莓派桌面镜像凑。卡插进 Pi,和 Farmduino 用 USB 连好,24V 电源和电机线按手册,防呆插头别硬插反。
2. 配网进网页。上电后用 Configurator 连 Wi‑Fi,填my.farm.bot账号(或你自建实例的地址)。设备上线后,网页里应能看到日志和手动控制。
3. 回零、标定、空载点动。先 Find Home / 设轴长和步距,再在行程内点动,看实际位置和页面坐标是不是一回事。编码器报丢步,先查机械和供电,别先改序列。
4. 摄像头。对好高度和色彩范围,再铺拍照网格。没标定就开检测,地图上会刷一批假杂草。
5. 画种植图,序列先干跑。把浇水、下钻、除草从序列里拿掉或改成「只移动」,走完一遍。确认工具座、种子盒、苗坐标无干涉,再加泵和播种器。水、土靠近 24V 电器,漏电和短路按户外电气常识处理。
龙门会撞手、会绞进皮带。试车时人不要伸进行程,急停和断电手段要在够得着的地方。
| 现象 | 优先排查 |
|---|---|
| 网页能登、设备离线 | 苗床边 Wi‑Fi、账号、MQTT 被墙或自建 Host 填错 |
| 指令发了轴不动 | 固件配置未批准、急停、未回零、USB 串口 |
| 种偏了 / 撞边 | 步距、轴长、回零开关、导轨平行 |
| 照片糊、杂草乱标 | 对焦高度、曝光、HSV 阈值、网格间距 |
| 到点不执行 | 事件时区、NTP、设备当时正忙另一条序列 |
| Express 又慢又重启 | 算力不够,别拿它当 Genesis 的平替脑 |
边界
- 它是固定龙门,不是巡田小车,也不是大田农机。面积受导轨长度限制。
- 户外要防雨、防锈、防土进滑块;软件开源救不了没做的防水。
- 套件不便宜,DIY 省钱但校直、开模、找件都算进成本。
- 官方云够家用;自建网页维护成本高,普通用户没必要一上来就 Docker。
- 检测杂草、估产都依赖光照和标定,别写成「AI 农场已经全自动」。
- 能吃的菜仍要你自己管土、种、季节和食品安全,机器只负责按坐标执行。
参考
https://farm.bot/
https://farm.bot/pages/open-source
https://software.farm.bot/v13/FarmBot-Software/intro.html
https://developer.farm.bot/v12/Documentation/farmbot-os.html
https://github.com/FarmBot/farmbot_os
https://github.com/FarmBot/farmbot-arduino-firmware
https://github.com/FarmBot/Farmbot-Web-App
https://genesis.farm.bot/v1.8/assembly/electronics.html
https://software.farm.bot/v15/docs/how-to-guides/scan-the-garden-for-weeds.html
https://developer.farm.bot/v15/docs/web-app/running-servers-offline.html