机器人抢红包大作战

发布时间:2017-06-03


眼看着大boss在群里发红包,几千几千的发,你抢不到你说你急不急?

来个抢红包脚本放到手机里?那太没意思了,网上一抓一大把,一点创意都没有。真正的Maker用什么抢红包?当然是自制机械手臂了!不仅能抢到红包,你还能看到它蠢萌的姿态,在抢到红包的时候为你增添几分乐趣和成就感!


XX67nfY6rRtT6aTD6v6t_RI9oV49LHTfHn_lviODkD9AAQAA8AAAAEdJ.gif

yJvm-0F9vNrNwvJl0GwtHXW8iVqUh2abTvf31i4ggvtAAQAA8AAAAEdJ.gif

高清无码火腿肠抢红包机器人:盯——红包!—— 抢!

是的,机械臂前端是一根火腿肠。是不是也想拥有一台抢红包机器人?和果壳实验室的小伙伴一起制作吧!


需要准备的材料:

Arduino Mega2560

面包板 ×1

杜邦线 若干

按键开关 ×1

10K 电阻  X1

10K 滑动变阻 X3

舵机 ×3

2mm亚克力板 约40cm×40cm

橡皮筋 ×2

火腿肠 ×1

 

需要准备的设备:

激光切割机

一台装有python+opencv+numpy环境的电脑

外置的摄像头

摄像头支架

 

抢红包机器人的原理是啥?

开始制作抢红包机器人时,我们试图找一个更加简单的方案:将四块TSC200颜色传感器贴在手机屏幕上红包将出现的位置的四个角,当这四个颜色传感器同时检测到微信红包的橘黄色时,可以判断为有新的红包发出来,这个时候Arduino就开始进行抢红包操作。


然而当我们拿到TSC200颜色传感器模块的时候却十分奔溃,虽然TSC200芯片非常小,但做成模块后电路板就足足占了大半个屏幕,脸都遮没了……


所以我们转而寻求另外一条途径——计算机图像识别。

用一个摄像头拍摄手机画面,通过开源的计算机视觉库openCV分析画面信号,判断出是否有新的红包出现,当红包出现时即向Arduino发送指令,Arduino控制搭载火腿肠的机械臂在屏幕上进行三次点击,完成抢红包操作。


我该怎么制作它?

抢红包机械臂机械部分主要由亚克力制成的机械臂结构、执行动作的舵机和负责触屏任务的火腿肠组成,机械臂通过Arduino进行调试。


为了将尽可能简化程序,我们设置了三个滑动变阻器和一个按钮来手动设置机械臂的路径,初次使用时,使用变阻器控制机械臂的每个动作,并将每个动作对应的角坐标记录下来填写到程序中,再重新烧写程序。


连接滑动变阻器到Arduino控制器

使用三个10k滑动变阻器作为电位器用于手动控制机械臂。分别将三个电位器的1号引脚接入GND端,3号引脚接入VCC端,三个电位器的2号引脚分别接入Arduino的A0、A1、A2端。当电位器转动时,2号引脚输出不同的电压型号, Arduino读取各个电位器的2号引脚的型号,控制舵机转动到对应的角度。

image.png

滑动变阻器


连接按键开关到Arduino控制器

为了方便查看手动操作时舵机转动的角度,用一个设置一个输出角度信息的按钮。当我们转动舵机到我们需要的角度时,按一下按钮,Arduino便会通过串口返回一个舵机转过的角度。将这些角度数值记录下来烧写进Arduino中,下次操作时,只需要给Arduino发送一个串口指令,机械臂就会按设定的角度开始执行。

image.png

轻触开关


image.png

轻触开关接线图

连接舵机到Arduino控制器

舵机的选择不像普通的电机那么古板,它可以根据你的指令旋转至0至180度之间的任意角度然后精准地停下来,因此让舵机来驱动机械臂执行动作是简单经济的方案。我们使用Arduino的11、12、13端口输出PWM信号来控制舵机。

将三台舵机的红线接入VCC端、棕色线接入GND端,三台舵机的黄线分别接入Arduino的11、12、13号端口。

制作机械臂结构

在纸上会绘制机械臂大致的外形,然后在AutoCAD绘制各个部位的零件图,输出激光切割软件可以读取的PDF文档,然后用激光切割机在一块2mm厚的亚克力板上切割出零件,将零件拼装在一起,并用胶水或螺丝固定住。

机械臂概念草图:

image.png

机械臂零件图:

image.png

组装成的机械臂各个部件:

image.png

image.png

image.png

image.png

组装完成的机械图:

image.png

夹上火腿肠就可以出现触摸屏幕了:

image.png

图像(红包)识别

在python上调用openCV视觉库对进行图像处理。计算机获取到视频信号后,首先进行颜色过滤处理,将橙黄色之外的颜色过滤掉,然后获取黄色色块的轮廓、面积、质心位置。程序通过面积和质心判断是否有新的红包出现,当有红包出现时,python脚本即通过串口向Arduino发送指令。


image.png

计算机图像界面

好了,坐等红包赶紧发过来!