查看: 3797|回复: 9

[MOUSER2014创新设计大赛] 15天做一个智能垃圾桶

[复制链接]

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
17
最后登录
2015-2-1
发表于 2015-1-25 00:03:46 | 显示全部楼层 |阅读模式
本帖最后由 alesha 于 2015-1-29 17:12 编辑

前言:
报名参加《Mouser智能硬件创新设计大赛》后,拖延症(Procrastination)的老毛病又犯了,经群主提醒,发现离提交时期只差15天了。为了防止拖延症再次发作,现将项目过程贴出来,供广大网友监督。

QQ图片20150129171618.png
我参赛的项目叫做《智能垃圾桶》,主要打算实现4个功能:
1. 两轮自平衡。如果做成四轮的,就不用这个功能了;
2. 房间内自动巡航。垃圾桶以后可以客串一下扫地机器人;
3. 手势召唤。办公室的小伙伴就可以多人共用一个垃圾桶了;
4. 自适应定位接垃圾。喜欢远程抛垃圾的小伙伴就不用担心失手了。

注:由于我手头有2、3个正式的项目,每天时间有限,2月初还有可能会出游/出差几天,这个项目失败的风险还是挺大的。

回复

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
17
最后登录
2015-2-1
 楼主| 发表于 2015-1-25 00:04:57 | 显示全部楼层
本帖最后由 easyright77 于 2015-1-25 05:36 编辑

Day 1: 准备材料

逛了一天的农贸市场,然后翻箱倒柜找出以前的存货,终于凑齐了所有材料。见下图,从大到小分别是:
1. 雕刻机:本来打算给垃圾桶做个木头底座的,让它看起来高大上一点,现在时间不够了,这步就免了。下面垫了块海绵,以免楼下投诉噪音;
2. 垃圾桶:中国名牌,质地结实而且重量轻;
3. 轮子和支架:某宝上买的,轮子直径65mm,本来想买大一点的窄一点的,万能的某宝上竟然没有;
4. 42步进电机:也是某宝上买的,没牌子和型号,所有参数都不知道;
5. Beaglebone:白色版,刚出的时候就买了,在那块绿色板子的下面;
6. Beaglebone Cape:绿色那块板子就是,自己做的,主要有三个模块:
    a) LV8731: 两个,步进电机驱动芯片;
    b) MPU-9150: 9轴(Gyro + Accelerometer + Compass) MEMS MotionTracking芯片,尝下新,比6轴的MPU-6050贵好多;
    c) 距离传感器:四个,Sharp的GP2Y0A21YK0F,探测距离10cm ~ 80cm。
7. 电池:只知道是12V,其他参数都没有,不用说,也是某宝上买的;
8. Kinect:正连着Xbox360,懒得拆下来,就没有照上去了;
9. 摄像头:原来打算用摄像头做手势识别的,现在时间不够了,就打算直接用Kinect + OpenNI了。
DSC_0243.jpg

材料准备好了,接下来就是组装。由于我动手能力超弱,如果24个小时后还没有组装好的照片发上来,就说明项目夭折了,让这个帖子沉了吧。



2015-01-25 5:29am更新:

折腾了一个通宵,搞出来这样一个东西,简直是山寨得五体投地。看来要搞出高大上的效果,还是要按原来的计划,用雕刻机或者3D打印机。另外电池和无线网卡还没装上,拖延症再度发作,等需要用时再装上它们吧。
DSC_0244.jpg


明天上电测试,希望Beaglebone还没有坏,有点忐忑。



回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
17
最后登录
2015-2-1
 楼主| 发表于 2015-1-26 03:08:32 | 显示全部楼层
Day 2: 实现自平衡下两层抽象

虽然时间紧迫,正式动手之前还是需要整体规划一下,保证代码结构清晰并易于扩展。

按照抽象化和模块化思想,把系统分为三个抽象层,每个抽象层又包括几个模块(这里每个模块基本对应一个C语言源程序)。从下向上的三个抽象层分别是:

1. 驱动调用层:调用Beaglebone的驱动。
(1) GPIO: 读写GPIO信号;
(2) I2C: 通过I2C总线读写指定的bits或bytes;
(3) PWM:设置PWM信号的周期、极性等参数。

2. 芯片控制层:利用Beaglebone的驱动,来控制Beaglebone Cape上的芯片。
(1) MPU-9150:调用I2C模块,读取传感器的Yaw, Pitch, Roll角度;
(2) Motor:调用GPIO和PWM模块,控制两个步进电机的转速和方向。

3. 算法应用层:应用算法,实现自平衡以及前进、后退、转弯等操作。
(1) PID算法:根据MPU-9150的角度,控制两个步进电机的转速和方向,实现自平衡;
(2) 运动控制:在保持平衡的基础上,实现前进、后退、转弯、停止等操作。


附录:源程序列表
2015/01/25  22:31             5,429 gpio.c
2015/01/25  22:04             2,735 gpio.h
2015/01/25  23:01             7,059 i2c.c
2015/01/25  23:01             3,445 i2c.h
2015/01/26  02:25             5,170 main.c
2015/01/26  02:21             3,740 motor.c
2015/01/26  02:20             2,017 motor.h
2015/01/26  00:53            14,671 mpu9150.c
2015/01/26  00:24            16,331 mpu9150.h
2015/01/25  23:07             3,272 pwm.c
2015/01/25  23:07             1,844 pwm.h

回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13183
    最后登录
    2019-1-27
    发表于 2015-1-26 13:13:17 | 显示全部楼层
    楼主啥时候做好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    80

    帖子

    0

    注册会员

    Rank: 2

    积分
    179
    最后登录
    2018-5-9
    发表于 2015-1-26 17:14:40 | 显示全部楼层
    可以定制一个么
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    8
    最后登录
    2015-1-27
    发表于 2015-1-27 18:15:23 | 显示全部楼层
    坐等更新噻
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13183
    最后登录
    2019-1-27
    发表于 2015-1-29 14:38:00 | 显示全部楼层
    楼主还没有来更新?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    17
    最后登录
    2015-2-1
     楼主| 发表于 2015-2-1 05:56:08 | 显示全部楼层
    Day 3: 实现自平衡之PID

    被牙痛醒了,等下一定要去看牙医了,看来我的拖延症又严重了,连牙痛也要痛得受不了才去看。要把标题中的“15天”改成“15个工作日”才行了,除非老板能让我因为牙痛请假15天,要不然就只有周末才有时间了。

    自平衡车的原理和倒立摆(可以查维基百科的Inverted Pendulum[1])很类似,通常用PID算法实现。PID算法实现起来简单,大概30行代码就够了,但它包含的数学原理却很复杂,30个公式可能也不止。这也是为什么写PID程序容易,调整PID参数却很困难。这里我再偷懒一下,直接用了<<Improving the Beginner’s PID>>[2]文章中的一段代码实现PID,代码如下:

    Untitled.png

    以上代码简单易懂,但要确定Kp, Ki, Kd的值却非常困难。智能垃圾桶的外表已经非常山寨了,不能再让它的内里也山寨了,所以我决定接下来不再偷懒了,不用手工的方法确定PID参数,而用某某某某某某软件建立一个动态模型来确定PID参数,而且这个模型在后面的室内自动巡航算法中也可以用到,一举两得。

    待续……如果24小时内没更新的话,就可能要等24x7小时后才能更新了。

    参考资料
    [1] Inverted pendulum, http://en.wikipedia.org/wiki/Inverted_pendulum
    [2] <<Improving the Beginner’s PID>>, 2011. http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    244

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    339
    最后登录
    1970-1-1
    发表于 2015-6-1 13:32:23 | 显示全部楼层
    好厉害的工程师!膜拜】
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    250

    帖子

    0

    高级会员

    Rank: 4

    积分
    628
    最后登录
    2016-5-3
    发表于 2015-10-16 20:21:33 | 显示全部楼层
    很不错啊,值得学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-13 10:51 , Processed in 0.108409 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表