爱小鱼又养不活?——懒人必试自动换水系统

2015-12-079.1万
精华项目
AI 快速预览详细 收起
本文介绍了如何制作一个鱼缸自动换水系统。通过使用UNO、浊度传感器、潜水泵和电磁阀等组件,该系统能够自动监测水质并进行给水排水操作。文章详细描述了各个模块的功能实现方法,包括给水、排水、自动检测PH值和浊度值以及显示模块。此外,还进行了水位平衡测试,以确保系统的稳定性。
话说楼主小时候呢,养小鸡儿那都是隔天挂~,养小鱼儿是周周没,养只小蝌蚪想看它变成小青蛙,没想到连青蛙腿都看不见小蝌蚪就直挺挺了~~~

一直觉着,估计我这样的马大哈想要养只可爱的水产动物真是此生无望了

NO ! 我们要学会向命运说:不!特别是当有些总有很多超好idear的小伙伴能够给你建议的时~~~
这不,在同事jane的提议下,我决定做一个鱼缸自动换水系统。


这个简易的鱼缸系统能够通过模拟PH计和浊度传感器来检测水质,并通过潜水泵和电磁阀控制系统给水排水,简直太适合我这种天生跟小宠物相克的懒人了有木有~~~

一、元器件清单


  序号  
名称
SKU
数量
  1  
DFR0216
1
  2  
DFR0265
1
  3  
浊度传感器
SEN0189
1
  4  
FIT0200
1
  5  
SEN0161
1
  6  
FIT0231
1
  7  
电磁阀
淘宝
1
  8  
DFR0017
2
  9  
水管
五金店
2m
  10  
接口(为电磁阀)
五金店
2
  11  
DFR0063
1

如果本身有UNO和扩展板的话,成本是花不了多少钱滴~~其他都是些比较便宜的东西。
提醒:接口最好是在买电磁阀的时候一起问卖家买到尺寸一致的,不然像楼主这样直接去五金店购买,麻烦不说,尺寸还不一定合适,如果漏水是很不爽滴~~

二、各个模块功能的实现

1.      给水

给水是整个系统中最easy的一个环节了,我直接使用了df的带水管潜水泵。

爱小鱼又养不活?——懒人必试自动换水系统图19
泵体放在盛放清水的容器中,把水管放在鱼缸里,只要一通电很容易就实现将清水供给到鱼缸中了。
小问题倒是有一个啦,给水的时候水管子老爱动来动去的,不听话。
于是我就设计了这个

爱小鱼又养不活?——懒人必试自动换水系统图1

这么一放,这么一固定,水管君就老实啦。

感谢闯哥悉心教导,让我这个二愣子也能自己使用solidworks设计3D打印件嘿嘿。
下面是固定件的模型图片,有兴趣滴朋友阔以参考一下。

爱小鱼又养不活?——懒人必试自动换水系统图2

(我也会打包放在最后滴)

2.      排水

排水这个环节我倒是废了不少脑子~~

方式一:使用潜水泵来排水
一开始我想着,潜水泵既然可以给水,当然也能排水。
可是当我拿到潜水泵的时候我才发现里面带了过滤嘴!!!

爱小鱼又养不活?——懒人必试自动换水系统图3

应该被换掉的水本身是浑浊的(带了很多鱼便便~~~),如果用潜水泵来排水的话很有可能会导致过滤嘴的堵塞从而不能排水;

方式二:鱼缸打洞
逛了逛淘宝,发现这种方式挺好的,因为不需要花钱买东西嘛。只需要在水位线部分给鱼缸打个洞,然后用玻璃管将鱼缸的底部和外面导通,利用连通器的原理来进行排水就行啦


爱小鱼又养不活?——懒人必试自动换水系统图4

可素~~~
我滴鱼缸是玻璃的,一打洞整个玻璃都碎了好么~~~
真希望当时朋友给我的是塑料鱼缸,嘿嘿~~~

方式三:电磁阀结合虹吸原理

首先,什么是虹吸原理呢?

是利用液面高度差的作用力现象,将液体充满一根倒U形的管状结构内后,将开口高的一端置于装满液体的容器中,容器内的液体会持续通过虹吸管从开口于更低的位置流出
爱小鱼又养不活?——懒人必试自动换水系统图5

