Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Grijanje seoske kuće na arduinu s prijenosom podataka na internet. Izrađujemo automatizaciju za pivovaru na jednoj ploči

Grijanje seoske kuće na arduinu s prijenosom podataka na internet. Izrađujemo automatizaciju za pivovaru na jednoj ploči

Automatizacija u suvremenom društvu nužna je mjera, jer je u digitalnom dobu iznimno važno eliminirati ljudski faktor u raznim industrijama kako bi se standardizirala i poboljšala kvaliteta proizvoda. Postoje i područja u kojima jednostavno nije moguće da čovjek radi ono za što su roboti sposobni, na primjer, proizvodnju nanomaterijala i mikroploča.

Međutim, automatizacija ne pomaže samo u proizvodnji, već može biti korisna i laicima. Na primjer, automatizacija za arduino pivovaru može uvelike olakšati proces proizvodnje proizvoda. Pogledajmo kako automatizacija za ispravljanje na arduinu i druge stvari može pomoći i pogledajmo primjere.

Glavne prednosti automatiziranih sustava temeljenih na Arduino mikrokontroleru

Nitko vam ne brani da zalemite vlastitu ploču i sami je programirate koristeći jezike niske razine. Međutim, automatizacija na arduinu i gotovim mikrokontrolerima uvelike će olakšati cijeli proces i uštedjeti vrijeme. Uostalom, puno je lakše kupiti gotov proizvod sa skupom knjižnica i prilagoditi ga svojim potrebama. A pristupačna automatizacija na arduino mega 2560 može biti korisna u mnogim područjima života, od glasovnih prekidača za pametni dom do električnih vraga s detektorom pokreta. Glavne prednosti po kojima je Arduino automatizacija poznata su:

  1. Nizak ulazni prag. Nema potrebe za stjecanjem inženjerskog obrazovanja, dovoljno je pogledati nekoliko videozapisa o obuci i imati osnovno znanje programiranja.
  2. Velik broj već pripremljenih knjižnica. Arduino u CIS-u koriste mnogi entuzijasti robotike, do te mjere da im proizvodnja razne elektronike postaje hobi. U skladu s tim, korisnička zajednica je iznimno aktivna na mreži, ima veliki broj praznina i spremna je pomoći vam u rješavanju bilo kakvih problema. Kvaliteta knjižnica, zbog niskog ulaznog praga, pati, ali nitko ne zabranjuje stvaranje vlastite, dovoljno je proučiti semantiku jezika C ++ ili koristiti gotove prevoditelje.
  3. Puno perifernih uređaja. Nije važno trebate li arduino automatizaciju staklenika ili svjetlosni senzor, pronaći ćete sve module, do senzora zvuka i prepoznavača glasa. Da, neke ploče koštaju puno novca, ali uvijek možete pronaći jeftine analoge, na primjer, wi-fi modul trećih proizvođača esp8269, koji je 10 puta jeftiniji od službenog.
  4. Puno informacija. Bilo koji problem s kojim se susrećete netko je već iskusio, a rješenje ćete vjerojatno pronaći na Googleu. Također je dostupna opsežna literatura za pregled.

Međutim, nemojte misliti da Arduino nema nedostataka. Ploča je poznata po svojim lošim performansama. U posebno složenim zadacima i s velikom količinom koda, vrijeme odgovora može doseći 1 sekundu, što je neprihvatljivo za mikrokontrolere. Flash memorija za većinu modula ne prelazi 1 MB, što nije dovoljno za stvaranje neuronskih mreža ili korištenje medijskih datoteka. Naravno, možete spojiti i pomoćnu memorijsku karticu, ali to također povećava vrijeme odziva, zahtijeva dodatne resurse za napajanje i radi se na poluručni način.

Međutim, jednostavni automatizirani sustavi, na primjer, za kuhanje piva ili staklenika, ne zahtijevaju ni djelić resursa koje odbor može pružiti. Sukladno tome, većini korisnika ovi će se nedostaci činiti besmislenim. Ako odlučite sastaviti vlastiti 3-D pisač ili složeniji dizajn, trebali biste pobliže pogledati analoge. Ali ulazni prag za Arduino konkurente bit će puno veći.

Primjer automatizacije procesa baziran na mikro Arduinu

Najjednostavniji primjer automatizacije procesa može biti arduino staklenik. Da biste stvorili bilo koji sustav, vrijedno je jasno razgraničiti zadatke koje mora izvršiti. Na primjeru staklenika, ovo bi bilo:

  1. Stvaranje posebne klime.
  2. Pravovremeno uključivanje i isključivanje rasvjete.
  3. Pravovremeno zalijevanje biljaka i održavanje vlažnosti na istoj razini.

