ربط حساس التسارع أو التوازن مع الاردوينو اكتب تعليقُا

 تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

مقدمـــــــة عن المشروع

مرحبا بالجميع !!!

اليوم نتحدث عن حساس التسارع أو المعروف بأسم حساس التوازن MPU-6050 والذي بواسطته يمكن تحقيق توازن الطائرات وخاصة التي من دون طيار أو الطائرات السيرة , كما يمكن أستخدامه في مجالات الذكاء الأصطناعي ولعله أبرز أستخدام له فيها هي الروبوتات أو ما يعرف بالانسان الالي .

الحساس يمكن من قياس الزوايا علي المحاور الثلاث , بجانب قياسه للدوران حول أي محور .

بعد ربط الحساس وتحميل الكود على الاردوينو , قم بتحريك الحساس حركة منتظمة أو غير منتظمة وأفتح شاشة السيريل من داخل البيئة التطويرية للاردوينو ستلاحظ قيم المحاور الثلاث وهي تتغير وفقا لحركة الحساس .

متطلبات المشروع

  • Arduino Uno
  • Hook Up Wires
  • breadboard‬‬ Board‬‬
  • GY-521(MPU-6050) sensor

طريقة العمل والتوصيل

FB6J5RFIPJTLMC7.LARGE

يتعين علينا توصيل MPU-6050 بأردوينو UNO كما هو موضح في الصورة أعلاه . وبالتالي طريقة التوصيل كالتالي :

  • VCC to 5V(MPU-6050 works with 3.3V but GY-521 increases it to 5V.),
  • GND to GND,
  • SCL to A5,
  • SDA to A4,
  • ADO to GND,
  • INT to digital pin 2.
تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

الكـــــــــود البرمجي

لتحميل الكود البرمجي اضغط هنا
//Measurement of Angle with MPU-6050(GY-521)

#include<Wire.h>

const int MPU_addr=0x68; int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

int minVal=265; int maxVal=402;

double x; double y; double z;

void setup(){ Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); int xAng = map(AcX,minVal,maxVal,-90,90); int yAng = map(AcY,minVal,maxVal,-90,90); int zAng = map(AcZ,minVal,maxVal,-90,90);

x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI);

Serial.print("AngleX= "); Serial.println(x);

Serial.print("AngleY= "); Serial.println(y);

Serial.print("AngleZ= "); Serial.println(z); Serial.println("-----------------------------------------"); delay(400); }

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *