Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
12
返回列表 發新帖
樓主: 幸福羔羊
打印 上一主題 下一主題

用ARDUINO計算IDG500 GYRO角度

[複製鏈接]
3#
發表於 2011-10-8 21:05:08 | 只看該作者
回復 2# 幸福羔羊
你先試試下面的程式是否可行?

    / -----------------------------------------
// 範例程式:兩軸陀螺儀取值(IDG500),包含 X、X4.5、Y、Y4.5、VREF 共五支腳位的電壓值
// -----------------------------------------
// 使用說明:本程式主要將感測器所讀出之類比電壓轉換為數位資料後顯示於終端機中。
// -----------------------------------------
//腳位接法:IDG500   <----->  Arduino
//     VIN      <----->  5V
//     GND      <----->  GND
//                       AREF  <----->  3V3
//     XOUT     <----->  Analog Pin 0
//     X4.5OUT  <----->  Analog Pin 1
//     YOUT     <----->  Analog Pin 2
//     Y4.5OUT  <----->  Analog Pin 3
//     VREF     <----->  Analog Pin 4
// -----------------------------------------
//
// 變數設定
unsigned char Xinput   = 0;                     // X 軸的類比電壓輸入腳位
unsigned char X45input = 1;                     // Y 軸的類比電壓輸入腳位
unsigned char Yinput   = 2;                     // Z 軸的類比電壓輸入腳位
unsigned char Y45input = 3;                     // X 軸的類比電壓輸入腳位
unsigned char VREF     = 4;                     // Y 軸的類比電壓輸入腳位
int Xread,X45read,Yread,Y45read,VREFread;
void setup() {
    Serial.begin(9600);                         // 串列傳輸的鮑率設定
    analogReference(EXTERNAL);                  // 設定外部參考電壓
}
void loop() {
//
  Xread    = analogRead(Xinput);                // 將 X    的輸入電壓存到所設定的變數
  X45read  = analogRead(X45input);              // 將 X45  的輸入電壓存到所設定的變數
  Yread    = analogRead(Yinput);                // 將 Y    的輸入電壓存到所設定的變數
  Y45read  = analogRead(Y45input);              // 將 Y45  的輸入電壓存到所設定的變數
  VREFread = analogRead(VREF);                  // 將 VREF 的輸入電壓存到所設定的變數
//
// 將計算結果顯示到終端機
  Serial.print("X = ");      Serial.print(Xread);     Serial.print(9,BYTE);
  Serial.print(" X45 = ");   Serial.print(X45read);   Serial.print(9,BYTE);
  Serial.print(" Y = ");     Serial.print(Yread);     Serial.print(9,BYTE);
  Serial.print(" Y45 = ");   Serial.print(Y45read);   Serial.print(9,BYTE);
  Serial.print(" Vref = ");  Serial.print(VREFread);  Serial.println();
  delay(500);                                   // 延遲 0.5 秒
}
2#
 樓主| 發表於 2011-10-8 13:26:01 | 只看該作者
各位大大好,昨天到arduino的網站找到一份gyro的程式,我以他的方式修改成我可以用的之後發現度數轉90度卻只有20度可以請大大幫我看一下嗎...
int X45input = A0;                  
int VREFinput= A1;                  
float gyroV = 5;
float gyroZ = 1.35;
float gyroS =0.0091;
float rotationThreshold = 0.6;
float angle = 0;
void setup() {
    Serial.begin(9600);                     
    delay(20);             //等待GYRO準備好 20ms
}
void loop() {
    float Vref = (1.35*1023)/analogRead(VREFinput);
    float gyroRate = (analogRead(X45input) * Vref) /1023;
    gyroRate -=gyroZ;
    gyroRate /= gyroS;
    if(gyroRate >= rotationThreshold || gyroRate <= -rotationThreshold)
    {
      gyroRate /=50;
      angle += gyroRate;
    }
    Serial.print(" ");  Serial.print(angle);  Serial.println();
    delay(20);
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-3 00:08 , Processed in 0.193620 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表