ኮድ ይፈልጉ

MPU-9250 አክስሌሮሜትር፣ ጋይሮስኮፕ እና ማግኔቶሜትር ኮድ

MPU-9250 አክስሌሮሜትር፣ ጋይሮስኮፕ እና ማግኔቶሜትር ኮድ

በዚህ መማሪያ ውስጥ፣ አክስሌሮሜትር፣ ጋይሮስኮፕ እና ማግኔቶሜትር በአንድ የታመቀ ሞጁል ውስጥ የሚያጣምረውን MPU-9250 ዳሳሽ እንዴት መጠቀም እንደሚቻል እንመረምራለን። በዚህ መመሪያ መጨረሻ ላይ፣ የዳሳሽ መረጃን ማንበብ እና ትርጉሙን በፕሮጀክቶችዎ ውስጥ መተርጎም ይችላሉ። ይህ ዳሳሽ በተለይ አቅጣጫ እና እንቅስቃሴ ክትትል ወሳኝ ለሆኑ እንደ ሮቦቲክስ እና ድሮኖች ላሉ መተግበሪያዎች ጠቃሚ ነው። ስለ ማዋቀር እና ኮድ ተጨማሪ ማብራሪያ ለማግኘት ቪዲዮውን መመልከት ይችላሉ (በቪዲዮ 00:20)።

ELE_MPU6050_208
ELE_MPU6050_208

ሃርድዌር ተብራርቷል

የMPU-9250 ሞጁል ሶስት ዳሳሾችን ያዋህዳል፡ አክስሌሮሜትር፣ ጋይሮስኮፕ እና ማግኔቶሜትር። አክስሌሮሜትሩ የፍጥነት ኃይሎችን ይለካል፣ ይህም ፍጥነትን እና አቅጣጫን ለመወሰን ያስችልዎታል። ጋይሮስኮፑ የማዕዘን ፍጥነትን ይሰጣል፣ ይህም በጊዜ ሂደት የአቅጣጫ ለውጥን ለመረዳት ይረዳል። በመጨረሻም፣ ማግኔቶሜትሩ እንደ ኮምፓስ ይሠራል፣ በአሰሳ ውስጥ የሚረዳ መግነጢሳዊ መስክ መረጃ ይሰጣል።

ይህ የዳሳሾች ጥምረት እንደ ድሮኖች ወይም ስማርትፎኖች ባሉ ትክክለኛ የእንቅስቃሴ ክትትል በሚያስፈልጋቸው መተግበሪያዎች ውስጥ በተለይ ጠቃሚ ነው። MPU-9250 በI2C ወይም SPI ይገናኛል፣ ይህም ለተለያዩ ማይክሮኮንትሮለር ማዋቀሮች ሁለገብ ያደርገዋል።

የዳታሺት ዝርዝሮች

አምራች InvenSense
የክፍል ቁጥር MPU-9250
የሎጂክ/IO ቮልቴጅ 1.8 ቪ (I/O)፣ 3.3 ቪ (አቅርቦት)
የአቅርቦት ቮልቴጅ 2.4 - 3.6 ቪ
የውጤት ጅረት (በአንድ ቻናል) 3.2 ሚኤ (መደበኛ አሠራር)
ከፍተኛ ጅረት (በአንድ ቻናል) 19.8 ሚኤ (ከፍተኛ)
የPWM ድግግሞሽ መመሪያ የለም
የግቤት ሎጂክ ገደቦች 0.3 * VDD (ዝቅተኛ)፣ 0.7 * VDD (ከፍተኛ)
የቮልቴጅ ጠብታ / RDS(on) / ሙሌት የለም
የሙቀት ገደቦች -40 እስከ 85 °C
ፓኬጅ QFN
ማስታወሻዎች / ልዩነቶች ውስጣዊ የቮልቴጅ ተቆጣጣሪ ያካትታል
  • ሞጁሉን ከመጉዳት ለመቆጠብ ትክክለኛ የቮልቴጅ አቅርቦት (2.4 - 3.6 ቪ) ያረጋግጡ።
  • በብሬክአውት ቦርድዎ ላይ ካልተካተቱ ለSDA እና SCL መስመሮች የፑል-አፕ ሬዚስተር ይጠቀሙ።
  • የI2C አድራሻን ያረጋግጡ (ነባሪ 0x68 ነው) እና ለአማራጭ አድራሻዎች የADO ፒንን በዚሁ መሰረት ያስተካክሉ።
  • የተሳሳቱ ንባቦችን ለመከላከል ግንኙነቶችን ለመረጋጋት ያረጋግጡ።
  • ለትክክለኛ መለኪያዎች ዳሳሾችን በመደበኛነት ይለኩ።

የሽቦ መገጣጠም መመሪያዎች

Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL

MPU-9250ን ከአርዱኖዎ ጋር ለማገናኘት፣ በMPU-9250 ላይ ያለውን የVCC ፒን በአርዱኖው ላይ ካለው የ5V ፒን ጋር በማገናኘት ይጀምሩ። ሞጁሉ ውስጣዊ ተቆጣጣሪ ስላለው፣ በ5V መስጠቱ ደህና ነው። በመቀጠል፣ የGND ፒንን በአርዱኖው ላይ ከመሬት (GND) ጋር ያገናኙ። ለውሂብ ግንኙነት፣ የSDA ፒንን በአርዱኖው ላይ ካለው A4 ፒን እና የSCL ፒንን ከA5 ፒን ጋር ያገናኙ። ይህ ውቅር ለብዙ የአርዱኖ ቦርዶች መደበኛ ነው።

