Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Grijanje seoske kuće na arduino sa prijenosom podataka na internet. Izrađujemo automatizaciju za pivaru na jednoj ploči

Grijanje seoske kuće na arduino sa prijenosom podataka na internet. Izrađujemo automatizaciju za pivaru na jednoj ploči

Automatizacija u savremenom društvu je neophodna mjera, jer je u digitalnom dobu izuzetno važno eliminirati ljudski faktor u različitim industrijama kako bi se standardizirao i poboljšao kvalitet proizvoda. Postoje i oblasti u kojima jednostavno nije moguće da osoba radi ono za šta su roboti sposobni, na primjer, proizvodnju nanomaterijala i mikroploča.

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

Glavne prednosti automatizovanih sistema baziranih na Arduino mikrokontroleru

Niko vam ne brani da lemite sopstvenu ploču i sami je programirate koristeći jezike niskog nivoa. Međutim, automatizacija na arduinu i gotovim mikrokontrolerima će uvelike olakšati cijeli proces i uštedjeti vrijeme. Uostalom, mnogo je lakše kupiti gotov proizvod sa setom biblioteka 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čnog 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 o programiranju.
  2. Veliki broj već pripremljenih biblioteka. Arduino u CIS-u koriste mnogi entuzijasti robotike, do te mjere da im proizvodnja razne elektronike postaje hobi. Shodno tome, korisnička zajednica je izuzetno aktivna na mreži, ima veliki broj praznina i spremna je da vam pomogne u rješavanju bilo kakvih problema. Kvaliteta biblioteka, zbog niskog ulaznog praga, pati, ali niko ne zabranjuje stvaranje vlastitih, dovoljno je proučiti semantiku jezika C ++ ili koristiti gotove prevoditelje.
  3. Puno perifernih uređaja. Nije bitno da li vam treba arduino automatizacija staklenika ili senzor svjetla, 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 nezavisnih proizvođača esp8269, koji je 10 puta jeftiniji od službenog.
  4. Puno informacija. Bilo koji problem sa kojim se suočavate neko je već iskusio, a rješenje ćete vjerovatno pronaći na Google-u. Postoji i opsežna literatura dostupna za pregled.

Međutim, nemojte misliti da Arduino nema mana. Ploča je poznata po svojim lošim performansama. U posebno složenim zadacima i sa velikom količinom koda, vrijeme odziva 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 kreiranje 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 automatizovani sistemi, na primer, za kuvanje piva ili staklenika, ne zahtevaju ni delić resursa koje odbor može da obezbedi. Shodno tome, većini korisnika ovi nedostaci će se č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 mnogo veći.

Primjer automatizacije procesa baziran na mikro Arduinu

Najjednostavniji primjer automatizacije procesa može biti arduino staklenik. Da biste stvorili bilo koji sistem, 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 zalivanje biljaka i održavanje vlažnosti na istom nivou.

Na osnovu ovih zadataka, odmah možete primijetiti šta trebate kupiti za glavnu ploču:

  1. Senzor temperature. Obezbediće da se vazduh ne zagreva i ne ohladi u granicama propisanim programom. U slučaju promjene temperature, ploča će uključiti klima uređaj ili elektronske baterije.
  2. Svetlosni senzor. Naravno, možete se ograničiti na softversko rješenje i kupiti skupe lampe s imitacijom dnevne svjetlosti. Ali ako želite stvoriti punopravni staklenik, tada će biti mnogo praktičnije instalirati automatski strop, koji će kontrolirati Arduino.
  3. Senzor vlage. Ovdje je sve isto kao i sa temperaturom, po propisanom scenariju, u nadoknadu ć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, nesposobni ni za šta.

Programiranje mikro Arduina za automatizaciju procesa. Primjer

