久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

Arduino學(xué)習(xí)3-Arduino連接HMC5883L三軸電子羅盤傳感器

查看數(shù): 17206 | 評論數(shù): 10 | 收藏 2
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2016-4-14 02:52

正文摘要:

用途:測量地磁方向,測量物體靜止時候的方向,測量傳感器周圍磁力線的方向。注意,測量地磁時候容易受到周圍磁場影響, 主芯片HMC5883三軸磁阻傳感器特點(抄自網(wǎng)上): 1,數(shù)字量輸出:I2C數(shù)字量輸出接口,設(shè) ...

回復(fù)

ID:514567 發(fā)表于 2019-6-7 12:00
很厲害
ID:326549 發(fā)表于 2019-5-30 15:51
fatal error: ../Wire/Wire.h: No such file or directory #include "../Wire/Wir
請問這是怎么回事
ID:230088 發(fā)表于 2017-8-31 16:24
回復(fù)有黑幣么?
ID:1 發(fā)表于 2017-3-2 17:06

回復(fù)是沒有的 只能通過發(fā)布文件 管理員審核通過后 才會發(fā)放
ID:24730 發(fā)表于 2017-3-2 16:50
51黑有你更精彩
ID:165193 發(fā)表于 2017-2-18 00:07
回復(fù)有黑幣嗎
ID:148138 發(fā)表于 2016-11-15 21:32
5893也出來了
ID:114115 發(fā)表于 2016-4-14 02:55
焊接還是很簡單的,個人玩買個可調(diào)溫和恒溫的電烙鐵,最好60W的,升溫快,焊接前先將烙鐵頭附錫(其實一般新電烙鐵都需要先附錫,每次用完也要附錫防氧化),面板焊接點注意刷好助焊劑(可以用松香+酒精自己調(diào),酒精要純度高的工業(yè)酒精大概酒精和松香1:0.2就差不多了,然后刷到要焊接的引腳和PCB板上),最后直接焊錫絲點烙鐵頭刷引腳(不要擔(dān)心連線,先讓焊錫全部下到引腳上,最后拿烙鐵刷一邊,焊錫會自己焊接到點,最好讓板子稍微傾斜,自上而下刷,這樣多余的錫會流到最下邊,然后拿烙鐵點掉就好了),最后用酒精棉擦洗焊點(將多余助焊劑洗掉),檢查焊點是否有連接,如果不確定用鑷子刮一刮就好了。(烙鐵使用要快點快提,這樣錫會自己成非常漂亮的形狀,不要長時間點焊點)

PCB板是不會附著焊錫的,所以不用擔(dān)心焊不好,其實很簡單,關(guān)鍵烙鐵要好,個人用我覺得黃花907調(diào)溫恒溫烙鐵就好,淘寶上很便宜,反正我自己用的就很不錯。。。。

最后,烙鐵頭要多買幾個不同樣式的,以應(yīng)對不同焊點。。

------------------------

另,最近發(fā)現(xiàn)一個HMC5883的問題,一并記這兒:最近買了幾片HMC5883L模塊,結(jié)果被坑了,賣家沒說不能用在5V系統(tǒng),只說能5V供電,以為在MEGA2560上能用,結(jié)果讀數(shù)據(jù)有問題,一開始是讀出來不更新,每次復(fù)位更新一次數(shù)據(jù),后來發(fā)現(xiàn)上拉電阻不是裝的PCB上印的4.7K,裝的是10K,換成4.7K后,可以連續(xù)讀數(shù)據(jù),但讀一斷時間后就會死機(jī),以為程序有問題,查來查去,后來發(fā)現(xiàn)以前買的模塊能正常讀,仔細(xì)比較兩個模塊,發(fā)現(xiàn)新買的模塊沒有電平轉(zhuǎn)換電路,以HMC5883L的IIc的1.8V電平直接接5V系統(tǒng),不死才怪,所以5V系統(tǒng)買這個模塊一定要買GY-271型號,有兩個小6腳芯片的,一個是LDO,一個是雙MOS做電平轉(zhuǎn)換,只有一個LDO的模塊只能用在3.3V或1.8V系統(tǒng)。
ID:114115 發(fā)表于 2016-4-14 02:54
上傳一個HMC5883L庫文件,放在C:\Program Files (x86)\Arduino\libraries就可運行,ARDUINO 1.0.6版本的三軸傳感器。代碼詳見1樓。

    HMC5883L新頭文件: HMC5883L.rar (5.14 KB, 下載次數(shù): 41)
ID:114115 發(fā)表于 2016-4-14 02:54
最近實在太忙,就先單獨把我的八字校準(zhǔn)程序貼上來。
其實很簡單,我沒去管Z軸,如果想要更高的精度,需要加一個加速度傳感器,我剛好沒有。

我的整個校準(zhǔn)分2個子函數(shù):calibRead() 和 calibration()

參照官方HMC5883L的程序先把該定義的變量定義好。
  1.     HMC5883L digicomp;
  2.      
  3.     float X_max = 0.0;  //X軸最大讀數(shù)
  4.     float X_min = 0.0;  //X軸最小讀數(shù)
  5.      
  6.     float Y_max = 0.0;  //Y軸最大讀數(shù)
  7.     float Y_min = 0.0;  //Y軸最小讀數(shù)
  8.      
  9.     float X_offset = 0.0;  //X軸偏移
  10.     float Y_offset = 0.0;  //Y軸偏移
  11.      
  12.     void calibRead() //指南針讀數(shù)
  13.     {
  14.             MagnetometerScaled scaled2 = digicomp.ReadScaledAxis();
  15.      
  16.             if (  (abs(scaled2.XAxis) < 500) && (abs(scaled2.YAxis) < 500) && (abs(scaled2.ZAxis) < 500)) //這行對于我很重要,能過濾掉很多干擾,增加校準(zhǔn)的精度。
  17.             {  //下面幾行就是讀取到每個軸的最大值和最小值,然后算出相應(yīng)的偏移量
  18.                 if(scaled2.XAxis > X_max) {X_max = scaled2.XAxis;}
  19.                 if(scaled2.YAxis > Y_max) {Y_max = scaled2.YAxis;}
  20.      
  21.                 if(scaled2.XAxis < X_min) {X_min = scaled2.XAxis;}
  22.                 if(scaled2.YAxis < Y_min) {Y_min = scaled2.YAxis;}
  23.      
  24.                 X_offset = (X_max + X_min) / 2.0;
  25.                 Y_offset = (Y_max + Y_min) / 2.0;
  26.             }
  27.     }
  28.      
  29.     void calibration()
  30.     {
  31.             int i = 0;
  32.             digitalWrite(motor1EnPin, 0);  // 定義轉(zhuǎn)彎方向,對于我的小車來說是左轉(zhuǎn),逆時針方向
  33.             digitalWrite(motor2EnPin, 1);
  34.      
  35.             analogWrite(motor1, 80);  // 啟動馬達(dá)開始轉(zhuǎn)動
  36.             analogWrite(motor2, 80);
  37.      
  38.             while(i < 1000)  // 逆時針方向循環(huán)讀取XY軸每個方向的值,然后算出相應(yīng)的偏移量
  39.             {  calibRead();
  40.                 delay(10);
  41.                 i++;
  42.             }
  43.      
  44.             i = 0;
  45.             digitalWrite(motor1EnPin, 1);  // 右轉(zhuǎn)小車,順時針方向
  46.             digitalWrite(motor2EnPin, 0);
  47.      
  48.             while(i < 1000)  // 再順時針方向方向旋轉(zhuǎn)測算偏移量
  49.             {  calibRead();
  50.                 delay(10);
  51.                 i++;
  52.             }
  53.      
  54.             analogWrite(motor1, 0);  // 停止小車,校準(zhǔn)完成
  55.             analogWrite(motor2, 0);
  56.     }
  57.      
  58.     float readCompass()  //得到偏移了就可以讀數(shù)了
  59.     {
  60.             MagnetometerScaled scaled = digicomp.ReadScaledAxis();
  61.      
  62.             float heading = atan2(scaled.YAxis - Y_offset, scaled.XAxis - X_offset);  // 讀數(shù)的時候直接減掉偏移量就可以了
  63.      
  64.             //float declinationAngle = 36.36/1000.0;  [這幾行是考慮磁偏角的,除非真的是想
  65.             //heading = heading + declinationAngle;    找地理北極,不然對方向判斷用處不大]
  66.      
  67.             if(heading < 0)  heading += 2*PI;
  68.             if(heading > 2*PI)  heading -= 2*PI;
  69.      
  70.             float headingDegrees = heading * 180/M_PI;
  71.      
  72.             return headingDegrees;
  73.     }
復(fù)制代碼

嚴(yán)格來說這個傳感器讀出來的僅僅是三軸方向磁場強度而已,角度是算出來的。另外他對磁場感應(yīng)很靈敏,周圍有金屬就會有干擾,拿塊金屬在他周圍轉(zhuǎn)轉(zhuǎn)就能看到讀數(shù)很大的變化,所以校準(zhǔn)還是很有必要的。

手機(jī)的話因為畫8字能很快測得XY的偏移,所以方法就叫8字校準(zhǔn)。小車的話因為可以旋轉(zhuǎn),就沒必要真的去走8字,直接轉(zhuǎn)圈就可以了。這是我的理解。

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品在线免费看 | 夜夜摸天天操 | 毛片.com | 午夜小视频免费观看 | 国产综合久久 | 男女羞羞视频在线观看 | 在线成人av| wwww.xxxx免费| 亚洲成人在线免费 | 羞羞视频在线网站观看 | 精品国产31久久久久久 | 在线观看黄色大片 | 91久久北条麻妃一区二区三区 | 免费视频99| 91福利网址 | 欧美日韩在线免费观看 | 欧美精品久久久久 | 亚洲激情综合网 | 91xxx在线观看| 黄色国产视频 | 日本黄色的视频 | 成人在线观看网址 | 成人久久久久久久久 | av天天干 | 电影午夜精品一区二区三区 | 在线一区二区三区 | 亚洲国产精品一区二区三区 | 亚洲免费高清 | 亚洲国产精品久久久 | 久久精品久久精品久久精品 | 天天干夜夜操 | 亚洲精品乱码久久久久久9色 | 亚洲成人精品在线 | 久久综合国产 | 日本超碰 | 久久中文字幕视频 | 欧美日韩手机在线观看 | 国产91精品久久久久久久网曝门 | 欧美精品在线观看 | 色.com| 亚洲国产成人久久久 |