Kami membuat automasi untuk kilang bir pada satu papan. Kami sedang belajar atmega644. Kami membuat papan menggunakan photoresist. Sistem automatik berdasarkan mikropengawal Arduino

Mengapa saya memerlukan automasi?

Automasi diperlukan untuk memudahkan proses, kerana... pengawal ini sendiri akan memantau suhu, mengekalkannya dan menaikkannya ke jeda suhu yang diperlukan. Juga isyarat isyarat bunyi mengenai campur tangan yang diperlukan, sebagai contoh, anda perlu menambah malt atau melakukan ujian iodin.

Saya memutuskan untuk membuat automasi saya sendiri daripada projek siap sedia. Ia berjalan pada arduino, sensor suhu, dua geganti, paparan dan butang disambungkan kepadanya. Relay pertama mengawal elemen pemanasan, relay kedua mengawal pam. Pam tumbuk sangat mudah kerana... tidak perlu mengacau mash semasa keseluruhan proses menumbuk (saya cadangkan membaca yang terdahulu saya untuk maklumat lanjut tentang cara membancuh bir)

Saya memasang automasi pertama menggunakan modul:

- Arduino mini
- Blok dua geganti 15A
- Paparan 2004
- Pengesan suhu
- 4 butang
- Bekalan kuasa 5 volt
Kemudahan pemasangan modular ialah tidak sukar untuk mendapatkan semua bahagian dan praktikalnya tidak perlu menyolder apa-apa. Tetapi kelemahan terbesar ialah bilangan wayar yang banyak, dan geganti Cina yang murah menimbulkan gangguan pada paparan, jadi geganti mekanikal terpaksa digantikan dengan geganti keadaan pepejal.

Lama kelamaan, saya membuat kesimpulan bahawa saya perlu membina automasi saya pada cip dengan memori 64kb (Arduino mini hanya mempunyai 32kb) pada satu papan. Penyelesaian sedia Saya tidak menjumpainya, jadi saya mula mencipta litar sendiri dan seterusnya papan untuk kraf saya.

Skim:

Saya membangunkan dan melukis rajah, boleh dikatakan, pada lutut saya dan untuk diri saya sendiri, jadi beberapa kelemahan mungkin, tetapi rajah itu berfungsi sepenuhnya:

Bayar:

Saya melukis litar, kemudian ia kekal untuk melukis papan, mula-mula saya melukisnya menggunakan program itu Reka Letak Pecut 6, sangat mudah, tetapi ia tidak mempunyai fungsi yang mencukupi, jadi saya memutuskan untuk beralih daripadanya ke arah program DipTrace dan inilah yang saya dapat:

Anda boleh memuat turun sumber.
Seperti yang anda lihat, saya menamakan kilang bir saya QRBeer dan ini sudah pun versi 0.5...

Papan itu sudah siap, yang tinggal hanyalah untuk mengeluarkannya. Untuk ini saya memutuskan untuk menggunakan . Mengapa mereka dan bukan LUT? Saya baru memutuskan untuk mencuba ini untuk diri saya sendiri Teknologi baru, Saya sudah mencuba LUT, saya merasakannya, boleh dikatakan, saya tidak akan mengatakan bahawa saya menyukainya...

Photoresist:

Untuk membuat papan litar bercetak menggunakan photoresist anda perlu:
- Filem pencetak
-
- Lampu ultraungu
- Soda abu

lampu ultraungu

Pertama, saya akan berkongsi maklumat tentang cara saya membuat saya lampu UV. Pada mulanya saya ingin menggunakan lampu siap pakai, dan kemudian saya memutuskan untuk memasangnya menggunakan enam LED 3W:
dan juga dibeli di Tao:


Saya melekatkan LED pada radiator, walaupun ia boleh dipasang pada PCB, saya ragu bahawa ia akan menjadi terlalu panas.
Inilah yang saya dapat:


Pembuatan papan

1. Jadi, saya telah menyediakan templat, yang tinggal hanyalah mencetaknya pada filem. Seperti yang saya tulis di atas, saya memerlukan filem untuk pencetak, saya mencuba filem untuk kedua-duanya mesin pencetak Laser, dan untuk pancutan dakwat, pilihan terbaik diperolehi hanya pada filem untuk percetakan inkjet. Anda perlu mencetak dalam imej negatif dan cermin:

Saya segera melamina templat supaya cap jari dan serpihan mudah dicuci.
2. Seterusnya kita perlu mengampelas papan masa depan kita (laminat gentian kaca). Span biasa atau span melamin yang sedikit lembap sesuai untuk ini:


3. Selepas prosedur ini, kuprum masih perlu dicairkan dengan aseton:


Seperti yang anda boleh lihat dalam foto saya, saya menyaringnya dengan serbet biasa, dan saya menuangkan aseton ke dalam botol peroksida, jadi lebih mudah untuk mengambil...
4. Langkah seterusnya ialah memotong sedikit photoresist agar sesuai dengan papan masa hadapan anda dan keluarkan bahagian atas dengan berhati-hati filem pelindung supaya tidak merosakkannya. Jika photoresist adalah domestik, anda perlu mengupas bahagian matte, jika ia Cina, maka tidak ada perbezaan ...
5. Seterusnya, kami melekatkan photoresist pada PCB supaya tiada gelembung udara muncul di bawah photoresist, jika tidak, trek tidak akan muncul di tempat tersebut, potong lebihan...
Proses melekatkan photoresist adalah serupa dengan melekatkan filem pelindung pada telefon.


6. Apabila photoresist dilekatkan, textolite dengannya mesti disalurkan melalui laminator 2-3 kali atau menggunakan seterika hangat dan diseterika melalui helaian kertas yang dilipat dua:


Perkara utama adalah tidak memanaskan photoresist, jika tidak, ia akan menjadi seperti ini:


Jika anda mendapat "jamb" semasa melekatkan photoresist, maka lebih baik untuk mengeluarkannya (mencuci atau mengikisnya) dan gam semula, jika tidak selepas mengetsa papan ia akan menjadi sedih ... saya tidak akan mengeluarkan photoresist ini, saya akan tunjukkan hasil akhirnya.
7. Letakkan templat pada PCB dengan photoresist dan tekan dengan kaca (saya ambil dari bingkai foto lama), dan letakkan pemberat pada gelas:


8. Kami menerangi photoresist menggunakan lampu UV. Lampu saya bertahan kira-kira 2 minit:


Seperti yang anda lihat, photoresist yang terdedah bertukar warna daripada biru muda kepada biru tua, dan photoresist yang terdedah sangat rapuh.
9. Keluarkan kaca dan templat. Lebihan photoresist boleh (sebagai pilihan) dipangkas dan diasingkan dengan teliti dengan pinset:


10. Langkah seterusnya ialah membasuh fotoresist yang belum berkembang dengan alkali, untuk melakukan ini, ambil 2 gelas air dan satu sudu soda abu, kacau rata. Tanggalkan filem pelindung atas photoresist dan celupkan textolite kami ke dalam larutan alkali.


11. Ambil berus dan gosok tiga keping photoresist dalam alkali, secara beransur-ansur photoresist yang belum dibangunkan dicuci:


Anda tidak boleh mencurahkan alkali, tetapi biarkan di papan sebelah atau untuk mencuci photoresist selepas mengetsa, tetapi lebih lanjut mengenainya kemudian...
12. Goresan papan:
Terdapat dua kaedah yang paling mudah diakses: etsa dengan ferik klorida atau peroksida + asid sitrik dan garam. Tentang ferik klorida Saya tidak akan menulis, tetapi saya mungkin akan menerangkannya dengan bantuan peroksida:
- 100 ml. hidrogen peroksida 3% - ia dijual di farmasi untuk 7-12 rubel
- 30 gr. asid sitrik(boleh didapati di mana-mana kedai runcit)
- 1 sudu besar. sudu garam (garam halus dan batu akan sesuai)


Semua ini dicampur dalam bekas dan papan dengan photoresist siap direndam di sana, selepas beberapa ketika gelembung muncul di papan:


Dan selepas beberapa lama, "tembaga kosong" akan terukir sepenuhnya:


By the way, jika anda meracuni lebih banyak suhu tinggi, sebagai contoh, dengan lampu pijar atau dalam mandi air, maka tiga etsa akan dikurangkan, perkara utama adalah tidak keterlaluan, jika tidak lebihan akan terukir...
13. Cara paling mudah untuk mengeluarkan photoresist adalah dalam alkali yang sama di mana photoresist yang tidak dicuci telah dibasuh; selepas 20 minit ia akan jatuh dengan sendirinya dan tidak perlu menggosok apa-apa...

Dan inilah "jambs" saya:


Walaupun tidak penting, tetapi tetap, kecuaian adalah untuk dipersalahkan untuk segala-galanya, tidak perasan gelembung udara di bawah photoresist atau terlalu panas...

Saya mendapat papan berikut "bersih":


14. Seterusnya, gerudi lubang dan tin papan:


15. Pateri semua bahagian dan basuh lebihan fluks:


Komponen SMD dipateri daripada inframerah Cina stesen pematerian, sangat selesa:

Itu sahaja, bahagian yang paling sukar telah berakhir, yang tinggal hanyalah membunyikan trek litar pintas dan mula memprogramkan cip.

Pengaturcaraan atmega644

1. Untuk memulakan pengaturcaraan, anda perlu memuatkan pemuat but ke dalamnya. Ini tidak sukar dilakukan menggunakan Arduino UNO, tetapi anda perlu memuat turun dan memasang program terlebih dahulu.
2. Langkah seterusnya dalam atur cara yang dipasang tambah atau ambil pemasangan siap dengan segera:
3. Isi lakaran UNO ArduinoISP:

4. Dan sambungkan papan kami kepada UNO:


Mengikut arahan lakaran:
// nama pin // tetapan semula hamba: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Ternyata mengikut skema saya seperti ini:

5. Seterusnya, pasang papan kami dalam tetapan dan muatkan pemuat but:




Jika semuanya berjalan lancar, kita akan melihat mesej: "Rakaman pemuat but selesai"
Pada ketika ini, memuatkan pemuat but"a selesai, anda boleh menyambungkan paparan, butang, sensor suhu dan isi

Pada tahun 2014, saya terjumpa video seorang lelaki membuat bir daripada pekat wort bir. Saya teruja dengan idea pembuatan bir dan kemudian ia bermula...
Membuat bir daripada makanan dalam tin menjadi tidak menarik kepada saya selepas kali ke-2 dan saya memutuskan untuk beralih kepada semua bijirin. Sebaik sahaja saya membancuh bir dengan gas dan menyedari bahawa ini bukan kaedah saya. Saya memutuskan untuk menjadikannya automatik. Petang menjadi lebih menarik. Saya terlibat dalam pengaturcaraan sehingga saya membuat kod sehingga 2-3 pagi. Ujian diperlukan keadaan sebenar. Di dalam tong sampah saya menggali dandang dan gelas yang dipotong.

Dan inilah yang saya akhirnya

Sekarang saya akan memberitahu anda cara membuat automasi sedemikian.
Untuk memulakan, kami memerlukan butiran berikut. Saya membelinya di China.
ssd1289 atau ili9341.
Geganti keadaan pepejal untuk mengawal elemen pemanasan (atau gambar rajah litar)
Geganti keadaan pepejal untuk kawalan pam (untuk pam pada arus ulang alik) atau (DC)
Penderia haba atau atau
Bekalan kuasa 7.5-9V 1A. Sebagai contoh
Penyambung untuk menyambungkan penderia suhu dan pam dan
(lagi)
(buzzer)
4.7 kOhm perintang

Litar voltan rendah

Litar kuasa. Berhati-hati. Jika anda tidak pasti, percaya kepada profesional.

Kami mengambil keratan rentas wayar bergantung pada jumlah kuasa pam dan elemen pemanasan. Elemen pemanas pepejal memerlukan radiator kerana... Ia tidak terlalu panas. Kami memasukkan semuanya ke dalam kotak. Kami memuat naik perisian tegar, mengkonfigurasinya dan membancuh bir.

(arahan di dalam)

Tetapi fungsi asas Saya tidak cukup. Dan saya memutuskan untuk menghidupkan wifi. Saya membeli modul ESP8266 di Aliexpress. Pada masa yang sama saya memesan modul kerana... Lelaki dari forum benar-benar meminta untuk melaksanakannya ke dalam projek (anda boleh melakukannya tanpa itu). Dan disambungkan mengikut rajah berikut

Untuk makanan modul wifi kami memerlukan bekalan kuasa 5V. Anda tidak boleh menggunakan arduino. Anda boleh menggunakan bekalan kuasa yang berasingan atau menukar 9V kepada 5V. Untuk melakukan ini, anda boleh memasang litar mudah dengan penstabil voltan atau membeli yang siap dari orang Cina. Sebagai contoh (terdapat banyak pilihan lain).

Langkah seterusnya ialah memancarkan perisian tegar modul kami Perisian tegar NodeMCU. Muat turun. Jom lancarkan. Klik Mula dan tunggu sehingga perisian tegar selesai memuat naik. Adakah anda bertanya? Itu hebat. Sekarang kita memuatkan skrip. Untuk ini kita perlukan. Sudah tentu ada program lain seperti . Tetapi saya tidak dapat meminta mereka bekerja dengan modul saya. Dalam ESPlorer kita buat fail baharu init.lua dengan kandungan berikut:

Menukar nama rangkaian wifi dan kata laluan untuk anda. Tetapkan kelajuan kepada 9600. Tekan butang "Buka" (jika ia tidak bersambung, tekan butang set semula pada modul). Dan klik "Simpan ke ESP". Selepas memuat turun skrip, modul harus bersambung ke penghala anda. Anda boleh menyemak ini dengan log masuk ke penghala dan melihat pelanggan DHCP. Jika modul anda tidak kelihatan di sana, maka sesuatu telah berlaku.

Antara muka web mengandungi fungsi berikut.
1. Pemantauan proses. Anda boleh memantau suhu, status pam, prestasi menumbuk dan membancuh. Antara muka web dilengkapi dengan penggera yang boleh didengar.
2. Muatkan resipi ke dalam memori pengawal dan pada pemacu kilat.
3. Pembinaan graf global keseluruhan proses memasak.






Log masuk ke antara muka web

Saya seorang pelajar di universiti teknikal. Pada suatu hari, duduk di sebuah kafe bersama rakan yang ketika itu belajar di universiti perubatan, mereka memutuskan untuk membuka bar. Terdapat banyak idea yang, pada dasarnya, patut diberi perhatian. Sebagai contoh, lantai tarian yang mengubah sudut kecenderungan bergantung pada gaya muzik... Tetapi, bersama dengan semua kepelbagaian idea, terdapat juga satu lagi -

…bukankah kita patut membancuh bir kita sendiri?

Beberapa minggu kemudian, saya membancuh bir menggunakan bahan-bahan dari kilang bir tempat rakan ayah saya bekerja. Tetapi ramai proses teknologi telah dilanggar, jadi bukannya bir, sesuatu dengan bau yang tidak begitu menyenangkan keluar.

Beberapa tahun kemudian saya memutuskan untuk mengulangi proses itu, mengautomasikannya sedikit menggunakan Arduino UNO. Dan inilah yang berlaku.

Saya akan mulakan dengan perkara yang sepatutnya dilakukan oleh keseluruhan persediaan.

  • Periksa diri anda - adakah semuanya berfungsi, adakah semuanya bersambung;
  • Bersihkan diri anda;
  • Sediakan untuk proses pembuatan bir;
  • Bancuh bir di atas lantai mod automatik;
  • Brew bir secara manual;
  • Bancuh bir secara automatik (seperti mesin basuh membasuh pakaian).

Titik pertama masuk masa ini tidak dilaksanakan. Setakat ini saya tidak mempunyai sebarang pemikiran tentang bagaimana untuk melaksanakannya.
Yang kedua juga belum dilaksanakan, tetapi saya akan menyelesaikannya dalam masa terdekat, saya hanya menunggu pam dari ebay untuk dihantar.
Perkara ketiga agak mudah.

Bersedia untuk proses pembuatan bir

Mesej daripada sistem bahawa perlu menuangkan air ke dalam tong -> program menunggu kekunci OK ditekan -> program menghantar arduino arahan untuk menghidupkan geganti keadaan pepejal -> keadaan pepejal geganti menghidupkan elemen pemanas satu kilowatt dalam tong, membawanya ke suhu 37 darjah, menghantar arahan kepada program bahawa semuanya sudah sedia untuk dimasak. Mengekalkan suhu 37 darjah.

Saya ingin ada pemeriksaan untuk kehadiran air, tetapi sensor masih menunggu untuk dihantar dari "saudara Cina".

Membuat bir dalam mod separa automatik

Pada dasarnya, prosedur mudah:

Klik pada program kawalan Butang "Pemanasan", butang kawalan lain tidak aktif;
- Selepas memanaskan badan, program memaparkan mesej "Semuanya sudah siap, anda boleh memasak";
- Tambah bahan-bahan, pilih program pembuatan bir - butang "Brewing Beer" menjadi aktif;
- Tekan butang "Brewing Beer", proses telah bermula;
- Seterusnya, sistem akan memberitahu secara berkala mesej maklumat apa yang perlu dilakukan dan bila.

Anda perlu mengikut arahan.

Membuat bir secara manual

Proses ini membolehkan anda menetapkan parameter memasak dan mengubahnya semasa kitaran memasak. Belum sempat lagi.

Memasak automatik

Ia adalah mimpi. Pada masa ini tiada komponen untuk dilaksanakan. Tiada pam dan penderia paras air yang mencukupi. Saya tidak tahu bagaimana untuk mengukur ketumpatan wort, berapa banyak alkohol dalam bir muda, dan banyak lagi. Tetapi saya tidak putus asa dan akan mengautomasikan secara beransur-ansur sehingga pembuatan bir kelihatan seperti ini:

Saya melemparkan bahan-bahan ke dalam dulang yang sesuai, menekan butang dan... selepas sebulan setengah saya menerima bir yang telah siap.

Ini adalah gambaran ringkas proses, sekarang mari kita beralih ke bahagian teknikal.

Bahagian teknikal proses

Seperti yang dinyatakan di atas, mikropengawal kawalan ialah arduino UNO. 2 geganti disambungkan kepadanya, 2
termometer digital DS18B20.

Arduino berkomunikasi dengan program utama melalui port com. Kerana Saya tidak mempunyai papan nama masa nyata untuk arduino, saya terpaksa mengambil pemasa dari visual c#. Saya tidak mempunyai pengalaman menulis program, jadi jika sesiapa mempunyai sebarang idea atau kritikan, saya akan berbesar hati. Mengkritik, merobek, kononnya, jika anda tiba-tiba tidak menyukainya.

Berikut ialah teks program pada arduino

#termasuk OneWire ds(8); // penderia suhu terletak pada pin 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; //dayakan tens int reley6 = 6; // panaskan pada mash tun float temp1; terapung temp2; persediaan void(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); ) gelung lompang (kosong) ( jika (Serial.available()) ( suis (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); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); temperature(); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) manakala(Serial.read()!="b") ( //digitalWrite (reley6,HIGH); suhu(); if(temp1 >= 75.00) digitalWrite(reley6,LOW); lain 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")( //matikan kitaran membancuh infusi jika (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) //delay(1000); Serial.println("s"); ) kemalangan batal())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) suhu lompang() ( bait i ; byte present = 0; byte data; byte addr; byte zator = (40, 23, 218, 43, 6, 0, 0, 22); // alamat penderia suhu dalam mash byte varilka = (40, 255 , 240, 115 , 59, 4, 0, 234); //alamat penderia suhu dalam brew vat float celsius; // float temp; boolean where; if (!ds.search(addr)) ( //Serial .println("Tiada lagi alamat ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC tidak sah!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // mulakan penukaran, dengan kuasa parasit dihidupkan pada penangguhan akhir(840) ; // mungkin 750ms sudah mencukupi, mungkin tidak // kita mungkin melakukan ds.depower() di sini, tetapi tetapan semula akan menguruskannya. present = ds.reset(); ds.select (addr); ds.write (0xBE); // Baca Pad Conteng untuk (i = 0; 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); } }

Segala-galanya akan baik-baik saja, tetapi atas sebab tertentu sensor ketiga sentiasa menunjukkan 85 darjah. Saya tidak boleh mengatakan mengapa lagi. Dan ia diperlukan untuk automasi selanjutnya - mengekalkan suhu di dalam peti sejuk.

Saya akan menerangkan secara ringkas apa yang dilakukan oleh program ini.

Program ini dibahagikan kepada subrutin, setiap satunya diaktifkan jika simbol tertentu muncul pada port com. Sebagai contoh, jika huruf "p" memasuki port, mod "Pemanasan" diaktifkan. Atau, jika "a", maka subrutin avariya() dipanggil dan semuanya dimatikan. Apabila memanggil subrutin suhu(), data ditulis kepada pembolehubah global temp1, temp2. Dari situ mereka masuk ke dalam subrutin yang diperlukan.

Pada masa akan datang, akan ada subrutin untuk membancuh pelbagai jenis dan juga moonshine.

Sekarang, mengenai program kawalan utama.

Program kawalan utama

Ia ditulis dalam visual studio c#.

Kod sumber program:

Kod sumber program

menggunakan Sistem; menggunakan System.Collections.Generic; menggunakan System.ComponentModel; menggunakan Sistem.Data; menggunakan Sistem.Lukisan; menggunakan System.Linq; menggunakan Sistem.Teks; menggunakan System.Threading.Tasks; menggunakan System.Windows.Forms; menggunakan System.IO.Ports; ruang nama WindowsFormsApplication1 ( public partial class Form1: Form ( // String portnumber; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParams ( dapatkan ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; kembalikan myCp; ) )*/ private void Form1_Load(pengirim objek, EventArgs e) ( label. PortName; Port1.Open(); ) //Menyemak peralatan private void button1_Click(objek penghantar, EventArgs e) ( jika (Port1.IsOpen == false) ( cuba ( //program boleh diubah suai maklumat daripada podrugomu.com/node /987 Port1.PortName = label2.Text; Port1.Open(); Port1.Write("Semak"); //SerialPort Port2 = new SerialPort("COM4", 9600); //Port2.Open(); // label3. Teks = Convert.ToString(Port2.ReadByte()); //menyemak bacaan port MessageBox.Show("Proses semakan perkakasan telah bermula", "Mesej maklumat"); richTextBox1.Text = richTextBox1.Text + "\n" + "Mulakan proses semakan perkakasan"+" "+DateTime.Now.ToString("HH:mm"); butang1.Didayakan = palsu; butang2.Didayakan = palsu; butang3.Didayakan = palsu; jika (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Tamatkan proses semakan perkakasan"+" "+DateTime.Now.ToString("HH:mm"); butang1. Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Tamat Kitaran Semakan Perkakasan" +" "+ DateTime.Now.ToString("HH:mm")) ; richTextBox1.SaveFile("CheckLOG.rtf"); ) ) catch ( richTextBox1.Text = richTextBox1.Text + "\n" + "Ralat proses semak perkakasan" +" "+ DateTime.Now.ToString("HH:mm" ); MessageBox.Show("Port peranti tidak sah dipilih. Proses semakan tidak boleh dimulakan", "Warninig"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Peralatan membersihkan private void button3_Click(penghantar objek, EventArgs e) ( jika (Port1.IsOpen == false) ( cuba ( //program boleh diubah suai maklumat daripada podrugomu.com/node/987 MessageBox. Tunjukkan(" Anda pasti menuang pembasmi kuman", "AMARAN", MessageBoxButtons.OK, MessageBoxIcon.Warning); Pelabuhan1. PortName = label2.Teks; Port1.Open(); Port1.Write("Bersih"); MessageBox.Show("Proses pembersihan peralatan telah bermula", "Mesej maklumat"); butang1.Didayakan = palsu; butang2.Didayakan = palsu; butang3.Didayakan = palsu; jika (Port1.ReadByte() == 1000) ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Tamat Kitaran Pembersihan Peralatan"); ) ) tangkap ( MessageBox.Show("Port peranti tidak sah dipilih. Proses pembersihan tidak boleh dimulakan", "Warninig"); ) ) ) konteks void peribadiMenuStrip1_Opening(penghantar objek, CancelEventArgs e) ( ) private void cOM1ToolStripMenuItem_Click(penghantar objek, EventArgs e ) ( Port SerialPort1 = SerialPort baru("COM1", 9600); // MessageBox.Show("port COM1 dipilih"); label1.Visible = true; label2.Teks = "COM1"; ) private void label2_Click(penghantar objek, EventArgs e) ( ) private void cOM2ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( SerialPort Port1 = SerialPort("COM2", 9600); // MessageBox.Show("COM2 port selected"); label1.Visible = true; label2. Text = "COM2"; ) private void cOM3ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( Port SerialPort1 = Port Serial baharu("COM3", 9600); // MessageBox.Show("port COM3 dipilih"); label1.Nampak = benar; label2.Teks = "COM3"; ) private void cOM4ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( SerialPort Port1 = new SerialPort("COM4", 9600); // MessageBox.Show("COM4 port selected"); label1.Visible = true; label2.Text = "COM4 "; ) private void cOM5ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( SerialPort Port1 = new SerialPort("COM5", 9600); // MessageBox.Show("COM5 port selected"); label1.Visible = benar; label2.Teks = "COM5"; ) private void cOM6ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( Port SerialPort1 = SerialPort("COM6", 9600); // MessageBox.Show("port COM6 dipilih"); label1.Visible = true; label2. Text = "COM6"; ) private void cOM7ToolStripMenuItem_Click(penghantar objek, EventArgs e) ( SerialPort Port1 = SerialPort("COM7", 9600); // MessageBox.Show("COM7 port selected");label1.Visible = true; label2.Text = "COM5"; ) program void peribadi BrewToolStripMenuItem_Click(penghantar objek, EventArgs e) ( ) // Brew private void button2_Click(penghantar objek, EventArgs e) ( // jika (Port1.IsOpen == false) //( // cuba //( //program boleh diubah suai maklumat daripada podrugomu.com/node/987 //Port1.PortName = label2. Teks; //Port1.Open(); suis (label3.Teks) ( kes "Penumbuk infusi dipilih": MessageBox.Show("Proses penumbuk infusi telah bermula", "Mesej maklumat"); Port1.WriteLine("i"); pemasa1.Start(); break; case " Cooper brew selected": MessageBox.Show("Proses tumbuk Cooper bermula", "Mesej maklumat"); Port1.WriteLine("v"); timer3.Start(); break; ) button1.Enabled = false; butang2.Didayakan = palsu; butang3.Didayakan = palsu; // button5.Enabled = palsu; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* jika (Port1.ReadLine() == "e\r") ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5.Enabled = true; */ //Port1.Close( ); // MessageBox.Show("Tamat Kitaran Pembuatan Bir"); // ) // ) // tangkapan //( // MessageBox.Show("Port peranti tidak sah dipilih. Proses pembuatan bir tidak boleh dimulakan", "Warninig "); //) // ) ) private void button5_Click(objek penghantar, EventArgs e) ( Port1.Write("p"); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; timer2. Start(); richTextBox1.Text = richTextBox1.Text + "\n" + "Mulakan memanaskan air dalam mash tun hingga 37 darjah" + " " + DateTime.Now.ToString("HH:mm"); /* Port1. Buka (); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine("o"); Port1.Close(); */ ) private void exitToolStripMenuItem_Click(objek penghantar, EventArgs e) ( Close(); ) private void button4_Click(objek penghantar, EventArgs e) ( ) private void infusionMashToolStripMenuItem_Click(objek penghantar, EventArgs e) ( label3.Text = "InfusionMash dipilih"; ) pemasa void peribadi1_Tick(penghantar objek, 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 minit ialah 4200 saat pemasa1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(); MessageBox.Show("infusion mash selesai, wort perlu ditapis"); button1.Enabled = true; button2.Enabled = true; button3.Enabled = true ; button5.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) private void label4_Click(objek penghantar, EventArgs e) ( ) private void timer2_Tick(objek penghantar, EventArgs e) ( label5 .Text = Port1.ReadLine(); if (Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("Air ialah 37 darjah. Anda boleh menambah malt dan menghidupkan mod lecek"); richTextBox1.Text = richTextBox1.Text + "\n" + "Tamat proses penyediaan mash tun. Т=37 darjah" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void emergencyDisableToolStripMenuItem_Click(penghantar objek, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("Pengguna telah menutup keseluruhan sistem"); ) private void mash kettleToolStripMenuItem_Click(penghantar objek, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Mash tun boiling mode dihidupkan . Tunggu 60 minit") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Mod mash tun boil dihidupkan. Tunggu 60 minit" + " " + DateTime.Now.ToString("HH:mm"); ) pemasa void peribadi3_Tick(penghantar objek, EventArgs e) ( rentetan s1 = ""; Port1.ReadLine(); jika (s1.Substring(0, 2) == "t1") label5.Teks = s1.Substring(4, 5); if (s1.Substring (0, 2) == "t2") label9.Teks = s1.Substring(4, 5); s++; if (s == 900) ( Port1.WriteLine("m") ; MessageBox.Show("Timpa fasa pada 62 darjah"); richTextBox1.Text = richTextBox1.Text + "\n" + "Lenyuk peringkat pada 62 darjah" + " " + DateTime.Now.ToString("HH:mm") ; ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("Peringkat Gosok pada 78 darjah"); richTextBox1.Text = richTextBox1.Teks + "\n" + "Peringkat Gosok pada 78 darjah " + " " + DateTime.Now.ToString("HH:mm"); ) jika (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Peringkat Mash selesai, anda boleh mengalirkan wort") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Peringkat tumbuk sudah tamat. Anda boleh mengalirkan wort" + " " + DateTime.Now.ToString("HH:mm"); ) ) peribadi void normalToolStripMenuItem_Click(penghantar objek, EventArgs e) ( label3.Text = "Cooper brew dipilih"; ) ) )

Program ini berkomunikasi dengan arduino melalui port com. Satu-satunya perkara yang saya tidak dapat atasi ialah apabila mengundi port com, program tidak membeku semasa subrutin dilaksanakan. Selepas tamat subrutin, program itu digantung, tetapi buat masa ini ini tidak kritikal dan juga semacam tambahan. Foolproof - untuk menghalang anda daripada menekan apa-apa semasa prosedur tertentu.

Secara keseluruhan, program ini boleh

- menyediakan peralatan untuk memasak;
- masak;
- tulis log kerja mudah (sangat berguna untuk analisis lanjut pembuatan bir);
- pilih port untuk menyambung kepada pengawal kawalan (arduino UNO);
rebus brewer dan tumbuk tun.

Apabila pam dan injap solenoid tiba, saya akan mengautomasikannya lagi. Dalam pada itu, saya akan menambah satu program memasak setiap hari Ahad. Terdapat 5 program kesemuanya. Pelaksanaan mod manual juga sedang menunggu gilirannya.
Seperti kata pepatah,

akan bersambung...

UPD:

Berikut adalah beberapa gambar kilang bir

Ini adalah penghadam. Saya mempunyai dua daripada ini. Sensor suhu DS18B20 dalam bingkai tertutup dipasang di sisi.
Untuk masa yang lama saya tidak dapat memahami mengapa arduino secara berkala membeku, sehingga saya sedar bahawa segala-galanya perlu dibumikan, jika tidak, ia akan menembusi ke perumahan, kemudian ke perumahan sensor dan ke arduino.

Tiub tembaga di dalamnya adalah untuk menapis wort. Ia boleh dibuat lebih cantik, tetapi lebih baik menggunakan bahagian bawah palsu. Malangnya, orang Cina tidak tergesa-gesa menghantarnya.

Masih terlalu awal untuk bercakap tentang keputusan, inilah yang berlaku

Pandangan umum tong kelihatan seperti ini.

Penyambung biasa terpakai
untuk menyambungkan penderia suhu, disambungkan kepada soket berganda. Ia lebih mudah untuk mencuci peralatan. Saya mematikannya dan membawanya ke bilik air. Saya membasuhnya, menyambungkannya dan semuanya berfungsi.

Semuanya berbuih mengikut jadual, tiada lebihan yang bocor. Dan rancangan segera saya adalah untuk mengalirkan sekumpulan bir untuk penapaian selanjutnya dan membancuh satu lagi. Resipi, pada dasarnya, boleh dilihat dalam kod dalam subrutin varka() arduino.

Injap solenoid akhirnya tiba. Proses automasi diteruskan.

Automasi dalam masyarakat moden adalah langkah yang perlu, kerana dalam era digital adalah amat penting untuk menghapuskan faktor manusia dalam pelbagai industri untuk menyeragamkan dan meningkatkan kualiti produk. Terdapat juga kawasan di mana manusia tidak boleh melakukan apa yang robot mampu, contohnya, penghasilan bahan nano dan litar mikro.

Walau bagaimanapun, automasi bukan sahaja membantu dalam pengeluaran, tetapi ia juga boleh berguna untuk orang biasa. Sebagai contoh, automasi untuk kilang bir menggunakan Arduino boleh memudahkan proses penghasilan produk dengan ketara. Mari kita fikirkan bagaimana automasi untuk pembetulan pada Arduino dan perkara lain boleh membantu, dan lihat contoh.

Kelebihan utama sistem automatik berdasarkan mikropengawal Arduino

Tiada siapa yang melarang anda memateri papan anda sendiri dan memprogramkannya sendiri menggunakan bahasa peringkat rendah. Walau bagaimanapun, automasi menggunakan Arduino dan mikropengawal siap sedia akan memudahkan keseluruhan proses dan menjimatkan masa. Lagipun, lebih mudah untuk membeli produk siap pakai dengan satu set perpustakaan dan menyesuaikannya dengan keperluan anda. Dan automasi mampu milik pada Arduino mega 2560 boleh berguna dalam banyak bidang kehidupan, daripada suis suara untuk rumah pintar kepada selak elektrik dengan pengesan gerakan. Kelebihan utama automasi Arduino terkenal ialah:

  1. Penghalang masuk yang rendah. Tidak perlu mendapatkan pendidikan jurutera; cukup untuk menonton beberapa video latihan dan mempunyai asas dalam pengaturcaraan.
  2. Sebilangan besar perpustakaan yang telah disediakan. Arduino digunakan di seluruh CIS oleh ramai peminat robotik, sehingga pengeluaran pelbagai elektronik menjadi hobi mereka. Sehubungan itu, komuniti pengguna dalam talian sangat aktif, menyiarkan sejumlah besar kosong dan bersedia untuk membantu anda menyelesaikan sebarang masalah. Kualiti perpustakaan terjejas kerana ambang kemasukan yang rendah, tetapi tiada siapa yang melarang anda membuat sendiri; cukup untuk mengkaji semantik bahasa C++ atau menggunakan penterjemah siap sedia.
  3. Sebilangan besar peranti. Tidak kira jika anda memerlukan automasi rumah hijau berasaskan Arduino atau penderia cahaya, anda akan menemui sebarang modul, termasuk penderia bunyi dan pengecam suara. Ya, sesetengah papan memerlukan banyak wang, tetapi anda sentiasa boleh mencari analog murah, sebagai contoh, modul wi-fi esp8269 daripada pengeluar pihak ketiga, yang berharga 10 kali lebih rendah daripada yang rasmi.
  4. Banyak maklumat. Sebarang masalah yang anda hadapi telah pun dihadapi oleh orang lain dan anda mungkin akan mencari penyelesaian di Google. Terdapat juga literatur lengkap yang boleh anda rujuk.

Walau bagaimanapun, jangan fikir Arduino tidak mempunyai kelemahan. Papan itu terkenal dengan prestasi rendahnya. Dalam tugas yang sangat kompleks dan dengan sejumlah besar kod, masa tindak balas boleh mencapai 1 saat, yang tidak boleh diterima untuk mikropengawal. Memori kilat kebanyakan modul tidak melebihi 1 MB, yang tidak mencukupi untuk mencipta rangkaian saraf atau menggunakan fail media. Sudah tentu, anda boleh menyambungkan kad memori tambahan, tetapi ini meningkatkan masa tindak balas, memerlukan sumber tambahan untuk menggerakkannya dan dilakukan dengan cara separa kraftangan.

Walau bagaimanapun, sistem automatik mudah, contohnya, untuk membuat bir atau rumah hijau, tidak memerlukan walaupun sebahagian kecil daripada sumber yang boleh disediakan oleh lembaga itu. Sehubungan itu, kebanyakan pengguna akan mendapati kekurangan ini tidak bermakna. Jika anda memutuskan untuk memasang pencetak 3-D anda sendiri atau reka bentuk yang lebih kompleks, anda harus melihat dengan lebih dekat pada analog. Tetapi halangan untuk masuk untuk pesaing Arduino akan menjadi lebih tinggi.

Contoh automasi proses berdasarkan mikropengawal Arduino

Contoh paling mudah automasi proses boleh menjadi rumah hijau menggunakan Arduino. Untuk mencipta sebarang sistem, adalah wajar untuk mentakrifkan dengan jelas tugas yang mesti dilakukannya. Menggunakan rumah hijau sebagai contoh, ini akan menjadi:

  1. Penciptaan iklim yang istimewa.
  2. Menghidupkan dan mematikan lampu tepat pada masanya.
  3. Penyiraman tumbuhan tepat pada masanya dan mengekalkan kelembapan udara pada tahap yang sama.

Berdasarkan tugasan ini, anda boleh melihat dengan segera perkara yang anda perlukan untuk membeli untuk papan utama:

  1. Pengesan suhu. Ia akan memastikan bahawa udara tidak panas atau sejuk, berada dalam had yang ditetapkan oleh program. Jika suhu berubah, papan akan menghidupkan penghawa dingin atau bateri elektronik.
  2. Sensor cahaya. Sudah tentu, anda boleh mengehadkan diri anda kepada penyelesaian perisian dan membeli lampu mahal yang menyerupai cahaya siang hari. Tetapi jika anda ingin membuat rumah hijau sepenuhnya, maka akan lebih mudah untuk memasang siling automatik, yang akan dikawal oleh Arduino.
  3. Sensor kelembapan. Di sini semuanya sama dengan suhu, mengikut senario yang ditetapkan, papan akan menghidupkan penyembur dan pelembap, jika perlu.

Apabila anda membeli semua modul yang diperlukan, yang tinggal hanyalah memprogramkannya. Lagipun, tanpa kod, ini hanyalah kepingan perkakasan yang tidak mampu melakukan apa-apa.

Pengaturcaraan mikropengawal Arduino untuk automasi proses. Contoh

Seperti dalam perkara sebelumnya, untuk pengaturcaraan adalah penting untuk memecahkan tugas kepada sub-titik yang berasingan dan melaksanakannya secara berurutan. Pengaturcaraan Arduino berlaku terima kasih kepada arahan dalam antara muka AT dan AT+, menggunakan perpustakaan yang disediakan. Sehubungan itu, semua skrip ditulis dalam persekitaran khas dalam C++ dan, sebelum melakukan apa-apa, luangkan masa untuk mengkaji semantiknya. Selain melaksanakan fungsi mudah, sistem ini juga mampu menyimpan skrip dalam memori kilat, yang mana kita perlukan dalam contoh ini.

Jangan lupa bahawa maklumat daripada setiap sensor datang dalam masa nyata dan sebagai pembolehubah, tetapi anda boleh mengehadkan masa tindak balas, kerana tidak perlu membelanjakan sumber dan mengukur setiap parameter secara berterusan. Sehubungan itu, tetapkan masa hidup dan mati untuk setiap sensor atau tetapkan masa tindak balas untuk tempoh tertentu.