基于blinker&wifiduino的远程喂猫机改造-Arduino中文社区 - Powered by Discuz! Archiver

珜羽 发表于 2018-12-11 22:51

基于blinker&wifiduino的远程喂猫机改造

前因:买的喂猫机用的干电池一个月就没电了,就想着改usb直接供电。你能想到红线是负极么!!!理所当然的原来的主板就烧了,那就废物利用吧。

机械结构很简单,一个电机带动转盘,转盘边上有四个凸起,每转动90度就触发开关一次,告诉主控该停止转电机了。

简单画一个原理图,D12内部上拉,连接到开关,D13通过1K电阻连接8050三极管,控制电机的转动。二极管用来吸收电机的反向电压。


焊接,还是在D12对地接了104电容来滤波下。


然后联线一根到5V


正面阻焊刮开下,在5v和3.3v各接一个电容,避免电机干扰到单片机的运行。没接也跑了会儿,为了可靠还是加上的好、


固定板子到机器内部,是用热熔胶大法


稍微比划一下开孔,开大一点让这个USB头子嵌入进去,因为油鸡太调皮了。


接线玩就上螺丝装回去。

ok,结构方面完事了,轮到二楼代码。


珜羽 发表于 2018-12-11 22:51

本帖最后由 珜羽 于 2018-12-11 23:05 编辑

先放代码再讲解:

代码直接在示例->blinker库->blinkerHELLO->hello_mqtt上面改的。
先定义开关输入脚D12,以及电机驱动脚D13。还有一个电机运行时间的变量:
#define key   D12
#define motoD13
long timetmp = 0;

接着在step里面初始化:
pinMode(key, INPUT_PULLUP);
digitalWrite(moto, LOW);
pinMode(moto, OUTPUT);

接着在按键触发绑定的回调函数里面修改:
判断电机驱动脚已经高电平那就不再驱动,不让重复触发。
如果电机没驱动那么驱动电机,并记下时间,顺带返回喂粮次数。
if (digitalRead(moto) == 0) {
    digitalWrite(moto, HIGH);
    timetmp = millis();
    counter++;
    Number1.print(counter);
}

最后在loop里面添加:
如果电机驱动了,并且驱动的时间已经超过2秒,那么判断开关已经释放的情况下停止电机驱动。
(跳过2秒是因为上一次转到位的时候开关还是释放状态,要跳过这个时间)
if (digitalRead(moto) == 1) {
    if ((millis() - timetmp) > 2000) {
      if ((digitalRead(key) == 1)) digitalWrite(moto, LOW);
    }
}

最后不要忘记添上从app里面获取的key和家里wifi名和密码。
编译运行。

珜羽 发表于 2018-12-11 23:20

本帖最后由 珜羽 于 2018-12-11 23:30 编辑

空机测试
http://player.youku.com/player.php/sid/XMzk2MDA3NzM4MA==/v.swf

带粮测试
http://player.youku.com/player.php/sid/XMzk2MDA3NTg1Mg==/v.swf

带猫测试的被优酷屏蔽了我也是无语、、、

单片机菜鸟 发表于 2018-12-20 09:08

主要是要有养猫的习惯楼主很猛
页: [1]
查看完整版本: 基于blinker&wifiduino的远程喂猫机改造