في هذا المشروع ، سنصنع نظام إنذار الحريق باستخدام متحكم ATMEGA8 ومستشعر الحريق. يمكن أن يكون مستشعر الحريق من أي نوع ، إلا أننا نستخدم مستشعر الحريق القائم على الأشعة تحت الحمراء. على الرغم من أن أجهزة استشعار الحريق القائمة على الأشعة تحت الحمراء لها بعض عيوب عدم الدقة في الغالب ، إلا أنها أرخص وأسهل طريقة للكشف عن الحريق.
تتمتع مستشعرات الحريق القائمة على الأشعة تحت الحمراء برؤية أقل للاستشعار ، لذلك سنقوم بتركيب مستشعر الحريق على محرك سيرفو. سوف يقوم المؤازر بعمل دوران 180 درجة في البندول. مع وجود مستشعر الحريق المثبت عليه ، نحصل على رؤية استشعار للحريق تبلغ 270 درجة سيتم تدوير المؤازرة بشكل مستمر وبالتالي توفير نظام إنذار الحريق الكامل للغرفة. لمزيد من الدقة ، يمكننا إضافة مستشعر دخان إلى النظام. مع ذلك يمكننا الحصول على دقة أعلى.
مكونات الدائرة
الأجهزة: مزود طاقة + 5 فولت ، محرك سيرفو (sg90) ، ATMEGA8 ، BUZZER ، زر ، مقاوم 10KΩ ، مقاوم 1KΩ ، مقاوم 220Ω ، مكثف 100nF ، مبرمج AVR-ISP.
البرنامج: Atmel studio 6.1، progisp or flash magic.
مخطط الدائرة والعمل
لكي يتحرك عمود الماكينة يسارًا بعيدًا ، نحتاج إلى إعطاء حصة 1/18 من الحصة ، ولكي يدور العمود على طول الطريق إلى اليسار ، نحتاج إلى إعطاء PWM مع حصة واجب 2/18. سنقوم ببرمجة ATMEGA8 لإعطاء إشارة PWM والتي ستقوم بتدوير عمود المؤازرة إلى 180 ثم إلى 0 بعد تأخير معين.
خلال الوقت الكامل ، سيتم تشغيل مستشعر الحريق وستكون وحدة التحكم في حالة تأهب تام. في حالة وجود حريق ، يوفر المستشعر نبضًا عاليًا لهذه النبض عند اكتشافه بواسطة جهاز التحكم ، حيث يقوم بتعيين إنذار. سيتم إيقاف تشغيل المنبه بالضغط على زر إعادة الضبط المتصل به.
في atmega8 لثلاث قنوات PWM ، قمنا بتعيين ثلاثة دبابيس. يمكننا فقط أخذ إخراج PWM في هذه المسامير فقط. نظرًا لأننا نستخدم PWM1 ، يجب أن نأخذ إشارة PWM في OC1A pin (PORTB 1 st PIN). كما هو موضح في الرسم البياني للدائرة ، نقوم بتوصيل إشارة المؤازرة بدبوس OC1A. هنا شيء آخر هو أكثر من ثلاث قنوات PWM ، اثنتان من قنوات PWM 8 بت وقناة PWM 16 بت. سنستخدم قناة PWM ذات 16 بت هنا.
يوجد في ATMEGA طريقتان لتوليد PWM ، هما
1. المرحلة الصحيحة PWM.
2. سريع PWM.
هنا سنبقي كل شيء بسيطًا ، لذلك سنستخدم طريقة FAST PWM لتوليد إشارة PWM.
أول من يختار تردد PWM ، هذا يعتمد على التطبيق عادة ، بالنسبة لمصباح LED ، فإن أي تردد أكبر من 50 هرتز سيفعل. لهذا السبب ، نختار عداد الساعة 1 ميجا هرتز. لذلك نحن لا نختار عداد prescalar. ما قبل القياس هو رقم يتم اختياره للحصول على ساعة عداد أقل. على سبيل المثال ، إذا كانت ساعة المذبذب 8 ميجا هرتز ، فيمكننا اختيار مقياس مسبق من "8" للحصول على ساعة 1 ميجا هرتز للعداد. يتم اختيار المقياس على أساس التردد. إذا أردنا المزيد من النبضات ذات الفترات الزمنية ، فعلينا أن نختار ما قبل الكالار الأعلى.
الآن للحصول على FAST PWM لساعة 50 هرتز من ATMEGA ، نحتاج إلى تمكين البتات المناسبة في سجل " TCCR1B ".
هنا،
CS10 ، CS11 ، CS12 (أصفر) —حدد مقياس مسبق لاختيار ساعة العداد. يظهر الجدول الخاص بريسكالار المناسب في الجدول أدناه. لذلك من أجل القياس المسبق (ساعة المذبذب = ساعة العداد).
إذن CS10 = 1 ، البتتان الأخريان هما صفر.
RED (WGM10-WGM13): تم تعديله لاختيار أوضاع توليد شكل الموجة ، بناءً على الجدول أدناه ، من أجل PWM سريع. لدينا WGM11 و WGM12 و WGM12 مضبوطة على 1.
نحن نعلم الآن أن PWM هي إشارة ذات حصص عمل مختلفة أو أوقات إيقاف تشغيل مختلفة. حتى الآن اخترنا تردد ونوع PWM. الموضوع الرئيسي لهذا الفصل يكمن في هذا القسم. للحصول على حصة واجب مختلفة ، سنختار قيمة بين 0 و 255 (2 ^ 8 بسبب 8 بت). لنفترض أننا اخترنا القيمة 180 ، نظرًا لأن العداد يبدأ في العد من 0 ويصل إلى القيمة 180 ، فقد يتم تشغيل استجابة الإخراج. قد يكون هذا الزناد مقلوبًا أو غير مقلوب. هذا هو الناتج يمكن إخباره بسحبه عند الوصول إلى العد ، أو يمكن إخباره بالسحب لأسفل عند الوصول إلى العد.
أخضر (COM1A1 ، COM1A0): يتم اختيار هذا التحديد للسحب لأعلى أو لأسفل بواسطة بت CM1A0 و CM1A1.
كما هو موضح في الجدول ، لكي يرتفع الناتج عند المقارنة وسيظل الناتج مرتفعًا حتى القيمة القصوى. علينا أن نختار الوضع العكسي للقيام بذلك ، لذا COM1A0 = 1 ؛ COM1A1 = 1.
كما هو موضح في الشكل أدناه ، OCR1A (سجل مقارنة الإخراج 1A) هو البايت الذي يخزن القيمة التي اختارها المستخدم. لذلك إذا قمنا بتغيير OCR1A = 180 ، فإن وحدة التحكم تقوم بتشغيل التغيير (مرتفع) عندما يصل العداد إلى 180 من 0.
يجب أن تكون OCR1A 19999-600 لدرجة 180 و 19999-2400 لدرجة 0.