Web
	Analytics
الباب الذكي والطرقة السرية

الباب الذكي والطرقة السرية

image001

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


تقديم

 

بينما كنت أعمل على مشروع آخر مررت على مقال يتحدث عن برمجة مستشعر الاهتزاز أو الطقطقة (Piezo). من الجميل أن تبرمج  المستشعر من أجل تحديد طقطقة واحدة على الطاولة أو الباب مثلا. لكن ماذا عن استشعار عدد محدد من الطقطقات على الباب؟ أعني طرقة سرية؟ وإذا استطعنا أن نبرمجه للتعرف على الطرقة السرية، فكيف يمكن أن نجعل الجهاز يفتح الباب حينها؟  وبأي مركبات اليكترونية يتم ذلك؟

بكل بساطة سنحتاج إلى بطاقة Arduino ومحرك كهربائي ومستشعر الاهتزاز وبعض الأنابيب البلاستيكية.... 

 

ملاحظة مهمة: نعتبر في هذا المقال المصطلحات التالي:

  • طقطقة: ضربة واحدة على الباب
  • طرقة: مجموعة من الطقطقات (من واحدة إلى ما لانهاية)

 


استعراض للجهاز

 

يمكنك أن تشاهد المقطع التالي لتفهم آلية هذا الجهاز البسيط: 

 

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

image002

 

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

 


تنبيه

                                                           

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

 

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

 


الأجزاء الرئيسية

 

 

بطاقة Arduino

