مصباح CO2 (mh-z19)

co2-lampe-main

هنا ، غالبًا ما تحدثوا عن مستشعر mh-z19 وعن esp8266 ، ولم ينسوا أيضًا ذكر بروتوكول mqtt.

قرأت كل هذا وقررت الجمع بين القراءة في جهاز واحد. في الواقع في الصورة هذا هو.

مقدمة (تخطي)


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

وظائف / البرامج الثابتة


تم بناء المشروع بأكمله على esp8266 ، وبالتالي ، يمكنه التواصل بشكل جيد مع الإنترنت. يستخدم بروتوكول mqtt لنقل البيانات. لأكون صريحًا ، لم أتعمق كثيرًا في جهاز البروتوكول ، ولكن تبين أن الأمر مريح للغاية ، لقد استخدمت وسيط mosca لإجراء اختبار في المنزل ، والآن أستخدم cloudmqtt لديهم خيارات مجانية ، لمثل هذا التافه ، إنه شيء.

الآن يمكنك الذهاب إلى الوظائف نفسها.

عند تشغيل المصباح ، يبدو ما إذا كانت هناك إعدادات محفوظة بالفعل ، وإذا لم يكن كذلك ، فإنه يعمل على تشغيل wifi باسم "CO2.box" ، على العنوان "192.168.4.1" ، ويعرض صفحة الإعدادات:

لقطة شاشة


في الواقع ، يمكن أن يعمل المصباح في وضعين:

1. يتصل وسيط mqtt ، ويرسل البيانات ويظهر محتوى CO2 من خلال LED.
2. يعرض فقط محتوى LED من CO2 في الغرفة.

يمكن لـ LED تغيير لونه من الأخضر إلى الأحمر ، نظريًا هو RGB ، لكنني لم أقم بتوصيله باللون الأزرق ، وبالتالي فقط LED RG. إذا كان محتوى CO2 400 جزء في المليون (PPM Min في webgui) ، فإن المصباح يضيء باللون الأخضر النقي وعندما يزيد التركيز ، يتحول اللون إلى اللون الأحمر عندما يصل إلى الحد الأقصى (PPM Max في webgui) يبدأ في الوميض باللون الأحمر.

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

رمز الزر
تهيئة الزر (GPIO0)
// initialise reset button void BtnInit() { // set GPIO 0 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); // enable pullup resitor PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U); // disable globar interrupt ETS_GPIO_INTR_DISABLE(); // attach interrupt function ETS_GPIO_INTR_ATTACH(input_intr_handler, NULL); GPIO_DIS_OUTPUT(BTN_CONFIG_GPIO); // empty status GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(2)); // enable interrupt gpio_pin_intr_state_set(GPIO_ID_PIN(BTN_CONFIG_GPIO), GPIO_PIN_INTR_ANYEDGE); // enable global interrupt ETS_GPIO_INTR_ENABLE(); // timer os_timer_disarm(&DebounceTimer); os_timer_setfn(&DebounceTimer, &debounce_timer_cb, 0); } 

تحقق من مقدار الضغط على الزر وإعادة تعيينه

 // button reset pressed void ICACHE_FLASH_ATTR debounce_timer_cb(void *arg){ //disable globar interrupt ETS_GPIO_INTR_DISABLE(); gpio_pin_intr_state_set(GPIO_ID_PIN(BTN_CONFIG_GPIO), GPIO_PIN_INTR_ANYEDGE); ETS_GPIO_INTR_ENABLE(); //start if button was pressed any age (hight or low) if(timepressed){ timepressed = 0; uint32 count = system_get_time() - timecount; #ifdef DEBUG os_printf("DIFF: %d us\n", count); #endif //check time between button on/off, if more 1 sec start delete settings in flash if(count >= 1000000){ if(wipe_flash(DELALLCONF) == 0){ os_timer_disarm(&wifiErrorLedTimer); os_timer_disarm(&ppmMaxLed); os_timer_disarm(&SendDataTimer); os_timer_disarm(&wifiConnCheck); os_printf("\n"); startMode(); } } } else { timepressed = 1; timecount = system_get_time(); #ifdef DEBUG os_printf("SYSTEMTIME: %d\n", timecount); #endif } } 


بالنسبة لـ mqtt ، يتم دعم مصادقة المستخدم عبر تسجيل الدخول / المرور. يمكنك التأكد من إرسال البيانات عبر https ، ولكن لهذا تحتاج إلى تضمين شهادة في البرنامج الثابت ، وهو ما يتعارض مع المفهوم - أردت أن يتم تنفيذ جميع الإعدادات عبر webgui.

المشكلة


كنت أرغب في تشغيل خادم DNS على esp8266 ، بحيث يعيد عنوانه دائمًا ولا يلزم إدخال عنوان IP. لسوء الحظ ، في إصداري esp8266 sdk ، واجهت خطأً وهو أنه لا يقوم بإنشاء حزمة Ethernet بشكل صحيح وأن المجموع الاختباري لا يتلاقى هناك ويتم تجاهل استجابة العميل. لقد رأيت الخطأ من خلال wireshark ، كما تم وصف خطأ مماثل في منتدى espressif. لذا تركت الفكرة.



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

بشكل عام ، جودة الكود ، في رأيي ، لم تكن عالية جدًا (أو فظيعة إلى حد ما) ، وذلك لأن هذا هو مشروعي الثاني مع (المشروع الأول كان ساعة ) ، بالإضافة إلى حقيقة أن SDK غير واضح إلى حد ما وكثيرا ما لم تساعد الوثائق كثيرا وكان عليها البحث عن أمثلة.

على سبيل المثال ، أردت وضع تسجيل الفلاش في ملف منفصل ، ولكن بعد ذلك توقفت الإعدادات عن الكتابة على الفلاش. لم أجد أبداً السبب.

الجانب الحديدي


ثم حاولت الخروج مع مجموعة صغيرة من المكونات ، ويبدو أنها تعمل بشكل جيد. في البداية ، كنت أرغب في استخدام الإصدار الأول من esp8266 ، وجدت على الإنترنت طريقة لإدارة تسجيل النوبات باستخدام دبوس واحد فقط. كل شيء يعمل في البروتين ، لكنه لا يعيش. أعتقد أن مشكلتي كانت أنني لم أجد مكثفات مناسبة.

esp12e


لقد استخدمت ESP8266 12e ، نظرًا لأنه يحتوي على 4 ميجابايت من الذاكرة وسبعة دبابيس يمكن استخدامها. في البداية وحتى نهاية المشروع تقريبًا ، كنت أرغب في استخدام أربع شاشات عرض من سبعة أجزاء إضافية ، والتي تم توصيلها من خلال أربعة مسجلات نوبة 74hc595 ، ولكن في وقت لاحق ، عندما بدأت في وضع اللوحة ، بدا كل شيء مرهقًا وقليلاً بالنسبة لي. بشكل عام ، قمت بإزالتها ، ولكن في عمليات التثبيت لا يزال هناك رمز حيث كانت الشاشة. لذلك ، إذا كان أي شخص يحتاج إليها ، فعندئذ يمكنك أن تأخذ الجزء الصحيح.

أردت أيضًا أن يعمل كل هذا من USB ، مباشرة من USB للكمبيوتر أو من خلال مصدر طاقة (مثل الهاتف). لقد أخذت مصدر الطاقة من نوكيا القديم (n900) ، فهو يعطي 1A ، لذلك كان ذلك كافياً للعيون ، ولكن كان من الضروري خفض الجهد ل esp8266 إلى 3.3v.

لهذا ، استخدمت asm1117 وكانت المشكلة الأولى في انتظاري ، لسبب ما أنها أعطت فقط 3c ، وعمل esp8266 منه ، لكنها لم تكن مستقرة وظهرت أخطاء غريبة للغاية عند العمل.