Na temelju ovih zadataka možete odmah primijetiti što trebate kupiti za glavnu ploču:

  1. Senzor temperature. Osigurat će da se zrak ne zagrije ili ohladi u granicama propisanim programom. U slučaju promjene temperature, ploča će uključiti klima uređaj ili elektronske baterije.
  2. Svijetli senzor. Naravno, možete se ograničiti na softversko rješenje i kupiti skupe svjetiljke s imitacijom dnevne svjetlosti. Ali ako želite stvoriti punopravni staklenik, tada će biti mnogo prikladnije instalirati automatski strop, koji će kontrolirati Arduino.
  3. Senzor vlage. Ovdje je sve isto kao i s temperaturom, prema propisanom scenariju u naknadu će biti uključene prskalice i ovlaživači zraka, ako je potrebno.

Kada ste kupili sve potrebne module, ostaje samo da ih programirate. Uostalom, bez šifre, to su samo komadi željeza, sposobni za ništa.

Programiranje mikro Arduina za automatizaciju procesa. Primjer

Kao iu prethodnom odlomku, za programiranje je važno podijeliti zadatak u zasebne podstavke i izvršiti ih uzastopno. Arduino programiranje događa se zahvaljujući naredbama u AT i AT+ sučelju, koristeći pripremljene biblioteke. Sukladno tome, sve su skripte napisane u posebnom okruženju u C ++ i, prije nego što bilo što učinite, odvojite vrijeme da proučite njegovu semantiku. Osim izvršavanja jednostavnih funkcija, sustav je također sposoban pohraniti skripte u flash memoriju, što nam je potrebno u ovom primjeru.

Imajte na umu da informacije sa svakog senzora dolaze u stvarnom vremenu i kao varijable, međutim, možete ograničiti vrijeme odgovora, jer nema potrebe za rasipanjem resursa i konstantnim mjerenjem svakog parametra. Sukladno tome, postavite vrijeme uključivanja i isključivanja za svaki senzor ili postavite vrijeme odziva na određeni interval.

Zašto mi treba automatizacija?

Automatizacija je potrebna kako bi se olakšao proces, jer. ovaj će regulator sam pratiti temperaturu, održavati je i podizati na potrebnu temperaturnu pauzu. Također signalizirajte zvučnim signalom o potrebnoj intervenciji, na primjer, trebate sipati slad ili napraviti test joda.

Odlučio sam svoju automatizaciju napraviti od gotovog projekta. Radi na arduinu, na njega su spojeni temperaturni senzor, dva releja, zaslon i tipke. Prvi relej upravlja grijačem, drugi relej kontrolira pumpu. Pumpa za kašu je vrlo zgodna nema potrebe miješati kašu za cijeli proces gnječenja (za više informacija o tome kako skuhati pivo preporučujem čitanje u mojim ranijim)

Prvu automatizaciju sam sastavio pomoću modula:

- Arduino mini
- Blok od dva releja za 15A
- Prikaz 2004
- Senzor temperature
- 4 gumba
- napajanje od 5 volti
Pogodnost modularne montaže, samo leži u činjenici da nije teško nabaviti sve dijelove i ne trebate ništa lemiti. No, najveći nedostatak je ogroman broj žica, a jeftin kineski relej ometao je prikaz pa je mehanički relej morao biti zamijenjen solid state.

S vremenom sam došao do zaključka da svoju automatizaciju trebam sastaviti na čipu sa 64kb memorije (arduino mini ima samo 32kb) na jednoj ploči. Nisam našao gotovo rješenje, pa sam počeo sam stvarati krug, a potom i ploču za svoj zanat.

Shema:

Shemu sam razvio i nacrtao, da tako kažem, na koljenu i za sebe, tako da su neki nedostaci mogući, ali shema u potpunosti radi:

Platiti:

Nacrtao sam dijagram, zatim ostaje nacrtati ploču, prvo sam je nacrtao pomoću programa Izgled sprinta 6, vrlo zgodno, ali u njemu nema dovoljno funkcionalnosti, pa sam ga odlučio ostaviti u smjeru programa dip trag i ovo sam dobio:

Možete preuzeti izvore.
Kao što vidite, nazvao sam svoju pivovaru QRBeer i ovo je već verzija 0.5 ...

