Arduino õlletehase juhtseade. Soodne õlletehase juhtseade Arduino Uno abil

Seadet kasutatakse linnaste meskimisprotsessi automatiseerimiseks. Ei ole ette nähtud virde keetmiseks.

Algselt pandi see kokku aja- ja temperatuuriindikaatoriga infotaimerina. Seejärel lisati relee ja kogu meskimisprotsess automatiseeriti.

Linnaste meskimise automatiseerimiseks vajate järgmisi osi.

Arduino UNO R3
1,8-tolline 128 × 160 SPI TFT LCD-ekraani moodul + PCB-adapteri toite-IC SD-pistik
5 V releemoodul 1 kanal madal tase SCM jaoks Seadmed Juhtimine (10A 220V, piiril, parem kasutada tugevamat, näiteks SSR-40DA pooljuhtrelee + jahutusradiaator)
Dupont džemprid (mees, naine)
DS1820 roostevabast terasest pakend veekindel DS18B20 temperatuuriandur 18B20 andur Arduino jaoks
Tweeter (piezo kõlar)
4,7 kOhm takisti
USB A-B+ kaabel USB laadimine arduino toiteks

Anduri, relee, tweeteri ühendusskeem

Ühendusskeem TFT ekraan et 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
RESET Pin 8
VCC +5V
GND GND
LED+ +5V

Toiteahel.

Arduino platvorm

Kütteelemendi, pumba ühendamine

Juhtmete ristlõike ja toiterelee valime vastavalt kütteelemendi ja pumba koguvõimsusele.

Arduino uno visand (fail ino 30.03.2018).zip (2,32 Kb)

Visandi allalaadimiseks peate installima Arduino IDE.

Ühendame arduino arvutiga, käivitame Arduino IDE. Menüüs "Tööriistad" - tahvel - valige "Arduino / Genuino Uno". "Tööriistad" - Port - valige see, kuhu arduino on ühendatud. Tõenäoliselt tuleb üks com porti. Pordi numbrit saate vaadata ka seadmehalduris.

Avage eskiis ja klõpsake nuppu "Laadi üles".

Kogu seade on kasutamiseks valmis.

Pausid konfigureeritakse otse visandis endas (read 12 kuni 29):

Näide:
int c1 = 52; //esimese pausi temperatuur 52 kraadi
märgita pikk p1 = 20 * 60 000; //esimese pausi aeg 20 minutit
int c2 = 63; //teise pausi temperatuur 63 kraadi
märgita pikk p2 = 30 * 60000; //teine ​​pausiaeg 30 minutit

Eskiisi real 177 reguleeritakse temperatuurianduri näitu.
Celsiuse järgi = Celsiuse temperatuur + 1; // +1 kraadi

1. Relee näit: Vk - sees / suletud, O - väljas / avatud.
2. Temperatuuride peatamine.
3. Praeguse temperatuurianduri näit.
4. Tööaeg kokku.
5. Temperatuuri pausi aeg.
6. Praeguse pausi taimer (tagasiloendus).

!!!TÄHTIS Sisselülitamisel on relee sees/suletud.
Mash out pausi lõppedes lülitub relee välja/avatakse.

Kui on vaja väiksemat arvu pause, näiteks ühe pausiga segamine, on selle seaded järgmised:
1 paus, 67 kraadi 60 min.
2, 3, 4 peatab kraadi ja seadke kellaajaks NULL.
76 puder välja 5 min.

Praktikas kasutatakse seda järgmiselt.

Temperatuuriandur on paigaldatud paagi seinale.
2KW küttekeha valepõhja all.
Pump on 12V, võtab virde läbi kraani valepõhja alt, aga küttekeha kohal ja annab ülevalt paaki tagasi.
!!!Pump ja kütteelement “rippuvad” sama relee küljes (10A 220V, piiril, parem kasutada tugevamat)
Valatakse vesi ja lisatakse linnased.
Seade lülitub sisse.
Temperatuur hakkab kohe tõusma kuni esimese pausini, kui küttekeha ja pump lülitatakse välja.
Taimer käivitub. Temperatuuri hoitakse, peale aja lõppu tõuseb temperatuur kuni tekib paus jne.

Küsimused, vastused, arutelud VK Grupis vk.com/brewmate

Sõbrad, ma vajan abi kodupruulijana. Targa termomeetri valmistamise soovist on palju aega möödas ja tekkinud on uus soov - ehitada automatiseeritud kodune õlletehas. Selle automatiseerimiseks on vaja juhtseadet. Ostetud kasutamine otsustati lõpetada PID kontrollerid, kütteelemendi juhtimiseks, sest Seal on Arduino, selle jaoks SSR-relee, 4 x 20 rida ekraan ja Serial Board teabe edastamiseks üle ühe juhtme, arvestamata maad ja võimsust.
Minu Arduino kontroller, ma kasutan Austraalia Robi projekti, projekt on mõeldud Arduino Duemilanove ATmega328 jaoks - www.arduino.cc/cgi-bin/yabb2/YaBB.pl
ja otse projekt ise -
Minu õlletehas hakkab töötama veidi teistsuguse põhimõtte järgi, mitte nagu Robi oma, loodan Spidel Braumeistrile, kuidas see töötab, selgub nendest videotest: http://www.youtube.com/watch?v=x-OBE4tJ-j8&feature= mängija_profiilileht
Kuid kahjuks pole ma kunagi programmeerija, ma tean, kuidas jootma ja teen seda vastavalt juhistele. Kui nüüd Robi programm ümber teha, oleks see ideaalne juhtimisseade. Panin kontrolleri kokku ja katsetasin, aga millegipärast ei tunneta ära DS termoandureid. Selles projektis on minu jaoks palju ebavajalikku kraami, sest... Ma ei taha luua sellist HERMS-süsteemi nagu autori oma, nii et saate programmist eemaldada kõik mittevajalikud. Kõik täiturmehhanismid mida juhivad pooljuhtreleed. Mul on 2 tk, küttekeha ja pumba jaoks. Kasutan Amazonist ostetud küttekeha, madala tihedusega 4,5 kW. Miski ei kleepu selle külge ja saate selle isegi õhus sisse lülitada ja see ei põle. Huvitav on see, et ekraan on ühendatud jadaplaadi kaudu, panin selle kokku eBayst ostetud komplektist. Kasutatakse ainult 3 juhet, laadides sellega Arduino pordid maha. Vaja läheb: Küttekeha PID juhtimine täpsuse ja mugavuse huvides, Arduino jaoks on valmis raamatukogu, mida kasutatakse laialdaselt projektis www.brewtroller.com/wiki/doku.php, sealt saab ka palju ideid laenata , kuid projekt on funktsioonidega ülekoormatud ja on kohandatud ka Ameerika HERMS-i ja RIMS-i jaoks. Programmil peaks olema 3 töörežiimi: CIP pesemine (vee soojendamine kuni 70g (saab seadistustes muuta) ja pumba samaaegne töötamine), AUTO režiim (kui kõik programmeerimisrežiimis ette nähtud sammud on töödeldud, saate peatage ja liikuge jõuliselt järgmise sammu juurde ), KÄSITSI režiim (B käsitsi režiim juhime lihtsalt kütteelemendi, pumba ja sisse/välja lülitamist AUX väljund, kuvatakse temperatuur.), AUTO programmeerimine (automaatrežiim - vee soojendamine 70g, paus (täitmiseks, reguleeritav), temperatuuri seadmise pausid (peaks olema 4 pausi, nii et varuga, hape, valk, suhkrustamine), koos samaaegne töö pump, pudru väljapaus - konfigureeritud pumba samaaegse tööga, lihtsalt pumba tööga, niinimetatud mullivanni režiimis, kui virre keerleb joana ja kogu hägusus settib keskele, ning pumpamine koos pumba samaaegse tööga Sellesse aeraatorisse ühendatakse AUX ja teine ​​temperatuuriandur, läbivooluga akvaariumi kompressor, virre voolab läbi läbivoolujahuti-jahuti.
Tegelikult pole ülesanne suur, aga ma olen humanist ja programmeerimine lihtsalt ei tule lihtsalt.

Peal Sel hetkel, kontroller näeb välja selline:

Vastutasuks luban saada kõigile huvilistele isiklikuks mentoriks ja õllevalmistamise õpetajaks! :)

UDP! Teema Habré kohta!

Olen tehnikaülikooli üliõpilane. Ühel päeval, istudes kohvikus koos sõbraga, kes õppis tollal meditsiiniülikoolis, otsustasid nad avada baari. Ideid, mis põhimõtteliselt väärisid tähelepanu, oli palju. Näiteks tantsupõrand, mis muudab kaldenurka olenevalt muusikastiilist... Kuid kõige erineva ideede kõrval oli ka veel üks -

…kas me ei peaks ise õlut pruulima?

Paar nädalat hiljem pruulisin õlut, kasutades selle õlletehase koostisosi, kus töötas mu isa sõber. Aga paljud tehnoloogilised protsessid rikuti, nii et õlle asemel tuli välja midagi mitte eriti meeldiva lõhnaga.

Mõni aasta hiljem otsustasin protsessi korrata, automatiseerides seda veidi kasutades Arduino UNO. Ja see juhtus.

Alustan sellest, mida kogu seadistus tegema peaks.

  • Kontrollige ennast - kas kõik töötab, kas kõik on ühendatud;
  • Puhastage ennast;
  • Valmistage pruulimisprotsessiks ette;
  • Valmistage õlut poolautomaatses režiimis;
  • Valmistage õlut käsitsi;
  • Valmistage õlut automaatselt (nt pesumasin peseb riideid).

Esimest punkti pole hetkel rakendatud. Siiani pole mul isegi mingeid mõtteid, kuidas seda rakendada.
Teine on samuti realiseerimata, aga lähiajal lõpetan, jään ootama, millal ebayst pumbad kohale jõuavad.
Kolmas punkt on üsna lihtne.

Valmistamine pruulimisprotsessiks

Süsteemilt teade, et on vaja vett vanni valada -> programm ootab OK klahvi vajutamist -> programm saadab arduinole käskluse pooljuhtrelee sisselülitamiseks -> pooljuhtrelee relee lülitab sisse ühe kilovatise küttekeha vaadis, viib selle temperatuurini 37 kraadi, saadab programmile käsu, et kõik on küpsetamiseks valmis. Hoiab temperatuuri 37 kraadi.

Tahaks küll vee olemasolu kontrolli, aga andur ootab veel “Hiina vendadelt” saatmist.

Õlle valmistamine poolautomaatses režiimis

Põhimõtteliselt lihtne protseduur:

Kliki kontrolli programm Nupp “Soojendus”, teised juhtnupud on passiivsed;
- Pärast soojendamist kuvab programm teate "Kõik on valmis, saate süüa teha";
- Lisage koostisained, valige pruulimisprogramm - nupp “Brewing Beer” aktiveerub;
- Vajutage nuppu "Brewing Beer", protsess on alanud;
- Järgmisena teavitab süsteem perioodiliselt infosõnumid mida teha ja millal.

Peate järgima juhiseid.

Õlle käsitsi valmistamine

See protsess võimaldab seadistada küpsetusparameetreid ja muuta neid küpsetustsükli ajal. Pole veel selleni jõudnud.

Automaatne toiduvalmistamine

See on unistus. Praegu pole ühtegi komponenti, mida rakendada. Pole piisavalt pumpasid ja veetaseme andureid. Ma ei tea, kuidas mõõta virde tihedust, kui palju alkoholi on noores õlles ja palju muud. Kuid ma ei heida meelt ja automatiseerin järk-järgult, kuni õlle valmistamine näeb välja selline:

Viskasin ained vastavatesse kandikutesse, vajutasin nuppu ja... pooleteise kuu pärast sain valmis õlle kätte.

See on lühike ülevaade protsessist, nüüd liigume edasi tehnilise poole juurde.

Protsessi tehniline pool

Nagu eespool öeldud, on juhtmikrokontroller arduino UNO. Sellega on ühendatud 2 releed, 2
digitaalne termomeeter DS18B20.

Arduino suhtleb põhiprogrammiga kom-pordi kaudu. Sest Mul pole arduino jaoks reaalajas nimesilt, pidin visuaalsest c#-st taimerid võtma. Mul pole programmide kirjutamise kogemust, nii et kui kellelgi on ideid või kriitikat, siis oleks au. Nii-öelda kritiseerige, rebige, kui see teile äkki ei meeldi.

Siin on programmi tekst arduino peal

#kaasa OneWire ds(8); // temperatuuriandurid asuvad pin 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; //tens int lubamine reley6 = 6; // soojendus mash tun float temp1; ujuki 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(reley4,LOW) (kui (Serial.available()) i": infuz(); break; kääne "p": progrev(); break; kääne "a": avariya (); break; kääne "v": varka(); break; kääne "t"; break; ) ) void varka() ( digitalWrite(reley6, HIGH); while(Serial.read()! ="m") ( temperatuur(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6, HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); while (Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperatuur(); if(temp1 >= 75.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") delay(1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); temperatuur(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperature(); //Serial.available(); while (Serial.read()!="s")( //lülitage infusiooni valmistamise tsükkel välja 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) //delay(1000); Serial.println("s"); ) void õnnetus())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) tühitemperatuur() ( bait i byte present = 0, bait zator = (40, 23, 218, 43, 6, 0, 0, 22) = (40, 255, 240, 115); , 59, 4, 0, 234 //pruulimispaagis oleva temperatuurianduri aadress float celsius; if (!ds.search(addr)) ( //Serial.println; ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC ei kehti!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // alustage teisendamist, parasiittoide sisselülitamisel viivituse lõpus (840) ; // võib-olla piisab 750 ms-st, võib-olla teeme siin ds.depower(), kuid selle eest hoolitseb lähtestamine = ds.reset( // Loe Scratchpad (0xBE); 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); } }

Kõik oleks hästi, aga millegipärast näitab kolmas andur pidevalt 85 kraadi. Ma ei oska veel öelda, miks. Ja seda on vaja edasiseks automatiseerimiseks - külmkapis temperatuuri hoidmiseks.

Kirjeldan lühidalt, mida programm teeb.

Programm on jagatud alamprogrammideks, millest igaüks aktiveeritakse, kui kom-porti ilmub teatud sümbol. Näiteks kui porti siseneb täht "p", aktiveeritakse režiim "Soojendus". Või kui "a", kutsutakse alamprogramm avariya() ja kõik lülitatakse välja. Temperatuuri() alamprogrammi kutsumisel kirjutatakse andmed globaalsetesse muutujatesse temp1, temp2. Sealt satuvad nad vajalikesse alamprogrammidesse.

Tulevikus on alamprogrammid erinevate sortide ja isegi kuupaiste pruulimiseks.

Nüüd peamise juhtimisprogrammi kohta.

Peamine juhtimisprogramm

See on kirjutatud visuaalstuudios c#.

Programmi lähtekood:

Programmi lähtekood

süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.ComponentModel; kasutades System.Data; kasutades System.Drawing; kasutades System.Linq; kasutades System.Text; kasutades System.Threading.Tasks; kasutades System.Windows.Forms; kasutades System.IO.Ports; nimeruum WindowsFormsApplication1 ( avalik osaline klass Vorm1: Vorm ( // String pordinumber; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) ) /*private const int CP_EICLOSE_BUTTON = 0x200; kaitstud alistamine CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ private void Form1_Load(objekti saatja(objekti Pordinimi /987 Port1.PortName = silt2.Text ("Check"); //SerialPort2 = new SerialPort("COM4", 9600 //Port2.Open(); ReadByte()); //pordi näitude kontrollimine MessageBox.Show("Riistvara kontrollimise protsess on alanud", "Teabeteade"); richTextBox1.Text = richTextBox1.Text + "\n" + "Alusta riistvara kontrollimise protsessi"+" "+DateTime.Now.ToString("HH:mm"); nupp1.Lubatud = false; nupp2.Lubatud = false; nupp3.Lubatud = false; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Lõpeta riistvara kontrollimise protsess"+" "+DateTime.Now.ToString("HH:mm"); nupp1. Lubatud = tõene; nupp2. Lubatud = true; CheckLOG.rtf"); ) püüdmine ( richTextBox1.Text = richTextBox1.Text + "\n" + "Riistvara kontrollimise protsessi viga" +" "+ DateTime.Now.ToString("HH:mm") ; MessageBox.Show(" Valitud on sobimatu seadme port Kontrollimisprotsessi ei saa käivitada", "Hoiatus"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+.rtf") ; ) ) // Puhastusseadmete privaatne void button3_Click(objekti saatja, EventArgs e) ( if (Port1.IsOpen == false) ( proovige ( //programmi saab muuta infot saidilt podrugomu.com/node/987 MessageBox.Show(" Valasite kindlasti desinfitseerimisvahendit ", "HOIATUS", MessageBoxButtons.OK, MessageBoxIcon.Warning); Port1. PortName = silt2.Tekst; Port1.Open(); Port1.Write("Puhasta"); MessageBox.Show("Seadmete puhastusprotsess on alanud", "Teabeteade"); nupp1.Lubatud = false; nupp2.Lubatud = false; nupp3.Lubatud = false; if (Port1.ReadByte() == 1000) ( nupp1.Lubatud = tõene; nupp2.Lubatud = tõene; nupp3.Lubatud = tõene; Port1.Close(); MessageBox.Show("Seadmete puhastustsükli lõpp"); ) ) catch ( MessageBox.Show("Valitud on vigane seadme port. Puhastusprotsessi ei saa käivitada", "Hoiatus"); ) ) private void contextMenuStrip1_Opening(objekti saatja, CancelEventArgs e) ( ) private void cOM1ToolStripMenuItem_Click(objektiargi saatja, EventArgs sender ) ( SerialPort Port1 = new SerialPort("COM1", 9600); // MessageBox.Show("COM1 port valitud"); label1.Visible = true; label2.Text = "COM1"; ) privaatne void silt2_Click(objekti saatja, EventArgs e) ( ) private void cOM2ToolStripMenuItem_Click(objekti saatja, EventArgs e) ( SerialPort Port1 = new SerialPort("COM2", 9600); // MessageBox.Show("COM2 port valitud"); silt1.Visible = true; label2. Text = "COM2"; ) private void cOM3ToolStripMenuItem_Click(objekti saatja, EventArgs e) ( SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("COM3 port valitud"); silt1.Nähtav = tõene; silt2.Tekst = "COM3"; ) private void cOM4ToolStripMenuItem_Click(objekti saatja, EventArgs e) ( SerialPort Port1 = new SerialPort("COM4", 9600); // MessageBox.Show("COM4 port valitud"); label1.Visible = true; label2.Text = "COM4 "; ) private void cOM5ToolStripMenuItem_Click(objekti saatja, EventArgs e) ( SerialPort Port1 = new SerialPort("COM5", 9600); // MessageBox.Show("COM5 port valitud"); silt1.Visible = true; label2.Text = COM5 Text = "COM6"; ) private void cOM7ToolStripMenuItem_Click(objekti saatja, EventArgs e) ( SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("COM7 port valitud"); label1.Visible = true; label2.Text = "COM5" ) privaatne void programmBrewToolStripMenuItem_Click(objekti saatja, EventArgs e) ( ) // Privaatne void nupp2_Click(objekti saatja, EventArgs e) ( // if (Port1.IsOpen == false) //( / / try //( //programmi teavet saab muuta saidilt podrugomu.com/node/987 //Port1.PortName = label2. Tekst; //Port1.Open(); switch (label3.Text) ( juhtum "Infusiooni segamine valitud": MessageBox.Show("Infusiooni segamise protsess on alanud", "Teabeteade"); Port1.WriteLine("i"); timer1.Start(); break; case " Cooperi pruulimine valitud": MessageBox.Show("Cooperi mashing" ("Informatsiooniteade") Port1.WriteLine("v") button1.Enabled = false; nupp2.Lubatud = false; nupp3.Lubatud = false; // nupp5.Lubatud = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* if (Port1.ReadLine() == "e\r") ( nupp1.Lubatud = tõene; nupp2.Lubatud = tõene; nupp3.Lubatud = tõene; nupp5.Lubatud = tõsi; */ //Port1.Close( ); // MessageBox.Show("Brewing Cycle" // ) // püüdmine //( // MessageBox.Show("Valitud on vigane seadme port. Valmistamisprotsessi ei saa käivitada", "Hoiatus") ; //) // ) ) privaatne void nupp5_Click(objekti saatja, EventArgs e) ( Port1.Write("p"); nupp1.Lubatud = false; nupp2.Lubatud = false; nupp3.Lubatud = false; taimer2. Start( richTextBox1.Text = richTextBox1.Text + "\n" + "Alusta vee soojendamist 37 kraadini" + " " + DateTime.Now.ToString("HH:mm" /* Port1.Open); ); //Port1.Open(); //richTextBox1.Text + "\n" + Port1.WriteLine("o" privaatne voidToolStripMenuItem_Click(objekti saatja, EventArgs e) ( Close(); ) privaatne void nupp4_Click(objekti saatja, EventArgs e) ( ) private void infusionMashToolStripMenuItem_Click(objekti saatja, EventArgs e) ( label3.Text = "InfusionMash on valitud"; ) privaatne void timer1_Tick(objekti saatja, EventArgs e) ( textBox1.Text = Convert.ToString(Convert.ToInt32(s / 60)); textBox2.Text = Convert.ToString(Convert.ToInt32((s))); s++; silt5.Tekst = Port1.ReadLine(); if (s==4200)( //70 minutit on 4200 sekundit timer1.Stop(); //taimer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); Text = ""; ) //Port1.Close( ) private void label4_Click(objekti saatja, EventArgs e) ( ) private void timer2_Tick(objekti saatja, EventArgs e) ( label5 .Text = Port1.ReadLine(); Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("Vesi on 37 kraadi. Saate lisada linnaseid ja sisse lülitada meskimisrežiimi"); richTextBox1.Text = richTextBox1.Text + "\n" + "Pudru valmistamise protsessi lõpp. Т=37 kraadi" + " " + DateTime.Now.ToString("HH:mm"); nupp2.Lubatud = true; ) ) private void hädaolukordDisableToolStripMenuItem_Click(objekti saatja, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("Kasutaja on kogu süsteemi välja lülitanud"); private void mash kettleToolStripMenuItem_Click(objekti saatja, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Mash tun keemisrežiim on lubatud. Oodake 60 minutit") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Mash tun keemisrežiim on sisse lülitatud Oodake 60 minutit" + " " + DateTime.Now.ToString("HH:mm" ) privaatne void timer3_Tick. (objekti saatja, EventArgs e) ( string s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") silt5.Text = s1.Substring(4, 5); if (s1.Substring (0, 2) == "t2") silt9.Tekst = s1.Substring(4, 5) if (s == 900) ( Port1.WriteLine("m"); MessageBox.Show); ("Ülekirjutamise faas 62-kraadise nurga all"); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("Hõõrumisaste 78 kraadi juures"); richTextBox1.Text = richTextBox1.Text + "\n" + "Hõõrumise aste 78 kraadi juures " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Mash-etapp on lõppenud, saate tühjendada wort") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Pudrustamise etapp on lõppenud" + " " + DateTime.Now.ToString("HH:mm" ) ) private void normalToolStripMenuItem_Clic. (objekti saatja, EventArgs) e) ( label3.Text = "Valitud on Cooperi pruul"; ) ) )

Programm suhtleb arduinoga kom-pordi kaudu. Ainus, millest ma üle ei saa, on see, et kom-pordi pollimisel programm ei külmu alamprogrammi täitmise ajal. Pärast alamprogrammi lõppu programm hangub, kuid praegu pole see kriitiline ja isegi omamoodi pluss. Lollikindel – vältimaks teatud protseduuri ajal midagi vajutamast.

Kokku saab programm

- valmistada ette seadmed toiduvalmistamiseks;
- kokk;
- koostada lihtne tööpäevik (väga kasulik õlle valmistamise edasiseks analüüsiks);
- valige juhtkontrolleriga ühendamiseks port (arduino UNO);
keeda pruul ja puder.

Kui pumbad ja solenoidklapid kohale jõuavad, automatiseerin need edasi. Seniks lisan igal pühapäeval ühe toiduvalmistamisprogrammi. Kokku tuleb 5 programmi. Oma järjekorda ootab ka manuaalrežiimi rakendamine.
Nagu öeldakse,

jätkub...

UPD:

Siin on mõned fotod õlletehasest

See on seedimine. Mul on neid kaks. Küljele on paigaldatud suletud raamis temperatuuriandur DS18B20.
Ma ei saanud pikka aega aru, miks arduino perioodiliselt külmub, kuni mulle jõudis kohale, et kõik tuleb maandada, vastasel juhul murdub see korpusesse, seejärel anduri korpusesse ja arduinosse.

Sees olev vasktoru on virde filtreerimiseks. Seda saab teha ilusamaks, kuid parem on kasutada valepõhja. Kahjuks hiinlased selle saatmisega ei kiirusta.

Tulemusest on veel vara rääkida, juhtus nii

Vaadi üldvaade näeb välja selline.

Kasutatud tavalisi pistikuid
temperatuuriandurite ühendamiseks, ühendatud topeltpesaga. Seadmeid on mugavam pesta. Ta lülitas selle välja ja viis vannituppa. Pesin ära, ühendasin ja kõik töötab.

Kõik vahutas graafiku järgi, üleliigset välja ei lekkinud. Ja minu lähimad plaanid on edasiseks kääritamiseks üks partii õlut kurnata ja veel üks pruulida. Retsepti saab põhimõtteliselt vaadata arduino alamprogrammi varka() koodis.

Solenoidklapid on lõpuks kohale jõudnud. Automatiseerimisprotsess jätkub.

Miks ma vajasin automatiseerimist?

Protsessi hõlbustamiseks on vaja automatiseerimist, sest... see kontroller ise jälgib temperatuuri, hoiab seda ja tõstab selle vajaliku temperatuuripausini. Vajaliku sekkumise märkimiseks võib kasutada ka helisignaali, näiteks tuleb lisada linnaseid või teha jooditest.

Otsustasin valmisprojektist oma automaatika teha. See töötab arduino peal, sellega on ühendatud temperatuuriandur, kaks releed, ekraan ja nupud. Esimene relee juhib kütteelementi, teine ​​relee juhib pumpa. Pudrupump on väga mugav, kuna... kogu meskimise ajal pole vaja meski segada (õlle valmistamise kohta soovitan lugeda minu varasemaid)

Esimese automatiseerimise panin kokku moodulite abil:

- Arduino mini
- Kahe 15A relee plokk
- Ekraan 2004
- Temperatuuriandur
- 4 nuppu
- 5 volti toiteallikas
Moodulkoostamise mugavus seisneb selles, et kõiki detaile pole keeruline kätte saada ja praktiliselt pole vaja midagi jootma hakata. Suurimaks miinuseks on aga tohutu juhtmete hulk ning odav Hiina relee tekitas ekraanil häireid, mistõttu tuli mehaaniline relee pooljuhtrelee vastu välja vahetada.

Aja jooksul jõudsin järeldusele, et pean oma automaatika ehitama 64 KB mäluga kiibile (Arduino minil on ainult 32 KB) ühele plaadile. Ma ei leidnud valmislahendust, nii et hakkasin ise looma vooluringi ja seejärel oma käsitöö jaoks tahvlit.

Skeem:

Arendasin ja joonistasin skeemi nii-öelda põlvili ja endale, nii et mõned puudused on võimalikud, kuid diagramm on täiesti töökorras:

Maksma:

Joonistasin skeemi, siis jääb joonistada tahvel, kõigepealt joonistasin selle programmi abil Sprint-Layout 6, väga mugav, kuid sellel pole piisavalt funktsioone, nii et otsustasin sellest programmi poole liikuda DipTrace ja selle ma sain:

Allikaid saate alla laadida.
Nagu näete, panin oma õlletehasele nimeks QRBeer ja see on juba versioon 0.5...

Plaat on valmis, jääb vaid see kuidagi valmistada. Selleks otsustasin kasutada. Miks just nemad ja mitte LUT? Otsustasin just seda uut tehnoloogiat enda jaoks proovida, proovisin juba LUT-d, tundsin seda nii-öelda, ma ei ütle, et see mulle meeldis...

Fotoresist:

Trükkplaatide valmistamiseks fotoresisti abil vajate:
- Printeri kile
-
- Ultraviolettlamp
- Soodatuhk

ultraviolettlamp

Esiteks jagan teavet selle kohta, kuidas ma oma valmistasin UV lamp. Algul tahtsin kasutada valmis lampi ja siis otsustasin selle kokku panna kuue 3W LED-i abil:
ja ostetud ka Taost:


LEDid liimisin radiaatori külge, kuigi oleks võinud trükkplaadile kokku panna, kahtlen, et need üle kuumenenud oleks.
Siin on see, mida ma sain:


Plaadi valmistamine

1. Niisiis, olen malli ette valmistanud, jääb üle vaid kilele printida. Nagu eespool kirjutasin, on mul vaja kilet printerile, proovisin kilet nii laserprinterile kui tindiprinterile, parima variandi saab ainult tindiprinteri kilega. Peate printima negatiiv- ja peegelpildis:

Lamineerisin malli kohe ära, et sõrmejäljed ja praht saaks kergesti maha pesta.
2. Järgmiseks peame oma tulevase plaadi lihvima (klaaskiust laminaat). Selleks sobib kergelt niisutatud tavaline švamm või melamiinist käsn:


3. Pärast seda protseduuri tuleb vask veel atsetooniga rasvatustada:


Nagu minu fotol näete, rasvatasin selle tavalise salvrätikuga ja valasin atsetooni peroksiidipudelisse, nii et seda on mugavam võtta ...
4. Järgmise sammuna tuleb fotoresist veidi lõigata, et see sobiks teie tulevase plaadiga, ja eemaldage ettevaatlikult pealmine kaitsekile, et seda mitte kahjustada. Kui fotoresist on kodumaine, tuleb matt pool maha koorida, kui hiina oma, siis pole vahet...
5. Järgmiseks liimime fotoresisti trükkplaadile nii, et fotoresisti alla ei tekiks õhumulle, muidu ei teki sellistesse kohtadesse jälgi, lõika üleliigne ära...
Fotoresisti liimimise protsess on sarnane telefonile kaitsekile liimimisega.


6. Kui fotoresisti on liimitud, tuleb tekstioliit koos sellega 2-3 korda laminaatorist läbi lasta või sooja triikrauda kasutades läbi pooleks volditud paberilehe triikida:


Peaasi, et fotoresisti üle ei kuumeneks, vastasel juhul osutub see järgmiselt:


Kui fotoresisti liimimisel tekib “lemm”, siis parem eemaldada (ära pesta või maha kraapida) ja uuesti liimida, muidu peale plaadi söövitamist on kurb...Ei võta ära. see fotoresist, näitan teile lõpptulemust.
7. Aseta fotoresistiga trükkplaadile mall ja vajuta klaasiga (võtsin vanast pildiraamist) ning aseta klaasile raskus:


8. Valgustame fotoresisti UV-lambi abil. Minu lamp kestab umbes 2 minutit:


Nagu näete, muutis säritatud fotoresist värvi helesinisest tumesiniseks ja säritatud fotoresist on väga habras.
9. Eemaldage klaas ja mall. Üleliigse fotoresisti saab (valikuliselt) kärpida ja pintsettidega ettevaatlikult eraldada:


10. Järgmise sammuna peske välja arenemata fotoresist leelisega, võtke 2 klaasi vett ja supilusikatäis soodat, segage hästi. Eemaldage fotoresisti pealmine kaitsekile ja kastke meie tekstoliit aluselisesse lahusesse.


11. Võtke pintsel ja hõõruge kolm fotoresisti tükki leelisega, vähehaaval pestakse välja arenemata fotoresisti:


Leelist ei saa välja valada, vaid jätta see järgmisele tahvlile või fotoresisti pärast söövitamist maha pesta, aga sellest hiljem...
12. Tahvli söövitus:
On kaks kõige kättesaadavamat meetodit: söövitamine raudkloriidi või peroksiidiga + sidrunhape ja sool. Raudkloriidist ma ei kirjuta, aga ilmselt kirjeldan seda peroksiidiga:
- 100 ml. vesinikperoksiid 3% - seda müüakse apteegis 7-12 rubla eest
- 30 gr. sidrunhape (saadaval igas toidupoes)
- 1 spl. lusikatäis soola (sobivad nii peen- kui kivisool)


Kõik see segatakse anumas ja kastetakse valmis fotoresistiga tahvel sinna, mõne aja pärast ilmuvad tahvlile mullid:


Ja mõne aja pärast söövitatakse "paljas vask" täielikult:


Muide, kui söövitada kõrgemal temperatuuril, näiteks hõõglambiga või veevannis, siis söövitus väheneb kolme võrra, peaasi, et üle ei pinguta, muidu söövib üleliigne...
13. Kõige mugavam on fotoresisti eemaldamiseks samas leelis, milles söövitamata fotoresisti maha pestakse 20 minuti pärast see ise maha ja pole vaja midagi hõõruda...

Ja siin on minu "jambid":


Kuigi mitte märkimisväärne, kuid siiski on kõiges süüdi ettevaatamatus, ei märganud fotoresisti all õhumulle ega ülekuumenenud...

Sain järgmise tahvli "puhtaks":


14. Järgmiseks puurige augud ja tinatage plaat:


15. Jootke kõik osad ja peske üleliigne räbusti ära:


Jootsin SMD komponendid Hiina infrapuna jootmisjaamaga, väga mugav:

See on kõik, raskeim osa on möödas, jääb üle vaid katsetada radasid lühiste suhtes ja alustada kiibi programmeerimist.

Programmeerimine atmega644

1. Programmeerimise alustamiseks peate sellesse laadima alglaaduri. Seda pole Arduino UNO abil keeruline teha, kuid kõigepealt peate programmi alla laadima ja installima.
2. Järgmise sammuna tuleb installitud programmi lisada või kohe viia valmis koost:
3. Laadige ArduinoISP visand UNO-sse üles:

4. Ja ühendage meie tahvel UNO-ga:


Vastavalt visandi juhistele:
// viigu nimi // alam lähtestamine: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
See selgub minu skeemi järgi järgmiselt:

5. Järgmisena installige seadetesse meie plaat ja laadige alglaadur:




Kui kõik läks hästi, näeme teadet: "Bootloaderi salvestamine on lõpetatud"
Sel hetkel on alglaaduri"a laadimine lõppenud, saate ühendada ekraani, nupud, temperatuurianduri ja täita 3

Seadet kasutatakse linnaste meskimisprotsessi automatiseerimiseks. Ei ole ette nähtud virde keetmiseks.

Algselt pandi see kokku aja- ja temperatuuriindikaatoriga infotaimerina. Seejärel lisati relee ja kogu meskimisprotsess automatiseeriti.

Linnaste meskimise automatiseerimiseks vajate järgmisi osi.

Visandi allalaadimiseks peate installima .

Ühendame arduino arvutiga, käivitame Arduino IDE. Menüüs "Tööriistad" - tahvel - valige "Arduino/Genuino Uno". "Tööriistad" - Port - valige see, kuhu arduino on ühendatud. Tõenäoliselt on üks com port. Pordi numbrit saate vaadata ka seadmehalduris.

Avage eskiis ja klõpsake nuppu "Laadi üles".

Kogu seade on kasutamiseks valmis.

Pausid konfigureeritakse otse visandis endas (read 12 kuni 29):

Näide:
int c1 = 52; //esimese pausi temperatuur 52 kraadi
märgita pikk p1 = 20 * 60 000; //esimese pausi aeg 20 minutit
int c2 = 63; //teise pausi temperatuur 63 kraadi
märgita pikk p2 = 30 * 60000; //teine ​​pausiaeg 30 minutit

Eskiisi real 177 reguleeritakse temperatuurianduri näitu.
Celsiuse järgi = Celsiuse temperatuur + 1; // +1 kraadi


1. Relee näit: Vk - sees / suletud, O - väljas / avatud.
2. Temperatuuride peatamine.
3. Praeguse temperatuurianduri näit.
4. Tööaeg kokku.
5. Temperatuuri pausi aeg.
6. Praeguse pausi taimer (tagasiloendus).

!!!TÄHTIS Sisselülitamisel on relee sees/suletud.
Mash out pausi lõppedes lülitub relee välja/avatakse.

Kui on vaja väiksemat arvu pause, näiteks ühe pausiga segamine, on selle seaded järgmised:
1 paus, 67 kraadi 60 min.
2, 3, 4 peatab kraadi ja seadke kellaajaks NULL.
76 puder välja 5 min.

Praktikas kasutatakse seda järgmiselt.

Temperatuuriandur on paigaldatud paagi seinale.
2KW küttekeha valepõhja all.
Pump on 12V, võtab virde läbi kraani valepõhja alt, aga küttekeha kohal ja annab ülevalt paaki tagasi.
!!!Pump ja kütteelement “rippuvad” sama relee küljes (10A 220V, piiril, parem kasutada tugevamat)
Valatakse vesi ja lisatakse linnased.
Seade lülitub sisse.
Temperatuur hakkab kohe tõusma kuni esimese pausini, kui küttekeha ja pump lülitatakse välja.
Taimer käivitub. Temperatuuri hoitakse, peale aja lõppu tõuseb temperatuur kuni tekib paus jne.

Küsimused, vastused, arutelud VK Grupis