فهرست مطالب:

دستگاه قهوه ساز IoT: 9 مرحله (همراه با تصاویر)
دستگاه قهوه ساز IoT: 9 مرحله (همراه با تصاویر)

تصویری: دستگاه قهوه ساز IoT: 9 مرحله (همراه با تصاویر)

تصویری: دستگاه قهوه ساز IoT: 9 مرحله (همراه با تصاویر)
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, جولای
Anonim
Image
Image
تجهیزات مورد نیاز
تجهیزات مورد نیاز

این دستورالعمل در مسابقه اینترنت اشیا شرکت می کند - اگر دوست دارید ، لطفاً به آن رای دهید

به روز شده: در حال حاضر از دو طرفه و به روز رسانی OTA پشتیبانی می کند

مدتی است که من یک دستگاه قهوه جورا دارم و همیشه می خواستم آن را به نحوی خودکار کنم.

من چند سالی است که یک سیستم اصلی اتوماسیون خانگی را اجرا می کنم اما دستگاه قهوه چیزی نیست که ساده باشد (یا من فکر می کردم). دستگاه های قهوه جورا به طور کلی دارای "پورت تشخیصی" و/یا پورتی هستند که برای افزودن سیستم پرداخت به دستگاه استفاده می شود ، اما من هیچ اطلاعاتی در مورد نحوه استفاده از آن پیدا نکردم. اخیراً ، پروتکل توسط برخی از افراد مهندسی معکوس شده و به صورت عمومی منتشر شد. مشکل این بود که بیشتر ارجاعات به عملکردهای موجود مربوط به ماشینهای بسیار بزرگتر از دستگاه من بود (Ena 7).

علاوه بر این ، دستگاه من مانند دستگاههای بزرگتر دارای قدرت آماده به کار دائمی نیست ، در عوض دارای یک سوئیچ HV است که منبع تغذیه را "قفل می کند". دکمه فیزیکی دستگاه در واقع 2 کلید را فعال می کند - یکی ولتاژ پایین (سمت منطقی ، خاموش) و یک ولتاژ بالا (روشن). هر دو کلید لحظه ای هستند.

من همچنین باید اطمینان حاصل کنم که دستگاه هنوز 100 independent مستقل از هر مکانیزم کنترلی کار می کند ، یعنی دستگاه هنوز به طور عادی کار می کند و گویی اینترنت اشیا فعال نیست.

برای خودکار کردن دستگاه به دو مورد نیاز است: 1) توانایی کنترل قدرت دستگاه 2) توانایی برقراری ارتباط با دستگاه برای فعال کردن عملکردهای تهیه قهوه ، شستشو و غیره.

مرحله 1: چگونه می خواهیم این کار را انجام دهیم

ما از یک ماژول ESP8266 'ESP-01' برای اتصال به وای فای خانگی و مشترک شدن در سرور MQTT/موضوع گوش دادن به دستورات استفاده می کنیم. "Front End" که من استفاده می کنم OpenHAB2 است اما هیچ دلیلی وجود ندارد که نتوانید به رابط وب موجود در دستگاه اضافه کرده و در صورت تمایل یا از طریق HTTP دستورات را مستقیماً کنترل کنید.

ESP8266 کنترل 2 رله مربوط به دکمه پاور را انجام می دهد و همچنین دستورات سریال را به/از دستگاه قهوه پردازش می کند.

هشدار - این دستورالعمل روشی است که من برای اصلاح دستگاه قهوه جورا Ena7 استفاده کردم تا از طریق اتوماسیون خانگی کنترل شود. این دستگاه با اصلاح یک دستگاه برق اصلی سروکار دارد که در صورت انجام نادرست می تواند خطرناک باشد. اطلاعات در اینجا ممکن است ناقص ، نادرست و ناامن باشد. با هوشیاری پیش بروید. هیچ مسئولیتی پذیرفته نمی شود.

مرحله 2: تجهیزات مورد نیاز

تجهیزات مورد نیاز
تجهیزات مورد نیاز
تجهیزات مورد نیاز
تجهیزات مورد نیاز
تجهیزات مورد نیاز
تجهیزات مورد نیاز

قطعات

  • ماژول ESP-01 و راهی برای برنامه ریزی آن (Arduino IDE و آداپتور فیزیکی برای برنامه نویسی)
  • ماژول رله دو طرفه EBAY
  • 5v -> 3.3v تنظیم کننده EBAY
  • شارژر تلفن کوچک 5 ولت تغذیه می شود
  • مبدل سطح منطقی* Freetronics
  • سیم متفرقه ، سرآیند پین ، کوچک کننده حرارتی و غیره برای اتصال همه آنها.

ابزارها

  • آهن لحیم کاری با نوک ریز
  • لحیم کاری
  • استریپرهای سیمی مفید هستند
  • درایور Torx T15
  • ابزار امنیتی بیضی (یا بسازید ، فقط چند دقیقه طول می کشد)

*من در ابتدا از arduino UNO در آزمایش تمام دستورات سریال به دستگاه استفاده کردم و بدون عیب کار کرد ، اما ماژول ESP از کار خودداری کرد. من سه بار کد را بررسی کردم و مطمئن بودم که دستوراتی که از ماژول ESP خارج می شوند همانند arduino است ، هرچند که ممنوع است. من این را روی ماژول ESP قرار دادم که فقط روی منطق 3.3 ولت کار می کند و نه 5 ولت. هنگامی که مبدل Logic را وارد کردم ، خوب کار کرد. این ممکن است در ماشینهای دیگر مورد نیاز باشد یا نباشد.

در حالت ایده آل ، شما یک سیستم اتوماسیون خانگی موجود دارید که از پروتکل MQTT (مانند openhab) پشتیبانی می کند ، زیرا این هدف پروژه است. اگر فقط می خواهید آن را از طریق دکمه های یک صفحه وب بدون هیچگونه سیستم پشتیبانی کننده کنترل کنید ، باید برخی تغییرات را در کد صفحه وب تعبیه شده اعمال کنید. دستیابی به آن بسیار پیچیده نیست (شاید rev2..)

مرحله 3: پروتکل ژورا

پروتکل ژورا
پروتکل ژورا

داده های ورودی/خروجی دستگاه فقط سریال 9600 @ است ، اما ژورا ترفندهایی نیز در آستین خود دارد. پروتکل یا از این برای ECC اضافی و/یا برای مبهم سازی ارتباط استفاده می کند. به بیان ساده ، هر بایت داده (کاراکتر) بر روی بیت های 2 و 5 از 4 بایت سریال استاندارد تقسیم می شود که با مکث 8 ثانیه دنبال می شوند. اگر می خواهید نحوه عملکرد این دستگاه را بیاموزید ، اطلاعات زیادی در پیوندهای اینجا وجود دارد.

اطلاعات پروتکل استخراج شده از:

کد آردوینو این امر را ساده کرده و شما را قادر می سازد تا دستورات استاندارد و قابل خواندن توسط انسان را ارسال کرده و سپس به پروتکل Jura منتقل کنید.

کد من ترکیبی از کد است:

دستورات ذکر شده در سایت های بالا برای دستگاه من دقیق نبود ، اما با روش آزمایش و خطا ، به موارد زیر رسیدم:

FA: 01 - خاموش می شود (اما به نظر نمی رسد حتی در صورت نیاز شستشو داده شود) FA: 02 - پاسخ می دهد "خوب" اما مطمئن نیستم که چه کار می کند. FA: 03 - پیام شستشو (پیام "شستشو" را روی صفحه مجبور می کند ، دستگاه را با ماشین های شستشوی دوار فشار می دهد) FA: 04 - عمل شستشو - هنگامی که پیام "دکمه چرخشی را فشار دهید" ظاهر می شود ، در غیر این صورت هیچ کاری انجام نمی دهد: 05 - قوی روی صفحه (احتمالاً این را با تهیه یک قهوه برای قوی ترکیب کنید) FA: 06 - قوی روی صفحه (احتمالاً این را با تهیه قهوه برای قهوه قوی ترکیب کنید) FA: 07 - "ویژه" روی صفحه ، اما در واقع هیچ کاری انجام نمی دهد ، مطمئن نیستید که این forFA چیست: 08 - بخار FA: 09 - قهوه کوچک FA: 0A - قهوه بزرگ

دستورات دیگری نیز وجود دارد اما این برای من کافی است…

هنگام صدور دستورات ناشناخته احتیاط کنید ، به عنوان مثال ، ظاهراً AN: 0A EEPROM دستگاه را پاک می کند.

مرحله 4: جداسازی قطعات

باز کردن دستگاه به خودی خود چندان آسان نیست ، زیرا شما به برخی از ابزارهای خاص نیاز دارید ، اما یک فرد مشتاق راهی پیدا می کند - شما به یک بیت T15 Torx و یک "کلید بیضی" برای 2 پیچ نیاز دارید. Torx که قبلاً داشتم ، ابزار بیضی شکل که از پیچ سر 4 میلی متری ساخته شده بود ، سوراخ شد و کمی با چکش پهن شد.

دستورالعمل های اینجا به خوبی ارائه شده است-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

مرحله 5: لغو گارانتی

لغو گارانتی
لغو گارانتی
لغو گارانتی
لغو گارانتی
لغو گارانتی
لغو گارانتی
لغو گارانتی
لغو گارانتی

پس از ورود به دستگاه ، اجزای اصلی را مشاهده خواهید کرد. ورودی اصلی منبع تغذیه دارای یک قسمت زیبا برای افزودن شارژر 5 ولت است.

در ورودی دستگاه سیم هایی (دارای رتبه اصلی) به بلوک ترمینال اضافه کردم و آنها را به پین های اصلی شارژر 5 ولت لحیم کردم/گرم کردم. مدل خاص من از نوع پورت USB نبود ، بلکه سربی بود که سرب به طور دائم به آن متصل شده بود. ممکن است فضای کافی برای یک پورت usb نوع یک برای استفاده از کابل USB واقعی نداشته باشید ، اما اگر شارژر را باز کنید ، می توانید پورت USB را برداشته و با سیم استاندارد در نقاط 5v و Gnd جایگزین کنید.

در صورت تمایل می توانید منبع تغذیه 5 ولت دیگری را جایگزین کنید. 500ma باید زیاد باشد

فضای زیادی برای ماژول رله در نزدیک آسیاب وجود دارد. ما باید دو رله را سیم کشی کنیم تا به طور موازی با کلیدهای اصلی کار کنند. من به سادگی سیمهای موجود را بریدم ، جدا کردم ، قلع زدم ، یک سیم اضافی به آن اضافه کردم و دوباره به هم لحیم کردم (گرمای کوچک را فراموش نکنید). سستی کافی برای انجام این کار در سیم ها وجود داشت.

ماژول رله با نوار دو طرفه با کیفیت خوب در جای خود نگه داشته شده است. با سیم های متصل شده و تنها با فضای محدود برای حرکت ، حتی اگر نوار چسبندگی خود را از دست بدهد ، ماژول زیاد جلو نمی رود و نمی تواند با هیچ اشیاء فلزی در تماس باشد.

من همچنین برای تعیین محل اتصالات داخلی ، پورت تشخیصی دستگاه خود را بک آپ کردم تا بتوانم به یکپارچگی کاملاً پنهان دست پیدا کنم. فقط از سیم های tx ، rx و Gnd استفاده می شود.

اگر دستگاه تجاری تری دارید که از ولتاژ آماده به کار پشتیبانی می کند و/یا نمی خواهید ضمانت دستگاه خود را باطل کنید ، می توانید مستقیماً به پورت تشخیص متصل شوید ، اما ممکن است نتوانید دستگاه را با استفاده از این دستگاه روشن کنید.

دستگاه من از کانکتور 7 پین استفاده می کند. از چپ به راست این است:

NC Tx G Rx NC 5v NC

پین های مربوطه روی صفحه اصلی: قرمز = نارنجی Gnd = Rx سیاه = Tx

اطلاعات بیشتر را می توانید در مورد pinouts در اینجا پیدا کنید:

مرحله 6: سیم کشی سمت منطق

سیم کشی سمت منطق
سیم کشی سمت منطق
سیم کشی سمت منطق
سیم کشی سمت منطق
سیم کشی سمت منطق
سیم کشی سمت منطق

نمودار را مرور کنید - بسیار پیچیده به نظر می رسد اما واقعاً اینطور نیست.

من مبدل تراز را با نوار دو طرفه به پشت تنظیم کننده ولتاژ (تخلیه شده) نصب کردم. سپس از برخی پایه های قطعه برای لحیم کردن پین های برق و پایه در دو طرف مبدل سطح به پین های ماژول قدرت مربوطه استفاده کردم. کل این ماژول پس از آن برای تمام منطق و منبع تغذیه ESP-01 مانند "گذر" عمل می کند.

من از دو مبدل وسط برای داده های سریال و دو خروجی برای سیگنال های رله استفاده کردم اما مهم نیست که از کدام استفاده می کنید.

در واقع لازم نیست که با این ماژول های رله منطق 5 ولت را اجرا کنید زیرا آنها LOW فعال هستند اما فقط خوب کار کرد بنابراین من به هر حال این کار را کردم.

من برای اتصال به ماژول ESP از هدر زن 4x2 استفاده کردم. این امکان بارگذاری آسان کد یا جایگزینی ماژول را فراهم می کند.

ورودی 5 ولت در نمودار نشان داده نشده است - من سیم خود را مستقیماً به ماژول رله وصل کردم (تصویر دوم را ببینید). سیم سیاه در سمت چپ پایین تصویر داده های سریال را روی صفحه اصلی خاموش می کند. من از بخشی از کابل تقویت شده هدفون 3.5 میلی متری محافظت شده فقط برای کاهش احتمال تداخل در خط داده استفاده کردم.

کد 12f به جای سریال سخت افزاری از SoftwareSerial استفاده می کند - این به ماژول اجازه می دهد وضعیت را برای اشکال زدایی از طریق سریال معمولی گزارش کند. به جای آن اتصالات از طریق پین 4 و 5 انجام می شود. من همان سرصفحه را اقتباس کردم تا ESP12F را به عنوان یک مبدل مبدل برای ESP-01 تبدیل کنم ، فقط آن پین های سری را عوض کنم

مرحله 7: برنامه نویسی ماژول

برنامه نویسی ماژول
برنامه نویسی ماژول

کد در برابر Arduino 1.8.1 با افزونه برد ESP8266 و PubSubClient 2.6.0 (که کتابخانه MQTT است) کامپایل شد

کد را مطابق نیاز خود تغییر دهید و کد را در ماژول ESP-01 بارگذاری کرده و به دستگاه وصل شوید. در جهت گیری پین ها دقت کنید!

پیکربندی

انتخاب 1)

فقط روی کد پایه در zip. هنگامی که اولین بار ماژول ESP بوت می شود ، به حالت AP می رود و IP آن را روی 192.168.4.1 تنظیم می کند. سپس می توانید به ماژول متصل شوید و IP را تغییر دهید و به نقطه دسترسی خود متصل شوید. شما همچنین باید IP دستگاه خود را در آن محدوده تنظیم کنید زیرا DHCP روی ماژول وجود ندارد.

SSID پیش فرض AP 'ESPSwitch' و رمز عبور '12345678' است

به طور پیش فرض 2 دقیقه در حالت AP می ماند. شما می توانید این تنظیم را در 'global.h' تغییر دهید - آن را adminTimeout می نامند و بر حسب میلی ثانیه است. من توصیه می کنم وقتی یک پیکربندی معتبر در EEPROM دارید ، این مورد را به چیزی کم تغییر دهید زیرا در غیر این صورت فقط باعث تاخیر غیر ضروری در بوت دستگاه می شود.

گزینه 2)

این حالت پیش فرض برای کد جدیدتر است که از دو طرفه پشتیبانی می کند ، گزینه 1 در دسترس نیست. همچنین می توانید تنظیمات پیش فرض SSID/رمز عبور را در فایل اصلی اینو تغییر دهید (به دنبال '// DEFAULT CONFIG' باشید) تا بارگیری شود آن تنظیمات را در اولین بوت شدن در EEPROM انجام دهید و تاخیر حالت مدیر را در 'global.h' به مقدار کمی تغییر دهید. با این کار از اتصال به AP موقت جلوگیری می شود.

دستگاه به طور خودکار شناسه MQTT (و مسیر اشتراک) را روی 4 رقم آخر شماره سریال ماژول ها تنظیم می کند. مسیر به طور پیش فرض ha/mod //#است ، به دلخواه خود تغییر دهید ، اما نظرات موجود در کد را بخوانید تا مطمئن شوید که آرایه مناسب دارای طول مناسب است.

من این کار را انجام می دهم به این معنی که من مجبور نیستم برای هر ماژول در شبکه خود یک شناسه منحصر به فرد ایجاد کنم.

شناسه دستگاه قابل مشاهده است و می توان سرور MQTT را از طریق صفحه سرور MQTT در سرور وب داخلی تنظیم کرد

مرحله هشتم: آماده کردن کارها…

دستورات MQTT هستند

ha/mod/xxxx/0 یا 1 = ضامن قدرت

هر رشته دیگر به عنوان یک دستور تلقی می شود و از طریق پورت سریال ارسال می شود. وضعیت به /هکتار /قهوه در 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"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] تغییر آیتم = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Rinse"] مورد متن = Coffee_Status label = "وضعیت [٪ s] "}

voicecontrol.rules

واردات org.openhab.model.script.actions.* وارد کردن org.openhab.core.library.types.* واردات java.util.*

قانون "قوانین فرمان صوتی"

وقتی Item VoiceCommand فرمان دریافت کرد ، سپس var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec" ، "VoiceCommand دریافت"+فرمان)

if (command.contains ("روشن کردن دستگاه قهوه ساز") || command.contains ("خاموش کردن دستگاه قهوه ساز")) {

sendCommand (Coffee_Machine_Power، 1)} if (command.contains ("برای من یک قهوه کوچک درست کنید")) {sendCommand (Coffee_Machine_Cmd، "FA: 09")}} اگر (command.contains ("برای من یک قهوه بزرگ درست کنید")) { sendCommand (Coffee_Machine_Cmd ، "FA: 0A")}} اگر (command.contains ("شستن قهوه ساز")) {sendCommand (Coffee_Machine_Cmd ، "FA: 04")}} پایان

قوانین (برای تفسیر پاسخ های HEX به مقادیر "واقعی"):

قانون "وضعیت دستگاه قهوه" هنگامی که مورد Coffee_Machine_Status دریافت به روز رسانی و سپس var String reply = Coffee_Machine_Status.state.toString () if (respond.indexOf ("ic:")> -1) {var String hexString = answer.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)

if (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 (answer == "Off") {postUpdate (Coffee_Status ، "Off")} پایان

مرحله نهم: اصلاحات/روش کار

راه اندازی اولیه اتصال به wifi - Done را ساده کنید. ایده "حالت مدیریت" را رها کرد زیرا آزاردهنده بود. اکنون فقط کافی است SSID و رمز عبور را در کد وارد کنید. در صورت به روز رسانی/تغییر از طریق رابط وب در EEPROM ذخیره می شود.

کد جدیدتر همچنین از به روزرسانی های OTA پشتیبانی می کند ، اما برای کارکردن یا اظهار نظر در مورد موارد OTA مربوطه ، باید EEPROM را در ماژول ESP-01 ارتقا دهید

کد را برای پردازش پاسخ ها از دستگاه اضافه کنید و وضعیت را بدون سینی ، زمین خالی و مخزن پر پر کنید - انجام شد. من کد را برای بازخوانی وضعیت و انتشار در ha/coffee اضافه کرده ام. این فقط پاسخ های خام است و من هنوز روی تفسیر آنها کار می کنم ، اما تا کنون سینی گم شده است و مخزن خالی کار می کند. هنگام روشن شدن دستگاه هر 9 ثانیه نظرسنجی می کند و پاسخ MQTT را منتشر می کند

پاسخ در HEX است اما بیت های جداگانه سنسورها را نشان می دهند

کد را برای کنترل مستقیم از طریق دستورات HTTP GET به صفحات وب اضافه کنید.

مسابقه اینترنت اشیا 2017
مسابقه اینترنت اشیا 2017
مسابقه اینترنت اشیا 2017
مسابقه اینترنت اشیا 2017

اولین جایزه مسابقه اینترنت اشیاء 2017

توصیه شده: