做 RBT 专题的迷你鱼菜共生系统,就是下面一个鱼缸、上面一个种植床,再加一颗 5V 潜水泵,按定时器的循环把鱼缸的水送上种植床。鱼提供养分,种植床里的介质负责过滤,水靠重力自己流回鱼缸。而那颗泵,白天黑夜都得跑。
什么是鱼菜共生,为什么水泵是整个系统的心脏?
鱼菜共生是鱼和植物之间一个封闭的水循环。鱼通过排泄和鳃把氨排到水里,而氨对鱼自己就是毒。到了种植床,介质(陶粒或碎石)的表面就是硝化细菌住的地方,它们先把氨转成亚硝酸盐,再把亚硝酸盐转成硝酸盐。植物的根把硝酸盐当肥料吸走,去掉了氨的水再落回鱼缸。
这个循环里有三样东西不能停。硝化细菌是以一层生物膜的形式附在介质上的,而它们好氧——氧气来自流过它们的水。植物的根则要水和空气交替。至于鱼,晚上也不会停止排氨。所以5V 潜水泵是整个系统里唯一不能出事的一件东西:泵一停,这个循环同时在三个地方断掉。

迷你鱼菜共生系统的电气部分——全部 5V,不用焊接
Parts list
如果老师要求专题里有编程,这就是「Arduino 鱼菜共生」那个版本要的东西:一块 Uno 板、一个单路继电器模块,还有公对公杜邦线,用来接进继电器模块的螺丝端子。
剩下的都不是电子件,水族店或五金店就能买齐:给泵出水口用的大约 7 mm 透明软管、两个食物盒(一个当下层鱼缸,一个当上层种植床)、LECA 陶粒或碎石当介质、USB 充电头或充电宝,还有电工胶布。
如果你现在找的是要写的那一份,而不是怎么搭,直接跳到本文最后的专题报告框架范例——目标、设计、材料、步骤、结果、反思,每一段都配了这个鱼菜共生专题的示范内容。
上下两层的架子应该怎么摆?
种植床必须坐得比鱼缸水面高,水才会自己回来,不用第二颗泵。那这颗泵到底顶得起多高?它的电功率大约是 5 V × 0.15 A = 0.75 W。而把水抬高需要的水力功率是 ρ·g·Q·H——按这颗泵的流量(70–110 L/小时,也就是大约 2.5 × 10⁻⁵ m³/s)算,每抬高一米大约要 0.245 W。这么小的磁力叶轮泵,能把电功率的不到 10% 转成水功率,所以你真正的预算只有 0.05–0.07 W 左右。这就是为什么每往上抬一厘米,流量掉得都很快:30 cm 时你还有大概每分钟一升,到了一米,流量差不多就没了。
实际做法:把种植床的边缘放在鱼缸水面上方30 cm左右。然后用瓶子测一测——把泵装在你专题的真实高度上,水管对准一个 1 升的瓶子,数它几秒钟装满。那才是你自己的流量,不是目录上的流量。
鱼缸也要比你以为的大,理由纯粹是算术:泵每开一次,就有 2 到 4 升水被送上种植床,所以整个淹水阶段里,缸的水位就是要降那么多。挑一个在最低水位时仍然能把泵整颗淹住的容器——泵头以上的存水,至少要留到淹水量的两倍。学校专题里烧掉的泵,多数真正的原因就是缸太浅:不是学生忘了加水,而是系统自己每循环一次,就把水位拉到泵的出水口以下。
学校的种植床不需要做 bell siphon。在种植床底部角落钻一个小孔,接一小段管子回鱼缸就行。那个孔一直在漏水,但漏得比泵灌得慢——所以泵开的时候床里的水涨上来,泵停的时候床自己排空。这就是淹排循环。
孔的大小决定这个循环成不成立,而它也是这个专题里唯一一个任何规格表都查不到的数字。它要小到排水速度远远慢过泵的流量——不然床根本涨不起来——但又要大到能在泵停的那段时间里把床排空。先用4 mm 的钻头,然后不接泵先测它:往已经装好介质的床里倒 2 升水,计时到它滴完为止。五到十五分钟就对了。一两分钟就漏光,代表孔太大,拿一小块橡胶塞掉一半,或者换成更细的管子;过了二十五分钟还在积水,就稍微钻大一点。放介质之前,先在孔上盖一小块蚊帐纱或疏一点的布,因为只要一颗 LECA 正好坐在孔上,就足以把它堵死。
这么小的种植床,种长得快的叶菜最保险——空心菜、菠菜或生菜——因为它们一个学期内就能收成,根又浅,跟淹排循环正好配得上。种子直接播进湿的 LECA 里。如果你是从花盆里移苗过来,先把根上的泥土全部冲干净:跟着进来的泥会一路沉到鱼缸,积在泵的进水滤篮里,而这正是为什么两三个星期之后流量慢慢就没了,外表却看不出哪里坏。
在你动手剪盒子之前,先看看别人怎么摆鱼缸、种植床和水管,会有帮助:
泵应该多久开一次、停多久?
定时器的设定是从你自己种植床的容积来的,不是猜的。学校用的 5–10 升食物盒装满 LECA 之后,按体积算只装得下大约 40% 的水,其余都是石头——所以淹满它只需要 2–4 升水。这颗泵给 70–110 L/小时,也就是零扬程下每分钟 1.2–1.8 升;抬到 30 cm 再穿过水管,就按每分钟大约 1 升来算。2–4 升除以每分钟 1 升,得出3 分钟作为起步的开启时间。
停的时间则由根来决定。一直泡满水的床会变成厌氧,根会烂;一直干着的床会杀死介质上的细菌膜。在这两种失败之间,30 分钟是马来西亚天气下一个安全的起点——长到床能排干、根能呼吸,短到介质还来不及干掉。
| 定时器参数 | 起步值 | 为什么 |
|---|---|---|
| OP(开启时间) | 3 分钟 | 种植床的水量(2–4 L)除以实测流量(约 1 L/分钟) |
| CL(停止时间) | 30 分钟 | 够排干、够根呼吸,又还没干掉 |
| LOP(循环次数) | --- |
不设上限——系统不可以跑到某个次数就停 |
离开系统之前,先完整看完一个循环。目标是水位停在石头面以下大约 2 cm——上面那层干的石头,就是挡藻和挡蚊子的。如果水从床里溢出来,OP 减半分钟;如果水位停得离目标很远,加半分钟。