Ploča je spremna, ostaje je nekako napraviti. Za to sam odlučio koristiti. Zašto baš oni, a ne LUT? Upravo sam odlučio isprobati takvu novu tehnologiju za sebe, već sam isprobao LUT, osjetio sam to, da tako kažem, neću reći da mi se svidjelo ...

fotorezist:

Za proizvodnju tiskanih ploča pomoću fotorezista trebat će vam:
- Film za printer
-
- Ultraljubičasta lampa
- Soda pepela

ultraljubičasta lampa

Za početak ću podijeliti informacije o tome kako sam ja napravio svoj UV lampa. Isprva sam htio koristiti gotovu lampu, a onda sam je odlučio sastaviti na šest LED dioda od 3W:
i također kupljen na tao:


Zalijepio sam LED diode na radijator, iako se moglo sklopiti na tekstolit, sumnjam da bi se pregrijale.
Evo što sam dobio:


Proizvodnja ploča

1. Dakle, pripremio sam predložak, ostaje samo da ga ispišem na film. Kao što sam gore napisao, treba mi film za printer, isprobao sam film i za laserski i za inkjet printer, najbolja opcija se dobiva samo na inkjet filmu. Morate ispisati u negativu i u zrcalnoj slici:

Odmah sam laminirao predložak tako da se otisci prstiju i krhotine mogu lako isprati.
2. Zatim morate brusiti našu buduću ploču (lažna stakloplastika). Za to je prikladna lagano navlažena obična spužva ili melaminska spužva:


3. Nakon ovog postupka, bakar još uvijek treba odmastiti acetonom:


Kao što možete vidjeti na mojoj fotografiji, odmastio sam običnom salvetom i ulio sam aceton u bocu peroksida, prikladnije je uzeti ...
4. Sljedeći korak je malo s marginom izrezati fotorezist ispod vaše buduće ploče i pažljivo ukloniti gornji zaštitni film kako ga ne biste oštetili. Ako je fotorezist domaći, morate odlijepiti mat stranu, ako je kineski, onda nema razlike ...
5. Zatim zalijepimo fotorezist na tekstolit kako se ispod fotorezista ne bi pojavili mjehurići zraka, inače se tragovi neće pojaviti na takvim mjestima, odrežemo višak ...
Postupak lijepljenja fotorezista sličan je lijepljenju zaštitnog filma na telefon.


6. Kada je fotorezist zalijepljen, tekstolit s njim potrebno je provući kroz laminator 2-3 puta ili upotrijebiti toplo glačalo i izglačati ga kroz dvaput presavijeni list papira:


Glavna stvar je ne pregrijati fotorezist, inače će ispasti ovako:


Ako se pri lijepljenju fotorezista ispostavi "dovratak", onda ga je bolje ukloniti (oprati ili ostrugati) i ponovno zalijepiti, inače će biti tužno nakon jetkanja ploče ... neću skini ovaj fotorezist, pokazat ću konačan rezultat.
7. Na tekstolit postavljamo predložak fotorezistom i pritisnemo ga staklom (uzeo sam ga iz starog okvira za fotografije) i postavljamo opterećenje na staklo:


8. Osvetlite fotorezist UV lampom. Moja lampa traje oko 2 minute:


Kao što vidite, fotorezist koji je svijetlio promijenio je boju iz svijetloplave u tamnoplavu, a osvijetljeni fotorezist je vrlo krhak.
9. Uklonimo staklo i šablonu. Višak fotorezista može se (po želji) odrezati i pažljivo odvojiti pincetom:


10. Sljedeći korak je isprati nemanifestirani fotorezist lužinom, za to uzimamo 2 šalice vode i žlicu sode, dobro promiješati. Skinemo gornji zaštitni film fotorezista i spustimo naš tekstolit u alkalnu otopinu.


11. Uzimamo četku i utrljamo fotorezist u lužinu, postupno se nerazvijeni fotorezist ispere:


Lužina se ne može izliti, već ostaviti na sljedećoj ploči ili da se ispere fotorezist nakon jetkanja, ali o tome kasnije ...
12. Urezivanje ploče:
Dvije su najpristupačnije metode: jetkanje željeznim kloridom ili peroksidom + limunska kiselina i sol. Neću pisati o željeznom kloridu, ali uz pomoć peroksida opisat ću:
- 100 ml. vodikov peroksid 3% - prodaje se u ljekarni za 7-12 rubalja
- 30 gr. limunska kiselina (dostupna u svakoj trgovini)
- 1 žlica. žlica soli (i sitna i kamena će odgovarati)


Sve se to pomiješa u posudu i tamo se uroni ploča s gotovim fotorezistom, nakon nekog vremena na ploči se pojavljuju mjehurići:


