每次到了过节的时候,就很抓狂,又要出去浪,又担心家里的喵没喵粮, 没水喝, 想买个自动喂食机又觉得自己都能做还去买真是很浪费银子,毕竟家里没有矿, 所以纠结了一下,决定自己做个简易喂猫机算了。
拿出吃灰树莓派,这里的树莓派我用的是3B, 不是3B+,毕竟3B+是主流的设备,还轮不到它吃灰。
然后翻箱倒柜,找到一个16GB的TF卡,烧录最新镜像。初始化后,配置网络, 然后更新系统后安装了一些常用软件。
关键是机械结构比较复杂,我想来想去决定越简单越好。
因此,在公司翻箱倒柜,找到一个前人烂尾设备, 一个金属的小车车架。
突然觉得如果做个小车拖着吃的跑一跑引起喵星人注意,然后撒几颗喵粮,不也挺好?于是焊接了一块DRV8833驱动板,直流电机驱动没有问题,然后尝试通过树莓派的四个引脚进行控制,
上图是我树莓派和步进电机接驳的方法:
总体上来说就是:
IN1-------GPIO1
IN2-------GPIO2
IN3-------GPIO3
IN4-------GPIO4
---------------------------------------------------
然后直接写代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
INT1 = 18
INT2 = 27
INT3 = 22
INT4 = 23
Pin_list = [ INT1, INT2, INT3, INT4]
GPIO.cleanup()
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
for Pin in Pin_list:
GPIO.setup(Pin,GPIO.OUT)
GPIO.output(Pin,GPIO.LOW)
def stopcar():
for Pin in Pin_list:
GPIO.output(Pin, GPIO.LOW)
def forward(second):
GPIO.output(Pin_list[0], GPIO.HIGH)
GPIO.output(Pin_list[3], GPIO.HIGH)
GPIO.output(Pin_list[1], GPIO.LOW)
GPIO.output(Pin_list[2], GPIO.LOW)
time.sleep(second)
stopcar()
def backward(second):
GPIO.output(Pin_list[0], GPIO.LOW)
GPIO.output(Pin_list[3], GPIO.LOW)
GPIO.output(Pin_list[1], GPIO.HIGH)
GPIO.output(Pin_list[2], GPIO.HIGH)
time.sleep(second)
stopcar()
def turnleft(second):
GPIO.output(Pin_list[0], GPIO.HIGH)
GPIO.output(Pin_list[3], GPIO.LOW)
GPIO.output(Pin_list[1], GPIO.LOW)
GPIO.output(Pin_list[2], GPIO.LOW)
time.sleep(second)
stopcar()
def turnright(second):
GPIO.output(Pin_list[0], GPIO.LOW)
GPIO.output(Pin_list[3], GPIO.HIGH)
GPIO.output(Pin_list[1], GPIO.LOW)
GPIO.output(Pin_list[2], GPIO.LOW)
time.sleep(second)
stopcar()
def turnaround(second):
GPIO.output(Pin_list[0], GPIO.HIGH)
GPIO.output(Pin_list[3], GPIO.LOW)
GPIO.output(Pin_list[1], GPIO.LOW)
GPIO.output(Pin_list[2], GPIO.HIGH)
time.sleep(second)
stopcar()
try:
print(u'前进')
forward(1)
time.sleep(1)
stopcar()
print(u'后退')
backward(1)
time.sleep(1)
stopcar()
print(u'左转')
turnleft(1)
time.sleep(1)
stopcar()
print(u'右转')
turnright(1)
time.sleep(1)
stopcar()
print(u'原地打转')
turnaround(1)
time.sleep(1)
stopcar()
except KeyBoardInterrupt as e:
print "stop the program"
GPIO.cleanup()
测试一下。
sudo python car.py
效果不错, 后面需要添加一个超声波传感器来避障, 喵星人的粮食为颗粒状, 怎么喂给他们比较好呢?
想来想去,想了很多结构,不是比较难做,就是手头没有材料。后来想了想, 看到一个废旧的光驱,脑洞大开, 直接做个盘状的撒粮设备,然后让粮食通过顶部掉下来,被光驱上的光盘带出去,直接沿着光盘的切线方向飞出去,还能让喵星人兴趣大增,于是就有了下面的这个装置:
将设备固定在小车上,然后保持光盘平行于小车,猫粮的瓶子倒着扣在光盘上。
由于还没有找到支架,只好先画个图给大家看看了
当光盘高速旋转的时候,猫粮掉下来就会沿着线切割的方向飞出去, 这时候喵星人估计已经开始到处飞着捕捉粮食了。。。。
控制电机的想法是用个mos管来搞,GPIO一个引脚给高电平和低电平变化,来控制锂电池的供电。。。。
由于时间的关系,先写到这里吧,后面不定期更新烂尾项目,你们喜欢就多转发吧。最后祝大家十一快乐! 白了个白~
领取专属 10元无门槛券
私享最新 技术干货