Unit kawalan kilang bir pada Arduino. Unit kawalan kilang bir bajet menggunakan Arduino Uno

Peranti ini digunakan untuk mengautomasikan proses tumbuk malt. Tidak bertujuan untuk merebus wort.

Ia pada asalnya dipasang sebagai pemasa maklumat dengan penunjuk masa dan suhu. Selepas itu, geganti telah ditambah dan keseluruhan proses tumbuk telah diautomasikan.

Untuk mengautomasikan penumbuk malt, anda memerlukan bahagian berikut.

Arduino UNO R3
1.8" Bersiri 128×160 SPI TFT Modul Paparan LCD + Penyambung SD IC Kuasa Penyesuai PCB
Modul geganti 5 V 1 saluran Level rendah untuk SCM Perkakas Kawalan untuk (10A 220V, pada had, lebih baik menggunakan yang lebih kuat, contohnya SSR-40DA Solid State Relay + sink haba)
Pelompat Dupont (lelaki, perempuan)
Pakej Keluli Tahan Karat DS1820 Kalis Air DS18B20 Sensor Suhu 18B20 Sensor untuk Arduino
Tweeter (pembesar suara Piezo)
4.7 kOhm perintang
Kabel USB A-B+ Pengecasan USB untuk menghidupkan arduino

Gambar rajah sambungan untuk penderia, geganti, tweeter

Gambar rajah sambungan Skrin TFT kepada arduino uno

1.8 TFT SPI 128×160 Arduino UNO
SCK Pin 13
S.D.A. Pin 11
C.S. Pin 10
A0 Pin 9
TETAP SEMULA Pin 8
VCC +5V
GND GND
LED+ +5V

Litar kuasa.

platform Arduino

Menyambungkan elemen pemanasan, pam

Kami memilih keratan rentas wayar dan geganti kuasa mengikut jumlah kuasa elemen pemanasan dan pam.

Lakaran untuk arduino uno (fail ino 30/03/2018).zip (2.32 Kb)

Untuk memuat turun lakaran anda perlu memasang Arduino IDE.

Kami menyambungkan arduino ke komputer, melancarkan IDE Arduino. Dalam menu "Alat" - Papan - pilih "Arduino/Genuino Uno". "Alat" - Port - pilih yang mana arduino disambungkan. Kemungkinan besar akan ada satu port com. Anda juga boleh melihat nombor port dalam Pengurus Peranti.

Buka lakaran dan klik butang "Muat naik".

Keseluruhan peranti sedia untuk digunakan.

Menetapkan jeda dilakukan terus dalam lakaran itu sendiri (baris 12 hingga 29):

Contoh:
int c1 = 52; //suhu jeda pertama 52 darjah
p1 panjang tidak bertanda = 20 * 60000; //masa jeda pertama 20 minit
int c2 = 63; //suhu jeda kedua 63 darjah
p2 panjang yang tidak ditandatangani = 30 * 60000; //masa jeda kedua 30 minit

Dalam baris 177 lakaran, bacaan sensor suhu dilaraskan.
celsius = celsius + 1; // +1 darjah

1. Petunjuk geganti: Vk - hidup / tertutup, Ot - mati / buka.
2. Jeda suhu.
3. Bacaan sensor suhu semasa.
4. Jumlah masa operasi.
5. Masa jeda suhu.
6. Pemasa (kira detik) jeda semasa.

!!!PENTING Apabila dihidupkan, geganti dihidupkan/ditutup.
Pada penghujung jeda Mash out, geganti dimatikan/dibuka.

Jika bilangan jeda yang lebih kecil diperlukan, contohnya, tumbuk jeda tunggal, tetapan untuk ini adalah seperti berikut:
1 jeda, 67 darjah 60 min.
2, 3, 4 jeda darjah dan tetapkan masa kepada SIFAR.
76 tumbuk keluar 5 min.

Dalam amalan ia digunakan seperti berikut.

Sensor suhu dipasang di dinding tangki.
Elemen pemanas 2KW di bawah bahagian bawah palsu.
Pam adalah 12V, ia mengambil wort melalui paip di bawah bahagian bawah palsu, tetapi di atas elemen pemanasan, dan mengembalikannya ke tangki dari atas.
!!!Pam dan elemen pemanas "gantung" pada geganti yang sama (10A 220V, pada had, lebih baik menggunakan yang lebih kuat)
Air dituangkan dan malt ditambah.
Peranti dihidupkan.
Suhu serta-merta mula meningkat sehingga jeda pertama, apabila mencapai elemen pemanas dan pam dimatikan.
Pemasa bermula. Suhu dikekalkan, selepas tamat waktu, suhu meningkat sehingga ada jeda, dll.

Soalan, jawapan, perbincangan dalam Kumpulan VK vk.com/brewmate

Kawan-kawan, saya perlukan bantuan sebagai pembuat bir rumah. Sejak keinginan untuk membuat termometer pintar, banyak masa telah berlalu dan keinginan baru telah timbul - untuk membina automatik kilang bir rumah. Untuk mengautomasikannya, unit kawalan diperlukan. Ia telah memutuskan untuk berhenti menggunakan yang dibeli pengawal PID, untuk mengawal elemen pemanasan, kerana Terdapat Arduino, geganti SSR untuknya, paparan baris 4 hingga 20 dan Papan Bersiri untuk menghantar maklumat melalui satu wayar, tidak mengira tanah dan kuasa.
Pengawal Arduino saya, saya menggunakan projek Rob Australia, projek itu direka untuk Arduino Duemilanove ATmega328 - www.arduino.cc/cgi-bin/yabb2/YaBB.pl
dan secara langsung projek itu sendiri -
Kilang bir saya akan berfungsi mengikut prinsip yang sedikit berbeza, tidak seperti Rob, saya bergantung pada Spidel Braumeister, cara ia berfungsi jelas daripada video ini: http://www.youtube.com/watch?v=x-OBE4tJ-j8&feature= halaman profil pemain
Tetapi, malangnya, saya tidak pernah menjadi pengaturcara, saya tahu cara memateri dan melakukannya mengikut arahan. Sekarang, jika anda membuat semula program Rob, ia akan menjadi sempurna peranti kawalan. Saya memasang pengawal dan mengujinya, tetapi atas sebab tertentu sensor terma DS tidak dikenali. Terdapat banyak perkara yang tidak perlu dalam projek ini untuk saya, kerana... Saya tidak mahu membina sistem HERMS seperti pengarang, jadi anda boleh mengalih keluar semua yang tidak diperlukan daripada program. Semua orang penggerak dikawal oleh geganti keadaan pepejal. Saya mempunyai 2 keping, untuk elemen pemanas dan pam. Saya menggunakan elemen pemanas yang dibeli di Amazon, ketumpatan rendah 4.5 kW. Tiada apa-apa yang melekat padanya dan anda juga boleh menghidupkannya di udara dan ia tidak akan terbakar. Apa yang menarik ialah paparan disambungkan melalui Papan Bersiri, saya memasangnya dari kit yang dibeli di eBay. Hanya 3 wayar digunakan, dengan itu memunggah port Arduino. Apa yang diperlukan: Kawalan PID elemen pemanasan untuk ketepatan dan kemudahan, terdapat perpustakaan siap pakai untuk Arduino, digunakan secara meluas dalam projek www.brewtroller.com/wiki/doku.php, anda juga boleh meminjam banyak idea dari sana , tetapi projek itu terlalu sarat dengan fungsi dan juga disesuaikan untuk HERMS dan RIMS Amerika. Program ini harus mempunyai 3 mod operasi: CIP basuh (memanaskan air sehingga 70g (boleh ditukar dalam tetapan) dan operasi serentak pam), mod AUTO (apabila semua langkah yang ditetapkan dalam mod pengaturcaraan diproses, anda boleh jeda dan bergerak secara paksa ke langkah seterusnya ), mod MANUAL (B mod manual kami hanya mengawal suis hidup/mati elemen pemanas, pam dan Keluaran AUX, suhu ditunjukkan.), pengaturcaraan AUTO (mod auto - pemanasan air 70g, jeda (untuk mengisi, boleh laras), menetapkan suhu jeda (perlu ada 4 jeda, supaya dengan rizab, asid, protein, sakarifikasi), dengan kerja serentak pam, mash out jeda - dikonfigurasikan dengan operasi serentak pam, hanya operasi pam, yang dipanggil mod pusaran air, apabila wort berputar dalam aliran dan semua kekeruhan mendap di tengah, dan mengepam dengan operasi serentak AUX dan sensor suhu kedua, pemampat akuarium dengan aliran melalui akan disambungkan di dalamnya aerator, wort mengalir melalui penyejuk-penyejuk aliran.
Sebenarnya, tugas itu tidak besar, tetapi saya seorang humanis, dan pengaturcaraan tidak datang dengan mudah.

hidup masa ini, pengawal kelihatan seperti ini:

Sebagai balasan, saya berjanji untuk menjadi mentor peribadi dan guru dalam pembuatan bir bagi sesiapa yang berminat! :)

UDP! Topik tentang Habré!

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 dengan 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 dalam mod separa automatik;
  • Brew bir secara manual;
  • Bancuh bir secara automatik (seperti mesin basuh membasuh pakaian).

Perkara pertama belum dilaksanakan buat masa ini. 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.

Mengapa saya memerlukan automasi?

Automasi diperlukan untuk memudahkan proses, kerana... pengawal ini sendiri akan memantau suhu, mengekalkannya dan menaikkannya ke jeda suhu yang diperlukan. Anda juga boleh menggunakan isyarat yang boleh didengar untuk menunjukkan 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. Saya tidak menemui penyelesaian siap sedia, jadi saya mula membuat 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 saja memutuskan untuk mencuba teknologi baru untuk diri saya sendiri, 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 itu untuk pencetak laser dan pencetak inkjet, pilihan terbaik diperoleh hanya dengan filem untuk pencetakan 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 filem pelindung atas dengan berhati-hati 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 mengambilnya dari bingkai foto lama), dan letakkan pemberat pada kaca:


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. Saya tidak akan menulis tentang ferik klorida, tetapi saya mungkin akan menerangkannya menggunakan 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:


Dengan cara ini, jika anda mengukir pada suhu yang lebih tinggi, contohnya dengan lampu pijar atau dalam mandi air, maka etsa akan dikurangkan sebanyak tiga, 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:


Saya menyolder komponen SMD dengan stesen pematerian inframerah Cina, sangat mudah:

Itu sahaja, bahagian yang paling sukar telah berakhir, yang tinggal hanyalah menguji trek untuk 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 ialah menambah atau segera mengambil pemasangan siap pada program yang dipasang:
3. Muat naik lakaran ArduinoISP ke UNO:

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 3

Peranti ini digunakan untuk mengautomasikan proses tumbuk malt. Tidak bertujuan untuk merebus wort.

Ia pada asalnya dipasang sebagai pemasa maklumat dengan penunjuk masa dan suhu. Selepas itu, geganti telah ditambah dan keseluruhan proses tumbuk telah diautomasikan.

Untuk mengautomasikan penumbuk malt, anda memerlukan bahagian berikut.

Untuk memuat turun lakaran anda perlu memasang .

Kami menyambungkan arduino ke komputer, melancarkan IDE Arduino. Dalam menu "Alat" - Papan - pilih "Arduino/Genuino Uno". "Alat" - Port - pilih yang mana arduino disambungkan. Kemungkinan besar akan ada satu port com. Anda juga boleh melihat nombor port dalam Pengurus Peranti.

Buka lakaran dan klik butang "Muat naik".

Keseluruhan peranti sedia untuk digunakan.

Menetapkan jeda dilakukan terus dalam lakaran itu sendiri (baris 12 hingga 29):

Contoh:
int c1 = 52; //suhu jeda pertama 52 darjah
p1 panjang tidak bertanda = 20 * 60000; //masa jeda pertama 20 minit
int c2 = 63; //suhu jeda kedua 63 darjah
p2 panjang yang tidak ditandatangani = 30 * 60000; //masa jeda kedua 30 minit

Dalam baris 177 lakaran, bacaan sensor suhu dilaraskan.
celsius = celsius + 1; // +1 darjah


1. Petunjuk geganti: Vk - hidup / tertutup, Ot - mati / buka.
2. Jeda suhu.
3. Bacaan sensor suhu semasa.
4. Jumlah masa operasi.
5. Masa jeda suhu.
6. Pemasa (kira detik) jeda semasa.

!!!PENTING Apabila dihidupkan, geganti dihidupkan/ditutup.
Pada penghujung jeda Mash out, geganti dimatikan/dibuka.

Jika bilangan jeda yang lebih kecil diperlukan, contohnya, tumbuk jeda tunggal, tetapan untuk ini adalah seperti berikut:
1 jeda, 67 darjah 60 min.
2, 3, 4 jeda darjah dan tetapkan masa kepada SIFAR.
76 tumbuk keluar 5 min.

Dalam amalan ia digunakan seperti berikut.

Sensor suhu dipasang di dinding tangki.
Elemen pemanas 2KW di bawah bahagian bawah palsu.
Pam adalah 12V, ia mengambil wort melalui paip di bawah bahagian bawah palsu, tetapi di atas elemen pemanasan, dan mengembalikannya ke tangki dari atas.
!!!Pam dan elemen pemanas "gantung" pada geganti yang sama (10A 220V, pada had, lebih baik menggunakan yang lebih kuat)
Air dituangkan dan malt ditambah.
Peranti dihidupkan.
Suhu serta-merta mula meningkat sehingga jeda pertama, apabila mencapai elemen pemanas dan pam dimatikan.
Pemasa bermula. Suhu dikekalkan, selepas tamat waktu, suhu meningkat sehingga ada jeda, dll.

Soalan, jawapan, perbincangan dalam Kumpulan VK