مستشعر الاهتزاز (الطقطقةPiezo

محرك كهربائي (5 فولط) (يمكنك أن تستبدله بمحرك سبرفو سيكون أحسن)

أسلاك كهربائية

بطارية 9 فولط

أنابيب بلاستيكية

زر كهربائي

ترنزستور NPN(نوع P2N2222A أو ما شابه)

 

صمام ثنائي ضوئي أحمر (LED)

صمام ثنائي ضوئي أخضر

صمام ثنائي عادي (1N4001 أو ما شابه)

 

مقاومة كهربائية 2.2 كيلوأوم

مقاومة كهربائية 10 كيلوأوم

مقاومة كهربائية 1000 كيلوأوم

مقاومتين كهربائيتين 560 أوم

 

هذه الأجزاء إنما هي فقط لهذا المشروع... يمكنك أن أجزاء مختلفة شرط أن تكون عارفا ما تفعل.... 

 


برمجة

 

أولا وقبل كل شيء، قم بتحميل هذا الملف الذي يحمل شيفرة هذا الجهاز.

صل بطاقة Arduino بالحاسوب

افتح برنامج Arduino ثم نفذ الشيفرة وحولها إلى الميكروكنترولور.

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

 

 

/ شيفرة الطرقة السرية   

   Steve Hoefer  من طرف

   http://grathio.com الموقع 

   0.1.10.20.10 الإصدار

   Licensed under Creative Commons Attribution-Noncommercial-Share Alike 3.0

   http://creativecommons.org/licenses/by-nc-sa/3.0/us/

   (باختصار: افعل بالشيفرة ما تريد، فقط قم بإضافة هذا السطر وما فوقه من سطور، لا تبعه أو تستعمله في أي شيء دون الاتصال بي )      

   Analog Pin 0: Piezo المستشعر

   Digital Pin 2: الزر الكهربائي

   Digital Pin 3: المحرك الكهربائي

   Digital Pin 4: الصمام الأحمر

   Digital Pin 5: الصمام الأخضر

 */

//................................................................................................................

// تعريف المرابط

const int knockSensor = 0;           // مربط مستشعر الاهتزاز

const int programSwitch = 2;

const int lockMotor = 3;                 // مربط المحرك الكهربائي

const int redLED = 4;                     // مربط الصمام الاحمر

const int greenLED = 5;                // مربط الصمام الأخضر

 

// تعريف الثوابت

//من أجل التحكم بخصائص الجهاز

const int threshold = 3;              // أصغر إشارة من المستشعر لحفظ الطرقة

const int rejectValue = 25;        // إذا مر هذا الوقت على طقطقة واحدة فلن يتم فتح الباب

const int averageRejectValue = 15; //متوسط الوقت للطقطقات. إذا تم تجاوزه لن ينفتح الباب

 /*يستعد الجهاز لاستقبال طرقة أخرى بعد مرور 150 جزء من الثانية على الطرقة السابقة*/

const int knockFadeTime = 150;   

const int lockTurnTime = 650;      // عدد أجزاء الثانية المتطلبة لجعل المحرك يقوم بنصف دورة

const int maximumKnocks = 20;       // العدد الأقصى للطقطقات المسموح بها

// بعد انتهاء هذه المدة الزمنية نستنج أن عدد الطقطقات قد استكمل

const int knockComplete = 1200;    

 

 

// تعريف المتغيرات

// الطرقة الافتراضية

int secretCode[maximumKnocks] = {50, 25, 25, 50, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

 //تسجل الطرقة الجديدة في هذا الجدول مع الزمن الذي يفصل بين طقطقاتها

int knockReadings[maximumKnocks]

int knockSensorValue = 0;           // القيمة المقروءة من المستشعر

 /* إذا تم الضغط على الرز نضع "صح" في هذا المتغير وإلا فستكون القيمة هي "خطأ"ه*/

int programButtonPressed = false

 

//................................................................................................................

void setup()

{

  pinMode(lockMotor, OUTPUT);

  pinMode(redLED, OUTPUT);

  pinMode(greenLED, OUTPUT);

  pinMode(programSwitch, INPUT);

 

  Serial.begin(9600);                           // سرعة التحويل لتهيئة البطاقة البرمجية

  Serial.println("Program start.")

  digitalWrite(greenLED, HIGH);        // نقوم باشعال الصمام اﻷخضر للإشارة إلى أن الجهاز قد بدأ بالعمل

}

 

//................................................................................................................

void loop()

{

  knockSensorValue = analogRead(knockSensor);  // التنصت لأي طقطقة على الباب

 

  if (digitalRead(programSwitch)==HIGH) // هل تم الضغط على الزر الكهربائي؟

  {

    programButtonPressed = true;          // نعم، وبالتالي نضع "صح" في المتغير

    digitalWrite(redLED, HIGH);              // نشعل ضوء الصمام الاحمر

  }

  else

 {

    programButtonPressed = false;

    digitalWrite(redLED, LOW);

  }

 

  if (knockSensorValue >=threshold)  listenToSecretKnock();

}

 

//................................................................................................................

//تسجل هذه الدالة زمن الطقطقات على الباب

void listenToSecretKnock()

{

  Serial.println("knock starting");  // جملة للإعلان عن عملية تسجيل الطرقة السرية

 

  int i = 0;

  // تهيئة جدول الطقطقات

  for (i=0; i < maximumKnocks; i++)  knockReadings[i] = 0; 

 

  int currentKnockNumber = 0;                     // مؤشر لخانات الجدول

  int startTime = millis();                                 // تسجيل زمن البداية

  int now = millis();

 

  digitalWrite(greenLED, LOW);                  //نشعل ضوء الصمام الاخضر كإشارة للطرقة

  if (programButtonPressed==true)            // والضوء الاحمر كإشارة لتسجيل طرقة جديدة

                 digitalWrite(redLED, LOW);             

 

  delay(knockFadeTime);                             // ننتظر لبعض الوقت حتى نستعد لتسجيل التالية

 

  digitalWrite(greenLED, HIGH)

  if (programButtonPressed==true)     digitalWrite(redLED, HIGH);                       

 

 do

 {

    //ننصت للطقطقة التالية أو يتم الانتظار حتى ينفذ الوقت المسموح به

    knockSensorValue = analogRead(knockSensor);

    if (knockSensorValue >=threshold)                   //لنسجل الطقطقة

    {

      //نسجل الزمن الفاصل بينها وبين سابقتها

      Serial.println("knock.");

      now=millis();

      knockReadings[currentKnockNumber] = now - startTime;

      currentKnockNumber++;                             //تزداد قيمة المؤشر استعدادا للطقطقة التالية

      startTime=now;                                              // إعادة تهيئة زمن البداية من أجل الطقطقة التالية

      digitalWrite(greenLED, LOW)

      // والضوء الأحمر أيضا إذا كنا ما نزال نريد تسجيل طقطقة أخرى

      if (programButtonPressed==true)  digitalWrite(redLED, LOW);       

 

      delay(knockFadeTime);                              // مرة أخرى ننتظر لبعض الوقت استعدادا للتالي

      digitalWrite(greenLED, HIGH);

      if (programButtonPressed==true)   digitalWrite(redLED, HIGH);                        

    }

 

    now=millis();   

 

    //هل تجاوزنا الوقت المسموح به للانتظار أم تجاوزنا عدد الطقطقات المسموح به

   } while ((now-startTime < knockComplete) && (currentKnockNumber < maximumKnocks));

 

  // تم تسجيل الطرقة، لنرى ما الذي يمكن العمل بها

  if (programButtonPressed==false)            //التاكد من موافقة الطرقة مع الطرقة السرية

  {

    if (validateKnock() == true) triggerDoorUnlock();

    else

    {

      Serial.println("Secret knock failed.");

      digitalWrite(greenLED, LOW);         

      // لم نفتح وبالتالي نظهر وميضا أحمر كإشارة لذلك

      for (i=0;i<4;i++) {  digitalWrite(redLED, HIGH);   delay(100);

                                  digitalWrite(redLED, LOW);   delay(100);  }

      digitalWrite(greenLED, HIGH);

    }

   }

  else  // تسجيل طرقة سرية جديدة

  {

    validateKnock();

    Serial.println("New lock stored.");

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

    digitalWrite(redLED, LOW);

    digitalWrite(greenLED, HIGH);

    for (i=0;i<3;i++)

    {

      delay(100);  digitalWrite(redLED, HIGH);  digitalWrite(greenLED, LOW); 

      delay(100);  digitalWrite(redLED, LOW);  digitalWrite(greenLED, HIGH);     

    }

  }

} 

//................................................................................................................

// التحكم بالمحرك الكهربائي من أجل فتح الباب

void triggerDoorUnlock()

{

  Serial.println("Door unlocked!");

  int i=0; 

  // تدوير المحرك قليلا

  digitalWrite(lockMotor, HIGH);

  digitalWrite(greenLED, HIGH);

  delay (lockTurnTime);                         // ننتظر لبعض الوقت

  digitalWrite(lockMotor, LOW);            // ثم نوقف المحرك

 

  // وميض أخضر كإشارة لهذه العملية

  for (i=0; i < 5; i++)  { digitalWrite(greenLED, LOW);  delay(100);

                                  digitalWrite(greenLED, HIGH); delay(100)}  

}

 

//................................................................................................................

// للتأكد من موافقة الطرقة المسجلة بالطرقة السرية

boolean validateKnock()

{

  int i=0; 

  // أولا وقبل كل شيء، هل عدد الطقطقات صحيح؟

  int currentKnockCount = 0;

  int secretKnockCount = 0;

  int maxKnockInterval = 0;              

 

  for (i=0;i<maximumKnocks;i++)

 {

    if (knockReadings[i] > 0) currentKnockCount++;

    if (secretCode[i] > 0){                     //todo: precalculate this.

      secretKnockCount++;

    } 

    // للحصول على أقصى قيمة

    if (knockReadings[i] > maxKnockInterval) { maxKnockInterval = knockReadings[i]; }

  }

 

  // هل نريد أن نسجل طرقة جديدة فقط؟

  if (programButtonPressed==true)

  {

      for (i=0;i<maximumKnocks;i++)

        secretCode[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);

 

      // إظهار وميض للإشارة على أننا في مرحلة تسجيل طرقة جديدة

      digitalWrite(greenLED, LOW);  digitalWrite(redLED, LOW);   delay(1000); 

      digitalWrite(greenLED, HIGH) digitalWrite(redLED, HIGH);   delay(50);

 

      for (i = 0; i < maximumKnocks ; i++)

      {

        digitalWrite(greenLED, LOW);   digitalWrite(redLED, LOW)

       

        if (secretCode[i] > 0) // في حالة إذا كان هناك تأخر

        {

          delay( map(secretCode[i],0, 100, 0, maxKnockInterval));

          digitalWrite(greenLED, HIGH)  digitalWrite(redLED, HIGH);

        }

        delay(50);

      }

      return false;     // لن نفتح الباب عندما نريد تسجيل طرقة سرية جديدة

  }

 

  if (currentKnockCount  != secretKnockCount)  return false;

 

  /*  نقارن الآن بين الطرقة الجديدة. تجدر الاشارة إلى أنه لو كانت الطرقة بطيئة أو سريعة سينفتح الباب.

هذا سيجعل الباب أقل أمنا لكن لو غيرت الوقت أيضا فسيصبح استعماله صعبا شيئا ما إذ لم يكن المستعمل يتقن طرقته السرية بنجاح  */

  int totaltimeDifferences = 0;

  int timeDiff = 0;

  for ( i = 0; i < maximumKnocks; i++ )

  {

    knockReadings[i] = map(knockReadings[i], 0, maxKnockInterval, 0, 100);     

    timeDiff = abs(knockReadings[i] - secretCode[i]);

 

    if (timeDiff > rejectValue)  return false;

 

    totaltimeDifferences += timeDiff;

  }

 

  if (totaltimeDifferences / secretKnockCount > averageRejectValue) return false

 

  return true

}

 

الدالة listenToSecretKnock

 

تقوم هذه الدالة بالتصنت لأي طقطقة ممكنة على الباب.

مهمة الأداة do while هو تسجيل الوقت الفاصل بين كل طقطقة والتي قبلها.

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

(now-startTime < knockComplete)

أو تم تجاوز عدد الطقطقات المسموح بها

(currentKnockNumber < maximumKnocks).

 

الدالة triggerDoorUnlock

 

كم يحتاج بابك من دورة للمفتاح حتى ينفتح؟

تقوم هذه الدالة بتشغيل المحرك حتى يقوم بدوران في مدة زمنية محدودة كافية لفتح قفل الباب.

يجب أن تضع هذه المدة الزمنية في المتغير lockTurnTime.

تشغيل المحرك معبر عليه في الأمر التالي:

digitalWrite(lockMotor, HIGH);

 

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

 

الدالة validateKnock

 

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

أولا وقبل كل شيء، يتم حساب عدد طقطقات الطرقة الجديدة في هذا المقطع من الشيفرة:

for (i=0;i<maximumKnocks;i++)

{

   if (knockReadings[i] > 0) currentKnockCount++;

   if (secretCode[i] > 0){                     //todo: precalculate this.

      secretKnockCount++;

    }

 

يتم تسجيل طرقة جديدة إذا كنت ضاغطا على الزر الكهربائي، بمعنى آخر إذا تم الشرط التالي:

  if (programButtonPressed==true)

 

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

 

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

  if (currentKnockCount  != secretKnockCount)  return false;

 

إذا كان عدد الطقطقات صحيحا نبدأ بعملية المقارنة والتي تنفذ في المقطع التالي:

 

 for ( i = 0; I < maximumKnocks; i++ )

  {

    knockReadings[i] = map(knockReadings[i], 0, maxKnockInterval, 0, 100);     

    timeDiff = abs(knockReadings[i] - secretCode[i]);

   

    if (timeDiff > rejectValue)  return false; 

    totaltimeDifferences += timeDiff;

  }

 

حيث يتم رفض الطرقة الجديدة والإعلان على أنها لا توافق الطرقة السرية إذا تحقق أحد الشرط التالي: 

if (timeDiff > rejectValue)  return false;

ويتم رفضها أيضا إذا تحقق الشرط الثاني: 

if (totaltimeDifferences / secretKnockCount > averageRejectValue) return false;

 

أما إذا كان الأمر على ما يرام فسيتم ارجاع القية "صح” (true) في آخر الدالة:

return true;

 


تركيب الدارة الكهربائية

 

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

 

المستشعر Piezo

 

تركيب: قم بإيصال بين المربط التناظري 0 (Analog 0) ومربط الأرضية GND للبطاقة Arduino. ولا تنسى أن تضع مقاومة 1000 كيلوأوم بين مربطي المستشعر حتى لا يتلف هذا الأخير البطاقة بسبب الجهد الكهربائي الذي قد يولده.

 

امتحان: بما أنك أوصلت البطاقة Arduino بالحاسوب، عليك أن تقوم بتنفيذ البرنامج وسترى جملة Program startعلى الشاشة. قم بعدها بالنقر على المستشعر Piezo بأصابعك وسترى جملة Knock startingو Knockعلى الشاشة كلما نقرت عليه. توقف عن النقر لثانية أو ثانيتين وربما سترى الجملة Secret knock failedأو Door unlockedعلى الشاشة.

يمكنك الان أن تقلد الطرقة التي رأيتها على الفيديو، وانظر هل حصلت على الجملة Door unlockedعلى الشاشة. إذا قلدت الطرقة بشكل جيد ومع ذلك لم ترى هذه الجملة فحينها يمكنك تغيير  قيمة المتغير  threshold حتى يصبح تحديد الطرقة السرية أقل حساسية. يمكن أن تصل قيمة هذا المتغير إلى 1023 إذا كان مستشعر جد حساس.

 

const int threshold = 3;  // Minimum signal from the piezo to register as a knock

الصمامات الضوئية (LED)

 

تركيب: صل الصمام الأحمر بالمربط 4 والصمام الأخضر بالمربط 5 مصحوبين بمقاومتيهما 560 أوم.

 

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

إذا لم ترى شيئا من هذه، فتأكد من قطبية الصمامين، أي هل ركبتهما في البطاقة بالشكل الصحيح؟

 

الزر الكهربائي

 

تركيب:قم الآن بإيصال أحد أطراف الزر الكهربائي بـ 5v+، والطرف الآخر بالمربط 2 للبطاقةلا تنسى أن تجعل مقاومة كهربائية 10 كيلوأوم بين الطرف الموصول بالمربط والأرضية GND للبطاقة Arduino(انظر إلى الدارة الكهربائية).

 

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

 

المحرك الكهربائي

 

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

 

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

 

مشاكل أخرى قد تواجهها

 

1.  إذا قام المحرك بدوران بطيء فربما قمت بتركيب الصمام الثنائي بالشكل الخاطئ.

2.  إذا كنت تحتاج لمزيد من الطاقة لمحركك الكهربائي فقم بالتغيير التالي في الدراة الكهربائية: قم بإيصال مربط المحرك بالمربط بـ Vin عوض v5. سيزود المحرك بـ 9 فولط.

تأكد من منحى دوران المحرك. يجب أن يدور في نفس منحى دوران مفتاح قفل الباب.

 

إذا تم كل شيء على ما يرام، فتهانينا بنجاحك في صنع هذا الجهاز! 

 


تركيب الجهاز

 

 

 

 

 

 

 

 

 

 

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

 


أفكار جديدة لتحسين الجهاز

 

يمكنك تحسين أداء هذا الجهاز حتى يصبح قادرا على فتح وقفل الباب تلقائيا، كما يمكنك الرفع من جودته عن طريق التطويرات أو التغييرات التالية:

l          تصغير الجهاز ككل حتى يثبت داخل الباب.

l          تحسين الجهاز لتمكين عدة أشخاص من تسجيل طرقاتهم السرية.

l          يمكنك تعويض الطرقات برنات جرس الباب أو إضافتها هي أيضا.

l          إضافة مقبض لتعديل الحساسية (أعني نسبة مطابقة الطرقة السرية)

l          استعمال ميكروكنترول اقتصادي عوض Arduino حتى يتسنى وضع الجهاز في حالة السبات للاقتصاد من حياة البطارية.

l          يمكنك استعمال وميض ضوئي عوض الطرق على البابما عليك إلا أن تضع مستشعر الضوء في ثقب الباب حتى يتمكن من تحديد الوميض.

l          يمكنك أن تضع في ثقب الباب مستشعر الأشعة تحت الحمراء وبالتالي ينفتح الباب عندما تضغط على زر معين من أداة التحكم عن بعد كما هو الشأن بالنسبة لبعض السيارات. 

image003

 


تأليف

 

تأليفSteve Hoefer

ترجمة بتصرف: محمد السهلي 


المراجع

 

http://www.instructables.com/id/Secret-Knock-Detecting-Door-Lock/ 


 

أضف تعليق


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


Go to top