نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اهن
  • گرمایش خانه روستایی با استفاده از آردوینو با انتقال داده به اینترنت. ساخت اتوماسیون برای یک کارخانه آبجوسازی روی یک تخته

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

اتوماسیون در جامعه مدرناقدام لازم، زیرا در عصر دیجیتالبسیار مهم است که حذف شود عامل انسانیدر صنایع مختلف برای استانداردسازی و بهبود کیفیت محصول. همچنین مناطقی وجود دارد که انسان‌ها نمی‌توانند کارهایی را انجام دهند که ربات‌ها قادر به انجام آن هستند، مثلاً تولید نانومواد و ریزمدارها.

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

مزایای اصلی سیستم های خودکار مبتنی بر میکروکنترلر آردوینو

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

  1. مانع ورود کم نیازی به تحصیلات مهندسی نیست، کافی است چند فیلم آموزشی ببینید و پایه برنامه نویسی داشته باشید.
  2. تعداد زیادی کتابخانه از قبل آماده شده است. آردوینو در سراسر کشورهای مستقل مشترک المنافع توسط بسیاری از علاقه مندان به رباتیک استفاده می شود، تا جایی که تولید انواع لوازم الکترونیکی به سرگرمی آنها تبدیل می شود. بر این اساس، جامعه کاربران آنلاین بسیار فعال است، تعداد زیادی خالی پست می کند و آماده است تا به شما در حل هر مشکلی کمک کند. کیفیت کتابخانه‌ها به دلیل آستانه ورودی پایین پایین می‌آید، اما هیچ‌کس شما را منع نمی‌کند که کتاب خود را ایجاد کنید؛ فقط کافی است معنای زبان C++ را مطالعه کنید یا از مترجم‌های آماده استفاده کنید.
  3. تعداد زیادی لوازم جانبی. فرقی نمی‌کند که به اتوماسیون گلخانه مبتنی بر آردوینو نیاز داشته باشید یا یک سنسور نور، ماژول‌هایی از جمله سنسورهای صدا و تشخیص‌دهنده صدا را خواهید یافت. بله، برخی از تخته ها هزینه زیادی دارند، اما همیشه می توانید آنالوگ های ارزان قیمت پیدا کنید، به عنوان مثال، ماژول وای فایاز جانب تولید کنندگان شخص ثالث esp8269 که قیمت آن 10 برابر کمتر از رسمی است.
  4. اطلاعات زیاد. هر مشکلی که با آن روبرو هستید قبلاً توسط شخص دیگری با آن مواجه شده است و احتمالاً راه حلی را در گوگل پیدا خواهید کرد. همچنین ادبیات کاملی وجود دارد که می توانید با آنها مشورت کنید.

با این حال، فکر نکنید که آردوینو هیچ نقصی ندارد. این تابلو به دلیل عملکرد پایینش معروف است. به خصوص وظایف پیچیدهو در مقادیر زیادزمان پاسخ کد می تواند به 1 ثانیه برسد که برای میکروکنترلرها غیرقابل قبول است. حافظه فلش اکثر ماژول ها از 1 مگابایت تجاوز نمی کند که برای ایجاد شبکه های عصبی یا استفاده از فایل های رسانه ای کافی نیست. البته میتونی وصل بشی نقشه کمکیحافظه، اما این نیز زمان پاسخ را افزایش می دهد، از بین می برد منابع اضافیبرای تغذیه او و به صورت نیمه‌صنعتی انجام می‌شود.

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

نمونه ای از اتوماسیون فرآیند بر اساس میکروکنترلر آردوینو

ساده ترین مثال از اتوماسیون فرآیند می تواند گلخانه ای با استفاده از آردوینو باشد. برای ایجاد هر سیستمی، ارزش آن را دارد که وظایفی را که باید انجام دهد به وضوح تعریف کنید. با استفاده از یک گلخانه به عنوان مثال، به این صورت خواهد بود:

  1. ایجاد آب و هوای خاص.
  2. روشن و خاموش کردن به موقع روشنایی
  3. آبیاری به موقع گیاهان و حفظ رطوبت هوا در یک سطح.

بر اساس این وظایف، می توانید بلافاصله متوجه شوید که برای برد اصلی باید چه چیزی بخرید:

  1. حسگر دما. این اطمینان حاصل می کند که هوا گرم یا سرد نمی شود، زیرا در محدوده های تعیین شده توسط برنامه قرار دارد. در صورت تغییر دما، برد کولر یا باتری های الکترونیکی را روشن می کند.
  2. حسگر روشنایی. البته می توانید خودتان را محدود کنید راه حل نرم افزاریو لامپ های گران قیمت را به صورت تقلیدی بخرید نور روز. اما اگر می خواهید یک گلخانه تمام عیار ایجاد کنید، نصب سقف اتوماتیک که توسط آردوینو کنترل می شود بسیار راحت تر خواهد بود.
  3. سنسور رطوبت. در اینجا همه چیز مانند دما است، طبق سناریوی تعیین شده، در صورت لزوم، برد سمپاش ها و مرطوب کننده ها را روشن می کند.

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

برنامه نویسی میکروکنترلرهای آردوینو برای اتوماسیون فرآیند. مثال

مانند نکته قبل، برای برنامه نویسی مهم است که وظیفه را به زیر نقطه های جداگانه تقسیم کنید و آنها را به صورت متوالی انجام دهید. برنامه نویسی آردوینو به لطف دستورات موجود در رابط AT و AT+ با استفاده از کتابخانه های آماده انجام می شود. بر این اساس، تمام سناریوها در نوشته شده است محیط خاصدر C++ و قبل از انجام هر کاری، زمانی را صرف یادگیری معناشناسی آن کنید. علاوه بر اجرا توابع ساده، این سیستم همچنین قادر به ذخیره اسکریپت ها در حافظه فلش است که در این مثال به آن نیاز داریم.

فراموش نکنید که اطلاعات هر سنسور در زمان واقعی و به صورت متغیر می آید، اما می توانید زمان پاسخگویی را محدود کنید، زیرا نیازی به صرف منابع و اندازه گیری مداوم هر پارامتر نیست. بر این اساس، زمان روشن و خاموش شدن هر سنسور را تنظیم کنید یا زمان پاسخ را برای یک دوره مشخص تنظیم کنید.

چرا به اتوماسیون نیاز داشتم؟

برای تسهیل فرآیند به اتوماسیون نیاز است، زیرا ... این کنترلر خود دما را کنترل می کند، آن را حفظ می کند و آن را تا مکث دمای مورد نیاز بالا می برد. همچنین سیگنال دهید سیگنال صوتیدر مورد مداخله لازم، به عنوان مثال، باید مالت اضافه کنید یا آزمایش ید انجام دهید.

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

من اولین اتوماسیون را با استفاده از ماژول ها مونتاژ کردم:

- آردوینو مینی
- بلوک از دو رله 15A
- نمایش 2004
- حسگر دما
- 4 دکمه
- منبع تغذیه 5 ولت
راحتی مونتاژ مدولار این است که تهیه تمام قطعات دشوار نیست و عملاً نیازی به لحیم کاری نیست. اما بزرگترین عیب آن است مقدار زیادیسیم‌ها و یک رله ارزان قیمت چینی تداخلی روی نمایشگر ایجاد می‌کرد، بنابراین رله مکانیکی باید با یک رله حالت جامد جایگزین می‌شد.

با گذشت زمان، به این نتیجه رسیدم که باید اتوماسیون خود را بر روی تراشه ای با حافظه 64 کیلوبایت بسازم (برای آردوینو مینیفقط 32 کیلوبایت) روی یک برد. راه حل آمادهمن آن را پیدا نکردم، بنابراین خودم شروع به ایجاد یک مدار و متعاقباً یک تابلو برای کاردستی خود کردم.

طرح:

من نمودار را، به اصطلاح، روی زانو و برای خودم توسعه دادم و ترسیم کردم، بنابراین برخی از کاستی ها ممکن است، اما نمودار کاملاً کار می کند:

پرداخت:

مدار رو رسم کردم بعد میمونه که برد رو بکشم اول با استفاده از برنامه ترسیمش کردم Sprint-Layout 6، بسیار راحت است، اما عملکرد کافی ندارد، بنابراین تصمیم گرفتم از آن به سمت برنامه حرکت کنم DipTraceو این چیزی است که من دریافت کردم:

می توانید منابع را دانلود کنید.
همانطور که می بینید، من نام کارخانه آبجوسازی خود را QRBeer گذاشتم و این قبلاً نسخه 0.5 است ...

برد آماده است، تنها چیزی که باقی می ماند این است که به نحوی آن را تولید کنیم. برای این تصمیم گرفتم استفاده کنم. چرا آنها و نه LUT؟ من فقط تصمیم گرفتم این را برای خودم امتحان کنم تکنولوژی جدید، من قبلاً LUT را امتحان کردم ، آن را احساس کردم ، بنابراین نمی گویم که دوستش داشتم ...

مقاوم در برابر نور:

برای ساخت برد مدار چاپیبا استفاده از Photoresist شما نیاز دارید:
- فیلم چاپگر
-
- لامپ ماوراء بنفش
- خاکستر سودا

لامپ ماوراء بنفش

ابتدا، من اطلاعاتی را در مورد نحوه ساختن خودم به اشتراک خواهم گذاشت لامپ UV. ابتدا می خواستم از یک لامپ آماده استفاده کنم و سپس تصمیم گرفتم آن را با استفاده از شش LED 3W مونتاژ کنم:
و همچنین در تائو خریداری شده است:


من LED ها را به رادیاتور چسباندم ، اگرچه می شد آنها را روی PCB مونتاژ کرد ، اما شک دارم که بیش از حد گرم شده باشند.
این چیزی است که من دریافت کردم:


تولید تخته

1. بنابراین، من قالب را آماده کرده ام، تنها چیزی که باقی می ماند چاپ آن روی فیلم است. همانطور که در بالا نوشتم، من به یک فیلم برای چاپگر نیاز دارم، فیلم را برای هر دو امتحان کردم پرینتر لیزریو برای جوهر افشان، بهترین گزینهفقط در فیلم برای چاپ جوهر افشان. شما باید به صورت نگاتیو و تصویر آینه ای چاپ کنید:

من فوراً قالب را لمینت کردم تا اثر انگشت و زباله ها به راحتی شسته شوند.
2. بعد ما باید تخته آینده خود را (لمینت فایبرگلاس) سنباده بزنیم. یک اسفنج معمولی یا اسفنج ملامینه کمی مرطوب برای این کار مناسب است:


3. پس از این روش، مس همچنان باید با استون چربی زدایی شود:


همانطور که در عکس من می بینید، من آن را با یک دستمال معمولی چربی زدم و استون را در یک بطری پراکسید ریختم، بنابراین گرفتن آن راحت تر است ...
4. گام بعدیباید فتوریست را برش دهید تا با حاشیه کمی روی تخته آینده خود قرار گیرد و قسمت بالایی را با دقت بردارید فیلم محافظتا آسیبی به آن وارد نشود. اگر فتوریست داخلی است، باید قسمت مات آن را جدا کنید، اگر چینی است، هیچ تفاوتی وجود ندارد ...
5. در مرحله بعد فتورزیست را روی PCB می چسبانیم تا هیچ حباب هوا در زیر فتورزیست ظاهر نشود وگرنه در چنین جاهایی ردها ظاهر نمی شوند، اضافه آن را قطع کنید...
فرآیند چسباندن مقاومت نوری شبیه به چسباندن فیلم محافظ روی گوشی است.


6. هنگام چسباندن فتورزیست، باید تکستولیت را با آن 2 تا 3 بار از لمینت رد کنید یا از اتو گرم استفاده کنید و از طریق یک ورق کاغذ که از وسط تا شده اتو کنید:


نکته اصلی این است که مقاومت نوری را بیش از حد گرم نکنید، در غیر این صورت اینگونه خواهد شد:


اگر در هنگام چسباندن فتورزیست دچار "گیره" شدید، بهتر است آن را بردارید (آن را بشویید یا خراش دهید) و دوباره آن را بچسبانید، در غیر این صورت بعد از حکاکی تخته ناراحت می شود ... حذف نمی کنم. این فوتوریست، نتیجه نهایی را به شما نشان خواهم داد.
7. یک قالب روی PCB با فوتوریست قرار دهید و آن را با شیشه فشار دهید (من آن را از یک قاب عکس قدیمی گرفتم) و وزنه ای را روی شیشه قرار دهید:


8. با استفاده از یک لامپ UV، مقاومت نوری را روشن می کنیم. لامپ من حدود 2 دقیقه دوام می آورد:


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


10. مرحله بعدی این است که فتوریست توسعه نیافته را با مواد قلیایی بشویید؛ برای این کار، 2 لیوان آب و یک قاشق غذاخوری خاکستر سودا را بردارید، خوب هم بزنید. لایه محافظ بالایی فترزیست را جدا کرده و تکستولیت ما را در محلول قلیایی فرو کنید.


11. یک برس بردارید و سه تکه فوتورزیست را در ماده قلیایی بمالید، به تدریج فتورزیست توسعه نیافته شسته می شود:


قلیایی را نمی توان بیرون ریخت، بلکه آن را رها کرد هزینه بعدییا برای شستن فتوریست پس از اچ کردن، اما بعداً در مورد آن بیشتر ...
12. حکاکی تخته:
دو روش قابل دسترس وجود دارد: اچ کردن با کلرید آهن یا پراکسید + اسید سیتریک و نمک. من در مورد کلرید آهن نمی نویسم، اما احتمالاً آن را با استفاده از پراکسید توصیف خواهم کرد:
- 100 میلی لیتر. پراکسید هیدروژن 3٪ - در داروخانه به قیمت 7-12 روبل فروخته می شود
- 30 گرم اسید سیتریک(در هر فروشگاه مواد غذایی موجود است)
- 1 قاشق غذاخوری. قاشق نمک (هم نمک خوب و هم نمک سنگ درست است)


همه اینها در یک ظرف مخلوط می شود و تخته با مقاومت نوری تمام شده در آنجا غوطه ور می شود، پس از مدتی حباب هایی روی تخته ظاهر می شود:


و پس از مدتی، "مس لخت" به طور کامل حکاکی می شود:


به هر حال، اگر شما در بیشتر مسمومیت کنید درجه حرارت بالامثلاً با یک لامپ رشته ای یا در حمام آب، آنگاه سه اچینگ کم می شود، نکته اصلی این است که زیاده روی نکنید، در غیر این صورت اضافی آن حک می شود ...
13. راحت ترین راه برای برداشتن فتورزیست در همان قلیایی است که فتورزیست بدون فتوشاپ در آن شسته شده است؛ بعد از 20 دقیقه خود به خود می ریزد و نیازی به مالیدن نیست...

و در اینجا "جنگ های" من هستند:


اگرچه قابل توجه نیست، اما با این حال، بی احتیاطی مقصر همه چیز است، متوجه حباب های هوا در زیر نور مقاوم نشده اید یا بیش از حد گرم شده است ...

من تابلوی زیر را "تمیز" دریافت کردم:


14. سپس، تخته را سوراخ کرده و قلع و قمع کنید:


15. تمام قطعات را لحیم کنید و شار اضافی را بشویید:


قطعات SMD لحیم شده از مادون قرمز چینی ایستگاه لحیم کاری، خیلی راحت:

این همه چیز است، سخت ترین بخش به پایان رسیده است، تنها چیزی که باقی می ماند زنگ زدن آهنگ ها است مدار کوتاهو شروع به برنامه نویسی تراشه کنید.

برنامه نویسی atmega644

1. برای شروع برنامه نویسی، باید بوت لودر را در آن بارگذاری کنید. انجام این کار سخت نیست با استفاده از آردوینو UNO، اما ابتدا باید برنامه را دانلود و نصب کنید.
2. مرحله بعدی برنامه نصب شدهفوراً یک مونتاژ آماده را اضافه یا تهیه کنید:
3. طرح ArduinoISP را در UNO آپلود کنید:

4. و برد ما را به UNO وصل کنید:


طبق دستورالعمل طرح:
// نام پین // تنظیم مجدد slave: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
طبق طرح من به این شکل معلوم می شود:

5. بعد، برد ما را در تنظیمات نصب کنید و بوت لودر را بارگذاری کنید:




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

... آیا ما نباید آبجو خود را دم کنیم؟

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

چند سال بعد تصمیم گرفتم این فرآیند را تکرار کنم و با استفاده از Arduino UNO کمی آن را خودکار کنم. و این چیزی است که اتفاق افتاد.

من با کاری که کل تنظیمات قرار است انجام دهد شروع می کنم.

  • خودتان را بررسی کنید - آیا همه چیز کار می کند، آیا همه چیز متصل است.
  • خودت را پاک کن؛
  • آماده شدن برای فرآیند دم کردن؛
  • آبجو را روی زمین دم کنید حالت خودکار;
  • آبجو را به صورت دستی دم کنید؛
  • آبجو را به طور خودکار دم کنید (مانند ماشین لباسشوییلباسها را میشوید).

نقطه اول در این لحظهاجرا نشده. تا الان حتی فکری هم در مورد نحوه اجرای آن ندارم.
دومی هم اجرا نشده ولی در آینده نزدیک تمومش میکنم فقط منتظر تحویل پمپ های ebay هستم.
نکته سوم بسیار ساده است.

آماده شدن برای فرآیند دم کردن

پیامی از سیستم مبنی بر لزوم ریختن آب در vat -> برنامه منتظر می ماند تا کلید OK فشار داده شود -> برنامه ارسال می کند. دستور آردوینوبرای روشن کردن رله حالت جامد -> رله حالت جامد المنت حرارتی یک کیلوواتی در دیگ را روشن می کند، آن را به دمای 37 درجه می رساند، به برنامه دستور می دهد که همه چیز برای پخت و پز آماده است. دمای 37 درجه را حفظ می کند.

من دوست دارم برای وجود آب بررسی شود، اما سنسور هنوز منتظر ارسال از "برادران چینی" است.

دم کردن آبجو در حالت نیمه اتوماتیک

در اصل، یک روش ساده:

را کلیک کنید برنامه کنترلدکمه "گرم شدن"، سایر دکمه های کنترل غیرفعال هستند.
- پس از گرم شدن، برنامه پیام "همه چیز آماده است، می توانید آشپزی کنید" را نمایش می دهد.
- مواد را اضافه کنید، برنامه دم کردن را انتخاب کنید - دکمه "Brewing Beer" فعال می شود.
- دکمه "Brewing Beer" را فشار دهید، فرآیند شروع شده است.
- در مرحله بعد، سیستم به صورت دوره ای اطلاع رسانی خواهد کرد پیام های اطلاعاتیچه کاری و چه زمانی انجام شود.

شما باید دستورالعمل ها را دنبال کنید.

دم کردن آبجو به صورت دستی

این فرآیند به شما امکان می دهد پارامترهای پخت و پز را تنظیم کرده و آنها را در طول چرخه پخت تغییر دهید. هنوز بهش نرسیده

پخت و پز خودکار

این یک رویاست. در حال حاضر هیچ مؤلفه ای برای پیاده سازی وجود ندارد. پمپ ها و سنسورهای سطح آب کافی وجود ندارد. من نمی دانم چگونه چگالی مخمر، میزان الکل موجود در آبجو جوان و موارد دیگر را اندازه گیری کنم. اما من ناامید نمی شوم و به تدریج خودکار می کنم تا زمانی که دم کردن آبجو به این شکل باشد:

مواد را داخل سینی های مناسب ریختم، دکمه را فشار دادم و... بعد از یک ماه و نیم آبجوی تمام شده به دستم رسید.

این یک مرور مختصر از روند است، اکنون اجازه دهید به سمت فنی حرکت کنیم.

جنبه فنی فرآیند

همانطور که در بالا گفته شد، میکروکنترلر کنترلی است آردوینو UNO. 2 رله به آن متصل است، 2
دماسنج دیجیتال DS18B20.

آردوینو از طریق پورت com با برنامه اصلی ارتباط برقرار می کند. زیرا من پلاک بلادرنگ برای آردوینو ندارم، مجبور شدم تایمرهایی را از ویژوال سی شارپ بگیرم. من هیچ تجربه ای در برنامه نویسی ندارم، بنابراین اگر کسی نظر یا انتقادی داشته باشد، مورد تقدیر قرار خواهم گرفت. اگر به طور ناگهانی از آن خوشتان نیامد، به اصطلاح انتقاد کنید، پاره کنید.

در اینجا متن برنامه در آردوینو آمده است

#عبارتند از OneWire ds(8); // سنسورهای دما روی پایه 8 int reley1 = 13 قرار دارند. int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; //فعال کردن tens int reley6 = 6; // حرارت روی mash tun float temp1; float temp2; void setup(void) (Serial.begin(9600)؛ pinMode(reley1,OUTPUT)؛ pinMode(reley2,OUTPUT)؛ pinMode(reley3,OUTPUT)؛ pinMode(reley4,OUTPUT)؛ pinMode(reley5,OUTPUT)؛ pinMode( reley6, OUTPUT؛ digitalWrite (reley1, LOW)؛ digitalWrite (reley2, LOW)؛ digitalWrite (reley3, LOW؛ digitalWrite (reley4, LOW؛ digitalWrite (reley5, LOW؛ digitalWrite (reley6, LOW)؛ ) حلقه خالی (باطل) ( if (Serial.available()) ( سوئیچ (Serial.read())( case "i": infuz(); break; case "p": progrev(); break; case "a": avariya () break; case "v": varka(); break; case "t": temperature(); break;) ) ) void varka() ( digitalWrite(reley6, HIGH)؛ while(Serial.read()! ="m") ( temperature(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); other digitalWrite(reley6,HIGH); ) while(Serial.read(!="n") (//digitalWrite (reley6,HIGH)؛ temperature(); if(temp1>= 62.00) digitalWrite(reley6,LOW)؛ در غیر این صورت digitalWrite(reley6,HIGH); ) while(Serial.read()!="b") (//digitalWrite (reley6,HIGH)؛ temperature(); if(temp1 >= 75.00) digitalWrite(reley6,LOW); other digitalWrite (reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") delay(1000); while(Serial.read(!="x") ( digitalWrite(reley5,HIGH); temperature(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperature(); //Serial.available(); while (Serial.read()!="s")( //غیرفعال کردن چرخه دم کردن انفوزیون اگر (دمای)<=69.50) digitalWrite(reley5,HIGH); else digitalWrite(reley5,LOW); } digitalWrite(reley5,LOW); } void progrev() { while (temp1 <=36.00) temperature(); digitalWrite(reley6,HIGH); digitalWrite(reley6,LOW); //while (temperature() >40.0) //تاخیر(1000); Serial.println("s"); ) تصادف void())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW)؛ digitalWrite(reley4,LOW); digitalWrite(reley5,LOW)؛ ) void temperature() (بایت i ؛ بایت موجود = 0؛ داده بایت؛ بایت جمع کننده؛ بایت زاتور = (40، 23، 218، 43، 6، 0، 0، 22)؛ // آدرس سنسور دما در بایت ماش Varilka = (40، 255 , 240, 115 , 59, 4, 0, 234)؛ //آدرس سنسور دما در vat brew float Celsius؛ // Float Temp; Boolean where; if (!ds.search(addr)) ( //Serial .println("دیگر آدرسی وجود ندارد."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) !=adr) ( Serial.println("CRC معتبر نیست!")؛ // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // شروع به تبدیل، با روشن بودن انگل در انتهای تاخیر(840) ؛ // شاید 750 میلی‌ثانیه کافی باشد، شاید نه // ممکن است یک ds.depower() در اینجا انجام دهیم، اما تنظیم مجدد به آن رسیدگی می‌کند. present = ds.reset(); ds.select (addr)؛ ds.write (0xBE)؛ // خواندن Scratchpad برای (i = 0; من< 9; i++) { // we need 9 bytes data[i] = ds.read(); } int16_t raw = (data << 8) | data; byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms celsius = (float)raw / 16.0; for(i = 0; i<8; i++) { if (addr[i] == zator[i]) gde = true; else { gde = false; break; } } if (gde) { Serial.print("t2 "); //temperatura варочника temp2 = celsius; Serial.print(temp2); Serial.println(); } else { Serial.print("t1 "); //температура затора temp2 = celsius; Serial.print(temp1); } }

همه چیز خوب خواهد بود، اما به دلایلی سنسور سوم دائماً 85 درجه را نشان می دهد. هنوز نمی توانم بگویم چرا. و برای اتوماسیون بیشتر - حفظ دما در یخچال - مورد نیاز است.

من به طور خلاصه توضیح خواهم داد که برنامه چه کاری انجام می دهد.

این برنامه به زیربرنامه هایی تقسیم می شود که هر یک از آنها در صورت ظاهر شدن نماد خاصی در پورت com فعال می شود. به عنوان مثال، اگر حرف "p" وارد پورت شود، حالت "گرم شدن" فعال می شود. یا اگر «a» باشد، زیربرنامه avariya() فراخوانی می‌شود و همه چیز خاموش می‌شود. هنگام فراخوانی subroutine temperature()، داده ها روی متغیرهای سراسری temp1, temp2 نوشته می شوند. از آنجا وارد زیربرنامه های لازم می شوند.

در آینده، برنامه های فرعی برای دم کردن انواع مختلف و حتی مهتاب وجود خواهد داشت.

حالا در مورد برنامه کنترل اصلی.

برنامه کنترل اصلی

در ویژوال استودیو c# نوشته شده است.

کد منبع برنامه:

کد منبع برنامه

با استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.ComponentModel. با استفاده از System.Data؛ با استفاده از System.Drawing. با استفاده از System.Linq؛ با استفاده از System.Text. با استفاده از System.Threading.Tasks. با استفاده از System.Windows.Forms. با استفاده از System.IO.Ports. فضای نام WindowsFormsApplication1 (کلاس جزئی عمومی Form1: Form ( // شماره پورت رشته؛ SerialPort Port1 = SerialPort جدید ("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) /* private const int CP_NOCLOSE_BUTTON 0x200؛ نادیده گرفتن محافظت شده CreateParams CreateParams ( دریافت ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; myCp; ) )*/ خصوصی void Form1_Load. PortName; Port1.Open(); ) //بررسی تجهیزات خصوصی void button1_Click(object sender, EventArgs e) (اگر (Port1.IsOpen == false) ( سعی کنید (//برنامه را می توان اطلاعات را از podrugomu.com/node تغییر داد /987 Port1.PortName = label2.Text؛ Port1.Open(); Port1.Write("Check")؛ //SerialPort Port2 = New SerialPort("COM4", 9600); //Port2.Open(); // label3. Text = Convert.ToString(Port2.ReadByte())؛ //بررسی خوانش پورت MessageBox.Show("فرآیند بررسی سخت افزار شروع شده است"، "پیام اطلاعات"); richTextBox1.Text = richTextBox1.Text + "\n" + "شروع فرآیند بررسی سخت افزار"+" "+DateTime.Now.ToString("HH:mm"); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "پایان فرآیند بررسی سخت افزار"+" "+DateTime.Now.ToString("HH:mm")؛ button1. Enabled = true؛ button2.Enabled = true؛ button3.Enabled = true؛ Port1.Close(); MessageBox.Show("End of Hardware Check Cycle" +" "+ DateTime.Now.ToString("HH:mm")) ; richTextBox1.SaveFile("CheckLOG.rtf"); ) ) catch ( richTextBox1.Text = richTextBox1.Text + "\n" + "خطای فرآیند بررسی سخت افزار" +" "+ DateTime.Now.ToString("HH:mm" ) ؛ MessageBox.Show("پورت دستگاه نامعتبر انتخاب شد. فرآیند بررسی نمی تواند شروع شود"، "هشدار"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // دکمه خلاء خصوصی پاکسازی تجهیزات3_Click(فرستنده شی، EventArgs e) (اگر (Port1.IsOpen == نادرست) ( سعی کنید (//برنامه را می توان اطلاعات را از podrugomu.com/node/987 MessageBox تغییر داد. Show("شما قطعا ضد عفونی کننده ریخته اید"، "WARNING"، MessageBoxButtons.OK، MessageBoxIcon.Warning); پورت 1. PortName = label2.Text; Port1.Open(); Port1.Write ("Clean"); MessageBox.Show("فرایند تمیز کردن تجهیزات شروع شده است"، "پیام اطلاعات"); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; if (Port1.ReadByte() == 1000) ( button1.Enabled = true؛ button2.Enabled = true؛ button3.Enabled = true؛ Port1.Close(); MessageBox.Show("پایان چرخه تمیز کردن تجهیزات")؛ ) ) catch ( MessageBox.Show ("پورت دستگاه نامعتبر انتخاب شد. فرآیند تمیز کردن نمی تواند شروع شود"، "هشدار"); ) ) ) خصوصی void contextMenuStrip1_Opening(فرستنده شی، CancelEventArgs e) ( ) خلاء خصوصی coOM1ToolStripMenuItem_Click(entArgs ender, ) ( SerialPort Port1 = SerialPort ("COM1"، 9600)؛ // MessageBox.Show("پورت COM1 انتخاب شده")؛ label1.Visible = true؛ label2.Text = "COM1"؛ ) private void label2_Click(فرستنده شی، EventArgs e) () خلأ خصوصی com2ToolStripMenuItem_Click(فرستنده شی، EventArgs e) (SerialPort Port1 = New SerialPort("COM2", 9600)؛ // MessageBox.Show("پورت COM2 انتخاب شده")؛ label1.Visible = true؛ label2. Text = "COM2"; ) private void com3ToolStripMenuItem_Click(object sender, EventArgs e) (SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("پورت COM3 انتخاب شده"); label1.Visible = true; label2.Text = "COM3"; ) private void com4ToolStripMenuItem_Click(فرستنده شی، EventArgs e) (SerialPort Port1 = New SerialPort("COM4", 9600); // MessageBox.Show("پورت COM4 انتخاب شده")؛ label1.Visible = true; label2.Text = "COM4" "; ) private void com5ToolStripMenuItem_Click(فرستنده شی، EventArgs e) (SerialPort Port1 = New SerialPort("COM5", 9600); // MessageBox.Show("پورت COM5 انتخاب شده"); label1.Visible = true; label2.Text = "COM5"؛ ) خلأ خصوصی com6ToolStripMenuItem_Click(فرستنده شی، EventArgs e) (SerialPort Port1 = New SerialPort("COM6"، 9600)؛ // MessageBox.Show("پورت COM6 انتخاب شده")؛ label1.Visible = true؛ label2. متن = "COM6"؛ ) خلأ خصوصی com7ToolStripMenuItem_Click(فرستنده شی، EventArgs e) (SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("پورت COM7 انتخاب شده")؛ label1.Visible = true; label2.Text = "COM5"; ) برنامه خلأ خصوصی BrewToolStripMenuItem_Click(فرستنده شی، EventArgs e) () // Brew private void button2_Click(object sender, EventArgs e) ( // if (Port1.IsOpen == false) //( // try //( //برنامه را می توان از podrugomu.com/node/987 //Port1.PortName = label2 اطلاعات را تغییر داد. متن؛ //Port1.Open(); سوئیچ (label3.Text) (مورد "Infusion Mashing انتخاب شده": MessageBox.Show("فرآیند آمیختگی تزریق شروع شده است"، "پیام اطلاعات")؛ Port1.WriteLine("i")؛ timer1.Start(); break; case "Cooper brew انتخاب شده": MessageBox.Show("فرایند له کردن کوپر شروع شد"، "پیام اطلاعات")؛ Port1.WriteLine("v"); timer3.Start(); break; ) button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; // button5.Enabled = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* if (Port1.ReadLine() == "e\r") ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5.Enabled = true; */ //Port1.Close( )؛ // MessageBox.Show("پایان چرخه دم کردن"); // ) // ) // catch //( // MessageBox.Show("پورت دستگاه نامعتبر انتخاب شد. فرآیند دم کردن شروع نمی شود"، "هشدار ")؛ //) // )) دکمه خلأ خصوصی5_کلیک کنید(فرستنده شی، EventArgs e) (Port1.Write("p")؛ button1.Enabled = false؛ button2.Enabled = false؛ button3.Enabled = false؛ timer2. Start(); richTextBox1.Text = richTextBox1.Text + "\n" + "شروع گرم کردن آب در mash tun تا 37 درجه" + " " + DateTime.Now.ToString("HH:mm")؛ /* Port1. Open (); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine ("o"); Port1.Close(); */ ) خلاء خصوصی exitToolStripMenuItem_Click(فرستنده شی، EventArgs e) ( Close(); ) private void button4_Click(object sender, EventArgs e) ( ) private void infusionMashToolStripMenuItem_Click(object sender, EventArgsT) =In label; ) خصوصی void timer1_Tick(فرستنده شی، EventArgs e) ( textBox1.Text = Convert.ToString(Convert.ToInt32(s / 60))؛ textBox2.Text = Convert.ToString(Convert.ToInt32(s))؛ s++; label5.Text = Port1.ReadLine(); if (s==4200)( //70 دقیقه است 4200 ثانیه timer1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s")؛ // Port1.Close()؛ MessageBox.Show ("مش تزریق به پایان رسید، مخمر باید فیلتر شود")؛ button1.Enabled = true؛ button2.Enabled = true؛ button3.Enabled = true ; button5.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) private void label4_Click(object sender, EventArgs e) ( ) private void timer2_Tick(فرستنده شی، EventArgs e) ( label5 .Text = Port1.ReadLine(); if (Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("آب 37 درجه است. می توانید مالت اضافه کنید و حالت له کردن را روشن کنید")؛ richTextBox1.Text = richTextBox1.Text + "\n" + "پایان فرآیند آماده سازی mash tun. Т=37 درجه" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void awarteDisableToolStripMenuItem_Click(فرستنده شی، EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("کاربر کل سیستم را خاموش کرده است"؛ ) خصوصی void mash tunToolStripMenuItem_Click(فرستنده شی، EventArgs e) ( Port1.WriteLine("k")؛ MessageBox.Show("حالت جوشاندن Mash Tun تبدیل شده است روشن. 60 دقیقه صبر کنید") ؛ richTextBox1.Text = richTextBox1.Text + "\n" + "حالت جوشاندن Mash tun روشن است. 60 دقیقه صبر کنید" + " " + DateTime.Now.ToString("HH:mm") . , 5)؛ if (s1.Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5)؛ s++; if (s == 900) ( Port1.WriteLine("m" )؛ MessageBox.Show("بازنویسی مرحله در 62 درجه")؛ richTextBox1.Text = richTextBox1.Text + "\n" + "مشخص کردن مرحله در 62 درجه" + " " + DateTime.Now.ToString("HH:mm" ) ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("مرحله مالش در 78 درجه"); richTextBox1.Text = richTextBox1.Text + "\n" + "مرحله مالش در 78 درجه" " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("مرحله Mash کامل شد، می توانید تخلیه wort") ؛ richTextBox1.Text = richTextBox1.Text + "\n" + "مرحله له کردن به پایان رسیده است. می توانید مخمر را تخلیه کنید" + " " + DateTime.Now.ToString("HH:mm"); ) ) private void normalToolStripMenuItem_Click(فرستنده شی، EventArgs e) ( label3.Text = "Cooper brew انتخاب شد"؛ ) ) )

این برنامه از طریق پورت com با آردوینو در ارتباط است. تنها چیزی که نمی توانم بر آن غلبه کنم این است که هنگام نظرسنجی از پورت کام، برنامه در حین اجرای زیربرنامه مسدود نمی شود. پس از پایان برنامه، برنامه هنگ می کند، اما در حال حاضر این مهم نیست و حتی یک نوع مثبت است. بدون خطا - برای جلوگیری از فشار دادن هر چیزی در طول یک روش خاص.

در کل، برنامه می تواند

- تجهیزات پخت و پز را آماده کنید.
- پختن؛
- نوشتن یک گزارش کار ساده (بسیار مفید برای تجزیه و تحلیل بیشتر دم).
- یک پورت برای اتصال به کنترل کننده (arduino UNO) انتخاب کنید.
آبجو و ماش تون را بجوشانید.

وقتی پمپ ها و شیرهای برقی رسید، آنها را بیشتر خودکار می کنم. در ضمن هر یکشنبه یک برنامه آشپزی اضافه میکنم. در کل 5 برنامه خواهد بود. اجرای حالت دستی نیز منتظر نوبت خود است.
به قول معروف،

ادامه دارد...

UPD:

اینم چندتا عکس از آبجوسازی

این هاضمه است. من دو تا از اینها دارم. یک سنسور دمای DS18B20 در یک قاب مهر و موم شده در کنار نصب شده است.
برای مدت طولانی نمی‌توانستم بفهمم که چرا آردوینو به‌طور دوره‌ای یخ می‌زند، تا اینکه متوجه شدم همه چیز باید زمین شود، در غیر این صورت به محفظه، سپس به محفظه سنسور و آردوینو نفوذ می‌کند.

لوله مسی داخل آن برای فیلتر کردن مخمر است. می توان آن را زیباتر کرد اما بهتر است از ته کاذب استفاده کنید. متاسفانه چینی ها عجله ای برای ارسال آن ندارند.

خیلی زود است که در مورد نتیجه صحبت کنیم، این اتفاق افتاد

نمای کلی vat به این صورت است.

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

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

شیرهای برقی بالاخره رسید. روند اتوماسیون ادامه دارد.

در سال 2014، با ویدیویی از مردی مواجه شدم که از کنسانتره آبجو آبجو درست می کند. من از ایده دم کردن هیجان زده شدم و بعد شروع شد ...
دم کردن آبجو از غذاهای کنسرو شده بعد از بار دوم برای من جالب نبود و تصمیم گرفتم به تمام غلات روی بیاورم. یک بار با گاز آبجو دم کردم و متوجه شدم که این روش من نیست. تصمیم گرفتم آن را خودکار کنم. عصرها جالب تر شد. آنقدر درگیر برنامه نویسی شدم که تا ساعت 2-3 شب کدنویسی کردم. آزمایش در شرایط واقعی مورد نیاز بود. در سطل ها یک دیگ بخار و یک لیوان برش خورده بیرون آوردم.

و این همان چیزی است که من به آن رسیدم

اکنون به شما خواهم گفت که چگونه چنین اتوماسیونی را بسازید.
برای شروع، به جزئیات زیر نیاز داریم. من آنها را در چین خریدم.
ssd1289 یا ili9341.
رله حالت جامد برای کنترل المنت حرارتی (یا نمودار مدار)
رله حالت جامد برای کنترل پمپ (برای پمپ AC) یا (برای پمپ DC)
سنسور حرارتی یا یا
منبع تغذیه 7.5-9V 1A. مثلا
کانکتورهای اتصال سنسور دما و پمپ و
(بیشتر )
(آژیر)
مقاومت 4.7 کیلو اهم

مدار ولتاژ پایین

مدار قدرت. مراقب باش. اگر مطمئن نیستید، به متخصصان اعتماد کنید.

سطح مقطع سیم را بسته به توان کل پمپ و المنت گرمایشی می گیریم. یک عنصر گرمایش جامد به رادیاتور نیاز دارد زیرا ... زیاد گرم نمیشه همه را در یک جعبه قرار می دهیم. ما سفت‌افزار را آپلود می‌کنیم، آن را پیکربندی می‌کنیم و آبجو دم می‌کنیم.

(دستورالعمل در داخل)

اما توابع اولیه برای من کافی نبود. و تصمیم گرفتم وای فای را روشن کنم. من یک ماژول ESP8266 در Aliexpress خریدم. در همان زمان ماژول را سفارش دادم زیرا ... بچه های انجمن واقعاً خواستند آن را در پروژه پیاده سازی کنند (شما می توانید بدون آن این کار را انجام دهید). و مطابق نمودار زیر متصل می شود

برای تغذیه ماژول وای فای به یک منبع تغذیه 5 ولت نیاز داریم. شما نمی توانید از آردوینو استفاده کنید. می توانید از منبع تغذیه جداگانه استفاده کنید یا 9 ولت را به 5 ولت تبدیل کنید. برای این کار می توانید یک مدار ساده با تثبیت کننده ولتاژ مونتاژ کنید یا یک مدار آماده از چینی ها بخرید. به عنوان مثال (گزینه های زیادی وجود دارد).

مرحله بعدی این است که ماژول خود را با سیستم عامل NodeMCU فلش کنید. دانلود. راه اندازی کنیم. روی Start کلیک کنید و منتظر بمانید تا سیستم عامل آپلود به پایان برسد. پرسیدی؟ عالی است. اکنون اسکریپت را بارگذاری می کنیم. برای این ما نیاز داریم. البته برنامه های دیگری مانند . اما من نتوانستم آنها را وادار کنم که با ماژول من کار کنند. در ESPlorer یک فایل جدید init.lua با محتوای زیر ایجاد می کنیم:

نام و رمز عبور شبکه وای فای را به نام خود تغییر دهید. سرعت را روی 9600 تنظیم کنید. دکمه "Open" را فشار دهید (اگر وصل نشد، فشار دادن دکمه تنظیم مجدد روی ماژول می تواند کمک کند). و روی "ذخیره در ESP" کلیک کنید. پس از دانلود اسکریپت، ماژول باید به روتر شما متصل شود. می‌توانید با ورود به روتر و مشاهده کلاینت‌های DHCP این موضوع را بررسی کنید. اگر ماژول شما در آنجا قابل مشاهده نیست، مشکلی پیش آمده است.

رابط وب شامل توابع زیر است.
1. نظارت بر فرآیند. شما می توانید دما، وضعیت پمپ، له کردن و عملکرد دم را نظارت کنید. رابط وب مجهز به زنگ هشدار صوتی است.
2. دستور العمل ها را در حافظه کنترلر و روی درایو فلش بارگذاری کنید.
3. ساخت یک نمودار کلی از کل فرآیند پخت و پز.






وارد رابط وب شوید

بهترین مقالات در این زمینه