红外避障小黄人Word文档格式.docx
- 文档编号:22957229
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:11
- 大小:6.72MB
红外避障小黄人Word文档格式.docx
《红外避障小黄人Word文档格式.docx》由会员分享,可在线阅读,更多相关《红外避障小黄人Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
制作难度:
3星
制作时间:
比赛时我们3-4人工作了约8小时
制作材料
电路控制部分
∙ArduinoMega2560*1
∙红外传感器*3
∙舵机*2
∙扬声器*1
∙LM386*1
∙导线、面包板、洞洞板*N
骨架与装饰材料
∙可乐瓶*1
∙木板*N
∙A4纸*N
∙工具部分:
∙彩笔*N
∙锯条、螺丝刀、螺丝钉等常见工具
实现原理
我们在小黄人的眼睛和双手的位置分别装了三个红外传感器(眼睛里的那个是不是毫无违和感呢,哈哈)。
当人手靠近传感器时,传感器的信号会发生变化。
Arduino控制器接收到这种变化后,会控制对应的舵机转动到相应的角度,保持一段时间后恢复原位。
我们总共有两个舵机,分别控制小黄人的向后倒和左右闪躲。
同时,Arduino控制器通过LM386芯片驱动扬声器,播放小黄人笑声的wav音频。
连接红外传感器到Arduino控制器
红外反射式传感器可以发射红外线,并检测红外线是否被反弹回来。
这个传感器因为内部已经集成了放大、滤波等电路,使用起来非常方便。
传感器有3个引脚,分别是电源、地和信号。
经过测量,当传感器前方有遮挡物时,信号线电压变低。
直接将信号线接到Arduino的数字端口上,判断这个数字端口的值是否为0,即可判断传感器前方是否有手靠近了。
如果红外传感器的质量不太好的话(产生的信号电压不稳或者不够低),则可以将信号线连接到Arduino的模拟信号引脚上,使用Arduino的AnalogRead函数(封装好的函数用起来就是简单)就可以读出这个信号线上的电压。
设置一个电压阈值,就可以判断传感器前方是否有手靠近了。
连接舵机到Arduino控制器
关于舵机的使用,DIY站的前辈写了一篇很好的文章:
DIYer修炼:
舵机知识扫盲
这里简单描述一下:
舵机收到一个用PWM波模拟的电压值,就会让驱动轴带动舵盘旋转到一个固定的角度。
而在Arduino中,完全可以利用封装好了舵机的控制函数,命令舵机转到对应的角度即可。
下图中展示了一个舵机和一系列的舵盘。
这里使用两个舵机分别控制小黄人前后旋转和左右旋转。
结合第一步中的红外传感器,此时便已经可以实现如下功能:
当红外传感器检测到小黄人前方有手时,就命令前后舵机向后转动90度;
当左方有手时,就命令左右舵机向右旋转90度;
当右方有手时,就命令左右舵机向左旋转90度。
当然,控制逻辑还可以有更多花样。
比如,当我使出“双峰贯耳”时,小黄人会前扑进行反击~
PS:
舵机在工作时会对电源电压产生一定的干扰,因此需要接电容滤波或者是单独供电。
否则会影响红外传感器的正常工作。
连接扬声器到Arduino控制器
由于器材限制,我们采用了比较简单的音频播放方法。
使用单片机的PWM波来近似播放PCM编码的单声道音频。
为了操作简单(不用外接flash或者ram),我们将音频直接固化在程序中了。
这一段里我将介绍如何产生WAV音频文件、如何将音频文件固化在程序中、如何修改Arduino的PWM波产生函数的基本参数。
之前说了两次Arduino封装函数的方便,这里要来吐槽一下啦:
有一些操作,在普通的单片机,包括Arduino套件所采用的AVR中实现比较简单,但是在函数高度封装后的Arduino上,处理起来略有麻烦。
产生WAV音频文件
∙截取:
这步比较简单,我是用KMPlayer从电影中抓取了1.5s的小黄人的笑声音频。
∙转码:
之后用GoldWave将其转码成WAV格式,参数选择是PCMunsigh8-bitmono,并将其采样率降低到8KHz(语音信号的采样率的最低要求是6.8KHz,这里就先不多解释了)。
8bit单声道的PCM的编码,就是用一个8bit的值表示当时的声音强弱,一秒钟8000个点,我的音频总共12000个点。
因此,只要Arduino能够如实的将这12000个点的值变成电压值,去驱动喇叭,就可以发声了。
∙取值:
我用ultraedit打开wav文件,在16进制的模式下能看到值,但是无法复制。
最后被迫用了matlab去读取wav文件,将12000个值取了出来。
如果谁会更简单的方法告诉我一下吧~
音频文件固化在程序中
12000个8bit的数的大小约是12KB。
Arduino的RAM大小只有8KB,而其程序Flash的大小有128KB。
因此最简单的方法就是将它直接写到程序里。
在Arduino中,直接定义数组的方法是:
constbytesound[]={………………………………};
这样的话,数组中的内容作为变量会被要求加载到RAM,于是RAM就爆了。
固化到程序里的方法是:
#include<
avr/pgmspace.h>
//开头要引用这个文件
constbytesound[]PROGMEM={………………};
//定义时候要加上关键字
…………
a=pgm_read_byte(&
sound[i]);
//程序中的数组的使用方法
用PWM波模拟声音
PWM波使用不同占空比的方波,来模拟不同的直流电压,就可以模拟一个模拟信号。
(中文有点怪,英文是emulateananalogsignal)
Arduino可以很方便的产生一个指定模拟电压的PWM,使用函数AnalogWrite即可。
因此我们让Arduino依次将12000个声音点的值,用PWM波模拟出来,理论上就只要再通过滤波和放大就大功告成了。
这里需要的一个前提是,PWM波的频率要远高于声音的采样频率(8kHz)。
否则会很难滤波甚至发生错误。
不幸的是,AnalogWrite中无法指定PWM的频率。
查阅资料后发现,PWM波的默认频率只有几百赫兹,因此刚开始实验时喇叭里全是噪声。
参考了Arduino的官方网站的使用教程
AdjustingPWMFrequencies
中的资料,将PWM波的频率改成312500Hz。
终于能够实现声音的播放了。
此时直接将扬声器接到PWM的输出端口上,已经可以听到声音了(扬声器本身的结构具有低通滤波器的特性,可以滤去高频分量)
后续的滤波器以及功放电路就不描述了,时间仓促,设计的也不好。
至此,电路部分已经设计完成。
此时用手挡住任何一个红外传感器,均会有一个舵机开始旋转,并且有贱贱的笑声。
机械部分
由于我们没有人是学机械或者设计的,不会画CAD图,无法使用高级的切割设备,只能采用手工加工木板。
首先引用一段对舵机用法的介绍,出自于前面提到的
舵机知识扫盲
。
舵机的支架和连接装置
∙想在你的项目中用上舵机,就要满足两个条件:
一是需要个能把舵机固定到基座上的支架,二是得有个能将驱动轴和物体连在一起的连接装置。
支架一般舵机上就有,而且带有拧螺丝用的安装孔。
如果你仅仅是测试的话,用点儿热熔胶或者双面泡沫胶带就能轻松的固定住舵机。
∙怎样连接驱动轴呢,你会发现舵机都附带了一些有孔的小东西,这就是舵盘,它可以套在驱动轴,臂上打上了些小孔。
你只要用连接棒或者线把物体连到孔上,就可以将舵机的旋转运动变成物体的直线运动了,当然了,选用不同的舵盘或固定孔就能产生不同的运动啦。
∙图示的是几种不同的舵盘。
前面4个白色的是舵机附带的舵盘,右边四个是用激光切割机切割塑料得到的DIY舵盘。
最右边的2个是舵盘和支架的组合,如果你想实现两个舵机的组合运动,把这个舵盘的支架固定到另一个舵机的支架上就OK了。
接下来的机械设计介绍,这可能会是你在果壳中看到的最坑爹的表达方式,大家对着实物图和我画的“伪三视图”努力辨认一下吧…
我们用了两个舵机实现了两个自由度。
整个设备从下往上依次是:
∙大木板A
∙一个大木板A上竖直的固定了一个小木板B,固定方式用的是一个直角的金属,名字未知……
∙在小木板B上挖了一个槽,将一个舵机卡到了里面,并用螺丝固定。
∙在舵机的驱动转盘上固定一个小木板C,这个木板会随着这个舵机的驱动转盘实现前后旋转。
∙小木板C上用螺丝固定了第二个舵机。
∙第二个舵机的驱动转盘上固定木条D,这个木条D可以在驱动转盘的带动下,实现左右旋转。
∙在木条D上固定大可乐瓶,在可乐瓶的适当位置开洞,固定3个红外传感器。
∙最后,在可乐瓶外侧,用白纸画上小黄人的外观,就大功告成啦!
PS.小黄人还在继续成长中~我们将会在这个简单的小黄人的基础上,开发出一款真正的玩具。
嗯?
那款玩具会是什么样的?
现在还不能告诉你,肯定会更可爱,更聪明(或者更笨),变得会学习、会有情绪,也许还可以和很多人一起玩。
敬请期待吧!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 避障小黄人