其实呢,利用咱们中学的物理知识解释就是两个容器液面高低不同,用管子将两者液体连通,不论管子什么形状,在液体自身重力作用下,总有保持液面相平的运动趋势,即将流动的液体所受的合力指向下方,因此液体从高处流向低处啦。
一般情况下,鱼缸放置的位置都是在桌上,所以我只需要用一个小桶(或者其他容器)放在地上用一根管子连通就行勒。

排水已经成功实现,我再加上一个电磁阀开关。通电的时候开关打开,没电的时候开关关闭,就能够随心所欲地想排水就排水啦,哈哈
突然间就想到一句话呀,黄天不负苦心人(没钱,什么土方法想得出来~~)。

不过,有三个点要注意一下:

1.水管要小口径的,咱们都是自己养几条小鱼儿,口径太大要是一不小心把小鱼儿吸出去就不好啦。
2.电磁阀也尽量买尺寸最小的,网上那些9V的或者12V的就够了,省电又没啥噪声,我们也没必要用这么大滴。
3.要利用虹吸原理排水首先一定要让导通两边容器的水管里有水才行呢,这个地方呢,我是让整个系统开始工作的时候用嘴轻轻吸了一嘴~~~~

如果嫌脏呢,可以去某宝上买一个手动抽气的,用手这么一捏,水就被抽过来了。就是下面这个东西:

爱小鱼又养不活?——懒人必试自动换水系统图6

3.      自动检测PH值和浊度值

为什么我要选择PH值和浊度值作为是否需要换水的指标呢,且听我娓娓道来。
PH是什么呢?用较简单的一句话来概括,就是水体中氢离子的活性。
而PH7和PH8的氢离子活性并非7和8的区别,而是1和10的区别。
于是有些人由于长期没换水,鱼缸里的PH已经跌到5了,一换水,PH变7,水质整整变化了100倍!

那么浊度呢?
浑浊分为物理浑浊和生物浑浊,物理浑浊呢就是有不溶于水的物质在鱼缸中悬浮着——大多数来自被分解的鱼便,未消化的植物纤维和无机盐等。
而生物浑浊就是水质中的微生物在营养富化的水中大量繁殖。
虽然吶,浑浊的直接原因有以上两种,但是究其根本原因,就只有一个——没有及时清理鱼儿们滴便便。我们想想,要是让一个人天天跟自己产的便便生活在一起,不生病才怪呢~~~

所以呢,换水的关键不是每次换多少比例的水,而是每次换水,让水更清澈的同时还不能让鱼缸里水的PH波动超过0.2,也就是把每次换水的水质变化控制1.6倍以内。如果能做到这点,哪怕换1/2的等温水都没事。如果做不到,那就需要每次换水量更少。
基于这种考虑呢,我决定每次只换水大约十分之一到十二分之一左右。但是呢,这个换水的频率一定要高,也就是每次检测到PH值和浊度值不符合规范了就要开始换水。臆测了一下,每天也就三四次次,也不算多。主要是,,,这又不用咱自己换对不对。

4.      显示

显示这个环节呢,我使用的是I2C LCD1602液晶模块。

爱小鱼又养不活?——懒人必试自动换水系统图7

为啥?
俩字儿——“情怀”!
蓝色背光~~~白色字符~~对比度可调~~
一股浓浓的复古感好么,通电的一刹那就带给我一种上世纪八十年代的实验室即视感。

好吧,所有情怀的背后都有一个叫做“没钱”的爹~~

三、水位平衡测试

这个问题需要单独拎出来做个说明,虽然我们已经能够实现排水和给水的自动化了。但是,我们并不能在这个自动化之下保持水位的平衡,这是因为排水和给水的速度是不相同的它们的速度在出厂的时候都已经定下来了。所以,我要想办法测出排水给水的速度,然后依此来修改他们每次工作的时间已达到水位的平衡;

我是这样测试滴:
首先,我目测了一下我滴小鱼缸大概也就15L,每次换水十分之一大概也就1.5L,四舍五入一下我决定使用2L的水来作测试。

木有量杯~所以我决定使用一次性杯子,一次性杯子的容量是250ml

爱小鱼又养不活?——懒人必试自动换水系统图8

2L也就8杯水,我用这种一次性杯子接了8次倒入上面的桶中,接着开始测试给水速度:

