首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

国庆节来了家里的猫星人怎么办?

每次到了过节的时候,就很抓狂,又要出去浪,又担心家里的喵没喵粮, 没水喝, 想买个自动喂食机又觉得自己都能做还去买真是很浪费银子,毕竟家里没有矿, 所以纠结了一下,决定自己做个简易喂猫机算了。

拿出吃灰树莓派,这里的树莓派我用的是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一个引脚给高电平和低电平变化,来控制锂电池的供电。。。。

由于时间的关系,先写到这里吧,后面不定期更新烂尾项目,你们喜欢就多转发吧。最后祝大家十一快乐! 白了个白~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180930G1MWSR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券