arduino之红外

来源:互联网 发布:淘宝有好货怎么参加 编辑:程序博客网 时间:2024/05/01 11:17

去年开始接触了arduino一段时间,想做一个红外遥控,基本功能有两条

1. 声控开关电器

2. 手机通过蓝牙控制开关电器

做到一半就听说HTC的new one里面默认加了这个功能,又被抢了先抓狂,再加上整个2013年前10个月变态的加班方式,直到今日,总算能做个了结了,下面就来简单记录下实现的过程


需要的器件

  • arduino uno R3.  购买链接:http://item.taobao.com/item.htm?spm=0.0.0.0.jDit7U&id=18608371052
  • arduino xbee传感器扩展版V5   购买链接:http://item.taobao.com/item.htm?spm=0.0.0.0.zCq2hO&id=6804680647
  • bluetooth V3蓝牙串口模块   购买链接:http://item.taobao.com/item.htm?spm=0.0.0.0.jinpeQ&id=6032611733
  • 语音识别模块 购买链接: http://item.taobao.com/item.htm?spm=0.0.0.0.qYL3uP&id=15338528680
  • 面包版,三极管,红外二极管,导线若干就不列出了

红外


以sharp协议为例,简单来说,先使能38K PWM波形,延迟一段时间t1,然后关掉PWM波形,延迟一段时间t2,
t1是固定的,可以理解为开始位,通过t2的不同可以确定发送的是0还是1
参考code: 
http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
https://code.google.com/p/ledstripes/source/checkout

arduino pin3可以生成PWM波形,不过由于arduino uno的IO驱动电流最大只有40mA,导致遥控距离太短,这也是早期遇到的难点,后来经过一番搜索,发现可以通过三极管来解决


使用了三极管之后,arduino pin3只做为三极管的开关,导通之后,红外二极管由外接的5V 电源供电
具体电流可以按如下计算:
首先假设38K的脉冲是5V的。当脉冲为高电平时(5V),B点电位为5V,三极管的基极没有电流Ib流过。三极管CE端关闭,阻抗很大,发光二极管中几乎没有电流,发光二极管不亮。当脉冲为低电平时(0V),B点电位由R1和R2分压,得到电流2.5V。这个时候Ib=(5V-0.7V(发光二极管的导通电压)-0.7V(BE结导通电压)-2.5V)/3.6Ω=0.305A  (这个值很大啊!其实这个电流值是瞬间的,因为BE结导通后B点电位回立刻发生改变!) 先看这个0.3A的Ib,它是瞬间的,它的作用就是为了打开CE这个通道,当这个通道打通后,5V到地有了一个回路。从SS8559规格书中看到CE静态电压为0.28V左右,BE静态电压0.98V,可以进行相应的电流计算了。主回路IC=(5V-0.7V-0.28V)/3.6=1.11A,从规格书中估算放大倍数为40,Ib=1.11/40=27.75mA,则B点电位Vb=5-3.6*0.02775-0.7-0.98=3.22V。以上为计算过程,R1和R2的作用就是给三极管一个偏执电压,当三极管工作会后就没有作用了。R3决定IC的电流,SS8550最大电流1.5A,根据二极管,三极管压降可以计算出这个阻值,图中应该把SS8550的CE静态电压设定为0,所以才是3.6Ω,否则2.68Ω就可以了。从这里可以看到在38K出给5V脉冲后,电路的作用就是发光二极管间断性闪烁,如果是3.3V脉冲,那么就是亮的程度有变化了!

由于这个电路采用了PNP型三极管,所以为低有效,这里注意需要修改code。

声控


声控部分采用LD3320,具体资料:
http://wiki.dfrobot.com.cn/index.php/(SKU:DFR0177)%E4%B8%AD%E6%96%87%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9D%97Voice_Recognition

蓝牙


具体资料:
http://wiki.dfrobot.com.cn/index.php/(SKU:TEL0026)DF-BluetoothV3%E8%93%9D%E7%89%99%E4%B8%B2%E5%8F%A3%E6%A8%A1%E5%9D%97

代码 


Arduino

https://code.google.com/p/arduino-successcw/source/checkout?repo=ir-remote
同步下来代码之后,拷贝到arduino IDE的根目录,
打开下面目录的对应工程即可编译
IRSend_BT : 手机通过蓝牙操作红外
IRSend_Voice: 声控操作红外
IRrecv: 可以接收红外并输出结果到串口,这个可以用来实现遥控器的“学习”功能。以sharp为例,当按下power键,输出22c1,这个值直接放入IRSend里面对应的位置即可实现开关机功能
    • successcw
      • IRSend_BT
        • IRSend_Voice
          • IRrecv

      Android

      https://code.google.com/p/arduino-successcw/source/checkout?repo=bt-client
      同步下来之后用ADT编译安装到手机即可运行


      连接好的效果图



      IRSend_Voice



      IRSend_BT



      IRrecv



      手机端运行效果



      原创粉丝点击