爱小鱼又养不活?——懒人必试自动换水系统图9

给水的同时开始用手机的秒表计时,最后得到给水时间如下:

爱小鱼又养不活?——懒人必试自动换水系统图10

接着是排水速度的测试:

爱小鱼又养不活?——懒人必试自动换水系统图11

同时也记录排水时间如下:

爱小鱼又养不活?——懒人必试自动换水系统图12

so...
给水时间:1.01.71=61.71S
给水速度:2000/61=32.41ml/s

排水时间:3.56.20=236.20S

排水速度:2000/236.20=8.47ml/s


爱小鱼又养不活?——懒人必试自动换水系统图13


四、代码

  1. <font face="微软雅黑">#include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. LiquidCrystal_I2C lcd(0x20,16,2);//设置lcd地址为0x20,每行16个字符,2行
  4. #define TurbidityPin A0//浊度传感器连接到A0
  5. #define PHPin A1//PH传感器连接到A1
  6. #define Jinshuipin 11//控制进水的继电器连接到11口
  7. #define Paishuipin 12//控制排水的继电器连接到12口
  8. float Turbidityval;//定义浊度值
  9. float PHval;//定义PH值
  10. void setup()
  11. {
  12.   lcd.init();//初始化lcd                     
  13.   lcd.backlight();//打开背光灯
  14.   pinMode(Jinshuipin, OUTPUT);//控制进水的继电器引脚
  15.   pinMode(Paishuipin, OUTPUT);//控制出水的继电器引脚
  16.   Serial.begin(9600); // 打开串行口,定义波特率为9600
  17. }
  18. void loop()
  19. {
  20.    getTurbidity();//读取浊度
  21.    getPH();//读取PH值
  22.   
  23.    if (Turbidityval<4.06  || PHval<7.0  ||  PHval>8)//如果浊度传感器输出小于4V或者PH值小于6.5
  24.    {
  25.     delay(10000);
  26.     getTurbidity();//读取浊度
  27.     getPH();//读取PH值
  28.     if(Turbidityval<4.06  ||  PHval<7.0  ||  PHval>8)//浊度和PH的值依旧满足换水条件
  29.     {
  30.     Serial.print("change water");
  31.     Paishui();//开始排水
  32.     Jinshui();//开始进水
  33.     lcd.clear();
  34.     lcd.setCursor(0,0);
  35.     lcd.print("change water");
  36.     delay(20000);//排水给水过程持续20s
  37.     Jinshui_end();//结束进水
  38.     lcd.setCursor(0,0);
  39.     lcd.print("change water");
  40.     delay(56000);//继续排水56s
  41.     }
  42.      else
  43.     {
  44.         Serial.print("   no change ");
  45.         lcd.clear();
  46.         lcd.setCursor(0,0);
  47.         lcd.print("no change");
  48.         Paishui_end();//结束排水
  49.         Jinshui_end();//结束进水
  50.         delay(8000);//等待10s之后继续返回浊度和PH值
  51.       }   
  52.     }
  53. else
  54.     {
  55.         delay(10000);//等待10s之后继续返回浊度和PH值
  56.     }
  57. }
  58. void getTurbidity()//浊度值测试程序
  59. {
  60.    Turbidityval=analogRead(A0)/1024.0*5.0;
  61.    Serial.print("    Trubidity value: ");
  62.    Serial.println( Turbidityval);//打印浊度值
  63.    lcd.setCursor(0,0);
  64.    lcd.print("Turbidity:");
  65.    lcd.setCursor(12,0);
  66.    lcd.println(Turbidityval);
  67.   }
  68.   
  69. void getPH()//PH值测试程序
  70. {
  71.   PHval=analogRead(A1)/1024.0*5.0*1.45;
  72.   Serial.print("    PH value: ");     
  73.   Serial.println(PHval);
  74.    lcd.setCursor(0,1);
  75.    lcd.print("PH:");
  76.    lcd.setCursor(12,1);
  77.    lcd.println(PHval);
  78.   }
  79.   
  80.   void Jinshui()//进水程序
  81.   {
  82.     digitalWrite(Jinshuipin, HIGH);
  83.     }
  84.    
  85.   void Paishui()//排水程序
  86.   {
  87.     digitalWrite(Paishuipin, HIGH);
  88.     }
  89.    
  90.   void Jinshui_end()//进水程序结束
  91.   {
  92.     digitalWrite(Jinshuipin, LOW);
  93.     }
  94.    
  95.   void Paishui_end()//排水程序结束
  96.   {
  97.     digitalWrite(Paishuipin, LOW);
  98.     }
  99. </font>
