cooska

前人种树,后人乘凉

导航

arduino与电子罗盘模块

Posted on 2011-03-18 23:09  cooska  阅读(2812)  评论(0编辑  收藏  举报

电子罗盘是机器人比较重要的一个部件,有了它,机器人才能正确的识别方向,为以后开发行走路线的逻辑提供基础。

我这里采用的是一位网友提供的自制模块BQ-CA81,关于其具体的参数就不介绍了,我主要是看中它是用ttl串口通信,可以在我arduino的串口接脚上使用,另外就是价格比较便宜,呵呵。有兴趣的朋友可以去这个地址看看http://item.taobao.com/item.htm?id=1663548787

模块上有4个接脚,vcc(+5)、RX、TX、gnd,一对一接在板子的串口脚上就行。arduino1280有个好处就是它提供了4个这样的串行通信接口。其中Serial我已经用于更新代码和蓝牙串口进行人机交互了。自然这个模块就得接在Serial1接口上。

arduino的代码要稍作改动

void setup(){

Serial.begin(9600);

Serial1.begin(9600);//这里就定义了与罗盘通信的串口

}

根据文档,模块使用16进制数据通信的,而且是一问一答的方式。输入 91H给模块,它返回当前角度值。角度值是两个16进制代码。高位在前,低位在后。我这里写了个函数方便调用。

代码如下:

byte StartStr=0x91;
byte ReadStr[2];

int outstr;

int guide(){

Serial1.write(StartStr);
while(Serial1.available()){
ReadStr[i]=Serial1.read();
i++;
}
a=int(ReadStr[0]);
b=int(ReadStr[1]);
outstr=a*256+b; // 这一步很重要,呵呵,因为一开始对arduino的数据类型不熟悉,没有做这个转换,困扰了我好久。。。

return outstr;
  }

这样,我们就能随时读出当前的方向值了。这个值是当前方向与正北方的夹角,因为可模块的分辨率是1度,所以这里最大值就是359.