I nakon nekog vremena, "goli bakar" će biti potpuno urezan:


Usput, ako kiselite na višoj temperaturi, na primjer, pomoću žarulje sa žarnom niti ili u vodenoj kupelji, tada će se kiseljenje smanjiti za tri, glavna stvar je ne pretjerivati, inače će se višak ukiseliti .. .
13. Fotorezist je najpogodnije ukloniti u istoj lužini u kojoj je neurezan fotorezist ispran, nakon 20 minuta će nestati sam i nema potrebe trljati ništa...

A evo i mojih "jambova":


Iako nije značajno, ali ipak, za sve je kriva nepažnja, nisam primijetio mjehuriće zraka ispod fotorezista ili pregrijane ...

Sljedeća ploča mi se pokazala "čistom":


14. Zatim izbušimo rupe i lim dasku:


15. Lemimo sve detalje i isperemo višak toka:


Zalemio sam SMD komponente s kineskom infracrvenom stanicom za lemljenje, vrlo zgodno:

To je sve, najteža stvar je iza, ostaje zvoniti staze zbog kratkog spoja i početi programirati čip.

programiranje atmega644

1. Za početak programiranja morate u njega učitati bootloader. To nije teško učiniti pomoću Arduino UNO, ali prvo morate preuzeti i instalirati program.
2. Sljedeći korak je dodavanje ili odnošenje gotovog sklopa u instalirani program odmah:
3. Prenesite ArduinoISP skicu u UNO:

4. I spajamo našu ploču na UNO:


Prema uputama za skicu:
// naziv pina // resetiranje slave: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Ispada prema mojoj shemi ovako:

5. Zatim instalirajte našu ploču u postavke i učitajte bootloader:




Ako je sve prošlo dobro, vidjet ćemo poruku: "Snimanje bootloadera je završeno"
Ovim je dovršeno preuzimanje bootloadera "a, možete spojiti zaslon, tipke, senzor temperature i ispuniti ga. Ja sam student na tehničkom sveučilištu. Jednom sam sjedio u kafiću s prijateljem koji je tada studirao na medicinskom sveučilištu, odlučili smo otvoriti bar. Bilo je mnogo ideja koje su u principu zaslužile pažnju. Na primjer, plesni podij, koji mijenja kut nagiba ovisno o stilu glazbe... Ali, uz sve raznih ideja, bila je i još jedna -

... a zašto ne skuhati vlastito pivo?

Nekoliko tjedana kasnije skuhao sam pivo koristeći sastojke iz pivovare u kojoj je radio prijatelj mog oca. No, narušeni su mnogi tehnološki procesi, pa je umjesto piva izašlo nešto ne baš ugodnog mirisa.

Nekoliko godina kasnije, odlučio sam ponoviti proces, malo ga automatizirajući s Arduino UNO. I evo što se dogodilo.

Počet ću s onim što bi cijela postavka trebala učiniti.

  • Provjerite sami - radi li sve, je li sve povezano;
  • očistite se;
  • Pripremite se za proces kuhanja;
  • Kuhajte pivo u poluautomatskom načinu rada;
  • Kuhajte pivo u ručnom načinu rada;
  • Kuhajte pivo u automatskom načinu rada (kao što perilica rublja pere odjeću).

Prva točka trenutno nije implementirana. Zasad nema razmišljanja kako to provesti.
Drugi također nije implementiran, ali ću ga završiti u bliskoj budućnosti, samo pričekajte da se pumpe isporuče s ebaya.
Treća točka je prilično jednostavna.

Priprema za proces kuhanja

Poruka iz sustava da je potrebno sipati vodu u bačvu -> program čeka da se pritisne tipka OK -> program šalje naredbu arduinu da uključi solid state relej -> solid state relej uključuje jedan kilovat tenn u bačvi, dovodi ga na temperaturu od 37 stupnjeva, šalje naredbu programu da je sve spremno za kuhanje. Održava temperaturu od 37 stupnjeva.

Volio bih da postoji provjera prisutnosti vode, ali senzor još uvijek čeka svoj odlazak od "kineske braće".

Poluautomatsko kuhanje piva

U principu, jednostavan postupak:

Pritisnemo tipku "Zagrijavanje" u kontrolnom programu, ostali kontrolni gumbi nisu aktivni;
- Nakon zagrijavanja program prikazuje poruku "Sve je spremno, možete kuhati";
- punimo sastojke, odabiremo program za kuhanje - aktivira se gumb "kuhanje piva";
- Pritisnite gumb "kuhanje piva", proces je započeo;
- Nadalje, sustav će povremeno obavijestiti informativnim porukama što i kada učiniti.

Morate slijediti upute.

Kuhanje piva ručno

Ovaj proces vam omogućuje da postavite parametre kuhanja, promijenite ih u ciklusu kuhanja. Nisam još stigao.

Kuhanje u automatskom načinu rada

To je san. Trenutno nema komponenti za implementaciju. Nema dovoljno pumpi, senzora razine vode. Ne znam kako izmjeriti gustoću sladovine, koliko alkohola ima u mladom pivu i još mnogo toga. Ali ne očajavam i automatizirat ću se postupno dok kuhanje piva ne bude izgledalo ovako:

Bacio sam sastojke u odgovarajuće pladnjeve, pritisnuo dugme i ... za mjesec i pol dana dobio gotovo pivo.

To je proces ukratko, a sada prijeđimo na tehničku stranu.

Tehnička strana procesa

Kao što je gore spomenuto, upravljački mikrokontroler je arduino UNO. Na njega su spojena 2 releja, 2
digitalni termometar DS18B20 .

Arduino komunicira s glavnim programom preko com porta. Jer Nemam real-time shield za arduino, morao sam uzeti tajmere iz vizualnog c#. Nemam iskustva u pisanju programa, pa ako netko ima ideje, kritika je čast. Kritizirajte, povucite, da tako kažem, da vam se odjednom ne sviđa.

Ovdje je tekst programa na arduinu

#uključiti OneWire ds(8); // temperaturni senzori sjede na pin 8 int relay1 = 13; int relej2 = 12; int relej3 = 11; int relej4 = 10; int relej5 = 7; //uključi sjene int relay6 = 6; // mash tun float float temp1; float temp2; void setup(void) ( Serial.begin(9600); pinMode(reley1,OUTPUT); pinMode(reley2,OUTPUT); pinMode(reley3,OUTPUT); pinMode(reley4,OUTPUT); pinMode(reley5,OUTPUT); pinMode( reley6,OUTPUT); digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); digitalWrite(reley6,LOW); ) praznina petlja (void) ( if (Serial.available()) (prekidač (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") (temperatura(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); temperatura(); if(temp1>= 62.00) digitalWrite(reley6,LOW); inače digitalWrite(reley6,HIGH); ) while(Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperatura(); if(temp1 >= 75,00) digitalWrite(relej6,NISKI); ostalo digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") kašnjenje (1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); temperatura(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperature(); //Serial.available(); while (Serial.read()!="s")( //isključi ciklus kuhanja infuzije 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) //odgoda(1000); Serial.println("s"); ) void avariya()( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) void temperature() (bajt i; bajt prisutan = 0; bajt podaci; bajt adresa; bajt zator = (40, 23, 218, 43, 6, 0, 0, 22); // adresa temperaturnog senzora u bajtu zagušenja varilka = (40, 255, 240, 115 , 59, 4, 0, 234); //adresa senzora temperature u posudi za kuhanje plutajući Celzijus; // float temp; boolean gdje; if (!ds.search(addr)) ( //Serial. println("Nema više adresa."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC nije valjan!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // započni pretvorbu, s uključenim parazitom u end delay(840) ; // možda je 750ms dovoljno, možda ne // ovdje bismo mogli napraviti ds.depower(), ali reset će se pobrinuti za to. present = ds.reset(); ds.select( addr); ds.write (0xBE); // Čitaj Scratchpad za (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); } }

Sve bi bilo u redu, ali iz nekog razloga treći senzor stalno pokazuje 85 stupnjeva. Zasad ne mogu reći zašto. I potrebno je za daljnju automatizaciju - održavanje temperature u hladnjaku.

Ukratko opišite što program radi.

Program je podijeljen na potprograme od kojih se svaki aktivira ako se na com portu pojavi određeni znak. Na primjer, ako slovo "p" uđe u priključak, tada je uključen način "Zagrijavanje". Ili, ako je "a" - tada se poziva potprogram avariya() i sve se isključuje. Kada se pozove potprogram temperature(), podaci se zapisuju u globalne varijable temp1, temp2. Odatle ulaze u potrebne potprograme.

U budućnosti će postojati potprogrami za pripremu raznih sorti, pa čak i mjesečine.

Sada, što se tiče glavnog kontrolnog programa.

Glavni kontrolni program

Napisano je u Visual Studio C#.

Izvorni kod programa:

Izvorni kod programa

korištenje sustava; korištenje System.Collections.Generic; pomoću System.ComponentModel; koristeći System.Data; korištenjem System.Drawing; korištenjem System.Linq; koristeći System.Text; korištenje System.Threading.Tasks; korištenjem System.Windows.Forms; korištenje System.IO.Ports; imenski prostor WindowsFormsApplication1 (javna djelomična klasa Form1: Form ( // String portnumber; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; zaštićeno nadjačavanje CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ private void Form1_Load (tArgs Port sendere.) PortName; Port1.Open(); ) //Provjera opreme private void button1_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) (pokušajte ( //program se može mijenjati informacije s podrugomu.com/ node/987 Port1.PortName = label2.Text; Port1.Open(); Port1.Write("Check"); //SerialPort Port2 = new SerialPort("COM4", 9600); //Port2.Open(); / /label3. Text = Convert.ToString(Port2.ReadByte()); //Provjera očitanja porta MessageBox.Show("Proces provjere hardvera je pokrenut", "Informacije poruka o grananju"); richTextBox1.Text = richTextBox1.Text + "\n" + "Pokreni proces provjere hardvera"+" "+DateTime.Now.ToString("HH:mm"); button1.Enabled=false; button2.Enabled=false; button3.Enabled=false; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Kraj procesa provjere hardvera"+" "+DateTime.Now.ToString("HH:mm"); gumb1 . Omogućeno = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Kraj ciklusa testiranja hardvera" +" "+ DateTime.Now.ToString("HH:mm") ); richTextBox1.SaveFile("CheckLOG.rtf"); ) ) catch ( richTextBox1.Text = richTextBox1.Text + "\n" + "Proces provjere hardvera nije uspio" +" "+ DateTime.Now.ToString("HH:mm ") ; MessageBox.Show("Odabran je pogrešan priključak uređaja. Proces provjere se ne može pokrenuti", "Upozorenje"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Oprema za čišćenje private void button3_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) ( pokušajte ( //program se može mijenjati informacije s podrugomu.com/node/987 MessageBox. Prikaži(" Definitivno ste sipali dezinficijens", "UPOZORENJE", MessageBoxButtons.OK, MessageBoxIco n.Upozorenje); port1. PortName = label2.Text; Port1.Otvori(); Port1.Write("Clean"); MessageBox.Show("Počeo proces čišćenja hardvera", "Informativna poruka"); button1.Enabled=false; button2.Enabled=false; button3.Enabled=false; if (Port1.ReadByte() == 1000) ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Kraj ciklusa čišćenja opreme"); ) ) catch ( MessageBox.Show("Odabran je pogrešan priključak uređaja. Proces čišćenja se ne može pokrenuti", "Upozorenje"); ) ) ) private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) ( ) private void cOM1ToolStripMenuItem_Click(tArgs sendere) ( SerialPort Port1 = novi SerialPort("COM1", 9600); // MessageBox.Show("COM1 selected"); label1.Visible = true; label2.Text = "COM1"; ) private void label2_Click(pošiljatelj objekta, EventArgs e ) ( ) private void cOM2ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM2", 9600); // MessageBox.Show("COM2 port selected"); label1.Visible = true; label2.Text = "COM2"; ) private void cOM3ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("COM3 port odabran"); oznaka1.Vidljivo = istina; label2.Text = "COM3"; ) private void cOM4ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM4", 9600); // MessageBox.Show("COM4 port selected"); label1.Visible = true; label2.Text = "COM4 "; ) private void cOM5ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM5", 9600); // MessageBox.Show("COM5 port selected"); label1.Visible = true; label2.Text = "COM5"; ) private void cOM6ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM6", 9600); // MessageBox.Show("COM6 port selected"); label1.Visible = true; label2. Text = "COM6"; ) private void cOM7ToolStripMenuItem_Click(object sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("COM7 port selected"); label1.Visible = true; label2.Text = "COM5"; ) privatni void program za kuhanjeToolStripMenuItem_Click(object sender, EventArgs e) ( ) // Kuhanje piva private void button2_Click(object sender , EventArgs e) ( // if (Port1.IsOpen == false) //( // pokušaj //( //program se može mijenjati informacije s podrugomu.com/node/987 //Port1.PortName = label2. tekst; //Port1.Otvoren(); prekidač (label3.Text) ( slučaj "Odabrana kaša za infuziju": MessageBox.Show("Započeo proces kaširanja infuzije", "Informativna poruka"); Port1.WriteLine("i"); timer1.Start(); prekid; slučaj " Cooper brew odabran": MessageBox.Show("Cooper mash process pokrenut", "Informativna poruka"); Port1.WriteLine("v"); timer3.Start(); break; ) button1.Enabled = false; button2.Enabled=false; button3.Enabled=false; // button5.Enabled = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* if (Port1.ReadLine() == "e\r") ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5.Enabled = true; */ //Port1.Close( ); // MessageBox.Show("Kraj ciklusa kuhanja"); // ) // ) // catch //( // MessageBox.Show("Odabran je pogrešan priključak uređaja. Proces kuhanja ne može se pokrenuti", "Upozorenje " ); //) // ) ) private void button5_Click(object sender, EventArgs e) ( Port1.Write("p"); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; timer2. Start (); richTextBox1.Text = richTextBox1.Text + "\n" + "Pokreni zagrijavanje kaše na 37 stupnjeva" + " " + DateTime.Now.ToString("HH:mm"); /* Port1.Open (); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine("o"); Port1.Close(); */ ) private void exitToolStripMenuItem_Click (pošiljatelj objekta, EventArgs e) ( Close(); ) privatni void button4_Klik (pošiljatelj objekta, EventArgs e) ( ) privatni void infusionOverwriteTool StripMenuItem_Click(pošiljatelj objekta, EventArgs e) ( label3.Text = "Odabrana kaša za infuziju"; ) privatni void timer1_Tick(pošiljatelj objekta, 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 minuta je 4200 sekundi timer1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(); MessageBox.Show("Infuzijska kaša je gotova, mora filtrirati sladovinu"); button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5 .Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) private void label4_Click(object sender, EventArgs e) ( ) private void timer2_Tick(object sender, EventArgs e) ) ( label5 .Text = Port1.ReadLine(); if (Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("Voda ima temperaturu od 37 stupnjeva. Možete dodati slad i uključiti način miješanja"); richTextBox1.Text = richTextBox1.Text + "\n" + "Kraj procesa miješanja. T=37 stupnjeva" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void emergencyDisableToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("Korisnik je isključio cijeli sustav"); ) private void mash tun ToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Mash tun simmer enabled. Molimo pričekajte 60 minuta ") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Omogućen način kuhanja kaše. Pričekajte 60 minuta" + " " + DateTime.Now.ToString("HH:mm"); ) privatni void timer3_Tick(object pošiljatelj, EventArgs e) ( niz s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") label5.Text = s1.Substring(4, 5); if (s1 .Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5); s++; if (s == 900) ( Port1.WriteLine("m"); MessageBox.Show(" Faza pranja na 62 stupnja"); richTextBox1.Text = richTextBox1.Text + "\n" + "Korak gnječenja na 62 stupnja x" + " " + DatumTime.Now.ToString("HH:mm"); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("korak brisanja od 78 stupnjeva"); richTextBox1.Text = richTextBox1.Text + "\n" + "korak brisanja od 78 stupnjeva " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Mashing je gotov, možete isprazniti sladovinu") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Mashing je završen. Možete isprazniti sladovinu" + " " + DateTime.Now.ToString("HH:mm"); ) ) private void regularToolStripMenuItem_Click(object sender , EventArgs e) ( label3.Text = "Cooper brew odabran"; ) ) )

Program komunicira s arduinom preko com porta. Jedina stvar koju ne mogu pobijediti je da se pri prozivanju com porta program ne zamrzne u trenutku izvršavanja potprograma. Nakon završetka potprograma, program visi, ali za sada to nije kritično, pa čak i određeni plus. Sigurno - ne pritisnuti ništa tijekom određenog postupka.

Ukupno, program može

- pripremiti opremu za kuhanje;
- kuhar;
- napisati jednostavan radni dnevnik (vrlo korisno za daljnju analizu piva);
- odaberite priključak za spajanje na upravljački kontroler (arduino UNO);
prokuhati pivnicu i zgnječiti kace.

Kad stignu pumpe i elektromagnetni ventili, automatizirat ću dalje. U međuvremenu ću svake nedjelje dodati jedan program kuhanja. Ukupno će biti 5 programa. Implementacija ručnog načina rada također čeka na svoj red.
Kako kažu,

nastavit će se...

UPD:

Evo nekoliko fotografija pivovare

Ovo je lonac za kuhanje. Imam dva ovakva. Sa strane je ugrađen temperaturni senzor DS18B20 u zatvorenom okviru.
Dugo nisam mogao razumjeti zašto arduino povremeno visi, dok mi nije sinulo da sve treba uzemljiti, prvo se probije do kućišta, zatim do kućišta senzora i do arduina.

Bakrena cijev iznutra služi za filtriranje sladovine. Možete ga učiniti ljepšim, ali bolje je koristiti lažno dno. Nažalost, Kinezi ne žure da ga pošalju.

O rezultatu je još rano govoriti, evo što se dogodilo

Opći pogled na kadu izgleda ovako.

Korišteni normalni konektori
za spajanje temperaturnih senzora spojenih na dvostruku utičnicu. Lakše čišćenje opreme. Isključio ga i odnio u kupaonicu. Opran, spojen i sve radi.

Sve se pjenilo po rasporedu, nije bilo viška protoka. A najneposredniji planovi su ocijediti seriju piva za fermentaciju, skuhati još jedno. Recept se, u principu, može vidjeti u kodu u potprogramu arduino varka ().

Napokon su stigli elektromagnetni ventili. Proces automatizacije se nastavlja.

Godine 2014. naišao sam na video na kojem muškarac pravi pivo od koncentrata pivske sladovine. Oduševila me ideja o pivarstvu i onda je počelo...
Kuhanje piva iz konzerve nakon 2. puta mi nije postalo zanimljivo i odlučio sam prijeći na all-grain. Jednom sam skuhao pivo na plin i shvatio da to nije moja metoda. Odlučio napraviti automatik. Večeri su postale zanimljivije. Toliko sam se upustio u programiranje da sam kodirao točno do 2-3 ujutro. Potrebno je testirati u realnim uvjetima. U kantama sam iskopao kotao i fasetiranu čašu.

I evo s čime sam završio

A sada ću vam reći kako napraviti takvu automatizaciju.
Za početak potrebni su nam sljedeći detalji. Kupio sam ih u Kini.
ssd1289 ili ili9341.
Solid state relej za upravljanje grijaćim elementom (ili uključenim krugom)
Poluvodni relej za upravljanje pumpom (za AC pumpu) ili (za DC)
Senzor temperature ili ili
Napajanje 7,5-9V 1A. na primjer
Priključci za spajanje temperaturnog senzora i pumpe i
(više )
(zujalica)
Otpornik 4,7 kΩ

Niskonaponski krug

Shema napajanja. Budi oprezan. Nisam siguran - vjerujte profesionalcima.

Uzimamo presjek žica ovisno o ukupnoj snazi ​​crpke i grijaćeg elementa. Za čvrsti grijaći element potreban je radijator. ne zagrije se dovoljno. Stavimo sve u kutiju. Punimo firmware, postavljamo i kuhamo pivo.

(uputa unutra)

Ali osnovne funkcije mi nisu bile dovoljne. I odlučio sam vezati wifi. Kupio sam ESP8266 modul na aliexpressu. Istovremeno sam naručio i modul. dečki s foruma su jako dobro zamolili da se to uvede u projekt (može i bez toga). I spojen na sljedeći način

Za napajanje wifi modula potrebno nam je napajanje od 5V. Ne možete koristiti Arduino. Možete koristiti zasebno napajanje ili pretvoriti 9V u 5V. Da biste to učinili, možete sastaviti jednostavan krug s regulatorom napona ili kupiti gotovi od Kineza. Na primjer (postoji hrpa drugih opcija).

Sljedeći korak je flešovanje našeg modula s NodeMCU firmwareom. Preuzimanje. Lansiramo. Kliknite Start i pričekajte da se firmware završi s učitavanjem. Jeste li pitali? To je odlično. Sada učitajmo skriptu. Za ovo nam je potrebno. Naravno, postoje i drugi programi poput . Ali nisam ih mogao natjerati da rade s mojim modulom. U ESPloreru stvorite novu datoteku init.lua sa sljedećim sadržajem:

Promijenite naziv i lozinku WiFi mreže u svoje. Postavili smo brzinu na 9600. Pritisnite tipku "Otvori" (ako se ne poveže, može pomoći pritiskom na tipku za resetiranje na modulu). I kliknite "Spremi u ESP". Nakon učitavanja skripte, modul bi se trebao povezati s vašim usmjerivačem. To se može provjeriti tako da uđete u usmjerivač i pogledate DHCP klijente. Ako se vaš modul tamo ne vidi, onda je nešto pošlo po zlu.

Web sučelje sadrži sljedeće funkcije.
1. Praćenje procesa. Može se pratiti temperatura, status crpke, mješanje i izvedba kuhanja. Web sučelje je opremljeno zvučnim alarmom.
2. Preuzmite recepte u memoriju kontrolera i na flash disk.
3. Izrada globalnog grafa cijelog piva.






Prijavite se na web sučelje

Vrhunski povezani članci