على سبيل المثال ، لا يستطيع esp8266 كتابة البيانات إلى الفلاش ، فقط أعيد تشغيله ، استغرق الأمر مني بعض الوقت ، حتى أدركت من أين أتت الأخطاء ، كدت أقفز مع الدف.
أنتجت Asm1117 نفسها 3.3-3.5v المطلوبة ، ولكن في esp8266 كانت 2.8-3.1v فقط. من حيث المبدأ ، لم أحل المشكلة حقًا ، وأظن أن (الجهد) كان يسقط على الأسلاك. ثم قمت بإعادة التصميم كما في الصورة أدناه وبدأ كل شيء يعمل بثبات.

مثل الآن


كانت هناك حاجة أيضًا إلى 5 فولت فقط لمستشعر co2 ، بالمناسبة تمكنت من الحصول عليه بنسبة 3.3 فولت. ولكن كانت هناك مشاكل في أنه زاد من قيمه في مكان ما خلال ساعة حتى 2000 جزء في المليون ، ولكن إذا قام بإيقاف تشغيله مرة أخرى وتشغيله مرة أخرى ، فإن القيم انخفضت على الفور.

مخطط


يتم توصيل إخراج السجل بـ GPIO2 إذا لم يعمل شيء فجأة. يحدث الاتصال بمستشعر CO2 كمعيار - من خلال uart.

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


لسوء الحظ ، لدي خطأ هنا (باللون الأحمر) ، لاحظته في النهاية فقط. أرض مستشعر CO2 متصلة بهذا الدبوس ، لكن هذه الأرض غير متصلة بالباقي وفي هذا الشكل لم يعمل المستشعر ، كان علي إرفاق جسر في ذلك المكان.


لوتيم ، تويست ، حفر ، منشار


من الصورة أعلاه يمكنك أن ترى أن كل شيء تم عن طريق النهب. لقد استخدمت الطريقة مع حمض الستريك ، قرأت عنها على قطة راديو . يكتبون أنه يتم الحصول على أفضل رد فعل.

مجموعتي من أدوات النهب ، في الواقع ، كل شيء يحدث في المربع الأخضر على اليمين.

كل ما تحتاجه للأعشاب الضارة


بعد أن خففت المحلول ، وضعت الحاوية في حوض بالماء الدافئ ، يجب ألا تكون المياه أكثر حرارة من 40-45 درجة.

مثال


اتضح بشكل جيد من حيث المبدأ ، للأسف ليس لدي سوى صور من الإصدار الأول ، ولكن كانت هناك أخطاء.

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


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

ثم أمرت لوحات صغيرة حيث تم إرفاق USB الصغير بالفعل. شيء من هذا القبيل:

الرسوم


قمت بتثبيت كل هذا - كان حلاً جيدًا ، وما زال يعمل.


في النهاية بدا الأمر هكذا

كلا الجانبين



الإسكان


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

ثم أنشأت نموذجًا ثلاثي الأبعاد للحالة ، وأقرت فقط بالخيار الثالث على أنه ناجح.

خيارات فاشلة





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

الصورة أقرب


معًا ، يبدو هذا كما يلي:



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


لذا أبقي LED RGB في الكرة في الأعلى:


زوجان من الصور الأخرى




الخلاصة


حتى أنني لم أكن أعرف في البداية ما أكتب بأسلوب ذكي للغاية. اعتقدت أنه ربما يمكنني سرد ​​بعض المشاكل ، كان هناك الكثير منها.

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

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

الآن لن أفعل ذلك ، بدلاً من الكرة ، أود أن أرفق شيئًا صغيرًا ، مثل منارة البحر.

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

ملاحظة: بضع نقاط عني شخصيا:

1. هذه مقالتي الأولى ، ربما أقرأ كثيرًا هنا ، ولكن مع ذلك ، كن متعاطفًا.
2. لم تتم كتابة البرامج الثابتة بشكل جيد للغاية ، ربما يريد شخص ما إعادة ذلك.
3. أعتذر مقدما عن وفرة الكلمات الإنجليزية ، منذ أن كنت في السادسة عشرة من عمري ، لم أكن أعيش في دولة ناطقة بالروسية ، وبالتالي لا أعرف غالبًا ما تسمى بعض الأشياء بالروسية.

Source: https://habr.com/ru/post/ar402625/


All Articles