الإعلانات
كشف الحركة ، ثم تخويف هيك من الدخيل مع أصوات التنبيه عالية النبرة والأضواء الساطعة. هل هذا يبدو ممتعا؟ بالطبع. هذا هو هدف مشروع Arduino اليوم ، وهو مناسب للمبتدئين. سنكتب بالكامل من الصفر والاختبار بينما نمضي قدمًا حتى تتمكن من الحصول على فكرة عن كيفية تنفيذ كل شيء بدلاً من مجرد تثبيت شيء قمت به بالفعل.
إخلاء المسؤولية: هذا لن يحمي منزلك بالفعل. إنه ربما إعطاء أختك صدمة سيئة عندما تتسلل إلى غرفتك.
انك سوف تحتاج:
- اردوينو
- أنا استخدم جهاز استشعار "بينغ" بالموجات فوق الصوتية HC-SR04 سيكون PIR أفضل ، لكن هذه مكلفة. يمكن وضع مستشعر ping خلسة في المدخل ولا يزال يخدم نفس الوظيفة الأساسية ، وهو 5 دولارات فقط
- جرس بيزو
- شريط إضاءة LED ، بنفس الأسلاك التي استخدمناها مرة أخرى في هذا المشروع قم ببناء الإضاءة المحيطة الديناميكية الخاصة بك للحصول على مركز إعلاميإذا كنت تشاهد الكثير من الأفلام على جهاز الكمبيوتر أو المركز الإعلامي ، فأنا متأكد من أنك واجهت معضلة الإضاءة ؛ هل تطفئ كل الأضواء تمامًا؟ هل تبقيهم على الانفجار الكامل؟ أو... اقرأ أكثر .
بينما تقوم بتوصيل هذا المشروع ، لا تقم بإزالة كل شيء في كل مرة - فقط استمر في البناء على الكتلة الأخيرة. في الوقت الذي تصل فيه إلى قسم "Coding The Alarm System" ، يجب أن يكون لديك جميع الأجزاء والقطع السلكية ، وتبحث عن شيء مثل هذا:
الأضواء الساطعة
استخدم مخطط الأسلاك من هذا المشروع قم ببناء الإضاءة المحيطة الديناميكية الخاصة بك للحصول على مركز إعلاميإذا كنت تشاهد الكثير من الأفلام على جهاز الكمبيوتر أو المركز الإعلامي ، فأنا متأكد من أنك واجهت معضلة الإضاءة ؛ هل تطفئ كل الأضواء تمامًا؟ هل تبقيهم على الانفجار الكامل؟ أو... اقرأ أكثر لتوصيل شريط LED الخاص بك ؛ لا تغير الدبابيس ، لأننا بحاجة إلى إخراج PWM. استعمال هذا الرمز لاختبار الأسلاك الخاصة بك بسرعة. إذا سارت الأمور على ما يرام ، يجب أن يكون لديك هذا:
مستشعر المسافة
في وحدة SR04 ، ستجد 4 دبابيس. VCC و GND انتقل إلى السكك الحديدية + 5V والأرض على التوالي ؛ علم حساب المثلثات هو الدبوس المستخدم لإرسال إشارة السونار ، ضع هذا على الدبوس 6 ؛ صدى صوت يستخدم لقراءة الإشارة مرة أخرى (وبالتالي حساب المسافة) - ضع هذا على 7.
لتبسيط الأمور بشكل لا يصدق ، هناك مكتبة يمكننا استخدامها تسمى NewPing. قم بالتنزيل ووضعه في Arduino’s الخاص بك مكتبة المجلد وإعادة تشغيل IDE قبل المتابعة. اختبار باستخدام هذا الرمز; افتح الشاشة المسلسلة وتأكد من ضبط السرعة على 115200 باود. مع أي حظ ، يجب أن ترى بعض قياسات المسافة يتم إرسالها إليك بسرعة عالية جدًا. قد تجد تباينًا يتراوح بين 1 أو 2 سم ، لكن هذا جيد. حاول تشغيل يدك أمام المستشعر وتحريكه لأعلى ولأسفل لمراقبة القراءات المتغيرة.
يجب أن يكون الرمز ببساطة إلى حد ما لفهمه. هناك عدد قليل من الإعلانات عن الدبابيس ذات الصلة في البداية ، بما في ذلك أقصى مسافة - قد يختلف هذا وفقًا لـ جهاز الاستشعار الدقيق لديك ، ولكن طالما أنك قادر على الحصول على قراءات أقل من متر واحد بدقة ، فيجب أن تكون كذلك غرامة.
في حلقة هذا التطبيق التجريبي ، نستخدم بينغ () وظيفة لإرسال بينغ السونار ، واستعادة قيمة بالمللي ثانية من الوقت الذي استغرقه إرجاع القيمة. لفهم ذلك ، نستخدم مكتبات NewPing التي تم إنشاؤها بشكل ثابت US_ROUNDTRIP_CM، الذي يحدد عدد الميكروثانية اللازمة للذهاب إلى سنتيمتر واحد. هناك أيضًا تأخير قدره 50 مللي ثانية بين الأصوات لتجنب زيادة تحميل المستشعر.
إنذار بيزو
مستشعر الكريستال Piezo هو جرس بسيط ورخيص ، ويمكننا استخدام دبوس PWM 3 لعمل نغمات مختلفة. قم بتوصيل سلك واحد بالدبوس 3 ، واحد بالسكة الأرضية - لا يهم أيهما.
استعمال هذا الرمز لاختبار.
الطريقة الوحيدة لقتل المنبه البغيض والصاخب نوعًا ما هي سحب المقابس. الشفرة معقدة بعض الشيء لتفسيرها ، ولكنها تتضمن استخدام موجات جيبية لتوليد صوت مميز. قم بتعديل الأرقام للعب بألوان مختلفة.
ترميز نظام الإنذار
الآن بعد أن أصبح لدينا كل أجزاء هذا اللغز ، دعنا نجمعها معًا.
انطلق واصنع رسمًا جديدًا يسمى إنذار. ابدأ بجمع جميع المتغيرات وتعريفات التعريفات الموجودة في أمثلة الاختبار حتى الآن.
#تضمن // حدد أي دبابيس قادرة على استخدام PWM سيتم استخدامها. # تعريف RED_PIN 10. # تعريف GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // دبوس اردوينو مرتبط بتشغيل دبوس على جهاز الاستشعار بالموجات فوق الصوتية. #define ECHO_PIN 7 // دبوس Arduino مرتبط بدبوس الصدى على جهاز الاستشعار بالموجات فوق الصوتية. #define MAX_DISTANCE 100 // أقصى مسافة نريد ping لها (بالسنتيمتر). # تعريف ALARM 3 تعويم sinVal ؛ لهجة int
ابدأ بكتابة أساسي اقامة() وظيفة - سنتعامل فقط مع الأضواء في الوقت الحالي. لقد أضفت 5 ثوانٍ من التأخير قبل بدء الحلقة الرئيسية لإعطائنا بعض الوقت للخروج من الطريق إذا لزم الأمر.
void setup () {// set pinModes for RGB strip pinMode (RED_PIN، OUTPUT)؛ pinMode (BLUE_PIN ، OUTPUT) ، pinMode (GREEN_PIN ، OUTPUT) ، // reset أضواء analogWrite (RED_PIN، 0) ؛ analogWrite (BLUE_PIN ، 0) ؛ analogWrite (RED_PIN ، 0) ؛ تأخير (5000) ؛ }
دعنا نستخدم وظيفة المساعد التي تسمح لنا بكتابة قيمة RGB واحدة بسرعة إلى الأضواء.
وظيفة المساعد تساعدنا على إرسال لون في أمر واحد. لون باطل (شار أحمر غير موقّع ، شار أخضر غير موقّع ، شار غير أزرق) // وظيفة توليد اللون. {analogWrite (RED_PIN ، أحمر) ؛ analogWrite (BLUE_PIN ، أزرق) ؛ analogWrite (GREEN_PIN ، أخضر) ؛ }
أخيرًا ، ستتكون دورتنا في الوقت الحالي من وميض لون بسيط بين الأحمر والأصفر (أو ، أيًا ما تريد أن يكون المنبه الخاص بك - فقط قم بتغيير قيم RGB).
حلقة فارغة () {color (255،0،0)؛ // تأخير أحمر (100) ؛ اللون (255،255،0) ؛ // تأخير أصفر (100) ؛ }
قم بتحميل واختبار ذلك للتأكد من أنك على المسار الصحيح.
الآن ، دعنا ندمج مستشعر المسافة لتشغيل هذه الأضواء فقط عندما يأتي شيء ما ، على سبيل المثال ، 50 سم (أقل بقليل من عرض إطار الباب). لقد حددنا بالفعل الدبابيس الصحيحة واستوردنا المكتبة ، وذلك قبل اقامة() وظيفة أضف السطر التالي لإنشائه:
السونار NewPing (TRIGGER_PIN ، ECHO_PIN ، MAX_DISTANCE) ؛ // NewPing إعداد دبابيس والمسافة القصوى.
تحت ذلك ، أضف متغيرًا لتخزين حالة التنبيه الذي يتم تشغيله أم لا ، افتراضيًا إلى false.
تم تشغيل قيمة منطقية = خطأ ؛
إضافة خط إلى اقامة() وظيفة حتى نتمكن من مراقبة الإخراج على المسلسل والتصحيح.
المسلسل يبدأ (115200) ؛ // افتح شاشة تسلسلية عند 115200 باود لرؤية نتائج ping.
بعد ذلك ، دعنا نعيد تسمية الحلقة الحالية بـ إنذار() - هذا ما سيطلق عليه في حالة تعثر المنبه.
إنذار باطل () {color (255،0،0)؛ // تأخير أحمر (100) ؛ اللون (255،255،0) ؛ // yelow delay (100) ؛ }
الآن إنشاء جديد عقدة() الوظيفة ، وهي وظيفة نحضر فيها اختبار ping جديدًا ، ونقرأ النتائج ، ونطلق الإنذار إذا تم اكتشاف شيء ما داخل نطاق العداد.
حلقة باطلة () {if (مشغل = = صحيح) {إنذار () ؛ } آخر {تأخير (50) ؛ // انتظر 50 مللي ثانية بين الأصوات (حوالي 20 إشارة / ثانية). يجب أن يكون 29ms أقصر تأخير بين الأصوات. غير موقعة int uS = sonar.ping () ؛ // أرسل ping ، احصل على وقت ping بالميكروثانية (الولايات المتحدة). مسافة int غير موقعة = uS / US_ROUNDTRIP_CM ؛ Serial.println (المسافة) ؛ إذا (المسافة <100) {يتم تشغيلها = true ؛ } } }
دعني أشرح الشفرة بإيجاز:
- ابدأ بالتحقق لمعرفة ما إذا تم تشغيل المنبه ، وإذا كان الأمر كذلك ، فقم بإطفاء وظيفة المنبه (فقط وميض الأضواء في الوقت الحالي).
- إذا لم يتم تشغيله بعد ، احصل على القراءة الحالية من المستشعر.
- إذا كان المستشعر يقرأ أقل من 100 سم ، فهذا يعني أن شيئًا ما قد حشو الشعاع (اضبط هذه القيمة إذا كانت تظهر في وقت مبكر جدًا بالنسبة لك).
قم بتجربتها الآن ، قبل أن نضيف جرس بيزو المزعج.
هل تعمل؟ عظيم. الآن دعنا نضيف الجرس مرة أخرى. أضف pinMode إلى اقامة() نمط.
pinMode (التنبيه ، الإخراج) ؛
ثم أضف حلقة الطنان بيزو إلى وظيفة التنبيه ():
من أجل (int x = 0؛ س <180 ؛ x ++) {// تحويل الدرجات إلى راديان ثم الحصول على قيمة الخطيئة sinVal = (sin (x * (3.1412 / 180)))؛ // توليد تردد من قيمة قيمة sinVal = 2000+ (int (sinVal * 1000)) ؛ نغمة (ALARM ، toneVal) ؛ }
إذا حاولت الترجمة في هذه المرحلة ، فسوف تواجه خطأ - لقد تركت هذا بشكل متعمد حتى تتمكن من رؤية بعض المشاكل الشائعة. في هذه الحالة ، تستخدم كل من NewPing ومكتبة النغمة القياسية نفس المقاطعات - فهي متضاربة بشكل أساسي ، ولا يمكنك فعل الكثير لإصلاحها. يا للهول.
لا تقلق رغم ذلك. إنها مشكلة شائعة ، ولدى شخص ما حل بالفعل - قم بتنزيلها وإضافتها نغمة جديدة إلى مجلد مكتبات Arduino. اضبط بداية البرنامج لتضمين ذلك:
#تضمن
وضبط الخط:
نغمة (ALARM ، toneVal) ؛
إلى
نغمة جديدة (ALARM ، toneVal) ؛
في حين أن.
هذا هو. ضع منبهك في مدخل غرفة النوم الخاصة بك من أجل اللصوص اللاحقين.
أو ، كلب غبي ، بدا غير منزعج تمامًا من الإنذار.
هل تواجه مشكلة مع الرمز؟ ها هي التطبيق الكامل. إذا كنت تحصل على أخطاء عشوائية ، فحاول لصقها أدناه وسأرى ما إذا كان يمكنني المساعدة.
حقوق الصورة: إنذار حريق عبر فليكر
جيمس حاصل على درجة البكالوريوس في الذكاء الاصطناعي ، وهو حاصل على شهادة CompTIA A + و Network +. وهو المطور الرئيسي لـ MakeUseOf ، ويقضي وقت فراغه في لعب كرة الطلاء VR وألعاب الطاولة. لقد كان يبني أجهزة الكمبيوتر منذ أن كان طفلاً.