基于blinker&wifiduino的远程喂猫机改造
前因:买的喂猫机用的干电池一个月就没电了,就想着改usb直接供电。你能想到红线是负极么!!!理所当然的原来的主板就烧了,那就废物利用吧。机械结构很简单,一个电机带动转盘,转盘边上有四个凸起,每转动90度就触发开关一次,告诉主控该停止转电机了。
简单画一个原理图,D12内部上拉,连接到开关,D13通过1K电阻连接8050三极管,控制电机的转动。二极管用来吸收电机的反向电压。
焊接,还是在D12对地接了104电容来滤波下。
然后联线一根到5V
正面阻焊刮开下,在5v和3.3v各接一个电容,避免电机干扰到单片机的运行。没接也跑了会儿,为了可靠还是加上的好、
固定板子到机器内部,是用热熔胶大法
稍微比划一下开孔,开大一点让这个USB头子嵌入进去,因为油鸡太调皮了。
接线玩就上螺丝装回去。
ok,结构方面完事了,轮到二楼代码。
本帖最后由 珜羽 于 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:30 编辑
空机测试
http://player.youku.com/player.php/sid/XMzk2MDA3NzM4MA==/v.swf
带粮测试
http://player.youku.com/player.php/sid/XMzk2MDA3NTg1Mg==/v.swf
带猫测试的被优酷屏蔽了我也是无语、、、
主要是要有养猫的习惯楼主很猛
页:
[1]