复制代码

都加了详细地注解哦,相信大部分地方都不用我再解释了。不过有一个地方我还要啰嗦一下:
         

“if (Turbidityval<4.06  || PHval<7.0  ||  PHval>8)//如果浊度传感器输出小于4V或者PH值小于6.5
   {
    delay(10000);
    getTurbidity();//读取浊度
    getPH();//读取PH值
    if(Turbidityval<4.06  ||  PHval<7.0  ||  PHval>8)//浊度和PH的值依旧满足换水条件”

这里为啥有两个if语句呢?
原因就在于,有时候鱼儿不小心通过了浊度传感器或者刚好给小鱼们喂食的时候,如果把鱼料撒在了浊度传感器旁边就会出现短暂的浑浊。
吶,我们肯定知道这种时候并不是水真的浑浊需要换水了。可是,机器它不知道,所以,我们要让机器知道,嘿嘿。
于是呢,我就加入了这一行代码,要在10s的时间段里检测到浊度都变浑浊了,才会判定为浊度不达标了~(话说10s的时间应该够小鱼儿们把某个区域的饲料都洗劫一空了吧~~)

对于排水给水时间来说:因为打算高频少量,所以每次给水时间只有20 S,则排水时间应该为20*3.8=76 S

五、啰嗦两句

其实把,楼主最大的愿望就是能够在以后能够做一个超级智能的鱼缸系统~~~~

爱小鱼又养不活?——懒人必试自动换水系统图14

当然比我上面的这个高端大气多了

它能够养殖所有在中国这个大部分处于温带的国家里所不能看见的或者只存在于与深海里的神奇小动物们。
比如:

爱小鱼又养不活?——懒人必试自动换水系统图15
冰海小精灵

蛋黄水母:

爱小鱼又养不活?——懒人必试自动换水系统图16

海兔:
爱小鱼又养不活?——懒人必试自动换水系统图17

长脚牛鱼:

爱小鱼又养不活?——懒人必试自动换水系统图20

当然,还有《海底总动员》里那只热心又健忘的蓝唐王与Dory:

爱小鱼又养不活?——懒人必试自动换水系统图18

嘿嘿,,,是不是想太多了啊哈



鱼缸自动换水系统.zip

60.9 KB, 阅读权限: 10, 下载次数: 121

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(31)
风悠扬0539
风悠扬0539
厉害了大神
meganxu
meganxu
给我们这种人带来了福音
Thu
Thu
哪位大佬能帮帮俺 遇到点问题
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
20060606
20060606
如果出水也改成自动的就好了
六月的雨
六月的雨
心动不如行动,我们也学着做一个!
明天已在
明天已在
做得真不错,大赞
kimi423520
kimi423520
看完啦, 很不错, 谢谢分享
Hill✨
Hill✨
赞赞赞
孤龙破晓
孤龙破晓
是的,我很需要
cnchome
cnchome
厉害,收藏
shen9015
shen9015
那个3D打印的固定夹可以用长尾夹代替。
另外,玻璃上是可以打洞的。不过楼主的虹吸更有意思。
孤独客
孤独客
详细,自己动手能力强
yoyojacky
yoyojacky
不用海绵,用丝袜
marcusme
marcusme
作者
回复yoyojacky
我没有这个东西呀
qing1987
qing1987
大爱,回头我也尝试做个
p7269582
p7269582
真的很不错,我也打算做一个,我买的WIDO的板子
swanglei
swanglei
桌面式智能鱼缸可以配上3d打印做些好玩的
FBI-C
FBI-C
不错,教程挺详细的!视频是否挂了?
marcusme
marcusme
作者
回复FBI-C
我这边看了一下,木有挂掉呀。
marcusme
marcusme
作者
嘿嘿,有道理。
heinau
heinau
技术贴啊!
好不容易做好了,不捞点鱼放进去养不是很可惜么~