Kao iu prethodnom paragrafu, važno je za programiranje podijeliti zadatak u zasebne podstavke i izvršiti ih uzastopno. Arduino programiranje se odvija zahvaljujući komandama u AT i AT+ interfejsu, koristeći pripremljene biblioteke. Shodno tome, sve skripte su napisane u posebnom okruženju u C ++ i, prije nego što bilo šta učinite, odvojite vrijeme da proučite njegovu semantiku. Osim obavljanja jednostavnih funkcija, sistem je sposoban i za pohranjivanje skripti u flash memoriju, što nam je potrebno u ovom primjeru.

Imajte na umu da informacije sa svakog senzora dolaze u realnom vremenu i kao varijable, međutim, možete ograničiti vrijeme odgovora, jer nema potrebe za rasipanjem resursa i konstantnim mjerenjem svakog parametra. U skladu s tim, podesite 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 da bi se proces olakšao, jer. ovaj kontroler će sam pratiti temperaturu, održavati je i podići na potrebnu temperaturnu pauzu. Također signalizirajte zvučnim signalom o potrebnoj intervenciji, na primjer, morate sipati slad ili napraviti test joda.

Odlučio sam da svoju automatizaciju napravim od gotovog projekta. Radi na arduinu, na njega su spojeni senzor temperature, dva releja, displej i dugmad. Prvi relej upravlja grijačem, drugi relej upravlja pumpom. Pumpa za kašu je vrlo zgodna i sama nema potrebe miješati kašu za cijeli proces gnječenja (za više informacija o tome kako skuhati pivo preporučujem da pročitate u mojim ranijim)

Prvu automatizaciju sam sastavio koristeći module:

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

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 kreirati kolo, a potom i ploču za svoj zanat.

Šema:

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

platiti:

Nacrtao sam dijagram, zatim ostaje nacrtati ploču, prvo sam je nacrtao pomoću programa Raspored sprinta 6, vrlo zgodno, ali nema dovoljno funkcionalnosti u njemu, pa sam odlučio da ga ostavim u smjeru programa dip trace i evo šta sam dobio:

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

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

fotorezist:

Za proizvodnju štampanih ploča pomoću fotorezista trebat će vam:
- Film za štampač
-
- Ultraljubičasta lampa
- Soda pepeo

ultraljubičasta lampa

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


Zalijepio sam LED diode na radijator, iako ih je bilo moguće sklopiti na textolit, sumnjam da bi se pregrijale.
Evo šta sam dobio:


Proizvodnja ploča

1. Dakle, pripremio sam šablon, ostaje samo da ga odštampam na filmu. Kao što sam gore napisao, potreban mi je film za štampač, isprobao sam film i za laserski i za inkjet štampač, najbolja opcija se dobija samo na inkjet filmu. Morate ispisati u negativu i u ogledalu:

Odmah sam laminirao šablon tako da se otisci prstiju i ostaci mogu lako oprati.
2. Zatim morate izbrusiti našu buduću ploču (lažna fiberglasa). Za to je prikladna lagano navlažena obična spužva ili melaminska spužva:


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


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


6. Kada je fotorezist zalijepljen, tekstolit sa njim se mora provući kroz laminator 2-3 puta ili toplom peglom ispeglati kroz dva puta presavijeni list papira:


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


Ako se prilikom lijepljenja fotorezista ispostavi "dovratak", onda ga je bolje ukloniti (oprati ili ostrugati) i ponovo zalijepiti, inače će biti tužno nakon graviranja ploče ... Neću skinite ovaj fotorezist, pokazaću konačan rezultat.
7. Na tekstolit postavljamo šablon sa 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 osvijetlio promijenio je boju iz svijetloplave u tamnoplavu, a osvijetljeni fotorezist je vrlo lomljiv.
9. Uklonimo staklo i šablon. Višak fotorezista se može (opciono) odrezati i pažljivo odvojiti pincetom:


10. Sljedeći korak je ispiranje neispoljenog fotorezista alkalijom, za to uzimamo 2 šolje vode i kašiku sode pepela, dobro promešati. Skinemo gornji zaštitni film fotorezista i spustimo naš tekstolit u alkalnu otopinu.


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


Alkalija se ne može izliti, već ostaviti na sledećoj ploči ili da se ispere fotorezist nakon jetkanja, ali o tome kasnije...
12. Grafika ploče:
Postoje dvije 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 kašika. kašika 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 kiseliti .. .
13. Najpogodnije je fotorezist ukloniti u istoj lužini, u kojoj je neurezan fotorezist ispran, nakon 20 minuta će nestati sam od sebe i nema potrebe trljati ništa...

A evo i mojih "jambova":


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

Ispostavilo se da je sljedeća ploča za mene "čista":


14. Zatim izbušimo rupe i lim dasku:


15. Zalemimo sve detalje i isperemo višak fluksa:


Zalemio sam SMD komponente 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.

atmega644 programiranje

1. Da biste započeli programiranje, morate u njega učitati bootloader. Ovo 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. Otpremite ArduinoISP skicu u UNO:

4. I povezujemo našu ploču sa UNO:


Prema uputama za skicu:
// ime pina // slave reset: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Ispada po mojoj šemi ovako:

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




Ako je sve prošlo kako treba, vidjet ćemo poruku: "Snimanje bootloadera je završeno"
Ovim je završeno preuzimanje bootloadera "a, možete spojiti displej, dugmad, senzor temperature i popuniti ga. Ja sam student tehničkog fakulteta. Jednom sam sjedio u kafiću sa prijateljem koji je tada studirao na medicinskom fakultetu. univerziteta, odlučili smo da otvorimo bar. Bilo je mnogo ideja koje su u principu zaslužile pažnju. Na primjer, plesni podij koji mijenja svoj ugao u zavisnosti od stila muzike... Ali, uz svu raznolikost ideja, postojala je i još jedna -

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

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

Nekoliko godina kasnije, odlučio sam da ponovim proces, malo ga automatizujući sa Arduino UNO. I evo šta se dogodilo.

Počeću sa onim što bi trebalo da uradi čitava postavka.

  • Provjerite sami - da li sve radi, da li je sve povezano;
  • očistite se;
  • Pripremite se za proces kuhanja;
  • Kuvajte pivo u poluautomatskom načinu rada;
  • Kuvajte pivo u ručnom načinu rada;
  • Kuvajte pivo u automatskom režimu (kao što mašina za pranje veša pere veš).

Prva tačka trenutno nije implementirana. Za sada nema razmišljanja o tome kako to implementirati.
Drugi također nije implementiran, ali ću ga završiti u bliskoj budućnosti, samo pričekajte da pumpe budu isporučene sa ebaya.
Treća tačka je prilično jednostavna.

Priprema za proces kuvanja

Poruka iz sistema da je potrebno sipati vodu u bačvu -> program čeka da se pritisne tipka OK -> program šalje komandu arduinu da uključi solid state relej -> solid state relej uključuje jednokilovatnu tenu u bačvi, dovodi je na temperaturu od 37 stepeni, šalje komandu programu da je sve spremno za kuvanje. Održava temperaturu od 37 stepeni.

Voleo bih da postoji provera na prisustvo vode, ali senzor još uvek čeka svoj odlazak od "kineske braće".

Poluautomatsko kuvanje piva

U principu, jednostavna procedura:

Pritisnemo dugme „Zagrijavanje“ u kontrolnom programu, ostali kontrolni tasteri nisu aktivni;
- Nakon zagrevanja, program prikazuje poruku "Sve je spremno, možete kuvati";
- Dopunjavamo sastojke, biramo program za kuvanje - dugme "kuhanje piva" postaje aktivno;
- Pritisnite dugme "kuhanje piva", proces je počeo;
- Nadalje, sistem će periodično obavještavati informativnim porukama šta i kada treba učiniti.

Morate slijediti upute.

Kuvanje piva ručno

Ovaj proces vam omogućava da postavite parametre kuhanja, promijenite ih u ciklusu kuhanja. Još nisam stigao do toga.

Kuvanje u automatskom režimu

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

Ubacio sam sastojke u odgovarajuće tacne, pritisnuo dugme i ... za mesec i po dana sam dobio gotovo pivo.

To je proces ukratko, a sada pređ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 sa glavnim programom preko com porta. Jer Nemam štit u realnom vremenu za Arduino, morao sam uzeti tajmere iz vizualnog C#-a. Nemam iskustva u pisanju programa, pa ako neko ima ideju, kritika je čast. Kritikujte, povucite, da tako kažem, da vam se odjednom ne sviđa.

Evo teksta programa na arduinu

#include 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); ) void petlja (void) ( if (Serial.available()) ( switch (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); temperature(); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperatura(); if(temp1 >= 75.00) digitalWrite(relay6,LOW); ostalo digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") delay(1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); temperatura(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperature(); //Serial.available(); while (Serial.read()!="s")( //isključi ciklus pripreme 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) //delay(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 pluta celzijus; // float temp; boolean gde; 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 važeći!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // započni konverziju, sa parazitskim napajanjem na the end delay(840) ; // možda je 750ms dovoljno, možda ne // možemo napraviti ds.depower() ovdje, ali reset će se pobrinuti za to. present = ds.reset(); ds.select( addr); ds.write (0xBE); // Čitanje 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 stepeni. Za sada ne mogu reći zašto. I potrebno je za dalju automatizaciju - održavanje temperature u frižideru.

Ukratko opišite šta program radi.

Program je podijeljen na podprograme od kojih se svaki aktivira ako se na com portu pojavi određeni znak. Na primjer, ako slovo "p" uđe u port, 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 sistema; koristeći System.Collections.Generic; koristeći System.ComponentModel; koristeći System.Data; koristeći System.Drawing; koristeći System.Linq; koristeći System.Text; koristeći System.Threading.Tasks; koristeći System.Windows.Forms; koristeći 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(tobject2 sendere.) (tobject2 sendere.) PortName; Port1.Open(); ) //Provjera hardverske privatne void button1_Klik (object sender, EventArgs e) ( if (Port1.IsOpen == false) ( pokušajte ( //program se može mijenjati info sa 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čitavanja porta MessageBox.Show("Proces provjere hardvera je započeo", "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"); button1 . Omogućeno = istina; button2.Enabled = istina; 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 port uređaja. Proces provjere se ne može pokrenuti", "Upozorenje"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Čišćenje opreme private void button3_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) (pokušajte ( //program se može mijenjati informacije sa podrugomu.com/node/987 MessageBox .Show(" Definitivno si polio dezinfekciono sredstvo", "UPOZORENJE", MessageBoxButtons.OK, MessageBoxIco n.Upozorenje); port1. PortName = label2.Text; Port1.Open(); Port1.Write("Clean"); MessageBox.Show("Proces čišćenja hardvera je započeo", "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 port 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(object sender, 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 je odabran"); label1.Visible = 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 modificirati informacija sa podrugomu.com/node/987 //Port1.PortName = label2. tekst; //Port1.Open(); switch (label3.Text) ( case "Infusion kaša odabrana": MessageBox.Show("Infusion kaša proces započet", "Info poruka"); Port1.WriteLine("i"); timer1.Start(); break; case " Cooper brew odabran": MessageBox.Show("Cooper mash proces je započeo", "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 port 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 zagrevanje kaše na 37 stepeni" + " " + 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šiljalac objekta, EventArgs e) ( Close(); ) privatni void button4_Klikni (pošiljalac objekta, EventArgs e) ( ) privatni void infusionOverwriteTool StripMenuItem_Click(pošiljalac objekta, EventArgs e) ( label3.Text = "Odabrana kaša infuzije"; ) private void timer1_Tick(pošiljalac 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("Infuziona 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 stepeni. Možete dodati slad i uključiti režim kaširanja"); richTextBox1.Text = richTextBox1.Text + "\n" + "Kraj procesa miješanja. T=37 stepeni" + " " + 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 sistem"); ) private void mash tun ToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Mash tun simmer omogućen. Molimo pričekajte 60 minuta ") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Omogućen režim kuhanja u kaši. Sačekajte 60 minuta" + " " + DateTime.Now.ToString("HH:mm"); ) privatni void timer3_Tick(object pošiljatelj, EventArgs e) ( string s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") label5.Text = s1.Substring(4, 5); if (s1 .Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5); s++; if (s == 900) ( Port1.WriteLine("m"); MessageBox.Show(" Faza pranja na 62 stepena"); richTextBox1.Text = richTextBox1.Text + "\n" + "Korak gnječenja na 62 stepena x" + " " + DateTime.Now.ToString("HH:mm"); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("78 stepeni korak brisanja"); richTextBox1.Text = richTextBox1.Text + "\n" + "78 stepeni korak brisanja " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Mashing je završen, možete isprazniti sladovinu") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Mješanje je gotovo. Možete isprazniti sladovinu" + " " + DateTime.Now.ToString("HH:mm"); ) ) private void regularToolStripMenuItem_Click(object sender , EventArgs e) ( label3.Text = "Cooper brew odabran"; ) ) )

Program komunicira sa 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 pritiskati ništa tokom određene procedure.

Ukupno, program može

- pripremiti opremu za kuvanje;
- kuvar;
- napisati jednostavan dnevnik rada (vrlo korisno za dalju analizu piva);
- odaberite port za povezivanje na kontrolni kontroler (arduino UNO);
prokuhati pivaru i zgnječiti posude.

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

nastavlja se...

UPD:

Evo nekoliko fotografija pivare

Ovo je lonac za kuvanje. Imam dva ovakva. Senzor temperature DS18B20 u zatvorenom okviru je ugrađen sa strane.
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.

Bakarna 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.

Još je rano govoriti o rezultatu, evo šta se desilo

Opšti izgled bačve izgleda ovako.

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

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

Konačno su stigli i elektromagnetni ventili. Proces automatizacije se nastavlja.

2014. godine 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...
Kuvanje piva iz konzervirane hrane mi nije postalo interesantno nakon 2. puta i odlučio sam da pređem na žitarice. Jednom sam skuhao pivo na gas i shvatio da to nije moj metod. Odlucio da napravim automatik. Večeri su postale zanimljivije. Toliko sam se uključio u programiranje da sam kodirao do 2-3 sata ujutro. Potrebno za testiranje u realnim uslovima. U kanti sam iskopao kotao i fasetiranu čašu.

I evo šta 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)
Solid state relej za kontrolu pumpe (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)
4.7kΩ otpornik

Niskonaponsko kolo

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

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

(uputstvo unutra)

Ali osnovne funkcije mi nisu bile dovoljne. I odlučio sam da povežem wifi. Kupio sam ESP8266 modul na aliexpressu. Istovremeno sam naručio i modul. momci sa foruma su jako dobro zamolili da se to uvede u projekat (moze 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 sa stabilizatorom napona ili kupiti gotov od Kineza. Na primjer (postoji gomila drugih opcija).

Sljedeći korak je flešovanje našeg modula sa NodeMCU firmverom. Preuzimanje. Lansiramo. Kliknite na Start i pričekajte da se firmver završi učitavanje. Jeste li pitali? To je sjajno. 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 ESPlorer-u kreirajte novu datoteku init.lua sa sljedećim sadržajem:

Promijenite naziv WiFi mreže i lozinku u svoju. Postavili smo brzinu na 9600. Pritisnite dugme "Otvori" (ako se ne poveže, može pomoći pritiskom na dugme za resetovanje na modulu). I kliknite na "Sačuvaj u ESP". Nakon učitavanja skripte, modul bi se trebao povezati s vašim ruterom. Ovo se može provjeriti tako da uđete u ruter i pogledate DHCP klijente. Ako vaš modul nije vidljiv tamo, nešto je pošlo po zlu.

Web sučelje sadrži sljedeće funkcije.
1. Praćenje procesa. Temperatura, status pumpe, performanse gnječenja i kuvanja mogu se pratiti. Web interfejs je opremljen zvučnim alarmom.
2. Preuzmite recepte u memoriju kontrolera i na fleš disk.
3. Izrada globalnog grafikona cijelog piva.






Prijavite se na web interfejs

Top Related Articles