برمجة الجيروسكوب ومقياس التسارع

برمجة الجيروسكوب ومقياس التسارع

image001

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


تقديم

 

لا تخف فلن أرهقك وإياي بالمعادلات الرياضية والنظريات المملة. بل ما أود فعله هو تعليمك كيفة الاستعمال فقط، فإن تمكنت من استعمالهما بشكل جيد فيمكنك حينها دراستها بشكل معمق إن أردت...

 

إن تعلمك استعمال هذين المركبين الإليكترونيين إليكترونيا وبرمجيا سيسهل عليك الكثير من المشاريع بل وقد يلهمك بالتفكير في اختاراعات جديدة.

 

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

 

ما علينا إلا أن نريك كيف تستعملهما وما عليك إلا أن ترينا ما تفكر فيه!

 

 

image002

الجيروسكوب 

 

عندما تقلع الطائرة في السماء، يكون ذيلها متجها إلى الأرض ورأسها نحو السماء. بعد 15 دقيقة تقريبا يقوم ربان الطائرة بإعادتها إلى مستواها الأفقي تقريبا. وحيث أن الربان لا يرى مستوى الأرض حتى يوازي الطائرة به فكيف يعرف درجة زاوية الميلان بدقة إذن؟ 

لاشك أن الطائرة مجهزة بجهاز يقيس زاوية الميلان في الأبعاد الثلاثة. هذا الجهاز وبكل بساطة إنما هو الجيروسكوب.

 

نفس الشيء لو كنت تملك أحد الهواتف الذكية كالآيفون مثلا، فستجد أن بعض تطبيقاته تستجيب لتحريك الهاتف بزاوية محددة. أبسط مثال هو مسألة قلب الصورة حتى تراها أنت بشكل أفقي أو عمودي.

 

وبالتالي يمكنك الاستنتاج أن دور الجيروسكوب هو تحديد زاوية الميلان في معلم ثلاثي الأبعاد.

 image003

 image004

الجهاز بشكله الميكانيكي.

image005

 

 

 

 

 

أما إليكترونيا فله شكل مغاير تماما.


مقياس التسارع 

 

أحيانا نحتاج إلى قياس سرعة السيارة في الطريق. فنقول أن هذه السيارة تمشي بسرعة 10 كلم/الدقيقة مثلا. لكن لو كانت هذه السيارة تزيد من سرعتها بمقياس 5 كلم/الدقيقة خلال كل دقيقة. ففي خلال الدقيقة الأولى تكن سرعة السيارة هي 15 كلم/الدقيقة وخلال الدقيقة الثانية تصبح سرعتها هي 20 كلم/الدقيقة وهكذا... نقول إذن بأن تسارع السيارة هو 5 كلم/(الدقيقة × الدقيقة) وهو تسارع موجب.

 

أما إذا كانت السرعة تنقص بمقدار معين فسنقول بأنه تسارع سالب (يعني تآخر). وفي حالة كانت السرعة ثابتة طوال الوقت فسنقول بأن التسارع منعدم.

 

ما قلناه يتعلق بمحور واحد فقط، لكن ماذا عن التسارع في كل الاتجاهات؟

 

لا شك أنك تعرف المعلم الممنظم ثلاثي الأبعاد (x,y,z). أليس كذلك؟

 

في هذه الحالة باستعمال مقياس التسارع يمكننا قياس التسارع في محور الأفاصيل x، ومحور الأراتيب y وكذلك في المحور z.

image006


استعمالات

 

الهواتف الذكية

 

Galaxy Nexus 

و 

iPhone

image007

 image008

 

 

 

 

 

 

الدراجات والروبتات المتوازنة

 

"Segway"

image009

 

 

 

 

 

 

المروحيات

 image010

 

 

 

 

 

 

 

 

الغواصات

 image011

 

 

 

 

 

 

 

الطائرات

 image012


استعمال الجيروسكوب

 

ثلاثة أشياء

سنحتاج لمعرفة 3 قيم عن الجيروسكوب:

1.   أولا وقبل كل شيء، ستحتاج لمعرفة قيمة الجهد الكهربائي المخصصة للجيروسكوب (غالبا 3.3 فولط أو 5 فولط)

2.   ثانيا، عندما يكون الجيروسكوب ثابثا سيخرج لنا جهدا كهربائية محددا. هذا الجهد الكهربائي يعرف بالإسم (الجهد الكهربائي المنعدم أي zero voltage أو null voltage). لمعرفة هذه القيمة يجب أن تنظر إلى ملخص بيانات الجيروسكوب (أي datasheet). في مثال يومنا هذا، قيمة الجهد المنعدم هي 2.5 فولط.

3.   القيمة الأخرى التي سنحتاجها من datasheet هي الحساسية (اي sensitivity). صيغتها هي mV/deg/sec. في مثال يومنا هذا، قيمتها هي 7mV/deg/sec.

 

أما بالنسبة للميكروكنترولور، فطريقة معالجته للقيم الصادرة من الجيروسكوب قد تخلتف من ميكروكنترولور لآخر. بالنسبة لمثال يومنا هذا، سنعتمد على بطاقة Arduino.

بما أن الجيروسكوب سيزودنا بقيم كثيرة، فسنقوم بإيصاله بمربط تناظري للميكروكنترولرو إذن.

بطاقة Arduino مزودة بمحول يتكون من 10 أزواج (10bit ADC). يقوم هذا المحول بتمثيل الجهد الكهربائي (0-5 فولط) بقيمة محصورة بين 0 و 1023 تلقائيا.

 

عند برمجة الجيروسكوب، من الأحسن تحديد قيمة مبدئية تمثل الحد الأدنى الذي نسمح به للميلان في محور معين.

إذا قام الجيروسكوب بتزويدنا بقيمة أكبر من الحد الأدنى نقوم في هذه الحالة بالتعامل مع الوضعية حسب الصنع (أي لإرجاع الجهاز إلى هيئته الأولى كالطائرة مثلا إذا فقدت توازنها بسبب الريح).

 

برمجة

 /*  معرفة زاوية الانحناء بالنسبة لمحور واحد فقط

 * Analog Pin 0 إيصال الجيروسكوب بالمربط التناظري

 * eric barch / ericbarch.com :تأليف

 * ترجمة: السهلي محمد*

  */

 

int gyroPin = 0;                        // الجيروسكوب متصل بالمربط التناظري 0

float gyroVoltage = 5;              //5V التيار الذي يحتاجه الجيروسكوب هو

float gyroZeroVoltage = 2.5;   //2.5V قيمة التيار المنعدم

float gyroSensitivity = 0.007;  //7mV/deg/sec الحساسية

float rotationThreshold = 1;    //deg/sec الحد الأدنى بـ

float currentAngle = 0;            //لحساب الزاوية في الوضع الحالي

 

void setup(){

  Serial.begin (9600);

}

 

void loop(){

  //بعد قراءة قيمة الجيروسكوب نقوم بتحويلها من المجال 0-1023 إلى المجال 0-5 فولط

  float gyroRate = (analogRead(gyroPin) * gyroVoltage) / 1023; 

  //الفرق بين الوضع الحالي والقيمة في الحالة المنعدمة للجيروسكوب

  gyroRate -= gyroZeroVoltage;   

  gyroRate /= gyroSensitivity;  //نقسم على قيمة الحساسية

 

  //نتجاهل الوضع إذا كانت القيمة أكبر أو تساوي الحد الأدنى أو أصغر من قيمتها السالبة

  if (gyroRate >= rotationThreshold || gyroRate

    //(1000ms/10ms) نقسمها على 100 لأن هذه الدالة تنفذ خلال كل 10 ميليثانية

    gyroRate /= 100;

    currentAngle += gyroRate;

  }

 

  //لنحافظ على زاويتنا بين 0 و 359

  if (currentAngle < 0)          currentAngle += 360;

  elseif (currentAngle > 359)  currentAngle -= 360;

 

  Serial.println(currentAngle);

  delay(10); //تنفذ خلال كل 10 ميليثانية

}


استعمال مقياس التسارع

 

تقديم

توجد عدة مستشعرات اليكترونية لقياس التسارع. سنستعمل في هذا المثال مقياس التسارع Memsic 2125.

تجد خصائصه في الملف التالي: http://www.parallax.com/dl/docs/prod/acc/memsickit.pdf

 

مقياس التسارع Memsic 2125 قادر على قياس التسارع في محورين فقط (أي ليس في فضاء ثلاثي الأبعاد).

 

حملق في الصورة جانبه جيدا وستجد مثلثا مطبوعا على ظهر المستشعر. يساعدنا هذا المثلث على معرفة أسماء مرابط المستشعر وطريقة تركيبه.

يتكون المستشعر من 6 مرابط وهي كالتالي:

image013

image014

تركيب 

سنستعمل بطاقة أردوينو للتبيان فقط. ويمكنك استعمال أي ميكروكنترولور آخر بطبيعة الحال.

قم بإيصال المربط +5V والمربطين GND للمستشعر بمثيلاتهم في البطاقة أردوينو.

ثم صل المربط المنطقي 2 للبطاقة أردوينو بمربط المحور X للمستشعر،

والمربط المنطقي 3 بمربط المحور y للمستشعر. الصورة التالية توضح ما نقصده.

image015

عمليا ستكون النتيجة هكذا:

image016

في حالة استعمال ميكروكنترولور آخر، توضح لك الصورة التالية طريقة إيصال المستشعر بالميكروكنترولور الخاص ببطاقة Arduino

image017

 

برمجة

/*  Memsic2125 شيفرة لقراءة التسارع باستعمال مستشعر التسارع
 ( التي تساوي 1/1000 من ثقالة الأرض )milli-g's أولا يجب تحويل القيمة المقروءة من كل مربط إلى

   ثم نقوم بإظهار القيمتين على شاشة الحاسوب.
   
   :
الدارة الكهربائية
    * X المربط المنطقي 2 يوصل بمربط المحور
    * Y المربط المنطقي 3 يوصل بمربط المحور
    * +5V  بـ+5V
    * GND  بـGND
  
   http://www.arduino.cc/en/Tutorial/Memsic2125
   

  أنشئت هذه الشيفرة بتاريخ 6 نوفمبر 2008    

   David A. Mellis من طرف
   وتم تعديلها بتاريخ 30 غشت 2011

   Tom Igoe من طرف
   وتمت ترجمتها وتعديلها بتاريخ 22 مارس 2012

    من طرف محمد السهلي
   
   
هذه الشيفرة مجانية ومفتوحة للكل
 */

// أرقام المرابط المنطقية للبطاقة
const int xPin = 2;     // X توصل بالمحور
const int yPin = 3;     // Y توصل بالمحور
int pulseX, pulseY;  // لقراءة قيمتي التذبذبات لمربطي المستشعر 

int accelerationX, accelerationY;   // متغيران لحساب التسارع بالنسبة لكل محور

void setup() {     // التهيئة

  Serial.begin(9600);

  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);
}

void loop() {   
  
// قراءة القيمتين من مربطي المستشعر
  pulseX = pulseIn(xPin,HIGH);  
  pulseY = pulseIn(yPin,HIGH);
  
  
//تحويل الذبذبات إلى التسارع

  // 1000 milli-g's أو o ثقالة الأرض هي 1g 
  accelerationX = ((pulseX / 10) - 500) * 8;  // milli-g'sالتحويل باعتبار وحدة القياس هي

  accelerationY = ((pulseY / 10) - 500) * 8;   // milli-g'sالتحويل باعتبار وحدة القياس هي

  // قم بإظهار قيمة التسارع على الشاشة
  Serial.print(accelerationX);

  Serial.print("\t");
  Serial.print(accelerationY);
  Serial.println();

  delay(100);
}


تأليف 

محمد السهلي 


المراجع 

 

http://ar.wikipedia.org/wiki/%D8%AC%D9%8A%D8%B1%D9%88%D8%B3%D9%83%D9%88%D8%A8

http://ar.wikipedia.org/wiki/%D9%85%D9%82%D9%8A%D8%A7%D8%B3_%D8%A7%D9%84%D8%AA%D8%B3%D8%A7%D8%B1%D8%B9

http://en.wikipedia.org/wiki/Gyroscope

http://en.wikipedia.org/wiki/Accelerometer

http://arduino.cc/playground/Main/Gyro

http://www.arduino.cc/en/Tutorial/AccelerometerMemsic2125

http://arduino.cc/en/Tutorial/ADXL3xx

http://www.instructables.com/id/Accelerometer-Gyro-Tutorial/

http://www.hvwtech.com/products_view.asp?ProductID=542

http://www.parallax.com/tabid/768/ProductID/93/Default.aspx


التعليقات   

 
Eomax
+1 # Eomax 2015-07-03 22:32
شرح جميل وبسيط.
شكرا لك
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
 
 
# Guest 2015-06-04 21:13
قام المدير بحذف هذا التعليق
 
 
# Guest 2015-03-09 22:03
قام المدير بحذف هذا التعليق
 

أضف تعليق


كود امني
تحديث


Go to top