تقديم
يكمن التحدي هنا فى جعل الكاميرا تتوقف فورا بعد التصوير، حيث عادة ما تظل الكاميرا تعمل بعد توقف الحساس لمدة خمس ثوان. لذلك، سأقوم بالبرمجة لجعل الكاميرا تلتقط صورتين فقط كل مرة يعمل فيها الحساس. وبالطبع سأترك الكاميرا على وضع الإلتقاط الذاتي. |
الأجزاء الرئيسية
العربية الإنجليزية الفرنسية |
الكمية |
القيمة أو الصيغة |
مقاومة Resistor Resistance |
1 |
220 أوم |
1 |
10 كيلوأوم |
|
حساس الحركة PIR - Pyroelectric Infrared Sensor |
1 |
مستقبل الأشعة تحت الحمراء |
صمام باعث للأشعة تحت الحمراء Infrared Emitting Diode |
1 |
|
لوحة أردوينو Arduino |
1 |
Deumilanove-w/ATMEGA328 |
لوحة التجريب Breadboard / Prototyping board |
1 |
لوحة توصيل مكونات كهربائية |
جسور وموصلات أسلاك Jumper/ Connector Wires |
|
|
مصدر تيار 9 فولط |
1 |
بإمكانك إستخدام وصلة USB للأردوينو |
الدائرة الكهربائية
صل المقاومة 10 كـيلوأوم بين الحساس والمربط رقم 4 لبطاقة أردوينو. بالنسبة للصمام الضوئي فإن له مقاومة 220 أوم بينه وبين المربط الرقمي 9 لبطاقة أردوينو. ثم صل الصمام باعث الأشعة تحت الحمراء بالدخل رقم 13 والأرضي كما بالصورة. |
البرمجة
قم بنقله إلى البرنامج كما هو. إلا إذا أردت عمل تعديلات فيه طبعا. |
/****************************************************************** هذه الشيفرة البـرمجية من أجل استعمال حساس الحركة للتحكم بحركة الكاميرا والصمام باعث الأشعة تحت الحمراء عندما بتم تحديد متغيرات حرارية في المنطقة. ****************************/
int currentState = 0; // سيستعمل هذا المتغير من أجل العد int pinPIR = 4; // PIR المربط الرقمي 4 من أجل المركب int pinLED = 9; // LEDالمربط الرقمي 9 من أجل المركب int pinIRLED = 13; //الرقمي 13 من أجل باعث الأشعة تحت الحمراء
void setup() { pinMode(pinIRLED, OUTPUT); // نجعل هذا المربط مخرجا pinMode(pinLED, OUTPUT); // نجعل هذا المربط مخرجا pinMode(pinPIR, INPUT); // نجعل هذا المربط مدخلا }
// تهييئ نبضة إشارة الأشعة تحت الحمراء void pulseON(int pulseTime) { unsigned long endPulse = micros() + pulseTime; // ننشئ بضعة ميكروثانيات من أجل النبضة while( micros() < endPulse) { digitalWrite(pinIRLED, HIGH); // تشغيل حساس الحركة delayMicroseconds(13); // 38Khz (26.32×10-6s) نصف الدورة للتردد digitalWrite(pinIRLED, LOW); // إيقاف حساس الحركة delayMicroseconds(13); // تأخير زمني للنصف الثاني من الدورة من أجل توليد التذبذب المطلوب } }
void pulseOFF(unsigned long startDelay) { unsigned long endDelay = micros() + startDelay; // ننشئ بضعة ميكروثانيات من أجل التأخير الزمني while(micros() < endDelay); }
void takePicture() { for (int i=0; i < 2; i++) { pulseON(2000); // نبضة لـ 2000 ميكروثانية pulseOFF(27850); // إيقاف النبضة لمدة 27850 ميكروثانية pulseON(390); // وهكذا pulseOFF(1580); pulseON(410); pulseOFF(3580); pulseON(400); pulseOFF(63200); } // تكرار هذه الأوامر مرتين }
void loop() {
if ((digitalRead(pinPIR) == LOW) && (currentState <= 2)) // العد من أجل الحد من أخذ الصور { takePicture(); // إلتقاط الصورة digitalWrite(pinLED, HIGH); // تشغيل الصمام الضوئي } else { digitalWrite(pinLED, LOW); currentState = 0; //إعادة تهيئة العد من جديد }
currentState++; // تأخير زمني لمدة ثانيتين – ثانيتين بين إلتقاط الصور إذا كان حساس الحركة نشطا لمدة أكبر من ثانيتين delay(2000); } |
الحقوق الفـكرية
تم نشر هذا العمل تحت ترخيص: |
تأليف
تأليف: Lucky Larry
ترجمة بتصرف: عبد الله سعد عبد الستار فراج (الجيزة – مصر)
{jumi [*3]}
المراجع
http://luckylarry.co.uk/arduino-projects/arduino-motion-triggered-camera/
التعليقات