خلال هذا المشروع، سنتعلم كيفية استخدام عنصر الـ piezo مع الاردوينو لإستشعار الإهتزازات.
المكونات المطلوبة
Piezo Element
يستخدم عنصر البيزو للكشف عن الأصوات. يمتلك هذا العنصر مواد لها القدرة على توليد فرق جهد كهربائي عندما تتعرض لإجهاد ميكانيكي مثل الطرق عليه أو تعرضه للإهتزاز. فهو بعمل بشكل معاكس لفكرة عمل الـ Buzzer الذي يتكون من piezo crystal ويصدر النغمات عند تعرضه إلى جهد كهربائي.
توصيل الدارة
قم بتوصيل الدارة كما هو مبين بالشكل التالي :
يولد عنصر الـ Piezo اشارة تناظرية (analog) ، اي يتم توصيله على احد منافذ الاردوينو التناظرية من A0 إلى A5 ، والطرف الأخر يتم توصيله إلى الـ GND.
الطرف | التوصيل |
1 | A0 |
2 | Ground |
سنقوم بكتابه برنامج بحيث يقوم الـ LED بعمل فلاش عند تعرض عنصر الـ piezo للإهتزاز. طالما مصدر الإهتزاز موجود يظل الفلاش يعمل حتى يتوقف الإهتزاز.
الكود البرمجي
#define ledPin 13 #define knockSensor A0 int threshold = 100; int sensorReading = 0; int ledState = LOW; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { sensorReading = analogRead(knockSensor); if (sensorReading >= threshold) { ledState = !ledState; digitalWrite(ledPin, ledState); Serial.println("Knock!"); } delay(500); }
شرح الكود :
في البداية، نقوم بتعريف متغيرات لمنافذ الاردوينو التي تم استخدامها في المشروع. وتعريف متغيرات اخرى لإستخدامها في البرمجة. سيتم استخدام متغير threshold لحفظ القيمة التي تستخدم للدلاله على حدوث اهتزاز عند وصول قراءة عنصر البيزو إلى هذه القيمة. ومتغير sensorReading لحفظ قيمة قراءة العنصر. والمتغير ledState لحفظ حالة الـ LED .
#define ledPin 13 #define knockSensor A0 int threshold = 100; int sensorReading = 0; int ledState = LOW;
في الدالة ()setup، نقوم بضبط الـ LED كمخرج، وتشغيل الشاشة التسلسلية Serial Monitor .
void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); }
في الدالة ()loop ، نقوم بقراءة قيمة عنصر البيزو ومقارنتها بالقيمة المحفوظة داخل المتغير threshold. عندما تكون قيمة العنصر اكبر، اي ان العنصر قد اهتز، نقوم بعمل فلاش على الـ LED وكتابة “knock!” على الشاشة التسلسلية.
void loop() { sensorReading = analogRead(knockSensor); if (sensorReading >= threshold) { ledState = !ledState; digitalWrite(ledPin, ledState); Serial.println("Knock!"); } delay(500); }
ملاحظة
تحدث ضوضاء في البيئة المحيطة نتيجة لترددات الراديو، فبدون استخدام المتغير threshold سيعمل الفلاش لأن هذه الضوضاء يقوم الأردوينو بقراءتها على انها جهود صغيرة. فعند إستخدام المتغير بقيمة اكبر من قيمة الضوضاء الموجودة يمكن اهمال تأثيرها.