美文网首页嵌牛IT观察
用树莓派Zero实现的远程可视化喂鱼机

用树莓派Zero实现的远程可视化喂鱼机

作者: 努力搞cv | 来源:发表于2018-12-23 22:35 被阅读2次

    姓名:蒋欣哲                                     学号:16020188019

    转载自微信公众号 趣无尽

    眼看要过年了,回老家之后,养的小鱼用不了几天就要见马克思,想着用朋友送的zero来做一个远程喂鱼的小东西,应该不难。

    思路:利用双路继电器分别控制灯和水泵,使用mjpg-streamer来获取摄像头的视频流,并在特定的时刻自动开闭继电器。

    网络环境:有公网IP的家庭网络,利用路由器的ddns或者花生壳,树莓派作为tcpserver对外提供访问。但这个条件,目前已经很难满足了,一般网络都是大内网,这种情况可以让树莓派作为tcpclient主动请求服务器获取指令,本文介绍的是第一种情况。

    鱼食槽暂时未完成,准备搞两个大一点的瓶盖,合起来热熔胶伺候,中间放鱼食,边缘开两个孔,最终固定到步进电机上,转一圈就能完成喂鱼动作。

    树莓派的安装和配置,本文不再赘述,本文分“硬件部分”、“软件部分”、“自启动配置”来说明整个项目。

    硬件部分

    本项目中使用的硬件:

    必不可少的大脑:

    1. 双路继电器

    使用 gpio readall 指令来获取树莓派上的所有接口信息。

    这里使用BCM方式来控制GPIO接口,选择BCM编号为18和27的插针,也就是GPIO1和GPIO2,作为两路继电器的信号控制,继电器的vcc和gnd,分别接到树莓派的5V和0V接口,先借个图,看起来清晰一点。

    2. 步进电机及ULN2003控制模块

    步进电机利用4步或8步脉冲信号来驱动电机转动,这里用双4步(ab bc cd da)来控制电机,可以获得比较强的扭矩,同时精度也比单4步要好,这个ULN2003控制模块有个缺点,就是控制间隔不能小于3ms,否则电机只震动,不转动。

    连接也很简单,正负极接到zero上,控制脚使用BCM编号为23 24 25 12的针脚,BCM编号见第一张图。

    3. 兼容的USB摄像头

    直接扔到usb集线器上就完事了,树莓派上使用lsusb查看,如果没有,基本是不兼容导致的。

    4. 兼容树莓派的USB无线网卡

    5. USB集线器

    软件部分

    软件也是主要三大块:

    1. 继电器控制、定时控制、步进电机控制 (代码文件保存到/home/pi/scripts/MyTcpControl.py)

    2. 摄像头实时视频流部署 (启动视频流服务的脚本保存到/home/pi/scripts/startCamera.sh)

    3. 安卓远程控制APP>

    1. 双路继电器控制、自动定时控制、步进电机控制

    本模块使用Python语言编写。

    1. 建立TCP服务器,通信端口为7654

    2. 高低电平控制

    由于使用的继电器写低为接通电路,所以代码中,使用GPIO.LOW来接通继电器电路,GPIO.HIGH来关闭继电器电路。

    3. 电机步进序列控制。

    步进电机使用双4步来控制GPIO的电平信号,源码请点击文末阅读原文查看。

    2. 摄像头实时视频流部署

    尝试了motion组件,发现巨卡,转而使用mjpg-streamer,很流畅,推荐使用!

    (1)安装依赖库

    sudo apt-get install libjpeg62-dev

    sudo apt-get install libjpeg8-dev

    (2)树莓派浏览器访问https://github.com/jacksonliam/mjpg-streamer 下载源码,默认到/home/pi/Downloads目录,完成后解压缩。

    由于市面上大部分摄像头是YUYV格式输出,所以要修改mjpg-streamer项目的代码文件,让其默认支持此格式的摄像头。

    使用nano指令,或TextEditor打开mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c这个文件,找到input_init函数,修改

    “format = V4L2_PIX_FMT_MJPEG” 为

    “format = V4L2_PIX_FMT_YUYV”。

    (3) 编译、部署mjpg-streamer项目

    sudo apt-get install cmake

    cd /home/pi/Downloads/mjpg-streamer-master/mjpg-streamer-experimental

    sudo make clean all

    编译完成后,复制相关文件到指定目录

    sudo cp mjpg_streamer /usr/local/bin

    sudo cp output_http.so input_uvc.so /usr/local/lib/

    sudo cp -R www /usr/local/www

    最后,使用指令来启动视频组件

    LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_uvc.so -r 320x240 -f 12" -o "output_http.so -p 12001 -w /usr/local/www"

    在谷歌浏览器中,就可以看到视频了,预览地址为 http://树莓派IP:12001/?action=stream

    3. 安卓远程控制APP

    使用Android Studio作为IDE,利用webview控件作为人机交互,简单快速。

    (1)fish.html文件,放入assets目录,源码请点击文末阅读原文查看。

    (2)Activity里就一个WebView组件,主窗体后端代码MainActivity.java,源码请点击文末阅读原文查看。

    (3)TcpClient.java,源码请点击文末阅读原文查看。

    (4)AndroidManifest.xml权限配置,内容请点击文末阅读原文查看。

    自启动配置

    首先更改系统默认的python运行版本:

    sudo rm /usr/bin/python

    sudo ln -s /usr/bin/python3 /usr/bin/python

    进入/home/pi/.config目录,建立autostart文件夹,进入该文件夹,建立两个后缀名为”.desktop”的文件。

    camera.desktop文件,内容为:

    [Desktop Entry]

    Type=Application

    Exec=/home/pi/scripts/startCamera.sh

    tcpserver.desktop文件,内容为:

    [Desktop Entry]

    Type=Application

    Exec=python /home/pi/scripts/MyTcpControl.py

    完成后,重启树莓派,所有配置全部完成。

    最终完成情况:

    盒子巨丑,好在空间大,够放!

    安卓APP,我家宝宝选的图标,巨喜欢 🙂

    相关文章

      网友评论

        本文标题:用树莓派Zero实现的远程可视化喂鱼机

        本文链接:https://www.haomeiwen.com/subject/orpokqtx.html