找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 25139|回复: 30

自制数字三轴罗盘传感器

 火.. [复制链接]
发表于 2011-9-21 09:35:54 | 显示全部楼层 |阅读模式
本帖最后由 ypiggy 于 2011-9-21 09:40 编辑

自制数字三轴罗盘传感器(猪头猪脑)

从MindSensor订购了一个单轴模拟的陀螺仪之后,觉得无论是乐高还是第三方厂商,传感器太暴利了。

于是自己动手尝试做一个传感器。

买了三个数字的三轴罗盘、陀螺仪、加速度传感器,都是数字的,i2c/spi接口,3.3V/5V供电,调通后开干。

这个是乐高原厂的触摸传感器,就是一个按钮开关,因为最便宜,所以用来做壳子,省去了开模。拆以前是真漂亮啊(对比拆后{:soso_e115:} )
01_触摸传感器.jpg

暴力拆开后,焊下这个开关和2.2K的电阻,电阻居然顺手搞丢了。
02_拆除器件.jpg

在左侧的两个孔位上方自己打了个孔用于放置传感器。
第一个练手,所以选了这个HMC5883的罗盘,因为它尺寸最小,放置最容易。
03_待装的罗盘.jpg

侧视图。原来的PCB板稍微短了点,凑合用吧,至少可以沿用原厂的RJ12的特殊插座
04_打孔后放置.jpg

焊接完成,准备组装回去。
05_完成焊接.jpg

差最后一个前盖了,前盖里面有一个卡子顶住板子下方的焊脚了,修掉。
06_组装.jpg

组装完成,外观伤痕累累啊,不过还好了。
07_完成.jpg


和NXT连接后,调试成功!(猪头猪脑)
08_连接NXT调试成功.jpg

评分

参与人数 1乐币 +20 收起 理由
晓舟 + 20 很给力!漂亮又实用

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2011-9-21 09:44:58 | 显示全部楼层
楼主高人也?以前我用PNI传感器也做过电子罗盘。最好能加上倾角补偿就更好了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 14:04:46 | 显示全部楼层
高手啊?干什么用吗
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 15:38:02 | 显示全部楼层
真厉害,现在还没有NXT,但楼主的行为为大家开了个好头,这样可以省不少银子{:soso_e113:}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 17:44:34 | 显示全部楼层
{:soso_e179:}强悍!!漂亮又实用
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 18:40:18 | 显示全部楼层
初学者,看不明白!不够很有创意
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 19:14:24 | 显示全部楼层

b

本帖最后由 nanzheng 于 2011-9-21 16:45 编辑

楼主牛人,希望能提供一些电路图和配件编号,这样就可以diy了,谢谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 19:17:43 | 显示全部楼层
HMC5883 HMC5883L数字罗盘传感器 中文资料 PDF下载  
http://tcs3200d.blog.163.com/blo ... 063201151955536384/[/url]
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-21 21:31:57 | 显示全部楼层
楼主牛人 ,程序怎么弄的,如何在屏幕上显示啊
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-9-21 22:56:17 | 显示全部楼层
本帖最后由 ypiggy 于 2011-9-22 08:28 编辑

附上传感器的原理图,很简单。乐高的硬件开发手册建议的I2C管脚上拉电阻为82K,这个板子上的是10K,不过没啥影响。
我没有自己从头做,直接淘的现成的,如果手头有风枪能贴片焊的,可以直接买制好的pcb板和全套器件,可能才10、20元。
原理图.jpg

NXC的代码如下,也很简单,就是最常规的I2C通讯,需要对芯片做一些必要的初始化。

  1. /************************************************************************/
  2. /*                                                                      */
  3. /* Program Name: Compass-Nx-demo.nxc */
  4. /* ===========================                                          */
  5. /* Adopted by ypiggy@tom.com                                            */
  6. /* 2011/09/21                                                           */
  7. /************************************************************************/
  8. #define SensorPort IN_1
  9. #define ADDR     0x3C
  10. struct TriAxisData
  11. {
  12. int gX,gY,gZ;
  13. };
  14. void COMPASS_Init(byte port, byte i2cAddr)
  15. {
  16. byte cmdBuf[];
  17.   SetSensorLowspeed(port);
  18.   ArrayBuild(cmdBuf,i2cAddr,0x00,0x70);
  19. I2CWrite(port,0,cmdBuf);
  20.   int status = I2CCheckStatus(port);
  21.   while (status > NO_ERR)
  22.     status = I2CCheckStatus(port);
  23. ArrayBuild(cmdBuf,i2cAddr,0x01,0x20);
  24. I2CWrite(port,0,cmdBuf);
  25.   status = I2CCheckStatus(port);
  26.   while (status > NO_ERR)
  27.     status = I2CCheckStatus(port);
  28. ArrayBuild(cmdBuf,i2cAddr,0x02,0x00);
  29.   I2CWrite(port,0,cmdBuf);
  30.   status = I2CCheckStatus(port);
  31.   while (status > NO_ERR)
  32.     status = I2CCheckStatus(port);
  33. }
  34. byte COMPASS_ReadData(byte port, byte i2cAddr,TriAxisData &triData)
  35. {
  36.   byte message[];
  37.   byte buf[12];
  38.   int count;
  39.   byte nByteReady = 0;
  40. byte b;
  41.   SetSensorLowspeed(port);
  42.   ArrayBuild(message, i2cAddr, 0x03);
  43.   while (I2CStatus(port, nByteReady) ==  STAT_COMM_PENDING);
  44.   count = 6;
  45.   if(I2CBytes(port, message, count, buf)) {
  46.     triData.gX=buf[0]<<8;
  47.     triData.gX |= buf[1];
  48.     triData.gY=buf[2]<<8;
  49.     triData.gY |= buf[3];
  50.     triData.gZ=buf[4]<<8;
  51.     triData.gZ |= buf[5];
  52. }
  53. return b;
  54. }
  55. task main()
  56. {
  57.   string msg;
  58.   TriAxisData gData;
  59.   string ax, ay, az;
  60. COMPASS_Init(SensorPort,ADDR);
  61.   
  62.   while (true ) {
  63.   // read the values from the sensor.
  64.     COMPASS_ReadData(SensorPort, ADDR, gData);
  65.     msg = "X:            ";
  66.     ax = NumToStr(gData.gX);
  67.     msg = StrReplace(msg, 2, ax);
  68.     TextOut(0, LCD_LINE2, msg, false);
  69.     msg = "Y:            ";
  70.     ay = NumToStr(gData.gY);
  71.     msg = StrReplace(msg, 2, ay);
  72.     TextOut(0, LCD_LINE3, msg, false);
  73.     msg = "Z:            ";
  74.     az = NumToStr(gData.gZ);
  75.     msg = StrReplace(msg, 2, az);
  76.     TextOut(0, LCD_LINE4, msg, false);
  77.     Wait(50);
  78.   }
  79. }
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-22 08:14:20 | 显示全部楼层
nxt可以编程吗,如可以,介绍一下用nxt编程,谢谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-22 15:08:02 | 显示全部楼层
我看着那个触动传感器里面的电路板我郁闷啊我。。质量那么差的pcb  哎。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-23 09:28:22 | 显示全部楼层
不错
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-9-23 16:50:03 | 显示全部楼层
学习中
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-10-8 11:06:57 | 显示全部楼层
佩服了,原创。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2025-6-16 05:07 , Processed in 1.987101 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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