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

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

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

 

كيف يعمل مقياس التسارع؟

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

 

يعمل المستشعر على طاقة تتراوح بين 1.8 فولت و 3.6 فولت تيار مستمر (أفضل 3.3 فولت) ، ويستهلك عادةً 350 أمبير فقط من التيار. ومع ذلك ، فإن منظم 3.3 فولت الموجود على اللوحة يجعله خيارًا مثاليًا للتفاعل مع متحكمات 5 فولت مثل Arduino.

يكسر هذا اللوح اللطيف اللوح كل دبوس من ADXL335 إلى رأس 6-pin ، 0.1 ″ درجة. يتضمن ذلك 3 مخرجات تناظرية لقياسات المحاور X و Y و Z ، ودبوسين إمداد ودبوس اختبار ذاتي يسمح لك بالتحقق من أداء المستشعر في التطبيق النهائي.

النواتج التناظرية هي Ratiometric ، مما يعني أن ناتج قياس 0g يساوي اسميًا نصف جهد إمداد 3.3 فولت (1.65 فولت) ، -3 جرام عند 0 فولت و 3 جرام عند 3.3 فولت مع تحجيم كامل بينهما.

كيفية ربط ADXL335 مع اردوينو

التوصيلات سهلة للغاية. ابدأ بوضع مقياس التسارع على لوح التجارب. قم بتوصيل دبوس VCC بالدبوس 5V على 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;
}

 

إرسال تعليق

أحدث أقدم