极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22829|回复: 12

求助用Arduino控制乐高

[复制链接]
发表于 2012-11-28 20:59:45 | 显示全部楼层 |阅读模式
本帖最后由 simatic_net 于 2012-11-28 20:59 编辑

首先介绍一下乐高的PF组件:

它由电池盒、红外遥控器、红外接收器、电机构成。
我要利用Arduino加红外二极管,代替乐高红外遥控器。
好消息是乐高的红外协议是公开的,下面可下载:

可坏消息是IRemote并不支持乐高的协议,所以我只好自己编写红外发射程序。
于是我研究了乐高的协议,编写如下程序:
  1. int IR = 5;   
  2. void setup()
  3. {
  4. pinMode(IR, OUTPUT);
  5. }
  6. void loop()
  7. {
  8.   IR_SS();
  9.   
  10.   IR_S0();
  11.   IR_S0();
  12.   IR_S0();
  13.   IR_S0();
  14.   
  15.   IR_S0();
  16.   IR_S0();
  17.   IR_S0();
  18.   IR_S1();
  19.   
  20.   IR_S0();
  21.   IR_S1();
  22.   IR_S0();
  23.   IR_S1();
  24.   
  25.   IR_S1();
  26.   IR_S0();
  27.   IR_S1();
  28.   IR_S1();
  29.   
  30.   IR_SS();
  31.   
  32.   delay(200);
  33.   
  34.   IR_SS();
  35.   
  36.   IR_S1();
  37.   IR_S0();
  38.   IR_S0();
  39.   IR_S0();
  40.   
  41.   IR_S0();
  42.   IR_S0();
  43.   IR_S0();
  44.   IR_S1();
  45.   
  46.   IR_S0();
  47.   IR_S1();
  48.   IR_S0();
  49.   IR_S1();
  50.   
  51.   IR_S0();
  52.   IR_S0();
  53.   IR_S1();
  54.   IR_S1();
  55.   
  56.   IR_SS();
  57.   
  58.   delay(200);
  59.   
  60. }
  61. void IR_Send38KHZ(int x,int y) //产生38KHZ红外脉冲
  62. {
  63. for(int i=0;i<x;i++)//15=386US
  64. {
  65.            if(y==1)
  66.            {
  67.      digitalWrite(IR,1);
  68.             delayMicroseconds(9);
  69.      digitalWrite(IR,0);
  70.             delayMicroseconds(9);
  71.            }
  72.            else
  73.            {
  74.      digitalWrite(IR,0);
  75.             delayMicroseconds(20);
  76.            }            
  77. }
  78. }
  79. void IR_SS() //开始与停止
  80. {
  81.   IR_Send38KHZ(6,1);
  82.   IR_Send38KHZ(39,0);
  83. }
  84. void IR_S0() //发射0
  85. {
  86.   IR_Send38KHZ(6,1);
  87.   IR_Send38KHZ(10,0);
  88. }
  89. void IR_S1() //发射1
  90. {
  91.   IR_Send38KHZ(6,1);
  92.   IR_Send38KHZ(21,0);
  93. }
复制代码
可惜上面的程序不能工作!我也不知道原因。请帮忙debug!
我在Arduino的第5脚上接了个红外发射管,程序内容是不停发射让电机正转的编码。可惜电机不转,红外接收器也没反应。

它除了具有接收红外信号的功能,同时它也是两路电机PWM驱动板。只要接通9V电源(由乐高电池盒提供)就可以工作。

接下来回答一些朋友们的疑问:
1、为什么要替代乐高原有的红外遥控?
因为原有遥控器只能通过用手扳动操纵杆来控制电机。而如果使用arduino控制,由于arduino本身可编程,可提高作品的自动化程度。
2、为什么不使用乐高自有的NXT控制器?
因为带有乐高NXT的套装最少也要两千元。而且最多只能接4个传感器和3个伺服电机输出。扩展接口数量太少了。而乐高的PF系统可以实现8轴可调速开环控制。Arduino的传感器数量也更丰富,NXT自带传感器只有按钮、超声波、颜色、声音,而利用Arduino可以方便的实现语音控制、温度控制等。

3、为什么不直接使用非乐高的电机?
乐高是非常好的机械平台,通过丰富的零件配合,可以实现很多机械功能。乐高电机可以完美的与只配合,使用非乐高电机很难与乐高积木安装匹配。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2012-11-28 21:00:38 | 显示全部楼层
本帖最后由 simatic_net 于 2012-12-19 16:45 编辑

到目前为止我一共试验了三个库都不好用。



这三个库在arduino-1.0.3环境下编译都无法通过。
第一个库在arduino-0023环境下可以编译通过,但是运行无效果。
第三个库我没弄明白是干什么用的。
第三个库在arduino-0023环境下打不开例子程序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-11-28 21:26:01 | 显示全部楼层
simatic_net 发表于 2012-11-28 21:00
自己顶一下,先留个位置。欢迎讨论。

嗯,整这个还是划算不少。刚搜到个lego powerfunction 的library,http://arduino.cc/forum/index.php/topic,7900.0.html
你试试

不过IR发射范围太小了,IR+xbee还是很给力的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-28 21:38:42 | 显示全部楼层
benjaminxuu 发表于 2012-11-28 21:26
嗯,整这个还是划算不少。刚搜到个lego powerfunction 的library,http://arduino.cc/forum/index.php/to ...

多谢。还是您厉害可以搜索到这么好的资源。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-28 21:51:24 | 显示全部楼层
benjaminxuu 发表于 2012-11-28 21:26
嗯,整这个还是划算不少。刚搜到个lego powerfunction 的library,http://arduino.cc/forum/index.php/to ...

无法下载呀!郁闷中。
回复 支持 反对

使用道具 举报

发表于 2012-11-29 00:21:37 | 显示全部楼层
我以前有时间玩lego的时候写过这个的库。。容我好好找找在哪台机器上。。
回复 支持 反对

使用道具 举报

发表于 2012-11-29 09:53:42 | 显示全部楼层
simatic_net 发表于 2012-11-28 21:51
无法下载呀!郁闷中。

试试这个行不

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-11-29 14:49:27 | 显示全部楼层
用arduino控制lego是很好的路子,楼主能不能多介绍一下你图片上的lego系列?
回复 支持 反对

使用道具 举报

发表于 2012-11-29 23:35:25 | 显示全部楼层
贵价系列
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-30 01:17:27 | 显示全部楼层
estar 发表于 2012-11-29 14:49
用arduino控制lego是很好的路子,楼主能不能多介绍一下你图片上的lego系列?

乐高科技系列2010年的旗舰,8043。
回复 支持 反对

使用道具 举报

发表于 2012-11-30 20:50:36 | 显示全部楼层
wow!!!高中之后就没再玩儿过lego。。。只折腾过rcx和nxt早期的飘过~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-19 16:48:39 | 显示全部楼层
benjaminxuu 发表于 2012-11-29 09:53
试试这个行不

这个库在1.0以后的版本无法编译。0023下可以编译通过,但是运行例子程序无反应。我确信引脚我已经根据实际情况修改成实际连接红外二极管的引脚。我只有一只红外二极管,不知道是不是坏了,下一步,多弄几个红外二极管试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-27 20:49:44 | 显示全部楼层
benjaminxuu 发表于 2012-11-29 09:53
试试这个行不

编译可以通过,不过没有效果。我再研究一下。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-5 11:24 , Processed in 0.078544 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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