የአርዱኖ ሜጋ የሚጠቀሙ ከሆነ፣ የSDA እና SCL ፒኖች በቅደም ተከተል በፒን 20 እና 21 ላይ ይገኛሉ። የግንኙነት ስህተቶችን ለማስወገድ ግንኙነቶቹ ደህንነታቸው የተጠበቀ መሆናቸውን ያረጋግጡ። የMPU-9250ን የI2C አድራሻ መቀየር ከፈለጉ፣ ወደ 0x69 ለማዘጋጀት የADO ፒንን ከ5V ጋር ያገናኙ። መገንጠሉ ወደ 0x68 ይመልሰዋል።

Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL

የኮድ ምሳሌዎች እና ጉዞ

በአርዱኖ ስኬች ውስጥ፣ የMPU9250 ቤተ-መጻሕፍትን በማካተት እና የዳሳሹን ምሳሌ በመፍጠር እንጀምራለን፦

#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);

ኮዱ ዳሳሹን ያስነሳል እና በsetup() ተግባር ውስጥ ግንኙነትን ይጀምራል፦

void setup() {
  Serial.begin(115200);
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    while(1) {}
  }
}

loop() ተግባር ውስጥ፣ የዳሳሽ መረጃን ያለማቋረጥ እናነባለን እና እናትማለን፦

void loop() {
  IMU.readSensor();
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  // More print statements for other axes
}

ይህ ክፍል የአክስሌሮሜትር፣ የጋይሮስኮፕ እና የማግኔቶሜትር እሴቶችን ያነባል፣ በተከታታይ መቆጣጠሪያ ላይ ያሳያቸዋል። ለተሟላ አተገባበር ከጽሑፉ በታች የተጫነውን ሙሉ ኮድ መፈተሽዎን ያረጋግጡ።

ማሳያ / ምን እንደሚጠበቅ

ኮዱን ሲያሂዱ፣ የዳሳሽ እሴቶች በተከታታይ መቆጣጠሪያ ላይ በቅጽበት ሲዘመኑ ማየት አለብዎት። ዳሳሹን ሲያንቀሳቅሱ የአክስሌሮሜትር እሴቶች ይለዋወጣሉ፣ የጋይሮስኮፕ እሴቶች ደግሞ የመዞሪያ መጠንን ያሳያሉ። ማግኔቶሜትሩ በሶስት ዘንጎች ላይ ያለውን የመግነጢሳዊ መስክ ጥንካሬ ይሰጥዎታል፣ ይህም አቅጣጫን ለመወሰን ሊያገለግል ይችላል። ተንሳፋፊ ግቤቶችን ይጠንቀቁ፣ ምክንያቱም ወደ ትክክለኛ ያልሆኑ ንባቦች ሊመሩ ይችላሉ (በቪዲዮ 12:30)።

ምዕራፎች

  • መግቢያ (00:00)
  • የሃርድዌር ማብራሪያ (01:30)
  • የሽቦ አገናኝ መመሪያዎች (04:00)
  • የኮድ ምሳሌዎች እና ማብራሪያ (06:00)
  • ማሳያ (10:00)

ምስሎች

ELE_MPU6050_208
ELE_MPU6050_208
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
126-Arduino code for an MPU-9250 accelerometer, gyroscope, and magnetometer
ቋንቋ: C++
/*
 * Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com

Copyright (c) 2017 Bolder Flight Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, 
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
 * Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch instruction video for this code: 
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5

S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/

#include "MPU9250.h"

// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;

void setup() {
  // Serial to display data
  Serial.begin(115200);
  while(!Serial) {}

  // Start communication with IMU 
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
}

void loop() {
  // Read the sensor
  IMU.readSensor();
  // Display the data
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  Serial.print("\t");
  Serial.print("AccelY: ");  
  Serial.print(IMU.getAccelY_mss(),6);
  Serial.print("\t");
  Serial.print("AccelZ: ");  
  Serial.println(IMU.getAccelZ_mss(),6);
  
  Serial.print("GyroX: ");
  Serial.print(IMU.getGyroX_rads(),6);
  Serial.print("\t");
  Serial.print("GyroY: ");  
  Serial.print(IMU.getGyroY_rads(),6);
  Serial.print("\t");
  Serial.print("GyroZ: ");  
  Serial.println(IMU.getGyroZ_rads(),6);

  Serial.print("MagX: ");  
  Serial.print(IMU.getMagX_uT(),6);
  Serial.print("\t");  
  Serial.print("MagY: ");
  Serial.print(IMU.getMagY_uT(),6);
  Serial.print("\t");
  Serial.print("MagZ: ");  
  Serial.println(IMU.getMagZ_uT(),6);
  
  Serial.print("Temperature in C: ");
  Serial.println(IMU.getTemperature_C(),6);
  Serial.println();
  delay(200);
}

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።