2019-11-16 14:35:01 [显示全部楼层]
2502浏览
查看: 2502|回复: 1

[项目] [小MU]用小MU中的图传模式做一个智能宠物管家

[复制链接]

[小MU]用小MU中的图传模式做一个智能宠物管家

作品展示

[小MU]用小MU中的图传模式做一个智能宠物管家图1

项目背景

我们家养了一只猫,可是国庆7天假我要和我的家人一起出去游玩,如果猫咪一个人在家的话,又没有人喂养它!怕它会饿着。在外面游玩的我,时不时也想着猫咪,想看  看它一个人在家干嘛!要是我有一个宠物管家该多好啊:我可以通过宠物管家远程给猫咪喂食,并且监控它在做什么!

功能介绍

我们的宠物管家有两种模式:自动模式和远程模式
1,自动模式:我们按下宠物管家的鼻子,我们的宠物管家就开启了自动模式,当有猫咪路过时,我们的宠物管家就会通过超声波传感器检测宠物的距离驱动我们的步进电机来投多少食物。通过水位传感器来检测我们碗里有没有水,当它低于某一值时,我们的宠物管家就会驱动打开我们的继电器,继而驱动我们的水泵给碗里送水。
2,远程模式:在浏览器中输入192.168.4.1打开我们的远程终端,来控制我们舵机云台的转动,查看小猫咪在做什么,按下A键可以投食,按一下B键可以送水。

硬件清单

1 DFRduino UNO R3(含USB线|传感器扩展板)
2 自锁按钮
3 超声波测距模块 HC-SR04 超声波传感器
4 ULN2003步进电机驱动板+ 5V步进电机
5 水位传感器
6 数字继电器模块
7 9G舵机
8 直流电机3V 卧式小潜水泵
9 最重要的当然还是我们的小MU摄像头啦
              小MU摄像头

硬件连接

[小MU]用小MU中的图传模式做一个智能宠物管家图2

硬件组装

[小MU]用小MU中的图传模式做一个智能宠物管家图3
[小MU]用小MU中的图传模式做一个智能宠物管家图4
[小MU]用小MU中的图传模式做一个智能宠物管家图5

程序设计

mind + 编程

[小MU]用小MU中的图传模式做一个智能宠物管家图6
[小MU]用小MU中的图传模式做一个智能宠物管家图7
[小MU]用小MU中的图传模式做一个智能宠物管家图8

代码编程

/*!
 * MindPlus
 * uno
 *
 */
#include <DFRobot_Servo.h>
#include <DFRobot_URM10.h>
#include <SoftwareSerial.h>

// 动态变量
volatile float mind_n_recv_char, mind_n_X, mind_n_Y, mind_n_dist, mind_n_count;
// 函数声明
void DF_SerialReceive();
void DF_LimitValue();
void DF_remove();
void DF_feeder(float angle, String speeds);
void DF_Automatic();
// 创建对象
SoftwareSerial softwareSerial1(2, 3);
Servo          servo_7;
Servo          servo_6;
DFRobot_URM10  urm10;

// 主程序开始
void setup() {
        servo_7.attach(7);
        servo_6.attach(6);
        softwareSerial1.begin(9600);
        mind_n_X = 90;
        mind_n_Y = 120;
        servo_7.angle(abs(mind_n_Y));
        servo_6.angle(abs(mind_n_X));
        digitalWrite(12, LOW);
}
void loop() {
        mind_n_dist = (urm10.getDistanceCM(4, 5));
        if ((digitalRead(13)==1)) {
                DF_Automatic();
        }
        else {
                DF_remove();
        }
}

// 自定义函数
void DF_SerialReceive() {
        mind_n_recv_char = softwareSerial1.read();
        if ((mind_n_recv_char==85)) {
                mind_n_X = (mind_n_X-10);
        }
        if ((mind_n_recv_char==68)) {
                mind_n_X = (mind_n_X+10);
        }
        if ((mind_n_recv_char==82)) {
                mind_n_Y = (mind_n_Y+10);
        }
        if ((mind_n_recv_char==76)) {
                mind_n_Y = (mind_n_Y-10);
        }
        if ((mind_n_recv_char==65)) {
                DF_feeder("720", "0.002");
        }
        if ((mind_n_recv_char==66)) {
                digitalWrite(12, HIGH);
                delay(5000);
                digitalWrite(12, LOW);
        }
}
void DF_LimitValue() {
        if ((mind_n_X<=0)) {
                mind_n_X = 0;
        }
        if ((mind_n_X>=180)) {
                mind_n_X = 180;
        }
        if ((mind_n_Y<=0)) {
                mind_n_Y = 0;
        }
        if ((mind_n_Y>=180)) {
                mind_n_Y = 180;
        }
}
void DF_remove() {
        if (softwareSerial1.available()) {
                DF_SerialReceive();
                DF_LimitValue();
                servo_7.angle(abs(mind_n_X));
                servo_6.angle(abs(mind_n_Y));
        }
}
void DF_feeder(float angle, String speeds) {
        for (int index = 0; index < (ceil(((abs(angle))*1.45))); index++) {
                digitalWrite(11, HIGH);
                digitalWrite(10, LOW);
                digitalWrite(9, LOW);
                digitalWrite(8, LOW);
                delay(speeds * 1000);
                digitalWrite(11, LOW);
                digitalWrite(10, LOW);
                digitalWrite(9, LOW);
                digitalWrite(8, HIGH);
                delay(speeds * 1000);
                digitalWrite(11, LOW);
                digitalWrite(10, LOW);
                digitalWrite(9, HIGH);
                digitalWrite(8, LOW);
                delay(speeds * 1000);
                digitalWrite(11, LOW);
                digitalWrite(10, HIGH);
                digitalWrite(9, LOW);
                digitalWrite(8, LOW);
                delay(speeds * 1000);
        }
}
void DF_Automatic() {
        if ((analogRead(A0)<=500)) {
                digitalWrite(12, HIGH);
                delay(5000);
                digitalWrite(12, LOW);
        }
        if ((mind_n_dist<=8)) {
                mind_n_count = (map(mind_n_dist, 0, 8, 0, 1800));
                DF_feeder(mind_n_count, "0.002");
        }
}

视频演示



---
让思维成为习惯,用科创点亮生活



gada888  版主

发表于 2019-11-22 14:45:31

实用小发明
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail