Tự động hóa cho nhà máy bia BeerDuino dựa trên arduino mega. Hệ thống tự động dựa trên vi điều khiển Arduino

Các bạn ơi, tôi cần sự giúp đỡ với tư cách là người nấu bia tại nhà. Từ thời điểm bạn muốn làm nhiệt kế thông minh, rất nhiều thời gian trôi qua và một mong muốn mới nảy sinh - xây dựng một nhà máy bia tự động tại nhà. Để tự động hóa nó, cần có một bộ điều khiển. Người ta đã quyết định từ bỏ việc sử dụng bộ điều khiển PID đã mua để điều khiển bộ phận làm nóng, bởi vì Có Arduino, rơle SSR cho nó, màn hình 4 x 20 dòng và Bảng nối tiếp để truyền thông tin qua một dây, không tính mặt đất và nguồn điện.
Bộ điều khiển Arduino của tôi, tôi sử dụng dự án của Australian Rob, dự án được thiết kế cho Arduino Duemilanove ATmega328 - www.arduino.cc/cgi-bin/yabb2/YaBB.pl
và trực tiếp vào chính dự án -
Nhà máy bia của tôi sẽ hoạt động theo một nguyên tắc hơi khác, không giống như của Rob, tôi dựa vào Spidel Braumeister, cách thức hoạt động được thể hiện rõ qua các video sau: http://www.youtube.com/watch?v=x-OBE4tJ-j8&feature= player_profilepage
Nhưng thật không may, tôi chưa bao giờ là lập trình viên, tôi biết hàn và làm theo hướng dẫn. Bây giờ nếu bạn làm lại chương trình của Rob thì nó sẽ hoàn hảo thiết bị điều khiển. Tôi đã lắp ráp bộ điều khiển và kiểm tra nó, nhưng vì lý do nào đó mà cảm biến nhiệt DS không được nhận dạng. Có rất nhiều thứ không cần thiết trong dự án này đối với tôi, bởi vì... Tôi không muốn xây dựng hệ thống HERMS giống như tác giả, để bạn có thể xóa tất cả những thứ không cần thiết khỏi chương trình. Mọi người bộ truyền độngđược điều khiển bởi rơle trạng thái rắn. Tôi có 2 miếng, cho bộ phận làm nóng và máy bơm. Tôi sử dụng bộ phận làm nóng mua trên Amazon, mật độ thấp 4,5 kW. Không có gì dính vào nó và bạn thậm chí có thể bật nó lên không trung và nó sẽ không cháy. Điều thú vị là màn hình được kết nối thông qua Serial Board, tôi đã lắp ráp nó từ một bộ sản phẩm mua trên eBay. Chỉ có 3 dây được sử dụng, do đó dỡ bỏ các cổng Arduino. Điều cần thiết: Điều khiển PID của bộ phận làm nóng để đảm bảo độ chính xác và thuận tiện, có thư viện làm sẵn cho Arduino, được sử dụng rộng rãi trong dự án www.brewtroller.com/wiki/doku.php, bạn cũng có thể mượn nhiều ý tưởng từ đó , nhưng dự án có quá nhiều chức năng và cũng được thiết kế riêng cho HERMS và RIMS của Mỹ. Chương trình phải có 3 chế độ vận hành: Rửa CIP (làm nóng nước lên tới 70g (có thể thay đổi trong cài đặt) và vận hành đồng thời máy bơm), chế độ TỰ ĐỘNG (khi tất cả các bước đặt ra trong chế độ lập trình được xử lý, bạn có thể tạm dừng và mạnh mẽ chuyển sang bước tiếp theo), chế độ THỦ CÔNG (B chế độ thủ công chúng tôi chỉ cần điều khiển việc bật/tắt bộ phận làm nóng, máy bơm và Đầu ra Aux, nhiệt độ được chỉ định.), Lập trình TỰ ĐỘNG (Chế độ tự động - làm nóng nước 70g, tạm dừng (để đổ đầy, điều chỉnh), tạm dừng cài đặt nhiệt độ (cần có 4 lần tạm dừng, có dự trữ, axit, protein, đường hóa), với hoạt động đồng thời của máy bơm, tạm dừng nghiền - được cấu hình với hoạt động đồng thời của máy bơm, chỉ hoạt động của máy bơm, cái gọi là chế độ xoáy nước, khi dịch nha xoáy thành dòng và tất cả độ đục lắng xuống trung tâm và bơm với hoạt động đồng thời của UX và cảm biến nhiệt độ thứ hai, một máy nén bể cá có thiết bị sục khí dòng chảy sẽ được kết nối với nó, Dịch nha chảy ra ngoài qua bộ làm mát-làm lạnh dòng chảy.
Thực ra nhiệm vụ không lớn nhưng tôi là người theo chủ nghĩa nhân văn và việc lập trình không hề dễ dàng.

TRÊN khoảnh khắc này, bộ điều khiển trông như thế này:

Đổi lại, tôi hứa sẽ trở thành người cố vấn và giáo viên cá nhân về nấu bia cho bất kỳ ai quan tâm! :)

UDP! Chủ đề về Habré!

Vào năm 2014, tôi tình cờ xem được một đoạn video quay cảnh một người đàn ông làm bia từ bã bia cô đặc. Tôi rất hào hứng với ý tưởng sản xuất bia và rồi nó bắt đầu...
Việc nấu bia từ đồ hộp trở nên không còn hứng thú với tôi sau lần thứ 2 và tôi quyết định chuyển sang làm hoàn toàn bằng ngũ cốc. Có lần tôi nấu bia bằng gas và nhận ra rằng đây không phải là phương pháp của mình. Tôi quyết định làm nó tự động. Buổi tối trở nên thú vị hơn. Tôi say mê lập trình đến mức viết mã đến tận 2-3 giờ sáng. Các thử nghiệm là cần thiết điều kiện thực tế. Trong thùng tôi đào được một chiếc nồi hơi và một chiếc kính đã cắt.

Và đây là những gì tôi đã kết thúc

Bây giờ tôi sẽ cho bạn biết cách thực hiện tự động hóa như vậy.
Để bắt đầu, chúng ta sẽ cần các chi tiết sau. Tôi đã mua chúng ở Trung Quốc.
ssd1289 hoặc ili9341.
Rơle trạng thái rắn để điều khiển bộ phận làm nóng (hoặc sơ đồ mạch)
Rơle trạng thái rắn để điều khiển máy bơm (đối với máy bơm bật Dòng điện xoay chiều) hoặc (DC)
Cảm biến nhiệt hoặc hoặc
Nguồn điện 7,5-9V 1A. Ví dụ
Các đầu nối để kết nối cảm biến nhiệt độ và máy bơm và
(hơn )
(còi)
Điện trở 4,7 kOhm

Mạch điện áp thấp

Mạch điện. Hãy cẩn thận. Nếu bạn không chắc chắn, hãy tin tưởng vào các chuyên gia.

Chúng tôi lấy mặt cắt dây tùy thuộc vào tổng công suất của máy bơm và bộ phận làm nóng. Một bộ phận làm nóng rắn cần có bộ tản nhiệt vì... Nó không nóng lên quá nhiều. Chúng tôi nhét tất cả vào một cái hộp. Chúng tôi tải chương trình cơ sở lên, cấu hình nó và nấu bia.

(hướng dẫn bên trong)

Nhưng chức năng cơ bản Tôi không có đủ. Và tôi quyết định bật wifi. Tôi đã mua mô-đun ESP8266 trên Aliexpress. Đồng thời tôi đã đặt hàng mô-đun vì... Những người trong diễn đàn thực sự đã yêu cầu triển khai nó vào dự án (bạn có thể làm điều đó mà không cần nó). Và kết nối theo sơ đồ sau

Đối với thực phẩm mô-đun wifi chúng ta cần một nguồn điện 5V. Bạn không thể sử dụng arduino. Bạn có thể sử dụng nguồn điện riêng hoặc chuyển đổi 9V sang 5V. Để làm điều này, bạn có thể lắp ráp một mạch đơn giản với bộ ổn áp hoặc mua một mạch làm sẵn từ Trung Quốc. Ví dụ (có rất nhiều lựa chọn khác).

Bước tiếp theo là flash mô-đun của chúng tôi bằng chương trình cơ sở NodeMCU. Tải xuống. Hãy khởi động. Nhấp vào Bắt đầu và đợi phần sụn tải lên hoàn tất. Bạn có hỏi không? Cái đó thật tuyệt. Bây giờ chúng ta tải tập lệnh. Đối với điều này, chúng tôi cần. Tất nhiên còn có các chương trình khác như . Nhưng tôi không thể làm cho chúng hoạt động được với mô-đun của tôi. Trong ESPlorer chúng tôi tạo tập tin mới init.lua với nội dung sau:

Chúng tôi thay đổi tên wifi mạng và mật khẩu cho bạn. Đặt tốc độ thành 9600. Nhấn nút “Mở” (nếu không kết nối, nhấn nút đặt lại trên mô-đun). Và nhấp vào “Lưu vào ESP”. Sau khi tải xuống tập lệnh, mô-đun sẽ kết nối với bộ định tuyến của bạn. Bạn có thể kiểm tra điều này bằng cách đăng nhập vào bộ định tuyến và xem các máy khách DHCP. Nếu mô-đun của bạn không hiển thị ở đó thì đã xảy ra lỗi.

Giao diện web chứa các chức năng sau.
1. Giám sát quá trình. Bạn có thể theo dõi nhiệt độ, trạng thái bơm, hiệu suất nghiền và pha. Giao diện web được trang bị cảnh báo bằng âm thanh.
2. Tải công thức nấu ăn vào bộ nhớ của bộ điều khiển và vào ổ đĩa flash.
3. Xây dựng biểu đồ toàn cầu của toàn bộ quá trình nấu.






Đăng nhập vào giao diện web

Tự động hóa trong xã hội hiện đạibiện pháp cần thiết, bởi vì trong thời đại kỹ thuật số, việc loại trừ nhân tố con người trong các ngành công nghiệp khác nhau để tiêu chuẩn hóa và nâng cao chất lượng sản phẩm. Cũng có những lĩnh vực mà con người đơn giản là không thể làm được những gì robot có thể làm, chẳng hạn như sản xuất vật liệu nano và vi mạch.

Tuy nhiên, tự động hóa không chỉ giúp ích trong sản xuất mà còn có thể hữu ích cho người bình thường. Ví dụ, tự động hóa nhà máy bia sử dụng Arduino có thể đơn giản hóa đáng kể quy trình sản xuất sản phẩm. Hãy cùng tìm hiểu cách tự động hóa để chỉnh sửa trên Arduino và những thứ khác có thể trợ giúp và xem các ví dụ.

Ưu điểm chính của hệ thống tự động dựa trên vi điều khiển Arduino

Không ai cấm bạn ngủ phí riêng và tự lập trình nó bằng các ngôn ngữ cấp thấp. Tuy nhiên, tự động hóa bằng Arduino và bộ vi điều khiển làm sẵn sẽ tạo điều kiện thuận lợi hơn rất nhiều cho toàn bộ quá trình và tiết kiệm thời gian. Rốt cuộc, việc mua một sản phẩm làm sẵn với một bộ thư viện và điều chỉnh nó cho phù hợp với nhu cầu của bạn sẽ dễ dàng hơn nhiều. Và khả năng tự động hóa với giá cả phải chăng trên Arduino mega 2560 có thể hữu ích trong nhiều lĩnh vực của cuộc sống, từ chuyển đổi giọng nói cho đến nhà thông minh và cho đến chốt điện với máy dò chuyển động. Những ưu điểm chính mà tự động hóa Arduino nổi tiếng là:

  1. Rào cản gia nhập thấp. Không cần phải có trình độ học vấn kỹ sư, chỉ cần xem một vài video đào tạo và có nền tảng về lập trình là đủ.
  2. Một số lượng lớn các thư viện đã được chuẩn bị sẵn. Arduino được sử dụng trên khắp CIS bởi nhiều người đam mê robot, đến mức việc sản xuất các thiết bị điện tử khác nhau trở thành sở thích của họ. Theo đó, cộng đồng người dùng trực tuyến cực kỳ tích cực, đăng số lượng trống lớn và sẵn sàng giúp bạn giải quyết mọi vấn đề. Chất lượng của các thư viện bị ảnh hưởng do ngưỡng đầu vào thấp, nhưng không ai cấm bạn tạo thư viện của riêng mình, chỉ cần nghiên cứu ngữ nghĩa của ngôn ngữ C++ hoặc sử dụng các trình dịch có sẵn là đủ.
  3. Một số lượng lớn các thiết bị ngoại vi. Không thành vấn đề nếu bạn cần tự động hóa nhà kính hoặc cảm biến ánh sáng dựa trên Arduino, bạn sẽ tìm thấy bất kỳ mô-đun nào, bao gồm cảm biến âm thanh và bộ nhận dạng giọng nói. Đúng, một số bảng tốn rất nhiều tiền, nhưng bạn luôn có thể tìm thấy chất tương tự giá rẻ, Ví dụ, mô-đun wifi từ nhà sản xuất bên thứ ba Esp8269 có giá rẻ hơn 10 lần so với bản chính thức.
  4. Rất nhiều thông tin. Bất kỳ vấn đề nào bạn đang gặp phải đều đã từng gặp phải bởi người khác và bạn có thể sẽ tìm thấy giải pháp trên Google. Ngoài ra còn có tài liệu đầy đủ mà bạn có thể tham khảo.

Tuy nhiên, đừng nghĩ rằng Arduino không có sai sót. Hội đồng quản trị nổi tiếng với hiệu suất thấp. Đặc biệt nhiệm vụ phức tạp và tại số lượng lớn Thời gian phản hồi mã có thể đạt tới 1 giây, điều này không thể chấp nhận được đối với bộ vi điều khiển. Bộ nhớ flash của hầu hết các mô-đun không vượt quá 1 MB, không đủ để tạo mạng thần kinh hoặc sử dụng các tệp phương tiện. Tất nhiên, bạn có thể kết nối thẻ nhớ phụ, nhưng điều này cũng làm tăng thời gian phản hồi và lấy đi tài nguyên bổ sungđể lấy dinh dưỡng và được thực hiện theo phương pháp bán thủ công.

Tuy nhiên, đơn giản hệ thống tự động, ví dụ, để sản xuất bia hoặc nhà kính, thậm chí không yêu cầu một phần tài nguyên mà hội đồng quản trị có thể cung cấp. Theo đó, hầu hết người dùng sẽ thấy những thiếu sót này là vô nghĩa. Nếu bạn quyết định lắp ráp máy in 3D của riêng mình hoặc một thiết kế phức tạp hơn, bạn nên xem xét kỹ hơn các chất tương tự. Nhưng rào cản gia nhập đối với các đối thủ của Arduino sẽ cao hơn nhiều.

Một ví dụ về tự động hóa quá trình dựa trên vi điều khiển Arduino

Ví dụ đơn giản nhất về tự động hóa quy trình có thể là nhà kính sử dụng Arduino. Để tạo ra bất kỳ hệ thống nào, cần xác định rõ ràng các nhiệm vụ mà nó phải thực hiện. Lấy nhà kính làm ví dụ, đây sẽ là:

  1. Tạo ra một khí hậu đặc biệt.
  2. Bật và tắt đèn kịp thời.
  3. Tưới nước kịp thời cho cây và duy trì độ ẩm không khí ở mức tương đương.

Dựa trên những nhiệm vụ này, bạn có thể nhận thấy ngay những gì bạn sẽ cần mua cho bo mạch chính:

  1. Cảm biến nhiệt độ. Nó sẽ đảm bảo không khí không nóng lên hoặc nguội đi, nằm trong giới hạn mà chương trình quy định. Nếu nhiệt độ thay đổi, bo mạch sẽ bật điều hòa hoặc pin điện tử.
  2. Cảm biến ánh sáng. Tất nhiên, bạn có thể giới hạn bản thân giải phap băng phân mêm và mua những chiếc đèn đắt tiền giả ánh sáng ban ngày. Nhưng nếu bạn muốn tạo ra một nhà kính hoàn chỉnh thì việc lắp đặt trần tự động sẽ được điều khiển bởi Arduino sẽ thuận tiện hơn nhiều.
  3. Cảm biến độ ẩm. Ở đây mọi thứ cũng giống như nhiệt độ, theo kịch bản quy định, bảng sẽ bật máy phun và máy tạo độ ẩm nếu cần.

Khi bạn mua tất cả các mô-đun cần thiết, tất cả những gì còn lại là lập trình chúng. Suy cho cùng, nếu không có mã, đây chỉ là những phần cứng không có khả năng làm được gì.

Lập trình vi điều khiển Arduino để tự động hóa quá trình. Ví dụ

Như ở điểm trước, để lập trình, điều quan trọng là phải chia nhiệm vụ thành các điểm phụ riêng biệt và thực hiện chúng một cách tuần tự. Lập trình Arduino diễn ra nhờ các lệnh trong giao diện AT và AT+, sử dụng các thư viện đã được chuẩn bị sẵn. Theo đó, tất cả các tập lệnh đều được viết trong một môi trường đặc biệt bằng C++ và trước khi làm bất cứ điều gì, hãy dành thời gian để nghiên cứu ngữ nghĩa của nó. Ngoài việc biểu diễn chức năng đơn giản, hệ thống cũng có khả năng lưu trữ các tập lệnh trong bộ nhớ flash, đây là thứ chúng ta cần trong ví dụ này.

Đừng quên rằng thông tin từ mỗi cảm biến được đưa ra theo thời gian thực và dưới dạng các biến số, nhưng bạn có thể giới hạn thời gian phản hồi vì không cần tốn tài nguyên và đo lường từng thông số liên tục. Theo đó, hãy cài đặt thời gian bật tắt cho từng cảm biến hoặc đặt thời gian phản hồi trong một khoảng thời gian nhất định.

Tôi là sinh viên của một trường đại học kỹ thuật. Một ngày nọ, ngồi trong quán cà phê với một người bạn lúc đó đang học đại học y, họ quyết định mở một quán bar. Về nguyên tắc, có rất nhiều ý tưởng đáng được quan tâm. Ví dụ, một sàn nhảy có thể thay đổi góc nghiêng tùy theo phong cách âm nhạc... Nhưng, cùng với tất cả sự đa dạng của các ý tưởng, còn có một điều nữa -

…chúng ta không nên tự nấu bia sao?

Vài tuần sau, tôi nấu bia bằng nguyên liệu từ nhà máy bia nơi bạn của bố tôi làm việc. Nhưng nhiều quy trình công nghệđã bị vi phạm nên thay vì bia lại xuất hiện một thứ gì đó có mùi không mấy dễ chịu.

Vài năm sau, tôi quyết định lặp lại quy trình, tự động hóa nó một chút với sử dụng Arduino UNO. Và đây là những gì đã xảy ra.

Tôi sẽ bắt đầu với những gì toàn bộ thiết lập phải làm.

  • Hãy tự kiểm tra - mọi thứ có hoạt động không, mọi thứ có được kết nối không;
  • Làm sạch bản thân;
  • Chuẩn bị cho quá trình sản xuất bia;
  • Ủ bia trên sàn nhà chế độ tự động;
  • Ủ bia thủ công;
  • Tự động pha bia (như Máy giặt giặt quần áo).

Điểm đầu tiên hiện chưa được thực hiện. Cho đến nay tôi thậm chí không có bất kỳ suy nghĩ nào về cách thực hiện nó.
Cái thứ 2 cũng chưa triển khai nhưng mình sẽ hoàn thành trong thời gian sắp tới, chỉ chờ máy bơm từ ebay giao về thôi.
Điểm thứ ba khá đơn giản.

Chuẩn bị cho quá trình sản xuất bia

Thông báo từ hệ thống cần đổ nước vào thùng -> chương trình chờ nhấn phím OK -> chương trình gửi cho arduino lệnh bật rơle trạng thái rắn -> trạng thái rắn rơle bật bộ phận làm nóng một kilowatt trong thùng, đưa nó đến nhiệt độ 37 độ, gửi lệnh đến chương trình rằng mọi thứ đã sẵn sàng để nấu. Duy trì nhiệt độ 37 độ.

Tôi muốn có một cuộc kiểm tra xem có nước hay không nhưng cảm biến vẫn đang chờ gửi từ “anh em Trung Quốc”.

Ủ bia ở chế độ bán tự động

Về nguyên tắc, một thủ tục đơn giản:

Bấm vào chương trình điều khiển Nút “Hâm nóng”, các nút điều khiển khác không hoạt động;
- Sau khi khởi động, chương trình hiển thị thông báo “Mọi thứ đã sẵn sàng, bạn có thể nấu ăn”;
- Thêm nguyên liệu, chọn chương trình pha - nút “Bia bia” bắt đầu hoạt động;
- Nhấn nút “Bia bia”, quá trình đã bắt đầu;
- Tiếp theo, hệ thống sẽ định kỳ thông báo tin nhắn thông tin phải làm gì và khi nào.

Bạn cần phải làm theo hướng dẫn.

Nấu bia thủ công

Quá trình này cho phép bạn thiết lập các thông số nấu và thay đổi chúng trong suốt chu trình nấu. Vẫn chưa làm quen với nó.

Nấu ăn tự động

Đó là một giấc mơ. Hiện tại không có thành phần nào để thực hiện. Không có đủ máy bơm và cảm biến mực nước. Tôi không biết làm thế nào để đo mật độ của dịch nha, lượng cồn trong bia non, v.v. Nhưng tôi không thất vọng và sẽ tự động hóa dần dần cho đến khi việc nấu bia trông như thế này:

Tôi ném nguyên liệu vào các khay thích hợp, nhấn nút và... sau một tháng rưỡi, tôi đã nhận được bia thành phẩm.

Đây là tổng quan ngắn gọn về quy trình, bây giờ chúng ta hãy chuyển sang khía cạnh kỹ thuật.

Mặt kỹ thuật của quy trình

Như đã trình bày ở trên, vi điều khiển là arduino UNO. 2 rơle được kết nối với nó, 2
nhiệt kế điện tử DS18B20.

Arduino giao tiếp với chương trình chính thông qua cổng com. Bởi vì Tôi không có bảng tên thời gian thực cho arduino, tôi phải lấy bộ đếm thời gian từ Visual C#. Tôi chưa có kinh nghiệm viết chương trình nên nếu ai có ý kiến ​​hay phê bình gì thì tôi rất vinh dự. Có thể nói, chỉ trích, chỉ trích, nếu bạn đột nhiên không thích nó.

Đây là nội dung chương trình trên arduino

#bao gồm OneWire ds(8); // cảm biến nhiệt độ được đặt trên chân 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; // kích hoạt hàng chục int reley6 = 6; // làm nóng trên mash tun float temp1; phao 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); ) void loop (void) ( if (Serial.available()) ( switch (Serial.read())( case "i": infuz(); break; case "p": progrev(); break; case "a": avariya (); break; trường hợp "v": varka(); break; trường hợp "t": nhiệt độ(); break; ) ) ) void varka() ( digitalWrite(reley6, HIGH); while(Serial.read()! ="m") ( nhiệt độ(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); nhiệt độ(); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="b") ( //digitalWrite (reley6,CAO);nhiệt độ();if(temp1 >= 75.00) digitalWrite(reley6,LOW); khác digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") độ trễ(1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); nhiệt độ(); ) digitalWrite(reley5,THẤP); ) void infuz() ( //nhiệt độ(); //Serial.available(); while (Serial.read()!="s")( //tắt chu trình pha dịch truyền if (temp<=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) //độ trễ(1000); Serial.println("s"); ) void tai nạn())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) void temp() ( byte i ; byte hiện tại = 0; dữ liệu byte; byte addr; byte zator = (40, 23, 218, 43, 6, 0, 0, 22); // địa chỉ của cảm biến nhiệt độ trong mash byte varilka = (40, 255 , 240, 115 , 59, 4, 0, 234); //địa chỉ của cảm biến nhiệt độ trong thùng bia float celsius; // float temp; boolean ở đâu; if (!ds.search(addr)) ( //Serial .println("Không còn địa chỉ ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC không hợp lệ!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // bắt đầu chuyển đổi, với nguồn ký sinh trùng được bật ở cuối delay(840) ; // có thể 750ms là đủ, có thể không // chúng ta có thể thực hiện ds.depower() ở đây, nhưng việc thiết lập lại sẽ xử lý việc đó. (addr); ds.write (0xBE); // Đọc Scratchpad cho (i = 0; Tôi< 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); } }

Mọi thứ sẽ ổn, nhưng không hiểu sao cảm biến thứ ba liên tục hiển thị 85 độ. Tôi vẫn chưa thể nói tại sao. Và nó cần thiết cho quá trình tự động hóa hơn nữa - duy trì nhiệt độ trong tủ lạnh.

Tôi sẽ mô tả ngắn gọn những gì chương trình làm.

Chương trình được chia thành các chương trình con, mỗi chương trình con sẽ được kích hoạt nếu một biểu tượng nhất định xuất hiện trên cổng com. Ví dụ: nếu chữ “p” vào cổng, chế độ “Hâm nóng” sẽ được kích hoạt. Hoặc, nếu là “a”, thì chương trình con avariya() sẽ được gọi và mọi thứ sẽ bị tắt. Khi gọi chương trình con thermo(), dữ liệu được ghi vào các biến toàn cục temp1, temp2. Từ đó họ đi vào các chương trình con cần thiết.

Trong tương lai, sẽ có các chương trình con để pha nhiều loại khác nhau và thậm chí cả rượu moonshine.

Bây giờ, liên quan đến chương trình điều khiển chính.

Chương trình điều khiển chính

Nó được viết trong studio trực quan C#.

Mã nguồn chương trình:

Mã nguồn chương trình

sử dụng Hệ thống; sử dụng System.Collections.Generic; sử dụng System.ComponentModel; sử dụng System.Data; sử dụng System.draw; sử dụng System.Linq; sử dụng System.Text; sử dụng System.Threading.Tasks; sử dụng System.Windows.Forms; sử dụng System.IO.Ports; không gian tên WindowsFormsApplication1 ( public một phần lớp Form1: Form ( // String portnumber; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( LaunchizeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; ghi đè được bảo vệ CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ Private void Form1_Load(người gửi đối tượng, EventArgs e) ( label2.Text = Port1. PortName; Port1.Open(); ) //Kiểm tra thiết bị void void Button1_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) ( try ( //chương trình có thể được sửa đổi thông tin từ 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()); //kiểm tra số đọc cổng MessageBox.Show("Quá trình kiểm tra phần cứng đã bắt đầu", "Thông báo thông tin"); richTextBox1.Text = richTextBox1.Text + "\n" + "Bắt đầu quá trình kiểm tra phần cứng"+" "+DateTime.Now.ToString("HH:mm"); nút1.Enabled = sai; nút2.Enabled = false; nút3.Enabled = false; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Kết thúc quá trình kiểm tra phần cứng"+" "+DateTime.Now.ToString("HH:mm"); nút1. Đã bật = true;button2.Enabled = true; nút3.Enabled = true; Port1.Close(); MessageBox.Show("Kết thúc chu trình kiểm tra phần cứng" +" "+ DateTime.Now.ToString("HH:mm")) ; richTextBox1.SaveFile("CheckLOG.rtf"); ) ) bắt ( richTextBox1.Text = richTextBox1.Text + "\n" + "Lỗi quá trình kiểm tra phần cứng" +" "+ DateTime.Now.ToString("HH:mm" ) ; MessageBox.Show("Đã chọn cổng thiết bị không hợp lệ. Không thể bắt đầu quá trình kiểm tra", "Warninig"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Thiết bị làm sạch nút void riêng3_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) ( try ( //chương trình có thể được sửa đổi thông tin từ podrugomu.com/node/987 MessageBox. Show(" Bạn chắc chắn đã đổ chất khử trùng", "CẢNH BÁO", MessageBoxButtons.OK, MessageBoxIcon.Warning); Cảng1. PortName = label2.Text; Cổng1.Open(); Port1.Write("Sạch"); MessageBox.Show("Quá trình vệ sinh thiết bị đã bắt đầu", "Thông báo thông tin"); nút1.Enables = sai; nút2.Enabled = false; nút3.Enabled = false; if (Port1.ReadByte() == 1000) ( nút1.Enabled = true; nút2.Enabled = true; nút3.Enabled = true; Port1.Close(); MessageBox.Show("Kết thúc chu trình làm sạch thiết bị"); ) ) bắt ( MessageBox.Show("Đã chọn cổng thiết bị không hợp lệ. Không thể bắt đầu quá trình dọn dẹp", "Warninig"); ) ) ) riêng void contextMenuStrip1_Opening(người gửi đối tượng, CancelEventArgs e) ( ) riêng void cOM1ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e ) ( SerialPort Port1 = new SerialPort("COM1", 9600); // MessageBox.Show("Cổng COM1 được chọn"); label1.Visible = true; label2.Text = "COM1"; ) riêng void label2_Click(người gửi đối tượng, EventArgs e) ( ) riêng void cOM2ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM2", 9600); // MessageBox.Show("Cổng COM2 đã chọn"); label1.Visible = true; label2. Text = "COM2"; ) riêng void cOM3ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("Cổng COM3 đã chọn"); nhãn1.Visible = true; label2.Text = "COM3"; ) riêng void cOM4ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM4", 9600); // MessageBox.Show("Đã chọn cổng COM4"); label1.Visible = true; label2.Text = "COM4 "; ) riêng void cOM5ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM5", 9600); // MessageBox.Show("Đã chọn cổng COM5"); label1.Visible = true; label2.Text = "COM5"; ) riêng void cOM6ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM6", 9600); // MessageBox.Show("Cổng COM6 đã chọn"); label1.Visible = true; label2. Text = "COM6"; ) riêng void cOM7ToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("Cổng COM7 đã chọn"); label1.Visible = true; label2.Text = "COM5"; ) chương trình void riêng tư BrewToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( ) // Tạo nút void riêng tư2_Click(người gửi đối tượng, EventArgs e) ( // if (Port1.IsOpen == false) //( // thử //( //chương trình có thể sửa đổi thông tin từ podrugomu.com/node/987 //Port1.PortName = label2. Chữ; //Port1.Open(); switch (label3.Text) ( case "Đã chọn trộn dịch truyền": MessageBox.Show("Quá trình trộn dịch truyền đã bắt đầu", "Thông báo thông tin"); Port1.WriteLine("i"); time1.Start(); break; case " Cooper brew đã chọn": MessageBox.Show("Quá trình nghiền Cooper đã bắt đầu", "Thông báo thông tin"); Port1.WriteLine("v"); clock3.Start(); break; ) nút1.Enabled = false; nút2.Enabled = false; nút3.Enabled = false; // nút5.Enabled = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* if (Port1.ReadLine() == "e\r") ( nút1.Enabled = true; nút2.Enabled = true; nút3.Enabled = true; nút5.Enabled = true; */ //Port1.Close( ); // MessageBox.Show("Kết thúc chu trình sản xuất bia"); // ) // ) // bắt //( // MessageBox.Show("Đã chọn cổng thiết bị không hợp lệ. Không thể bắt đầu quá trình sản xuất bia", "Cảnh báo "); //) // ) ) riêng void nút5_Click(người gửi đối tượng, EventArgs e) ( Port1.Write("p"); nút1.Enabled = false; nút2.Enabled = false; nút3.Enabled = false; hẹn giờ2. Start(); richTextBox1.Text = richTextBox1.Text + "\n" + "Bắt đầu đun nóng nước trong máy trộn đến 37 độ" + " " + DateTime.Now.ToString("HH:mm"); /* Port1. Open (); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine("o"); Port1.Close(); */ ? ) riêng void time1_Tick(người gửi đối tượng, 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 phút là 4200 giây hẹn giờ1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(); MessageBox.Show("quá trình nghiền dịch truyền đã hoàn tất, dịch nha cần được lọc"); nút1.Enabled = true; nút2.Enabled = true; nút3.Enabled = true ; nút5.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) riêng void nhãn4_Click(người gửi đối tượng, EventArgs e) ( ) riêng tư void hẹn giờ2_Tick(người gửi đối tượng, EventArgs e) ( label5 .Text = Port1.ReadLine(); if (Port1.ReadLine() == "s\r") ( time2.Stop(); MessageBox.Show("Nước là 37 độ. Bạn có thể thêm mạch nha và bật chế độ nghiền"); richTextBox1.Text = richTextBox1.Text + "\n" + "Kết thúc quá trình chuẩn bị mash tun. Т=37 độ" + " " + DateTime.Now.ToString("HH:mm"); nút2.Enabled = true; ) ) riêng void EmergencyDisableToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("Người dùng đã tắt toàn bộ hệ thống trong trường hợp khẩn cấp"); ) riêng void mash KettleToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Chế độ sôi Mash tun được bật. Đợi 60 phút") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Chế độ đun sôi Mash tun được bật. Đợi 60 phút" + " " + DateTime.Now.ToString("HH:mm "); ) riêng void time3_Tick(người gửi đối tượng, EventArgs e) ( string s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") label5.Text = s1.Substring (4, 5); if (s1.Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5); s++; if (s == 900) ( Port1.WriteLine(" m"); MessageBox.Show("Giai đoạn ghi đè ở 62 độ"); richTextBox1.Text = richTextBox1.Text + "\n" + "Giai đoạn trộn ở 62 độ" + " " + DateTime.Now.ToString("HH: mm"); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("Giai đoạn chà xát ở 78 độ"); richTextBox1.Text = richTextBox1.Text + "\n" + "Giai đoạn chà xát ở 78 độ " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Giai đoạn Mash hoàn tất, bạn có thể thoát khỏi wort") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Giai đoạn nghiền đã kết thúc. Bạn có thể xả nước nha" + " " + DateTime.Now.ToString("HH:mm"); ) ) riêng tư void normalToolStripMenuItem_Click(người gửi đối tượng, EventArgs e) ( label3.Text = "Cooper brew đã chọn"; ) ) )

Chương trình giao tiếp với arduino qua cổng com. Điều duy nhất tôi không thể khắc phục là khi thăm dò cổng com, chương trình không bị treo trong khi chương trình con được thực thi. Sau khi kết thúc chương trình con, chương trình bị treo, nhưng hiện tại điều này không quan trọng và thậm chí còn là một điểm cộng. Hoàn hảo - để ngăn bạn nhấn bất cứ thứ gì trong một quy trình nhất định.

Tổng cộng, chương trình có thể

- chuẩn bị dụng cụ nấu ăn;
- đầu bếp;
- viết nhật ký công việc đơn giản (rất hữu ích cho việc phân tích sâu hơn về sản xuất bia);
- chọn một cổng để kết nối với bộ điều khiển điều khiển (arduino UNO);
đun sôi bia và nghiền nhuyễn.

Khi máy bơm và van điện từ đến, tôi sẽ tự động hóa chúng hơn nữa. Trong thời gian chờ đợi, tôi sẽ bổ sung thêm một chương trình nấu ăn vào Chủ Nhật hàng tuần. Tổng cộng sẽ có 5 chương trình. Việc thực hiện chế độ thủ công cũng đang chờ đến lượt.
Như người ta vẫn nói,

còn tiếp...

CẬP NHẬT:

Dưới đây là một số hình ảnh của nhà máy bia

Đây là một máy tiêu hóa. Tôi có hai trong số này. Một cảm biến nhiệt độ DS18B20 trong khung kín được lắp đặt ở bên cạnh.
Trong một thời gian dài, tôi không thể hiểu tại sao arduino định kỳ bị đóng băng, cho đến khi tôi nhận ra rằng mọi thứ cần phải được nối đất, nếu không nó sẽ đột nhập vào vỏ, sau đó đến vỏ cảm biến và arduino.

Ống đồng bên trong dùng để lọc bã. Nó có thể được làm đẹp hơn nhưng tốt hơn là nên sử dụng đáy giả. Thật không may, người Trung Quốc không vội gửi nó.

Còn quá sớm để nói về kết quả, đây là những gì đã xảy ra

Nhìn tổng thể của thùng trông như thế này.

Đầu nối thông thường đã qua sử dụng
để kết nối các cảm biến nhiệt độ, được kết nối với ổ cắm đôi. Sẽ thuận tiện hơn khi rửa thiết bị. Tôi tắt nó đi và mang nó vào phòng tắm. Tôi đã rửa nó, kết nối nó và mọi thứ đều hoạt động.

Mọi thứ đều sủi bọt theo đúng tiến độ, không có dư thừa rò rỉ ra ngoài. Và kế hoạch trước mắt của tôi là xả một mẻ bia để lên men thêm và ủ một mẻ bia khác. Về nguyên tắc, công thức có thể được xem trong mã trong chương trình con varka() của arduino.

Các van điện từ cuối cùng đã đến. Quá trình tự động hóa tiếp tục.