|
本帖最后由 simatic_net 于 2012-11-28 20:59 编辑
首先介绍一下乐高的PF组件:
它由电池盒、红外遥控器、红外接收器、电机构成。
我要利用Arduino加红外二极管,代替乐高红外遥控器。
好消息是乐高的红外协议是公开的,下面可下载:
可坏消息是IRemote并不支持乐高的协议,所以我只好自己编写红外发射程序。
于是我研究了乐高的协议,编写如下程序:- int IR = 5;
- void setup()
- {
- pinMode(IR, OUTPUT);
- }
- void loop()
- {
- IR_SS();
-
- IR_S0();
- IR_S0();
- IR_S0();
- IR_S0();
-
- IR_S0();
- IR_S0();
- IR_S0();
- IR_S1();
-
- IR_S0();
- IR_S1();
- IR_S0();
- IR_S1();
-
- IR_S1();
- IR_S0();
- IR_S1();
- IR_S1();
-
- IR_SS();
-
- delay(200);
-
- IR_SS();
-
- IR_S1();
- IR_S0();
- IR_S0();
- IR_S0();
-
- IR_S0();
- IR_S0();
- IR_S0();
- IR_S1();
-
- IR_S0();
- IR_S1();
- IR_S0();
- IR_S1();
-
- IR_S0();
- IR_S0();
- IR_S1();
- IR_S1();
-
- IR_SS();
-
- delay(200);
-
- }
- void IR_Send38KHZ(int x,int y) //产生38KHZ红外脉冲
- {
- for(int i=0;i<x;i++)//15=386US
- {
- if(y==1)
- {
- digitalWrite(IR,1);
- delayMicroseconds(9);
- digitalWrite(IR,0);
- delayMicroseconds(9);
- }
- else
- {
- digitalWrite(IR,0);
- delayMicroseconds(20);
- }
- }
- }
- void IR_SS() //开始与停止
- {
- IR_Send38KHZ(6,1);
- IR_Send38KHZ(39,0);
- }
- void IR_S0() //发射0
- {
- IR_Send38KHZ(6,1);
- IR_Send38KHZ(10,0);
- }
- void IR_S1() //发射1
- {
- IR_Send38KHZ(6,1);
- IR_Send38KHZ(21,0);
- }
复制代码 可惜上面的程序不能工作!我也不知道原因。请帮忙debug!
我在Arduino的第5脚上接了个红外发射管,程序内容是不停发射让电机正转的编码。可惜电机不转,红外接收器也没反应。
它除了具有接收红外信号的功能,同时它也是两路电机PWM驱动板。只要接通9V电源(由乐高电池盒提供)就可以工作。
接下来回答一些朋友们的疑问:
1、为什么要替代乐高原有的红外遥控?
因为原有遥控器只能通过用手扳动操纵杆来控制电机。而如果使用arduino控制,由于arduino本身可编程,可提高作品的自动化程度。
2、为什么不使用乐高自有的NXT控制器?
因为带有乐高NXT的套装最少也要两千元。而且最多只能接4个传感器和3个伺服电机输出。扩展接口数量太少了。而乐高的PF系统可以实现8轴可调速开环控制。Arduino的传感器数量也更丰富,NXT自带传感器只有按钮、超声波、颜色、声音,而利用Arduino可以方便的实现语音控制、温度控制等。
3、为什么不直接使用非乐高的电机?
乐高是非常好的机械平台,通过丰富的零件配合,可以实现很多机械功能。乐高电机可以完美的与只配合,使用非乐高电机很难与乐高积木安装匹配。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|