猫咪饮水机V1.0 - 让猫咪每一口水都新鲜
本帖最后由 二哈哈哈哈 于 2024-9-3 23:29 编辑你多久给猫换一次水?你是否在为每天给猫换水发愁?你是否在担心猫咪喝水不干净容易生病而发愁?项目背景夏天到来,除了忍受每天的炎热,还需要每天给猫主子换水,因为一天不换水,水碗中就会滋生各种细菌、悬浮物,容易导致猫咪生病。市面上常见的饮水机只是循环水,并不能更换水,因此并不能做到让水干净。市面上大部分猫咪饮水机的方式都如下图,水泵将水箱里的水抽到水盘中,然后通过滤芯过滤大颗粒杂质,但是这样并不能过滤细菌,而是使细菌杂质不断循环。
项目成品展示
项目方案经过两天半的思考总算想到两种自动换水方案方案一将水碗固定在舵机上,舵机可以控制水碗翻转,实现将水倒入污水箱的效果,而水泵可以将干净水抽到水碗中,实现自动补水,最终实现干净水和污水分离的效果。但是由于这个方案机械结构复杂,所以放弃了该方案。
方案2由水泵2将污水由水碗抽到污水箱中,然后由水泵1,将干净水箱中的水抽到水碗中。该方案不需要复杂的结构,最终选用了该方案。
项目实施材料准备365水泵 *2该水泵可以自吸水,常用于茶吧机等设备上,需要12V供电Romeo mini 控制器(ESP32-C3)*1选用该主控的原因是该主控可以同时驱动两路电机,刚好用于控制两个水泵,并且该主控支持12V输入,只需一路电源输入即可,减少电路的复杂性12V电源*1用于给设备供电(部分路由器电源头就满足)按键*2一个用于手动加水,一个用于手动排水。水碗*16*8硅胶水管 n米(视进出水方式而定)用于输送水。大转接头*1用于连接碗与水管
8mm L型转接头*n(视水管走向而定)用于调整水管走向,避免弯折
其他材料● 热熔胶● 铸工胶● 盒子● 瓶子*2电路连接● 在M1连接第一个水泵用于抽水● 在M2连接第二个水泵用于放水● 在IO3连接第一个按键用于手动控制加水● 在IO6连接第二个按键用于手动控制放水● 在VIN接入12V电源适配器用于给整个系统供电
水路连接参考方案2示意图其他结构制作● 通过铸工胶将转接头连接到不锈钢碗上
● 对盒子进行开孔,用于放置碗,穿过水管、电源线、按钮
● 将水碗通过热熔胶粘在外壳上
● 将所有设备进行组装,并将所有硬件放在盒子内
项目代码// 定义水泵引脚
const int EN1 = 0; //M1电机PWM控制
const int PH1 = 1; //M1电机方向控制
const int EN2 = 2;//M2电机PWM控制
const int PH2 = 10;//M2电机方向控制
const int buttonPin1 = 3;
int buttonState1 = 1;
const int buttonPin2 = 6;
int buttonState2 = 1;
uint8_t firstAdd = 1;//上电加水标志位
// 计时相关变量
unsigned long previousMillis = 0;
const long interval = 2 * 60 * 60 * 1000; // 2小时的毫秒数
void setup() {
// 设置引脚模式
pinMode(EN1, OUTPUT);
pinMode(PH1, OUTPUT);
pinMode(EN2, OUTPUT);
pinMode(PH2, OUTPUT);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
delay(3000);
}
void loop() {
/******上电后进行一次排水-加水动作********/
if(firstAdd == 1){
firstAdd = 0;
//排水
M2_Forward(200);
delay(4000);
M2_Forward(0);
delay(100);
//加水
M1_Forward(100);
delay(4000);
M1_Forward(0);
}
/******定时进行换水动作********/
// 获取当前时间
unsigned long currentMillis = millis();
// 检查是否到了2小时的间隔,如果达到则加水
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
//排水
M2_Forward(200);
delay(4000);
M2_Forward(0);
delay(100);
//加水
M1_Forward(100);
delay(4000);
M1_Forward(0);
}
/******手动控制加水、排水********/
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
if(digitalRead(buttonPin1) == LOW){//手动加水
M1_Forward(100);
}else{
M1_Forward(0);
}
if(digitalRead(buttonPin2) == LOW){//手动排水
M2_Forward(200);
}else{
M2_Forward(0);
}
}
//控制电机加水
void M1_Forward(int Speed1)
{
analogWrite(EN1, Speed1);
digitalWrite(PH1, HIGH);
}
//控制电机排水
void M2_Forward(int Speed1)
{
analogWrite(EN2, Speed1);
digitalWrite(PH2, HIGH);
}
最终效果注:动图进行了加速处理
猫咪总算喝上了干净的水
后记不到一周 “饮水机 - 噶”由于没防到猫手贱和防水措施没做好,水进入了盒子内部,造成电机短路
项目可升级的点● 水碗恒温:可在碗下加发热丝,使水碗中的水保持恒温,让猫咪在冬天不用喝凉水● 超声波清洁碗:可在碗下增加超声波换能片,通过超声波清洁碗,更加有效的防止碗上产生生物膜● 增加水碗水位检测传感器:防止猫咪喝完了水不能及时添加(此时可以把自动换水时间调整为8小时),节约水,减少更换污水箱、干净水箱的频率● 增加水箱的水位检测传感器:及时提醒添加水● 项目联网:可远程监控饮水机的情况(当前使用的主控是ESP32只需优化代码即可)● 水电分离!!水电分离!!水电分离!!:将水泵电路放到其他盒子里,防止猫咪手贱!!!最后的最后,猫咪饮水机V2.0筹备中,敬请期待
页:
[1]