定时继电器模块怎么接,泵才会自己循环?
multi-function relay timer 模块带两个蓝色螺丝端子:左边四位是电源和触发,右边三位是继电器触点(NO、COM、NC)。这块板可以用 6–30V DC 从螺丝端子供电,或者用 5V 从上沿的 micro-USB 口供电。我们走 micro-USB——千万不要把 5V 接到螺丝端子上。理由在板子上就看得见:螺丝端子的输入要先经过一颗 78M05 稳压,而这类线性稳压器,输入必须比它输出的 5V 高出一到两伏。你正好给它 5V,输出就掉到 4V 上下——显示屏可能还亮着,但继电器线圈已经没力气吸合触点,于是泵就变成时开时停、毫无规律。micro-USB 口则是直接喂进 5V 那条电源轨、绕过那颗稳压,所以 5V 还是 5V。这也正是螺丝端子的范围从 6 V 起跳的原因。
泵则不跟这块板共用电源。它从5V 3A 火牛拿自己那条 5V,而继电器只负责断开/接通这条电源轨的正极线。两路电源不会打架,因为继电器触点是机械触点——会动的金属片,跟板子的电路完全隔开。泵只吃 100–220 mA,所以那颗 3A 火牛是故意留得很宽裕的,完全不会发热。
| 连接 | 从 | 到 | 备注 |
|---|---|---|---|
| 定时器板供电 | USB 充电头或充电宝,经micro-USB 线 | 定时器模块上的 micro-USB 口 | 5V。6–30V 的螺丝端子空着不接 |
| 泵的电源轨(+) | 5.5×2.1 mm 母座的红线,插上火牛 | 三位端子上的 COM | 这个母座是带线的,红黑线已经接好 |
| 泵的开关 | 三位端子上的 NO | 泵的红线 | 继电器线圈没通电时 NO 是断开的,所以一断电就等于泵停 |
| 泵的回路 | 泵的黑线 | 母座的黑线 | 绞在一起用电工胶布包好,接头放在缸外,位置要高过水面 |
| NC | — | — | 完全不用 |
定时器要选的模式是 P3.2:一通电,继电器就开 OP、停 CL,一直重复,不需要任何触发信号(XY-J02 说明书)。P3.1 看起来很像,但它要先等一个触发信号——这就是很多板子明明接对了却「不动」的常见原因。而这块板出厂时是默认模式 P1.1,所以模式一定要自己改。
按住 SET 两秒进入模式选择,用 UP/DOWN 选到 P3.2,然后按 SET 一格一格走过 OP、CL 和 LOP。每个数值在闪的时候,STOP 键会移动小数点——而决定单位的正是那个点,不是数字本身:末位一个点代表秒(1–999 s),所有小数点都亮起来代表分钟(1–999 min),而后者才是 OP 3 和 CL 30 要的。三个值都设好之后,再按住 SET 两秒保存并退出;保存好的模式会闪一下,画面才回到主界面——留在设定画面里的板子,是完全不会循环的。
离开之前,有两个迹象可以确认这块板是对的。在主界面上——不是刚才的设定画面——继电器处在开启状态时显示会带一个小数点,停的时候一个点都没有,所以当前是哪一段,一眼就看得出来。另外,每次一通电,板子都会先闪一下当前模式再进主界面:把 micro-USB 线拔了再插一次,如果它闪的是 P3.2,那么每次停电恢复供电,你的系统都会自己重新开始跑,不用任何人去碰它。每个模式的完整说明在延时继电器模块指南里,火牛和圆头母座怎么挑则在直流电源指南里。
用火牛还是用电池,为什么泵晚上也要跑?
氨到了晚上不会停,因为鱼不会停止呼吸。如果泵从晚上 10 点停到早上 7 点,氨就在缸里积了九个小时,而介质上的细菌膜同时失去了它的水和氧气。第二天早上你看到的是浑水、腥味,还有已经干掉的根——而且这件事发生在汇报前的几天,不是汇报当天。
算一算就明白为什么火牛赢。定时器板持续吃大约 20–50 mA,就算 30 mA 好了,5 V 下是 0.15 W。泵吃 0.75 W,但每 33 分钟里只跑 3 分钟——也就是 9% 的时间——所以平均下来只有 0.07 W。加起来大约 0.22 W。一颗 2200 mAh 的 18650 存 3.7 V × 2.2 Ah ≈ 8.1 Wh,升压到 5V 的模块能还回大约 85%,也就是 6.9 Wh。除一除:大约 31 小时。这个系统要跑好几个星期,所以用电池就等于在那段日子里天天都要充电——而你忘掉的那一天,就是床干掉的那一天。也留意一下刚才那笔账里到底是谁在吃电:是定时器板,不是泵。墙上的火牛把这个问题整个消掉,而整套系统一个月用不到一度电。
安全:火牛是整套系统里唯一碰到市电的东西。千万不要拆开它、割它的外壳,或者接它的线。把火牛和墙上的插座放在远高于水面的位置,并且在线上做一个下垂的弯,让顺着线流下来的水在到达插头之前先滴到地上。定时器板则是一块没有外壳的裸 PCB:把它放得比缸口高,或者装进一个塑料盒、线从下面走出来。溅上去的水和滴下来的冷凝水,在它变成对你的危险之前,早就已经把电路弄坏了,而一块坏掉的板子就意味着泵再也不会开。泵那一侧的所有东西都只是 5V DC,拿在手里是安全的。
如果老师要求做 Arduino 版本呢?
如果作业要求有编程,就用 Arduino Uno 顶掉定时器板,去驱动那个红色的单路继电器模块。那个模块的输入侧是 DC+/DC−/IN 的螺丝端子,所以公对公杜邦线才是对的那一种:一头的针脚夹进螺丝里,另一头插进 Uno 的母排座。下面这段程序用的是 millis() 而不是 delay(),所以板子之后还能腾出手去读传感器。
// 鱼菜共生水泵循环 - Arduino Uno + 单路继电器模块。
// 泵开 3 分钟,停 30 分钟,一直重复下去。
// 没有长的 delay(),所以板子还有空去做别的事。
//
// 接线(跟文章里的表格一样):
// Uno 5V -> 继电器模块螺丝端子的 DC+
// Uno GND -> DC-
// Uno D7 -> IN
// 5V 火牛 (+) -> COM NO -> 泵的红线
// 泵的黑线 -> 火牛 (-)
const uint8_t PIN_RELAY = 7;
const bool AKTIF_RENDAH = true; // H/L 跳线在 L。继电器反过来的话改成 false。
const unsigned long MASA_HIDUP = 3UL * 60UL * 1000UL; // 3 分钟 = 180000 ms
const unsigned long MASA_MATI = 30UL * 60UL * 1000UL; // 30 分钟 = 1800000 ms
bool pamHidup = false;
unsigned long tandaMasa = 0;
void tetapkanPam(bool hidup) {
pamHidup = hidup;
// 如果模块是低电平触发,那么 LOW 才是让继电器吸合的那个电平。
digitalWrite(PIN_RELAY, (hidup == AKTIF_RENDAH) ? LOW : HIGH);
Serial.println(hidup ? F("Pam HIDUP") : F("Pam MATI"));
}
void setup() {
Serial.begin(9600);
// 先定电平,再设成 OUTPUT - 避免开机瞬间那一下短脉冲。
digitalWrite(PIN_RELAY, AKTIF_RENDAH ? HIGH : LOW);
pinMode(PIN_RELAY, OUTPUT);
tandaMasa = millis();
tetapkanPam(true); // 一开始就先淹一次,让床从头就是湿的
}
void loop() {
unsigned long sekarang = millis();
unsigned long hadMasa = pamHidup ? MASA_HIDUP : MASA_MATI;
// 无符号相减 - 就算 millis() 在大约 49 天后翻回去也照样安全。
if (sekarang - tandaMasa >= hadMasa) {
tandaMasa += hadMasa;
tetapkanPam(!pamHidup);
}
}
鱼菜共生 RBT 专题报告框架范例:六个部分
下面这张表要边做边填,不是交作业前一晚才填——像瓶子测出来的流量、OP/CL 的设定值这些数字,只有在事情发生的当下记下来才会存在。
| 部分 | 老师在看什么 | 这个专题可以怎么写 |
|---|---|---|
| 目标 | 一句可以量度的话,不是笼统的愿望 | 搭一套能自动循环用水的迷你鱼菜共生系统,并在四个星期内不加额外肥料种出叶菜 |
| 设计 | 带标注的草图 + 每个决定的理由 | 上下两层布局;种植床在水面上方 30 cm;靠一个孔重力排水;采用淹排循环 |
| 材料与工具 | 完整清单,附数量和规格 | 上面那份材料清单(记下电压、电流和泵的流量),再加容器、介质、水管和胶布 |
| 步骤 | 编了号、别人照着能重做一遍 | 冲洗介质、装好种植床、钻排水孔、照表接继电器、设成 P3.2 模式、测一个循环、先只用水把系统养循环再放鱼 |
| 结果 | 量出来的数据,不是感想 | 瓶子测出的流量(L/分钟)、实际淹满的时间、每周的植株高度、水的清澈度记录 |
| 反思 | 出过什么问题、你改了什么 | 例如:原本 OP 设 5 分钟会溢水,看完第一个循环后减到 3 分钟 |
反思是最省力气填、却最能说服老师的一段,因为只有它能证明这套系统真的跑过——所以每一次失败和你怎么修的,都记下来。其他 RBT 自动化专题,比如自动垃圾桶,用的也是同一套报告框架。
汇报当天最常见的翻车原因
泵烧干了。这颗泵是靠流过它的水来散热和润滑的。就算只是「试一下」,在水外面开个几秒,轴承和叶轮就是在干转,然后马上发烫。每一次都要先把泵完全泡进水里——这也正是为什么缸快见底会把泵弄坏。
水位不知不觉降下去。开放式系统会从蒸发和叶片蒸腾失水,而装满的种植床在淹水阶段还扣着好几升。在缸壁上画一条最低水位线,每隔几天补一次水。想让它自动化的话,水位继电器控制器可以加一颗由传感器控制的补水泵。
水管堵了。新介质会带陶土粉,那些粉会积在泵的 7 mm 出水口里,直到流量掉了一半,外表却看不出哪里坏。装进种植床之前先把介质冲到流出来的水是清的,另外每周检查一次泵的进水滤篮。
定时器的单位停在秒。显示屏上的小数点决定单位,所以「030」可以是 30 秒,也可以是 30 分钟:三个小数点全亮代表分钟,末位一个点代表秒。每 30 秒 就开 3 分钟的泵,基本上等于一直在跑,床会溢出来,地上会湿一片。趁那个数值在闪的时候按 STOP 换单位,然后拿钟对一遍再离开。
第一天就把鱼放进去。硝化细菌的定殖是个慢过程——FAO 给新系统跑循环的时间是三到五个星期。先只用水把系统跑起来,因为第一天的氨根本还没有东西去转化它。想缩短这段时间,可以从一个已经跑了很久的鱼缸里抓一把介质或一块过滤棉,掺进你的种植床里当菌种。你的专题时间表要照这个数字来排,而不是反过来。

