جدول المحتويات:

آلة صنع القهوة التي تدعم إنترنت الأشياء: 9 خطوات (بالصور)
آلة صنع القهوة التي تدعم إنترنت الأشياء: 9 خطوات (بالصور)

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

فيديو: آلة صنع القهوة التي تدعم إنترنت الأشياء: 9 خطوات (بالصور)
فيديو: ازاي تعمل العشرة جنية الجديدة 2024, يوليو
Anonim
Image
Image
المعدات اللازمة
المعدات اللازمة

تم إدخال هذا التوجيه في مسابقة إنترنت الأشياء - إذا كنت ترغب في ذلك ، فيرجى التصويت له

محدث: يدعم الآن اتصالات ثنائية الاتجاه وتحديثات OTA

منذ بعض الوقت ، كان لدي آلة قهوة Jura وأردت دائمًا تشغيلها تلقائيًا بطريقة ما.

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

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

كنت بحاجة أيضًا إلى التأكد من أن الجهاز لا يزال يعمل بنسبة 100٪ بشكل مستقل عن أي آلية تحكم ، أي أن الجهاز لا يزال يعمل كالمعتاد كما لو لم يتم تمكين إنترنت الأشياء.

تتطلب أتمتة الماكينة شيئين: 1) لتتمكن من التحكم في طاقة الماكينة 2) لتتمكن من التواصل مع الجهاز لتنشيط وظائف صنع القهوة والشطف وما إلى ذلك.

الخطوة 1: كيف سنفعل ذلك

سنستخدم وحدة ESP8266 'ESP-01' للاتصال بشبكة wifi المنزلية والاشتراك في خادم / موضوع MQTT للاستماع للأوامر. "الواجهة الأمامية" التي استخدمتها هي OpenHAB2 ولكن لا يوجد سبب يمنعك من الإضافة إلى واجهة الويب على الجهاز والتحكم مباشرة إذا كنت تريد أو عبر أوامر HTTP Get.

سيتعامل ESP8266 مع التحكم في مرحلتيْن مرتبطتين بزر الطاقة وأيضًا معالجة الأوامر التسلسلية من / إلى ماكينة القهوة.

تحذير - يوضح هذا التوجيه الإجراء الذي استخدمته لتعديل آلة القهوة Jura Ena7 الخاصة بي ليتم التحكم فيها عن طريق التشغيل الآلي للمنزل. إنه يتعامل مع تعديل جهاز كهربائي رئيسي يمكن أن يكون خطيرًا إذا تم إجراؤه بشكل غير صحيح. قد تكون المعلومات هنا غير كاملة وغير دقيقة وغير آمنة. التقدم بحذر. لا تقبل أي مسؤولية.

الخطوة 2: المعدات المطلوبة

المعدات اللازمة
المعدات اللازمة
المعدات اللازمة
المعدات اللازمة
المعدات اللازمة
المعدات اللازمة

القطع

  • وحدة ESP-01 وطريقة برمجتها (Arduino IDE ومحول فعلي للبرمجة)
  • 2 طريقة تتابع وحدة EBAY
  • 5 فولت -> 3.3 فولت منظم EBAY
  • شاحن هاتف صغير 5 فولت يعمل بالطاقة
  • محول المستوى المنطقي * Freetronics
  • سلك متنوع ، رؤوس دبوس ، انكماش حراري ، إلخ لتوصيله جميعًا.

أدوات

  • مكواة لحام برأس ناعم
  • جندى
  • أدوات تقشير الأسلاك سهلة الاستخدام
  • برنامج تشغيل Torx T15
  • أداة أمان بيضاوية (أو إنشاء واحدة ، تستغرق بضع دقائق فقط)

* لقد استخدمت في البداية اردوينو UNO في اختباري لجميع الأوامر التسلسلية للجهاز وعملت بلا عيب ، لكن وحدة ESP رفضت العمل. لقد تحققت من الكود ثلاث مرات وكنت على يقين من أن الأوامر التي تخرج من وحدة ESP هي نفس أوامر اردوينو ولكنها كانت محظورة. أضع هذا في وحدة ESP التي تعمل فقط على منطق 3.3 فولت وليس 5 فولت. بمجرد أن أدخلت محول المنطق ، عملت بشكل جيد. قد يكون هذا مطلوبًا وقد لا يكون مطلوبًا في الأجهزة الأخرى.

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

الخطوة 3: بروتوكول جورا

بروتوكول جورا
بروتوكول جورا

البيانات من / إلى الجهاز هي مجرد تسلسلية @ 9600 لكن Jura لديها بعض الحيل في سواعدها أيضًا. يستخدم البروتوكول هذا إما من أجل ECC إضافي و / أو للتشويش على الاتصال. ببساطة ، يتم تقسيم كل بايت من البيانات (حرف) عبر البتتين 2 و 5 من 4 بايتات تسلسلية قياسية تتبعها توقف 8 مللي ثانية. إذا كنت مهتمًا بمعرفة كيفية عمل ذلك ، فهناك الكثير من المعلومات في الروابط هنا.

معلومات البروتوكول المستخرجة من:

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

الكود الخاص بي هو مزيج من الكود من:

الأوامر المشار إليها في المواقع أعلاه ليست دقيقة لجهازي ولكن من خلال طريقة التجربة والخطأ ، تمكنت من التوصل إلى ما يلي:

FA: 01 - يغلق (لكن لا يبدو أنه يشطف ، حتى إذا لزم الأمر) FA: 02 - يستجيب "حسنًا" ولكن لست متأكدًا مما يفعله. FA: 03 - رسالة الشطف (تفرض رسالة "شطف" على الشاشة ، وتضغط على آلة الشطف الدوارة) FA: 04 - شطف الحركة - تشطف عندما تظهر الرسالة "اضغط على زر الروتاري" ، وإلا لا تفعل شيئًا FA: 05 - قوي على الشاشة (من المفترض أن تدمج هذا مع صنع القهوة للحصول على قهوة قوية) FA: 06 - قوي على الشاشة (من المفترض أن تدمج هذا مع صنع قهوة قوية) FA: 07 - "خاص" على الشاشة ولكن لا تفعل أي شيء في الواقع ، لست متأكدًا من هذا الأمر.: 08 - Steam FA: 09 - قهوة صغيرة FA: 0A - قهوة كبيرة

هناك أوامر أخرى ولكن هذا كثير بالنسبة لي …

توخ الحذر عند إصدار أوامر غير معروفة ، على سبيل المثال ، يبدو أن AN: 0A سوف يمسح ذاكرة EEPROM الخاصة بالجهاز …

الخطوة 4: التفكيك

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

يتم تقديم الإرشادات هنا بشكل جيد إلى حد ما -

الخطوة الخامسة: إبطال الضمان

إبطال الضمان
إبطال الضمان
إبطال الضمان
إبطال الضمان
إبطال الضمان
إبطال الضمان
إبطال الضمان
إبطال الضمان

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

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

يمكنك استبدال مصدر طاقة آخر مصنّف بجهد 5 فولت إذا أردت. يجب أن يكون 500ma الكثير.

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

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

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

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

يستخدم جهازي موصل 7 سنون. من اليسار إلى اليمين:

NC Tx G Rx NC 5v NC

الدبابيس المقابلة على اللوحة الرئيسية: أحمر = Gnd Orange = Rx Black = Tx

يمكن العثور على مزيد من المعلومات على pinouts هنا:

الخطوة 6: توصيل جانب المنطق

توصيل الجانب المنطقي
توصيل الجانب المنطقي
توصيل الجانب المنطقي
توصيل الجانب المنطقي
توصيل الجانب المنطقي
توصيل الجانب المنطقي

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

لقد قمت بتركيب محول المستوى في الجزء الخلفي من منظم الجهد (الذي تم تفريغه) بشريط مزدوج الجوانب. ثم استخدمت بعض أرجل المكونات لتلحيم دبابيس الطاقة والأرض على جانبي محول المستوى إلى دبابيس وحدة الطاقة المقابلة. تعمل هذه الوحدة بأكملها بعد ذلك مثل "العبور" لجميع المنطق ومصدر الطاقة لـ ESP-01.

لقد استخدمت المحولين الأوسطين للبيانات التسلسلية والمحولين الخارجيين لإشارات قيادة الترحيل ولكن لا يهم أيهما تستخدمه.

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

لقد استخدمت رأس أنثى 4x2 للاتصال بوحدة ESP. هذا يسمح بتحميل سهل للشفرة أو استبدال الوحدة.

لم يتم تصوير المدخل 5 فولت في الرسم التخطيطي - لقد قمت بتوصيل المنجم مباشرة بوحدة الترحيل (انظر الصورة الثانية). السلك الأسود الموجود في الجزء السفلي الأيسر من الصورة هو البيانات التسلسلية الموجودة على اللوحة الرئيسية. لقد استخدمت جزءًا من كبل تمديد سماعة الرأس المحمي مقاس 3.5 مم فقط للمساعدة في تقليل فرص التداخل في خط البيانات.

يستخدم الكود 12f SoftwareSerial بدلاً من التسلسل للأجهزة - وهذا يسمح للوحدة بالإبلاغ عن حالة التصحيح مرة أخرى عبر التسلسل العادي. يتم التوصيل عبر دبابيس 4 و 5 بدلاً من ذلك. لقد قمت بتكييف نفس الرأس لجعل ESP12F عبارة عن قابس في مبادلة لـ ESP-01 ، فقط قم بتبديل تلك المسامير التسلسلية

الخطوة السابعة: برمجة الوحدة

برمجة الوحدة
برمجة الوحدة

تم تجميع الكود مقابل Arduino 1.8.1 مع ملحق لوحة ESP8266 و PubSubClient 2.6.0 (وهي مكتبة MQTT)

قم بتعديل الرمز وفقًا لمتطلباتك وقم بتحميل الرمز إلى وحدة ESP-01 واتصل بالجهاز. كن حذرا مع اتجاه الدبابيس!

إعدادات

الخيار 1)

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

AP SSID الافتراضي هو "ESPSwitch" وكلمة المرور "12345678"

يبقى في وضع AP لمدة دقيقتين بشكل افتراضي. يمكنك تغيير هذا الإعداد في "global.h" - يطلق عليه "adminTimeout" وهو بالمللي ثانية. أوصي بتغيير هذا إلى شيء منخفض بمجرد أن يكون لديك تكوين صالح في EEPROM لأنه سيؤدي فقط إلى تأخيرات غير ضرورية في تمهيد الجهاز بخلاف ذلك.

الخيار 2)

هذا هو الوضع الافتراضي للرمز الأحدث الذي يدعم اتصالات ثنائية الاتجاه ، الخيار 1 غير متاح ، يمكنك أيضًا تغيير إعدادات SSID / كلمة المرور الافتراضية في ملف ino الرئيسي (ابحث عن "// DEFAULT CONFIG") حتى يتم تحميله هذه الإعدادات في EEPROM عند التمهيد الأول وتغيير تأخير وضع المسؤول إلى شيء منخفض في "global.h". هذا يتجنب الاضطرار إلى العبث بالاتصال بنقطة الوصول المؤقتة.

سيقوم الجهاز تلقائيًا بتعيين معرف MQTT (ومسار الاشتراك) إلى آخر 4 أرقام من الرقم التسلسلي للوحدات النمطية. المسار افتراضيًا هو ha / mod // # ، قم بتغييره كما تراه مناسبًا ولكن اقرأ التعليقات في الكود للتأكد من أن المصفوفة المناسبة لها الطول الصحيح.

أفعل هذا لأنه يعني أنه لا يتعين علي إنشاء معرف فريد لكل وحدة نمطية على شبكتي.

معرف الجهاز مرئي ويمكن تعيين خادم MQTT عبر صفحة خادم MQTT على خادم الويب الداخلي

الخطوة 8: القيام بالأشياء …

أوامر MQTT هي

ha / mod / xxxx / 0 أو 1 = تبديل الطاقة

سيتم التعامل مع أي سلسلة أخرى كأمر وإرسالها عبر المنفذ التسلسلي. تم الإبلاغ عن الحالة إلى / ha / coffee في HEX

مع OpenHAB

coffeemachine.items

Number Coffee_Machine_Power "Power" {mqtt = "> [control: ha / mod / 8002 /: command: *: default]"} String Coffee_Machine_Status {mqtt = "<[control: ha / coffee: state: default]"}

خريطة الموقع

عنصر المجموعة = "آلة القهوة" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] تبديل العنصر = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "صغير"] عنصر التبديل = Coffee_Machine_Cmd label = "" التعيينات = ["FA: 0A" = "Large"] تبديل العنصر = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Rinse"] عنصر النص = تسمية Coffee_Status = "الحالة [٪ s] "}

voicecontrol.rules

استيراد org.openhab.model.script.actions. * import org.openhab.core.library.types. * import java.util. *

القاعدة "قواعد الأوامر الصوتية"

عندما تلقى الأمر VoiceCommand العنصر أمرًا ، ثم الأمر var String = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec" ، "تلقي الأمر الصوتي" + الأمر)

if (command.contains ("turn on the coffee machine") || command.contains ("turn off the coffee machine")) {

sendCommand (Coffee_Machine_Power، 1)} if (command.contains ("make me a small coffee")) {sendCommand (Coffee_Machine_Cmd، "FA: 09")} if (command.contains ("make me a big coffee")) { sendCommand (Coffee_Machine_Cmd، "FA: 0A")} إذا (command.contains ("rinse the coffee machine")) {sendCommand (Coffee_Machine_Cmd، "FA: 04")}} end

القواعد (لتفسير استجابات HEX إلى قيم "حقيقية"):

القاعدة "حالة آلة القهوة" عندما يتلقى العنصر Coffee_Machine_Status تحديثًا ، ثم var String response = Coffee_Machine_Status.state.toString () if (response.indexOf ("ic:")> -1) {var String hexString = response.substring (3، 5)

var int num = (Integer.parseInt (hexString، 16)) ؛

var String binaryString = String.format ("٪ 8s"، Integer.toBinaryString (num)). استبدل (''، '0')

var int trayBit = binaryString.substring (0، 1)

var int tankBit = binaryString.substring (2، 3) var int heatBit = binaryString.substring (7، 8) var int rinseBit = binaryString.substring (6، 7)

إذا (trayBit == "0") {

postUpdate (Coffee_Status، "Tray Missing")} if (tankBit == "1") {postUpdate (Coffee_Status، "Fill Tank")} if (rinseBit == "1") {postUpdate (Coffee_Status، "Press Rotary")} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status، "Ready")}

}

if (response == "Off") {postUpdate (Coffee_Status، "Off")} النهاية

الخطوة 9: التنقيحات / Todo

تبسيط الإعداد الأولي الاتصال بشبكة wifi - تم. تخلى عن فكرة "وضع الإدارة" لأنها كانت مزعجة. الآن فقط أدخل SSID وكلمة المرور في الكود. يحفظ في EEPROM إذا قمت بالتحديث / التغيير عبر واجهة الويب.

يدعم الكود الأحدث أيضًا تحديثات OTA ولكنك ستحتاج إلى ترقية EEPROM على وحدة ESP-01 حتى يعمل هذا أو التعليق على عناصر OTA المقابلة

أضف رمزًا لمعالجة الاستجابات من الجهاز واقرأ الحالة مثل عدم وجود صينية ، وأرضية فارغة وملء الخزان - تم. لقد أضفت رمزًا لقراءة الحالة مرة أخرى ونشرها على ha / coffee. هذه مجرد ردود أولية وما زلت أعمل على تفسيرها ولكن حتى الآن لدي علبة مفقودة وخزان فارغ يعمل. تقوم باستقصاء الجهاز كل 9 ثوانٍ عند التشغيل وتنشر الاستجابة لـ MQTT

الاستجابة في HEX لكن البتات الفردية تشير إلى المستشعرات

أضف التعليمات البرمجية إلى صفحات الويب للتحكم المباشر عبر أوامر HTTP GET.

مسابقة إنترنت الأشياء 2017
مسابقة إنترنت الأشياء 2017
مسابقة إنترنت الأشياء 2017
مسابقة إنترنت الأشياء 2017

الجائزة الأولى في مسابقة إنترنت الأشياء 2017

موصى به: