القائمة الرئيسية

الصفحات

كيف يعمل مقياس التسارع؟ ربط ADXL335 بالاردوينو


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

ما هو التسارع؟

حدد العالم الرائع إسحاق نيوتن في قانونه الثاني للحركة التسارع من خلال ربطه بالكتلة والقوة.
إذا كان لديك قوة معينة (على سبيل المثال، القوة في ساقك وأنت تركلها) وقمت بتطبيقها على كتلة (كرة قدم) ، فستجعل للكتلة تسارع (الكرة ستنطلق في الهواء) .
القوة = الكتلة x التسارع
التسارع = القوة / الكتلة
بمعنى آخر ، التسارع هو مقدار القوة التي نحتاجها لتحريك كل وحدة من كتلتها.

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

إذا قمنا بتحريك الصندوق بشكل مفاجئ إلى اليسار باستخدام تسارع 1g (أي 1غ من قوة الجاذبية العامة

 تعادل تسارع الجاذبية 9.8 م / ث 2) ، لا شك أن الكرة ستصل إلى الجدار X. إذا قمنا بقياس القوة التي تنطبق عليها الكرة الجدار X ، يمكننا الحصول على قيمة إخراج 1G على المحور X.

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

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

نظرة عامة على الأجهزة من التسارع ADXL335

في قلب الوحدة النمطية ، يوجد مقياس تسارع MEMS صغير ثلاثي المحاور منخفض الطاقة من الأجهزة التناظرية مع ضوضاء منخفضة للغاية - ADXL335. يحتوي الحساس على مجموعة استشعار كاملة تبلغ g 3 جم. يمكنه قياس التسارع الثابت بسبب الجاذبية في تطبيقات استشعار الميل ، وكذلك التسارع الديناميكي الناتج عن الحركة أو الصدمة أو الاهتزاز.
يعمل الحساس على طاقة ما بين 1.8V إلى 3.6V DC  ( القيمة 3.3V هي الأمثل) ، ويستهلك عادة 350µA فقط من التيار. ومع ذلك ، فإن منظم 3.3V على اللوحة الإلكترونية  هو الاختيار الأمثل للتفاعل مع ميكروكنترولر 5V مثل Arduino.

المخرجات التناظرية هي Ratiometric، وهذا يعني 0غ إخراج القياس يساوي اسميا إلى نصف الجهد العرض 3.3فولط  أي 1.65   3غ هو في 0فولط و 3غ هو في 3.3فولط مع التحجيم الكامل في ما بين ذلك.

فيما يلي المواصفات الكاملة لـ ADXL335 Accelerometer IC.
مواصفات ADXL335 Accelerometer IC 
Operating Voltage1.8V – 3.6V
Operating Current350μA (typical)
Sensing Range±3g (Full Scale)
Temperature Range−40 to +85°C
Sensing axis3 axis
Sensitivity270 to 330mV/g (Ratiometric)
Shock ResistanceUp to 10,000g
Dimension4mm x 4mm x 1.45mm

منافذ مقياس التسارع ADXL335 

قبل الغوص في الكود والمثال ، دعونا نلقي أولاً نظرة على المنافذ.
يوفر منفذ VCC الطاقة لمقياس التسارع الذي يمكن توصيله بـ 5V على Arduino.
يخرج منفذ X-Out الجهد التناظري المتناسب مع التسارع الذي تمارسه على المحور X.
يخرج منفذ Y-Out الجهد التناظري المتناسب مع التسارع الذي تمارسه على المحور Y.
ينتج منفذ Z-Out الجهد التناظري المتناسب مع التسارع الذي تمارسه على المحور Z.
GND منفذ متصل GND على اردوينو
يتحكم منفذ ST (الاختبار الذاتي) هي ميزة الاختبار الذاتي. سنناقش هذه الميزة بالتفصيل في النهاية.


ربط ADXL335 بالأردوينو

الآن بعد أن أصبح لدينا فهم كامل لكيفية عمل مقياس التسارع ADXL335 ، يمكننا أن نبدأ في ربطه معArduino .
التوصيل سهل جدا. ابدأ بوضع مقياس التسارع على اللوح الخاص بك. قم بتوصيل منفذ VCC إلى منفذ  5فولط في Arduino وربط منفذ GND إلى منفذ الأرضي على Arduino. قم أيضًا بتوصيل X و Y و Z بالمنافذ التناظرية A0 و A1 و A2 على Arduino.
للحصول على نتائج دقيقة ، نحتاج إلى تغيير جهد المرجع التمثيلي (AREF) لاردوينو. يمكن القيام بذلك عن طريق توصيل منفذ 3.3فولط على Arduino إلى منفذ AREF.عندما تنتهي ، يجب أن يكون لديك شيء يشبه الرسم التوضيحي الموضح أدناه.
والآن بعد أن قمنا بتوصيل مقياس التسارع الخاص بنا ، فقد حان الوقت لكتابة بعض الأكواد واختبارها.

const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;

void setup() 
{
 analogReference(EXTERNAL);
 Serial.begin(9600);
}

void loop() 
{
 //Read raw values
 int xRaw = ReadAxis(xInput);
 int yRaw = ReadAxis(yInput);
 int zRaw = ReadAxis(zInput);

 // Convert raw values to 'milli-Gs"
 long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
 long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
 long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

 // re-scale to fractional Gs
 float xAccel = xScaled / 1000.0;
 float yAccel = yScaled / 1000.0;
 float zAccel = zScaled / 1000.0;

 Serial.print("X, Y, Z  :: ");
 Serial.print(xRaw);
 Serial.print(", ");
 Serial.print(yRaw);
 Serial.print(", ");
 Serial.print(zRaw);
 Serial.print(" :: ");
 Serial.print(xAccel,0);
 Serial.print("G, ");
 Serial.print(yAccel,0);
 Serial.print("G, ");
 Serial.print(zAccel,0);
 Serial.println("G");

 delay(200);
}

// Take samples and return the average
int ReadAxis(int axisPin)
{
 long reading = 0;
 analogRead(axisPin);
 delay(1);
 for (int i = 0; i < sampleSize; i++)
 {
 reading += analogRead(axisPin);
 }
 return reading/sampleSize;
}
يبدأ الكود بإعلان منافذ الإدخال التماثلية من Arduino التي تتصل بها منافذ إخراج الحساس X و Y و Z.
بعد ذلك ، نحدد الحد الأدنى والحد الأقصى للقيم التي يقدمها Arduino. نظرًا لأن لوحة Arduino تحتوي على محول رقمي من 10 بتات ، فسيتم تعيين الفولتية الخاصة بإخراج المستشعر بين 0 و 3.3 فولت إلى قيم صحيحة بين 0 و 1023.
 لهذا السبب تم ضبط RawMin على 0 وتعيين RawMax على 1023.

يخبر متغير sampleSize أردوينو بأخذ 10 عينات من كل تحويل للحصول على نتائج أكثر دقة.
const int xInput = A0;
const int yInput = A1;
const int zInput = A2;

// initialize minimum and maximum Raw Ranges for each axis
int RawMin = 0;
int RawMax = 1023;

// Take multiple samples to reduce noise
const int sampleSize = 10;
في دالة setup يجب علينا تعيين المرجع التناظرية إلى EXTERNAL ، حيث قمنا بتوصيل 3.3V بمنفذ AREF على Arduino. يتم ذلك عن طريق استدعاء analogReference (EXTERNAL ).يمكنك قراءة المزيد عن الدالة على موقع Arduino الرسمي. باستثناء هذا ، نهيئ الاتصالات التسلسلية مع الكمبيوتر.

تحذير

إذا فشلت في استدعاء analogReference (EXTERNAL) ، فستقوم باختصار الجهد المرجعي النشط (تم إنشاؤه داخليًا) ومنفذ AREF معا مما قد يؤدي إلى إتلاف Arduino.

analogReference(EXTERNAL);
Serial.begin(9600);

تعليقات