常见问题
用一句话说,做 RBT 专题的鱼菜共生是什么?
鱼菜共生是鱼和植物之间一个封闭的水循环。鱼排出氨,住在种植床介质表面的硝化细菌把它转成硝酸盐,植物的根把硝酸盐当肥料吸走,过滤好的水再靠重力流回鱼缸。
中二的鱼菜共生 RBT 专题报告里要有什么?
六个部分:目标(一句可以量度的话)、设计(带标注的草图,以及每个决定的理由)、材料与工具(完整清单,附数量和规格)、步骤(编了号、别人照着能重做一遍)、结果(量出来的数据,例如泵的流量、实际淹满的时间和每周植株高度),还有反思(出过什么问题、你改了什么)。完整框架和示范内容在上面那张报告表格里。
迷你鱼菜共生的泵应该多久开一次?
从开 3 分钟、停 30 分钟、无限重复开始。开的时间是从种植床的容积算出来的:5–10 升的盒子装满 LECA 之后需要 2–4 升水,而这颗泵在实际高度下大约每分钟给 1 升。停的时间够床排干、让根呼吸,又还没到介质会干掉的地步。
鱼菜共生的泵可以晚上关掉省电吗?
不可以。鱼整晚都在排氨,而把氨转化掉的细菌是好氧的——它们的氧气来自流动的水。断流九个小时,氨就积起来,细菌膜和根同时在变干。而且整套系统一个月也用不到一度电。
学校的鱼菜共生专题一定要用 Arduino 吗?
不一定。multi-function relay timer 模块设在 P3.2 模式,一行代码都不用写就能让泵按循环开关。只有在作业本身要求编程,或者你打算之后再加传感器时,才用 Arduino Uno 配单路继电器模块。
我的 5V 水泵在嗡嗡响,但水上不去,为什么?
三个常见原因,按这个顺序查。7 mm 出水口或进水滤篮被介质的粉堵了;水位降到泵在吸空气;或者种植床放得太高——这颗泵的流量过了半米就掉得很快,到一米几乎就没了。
最后更新:2026 年 9 月。有问题?WhatsApp 联系我们。



Mini Water Pump Submersible DC 3V-5V - 5V WATER PUMP
Multi Function Relay Module Time Delay Timer Switch Control Board DC 12V 24V AC 110V 220V Programmable Automation
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (5V3A)
5.5x2.1mm DC Power Male Connector Plug Jack Adapter for Arduino DIY Electronics Projects - 5.5x2.1 DC CONNECTOR (F)
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - MicroUSB CABLE (0.5M)
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM