Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Încălzirea unei case de țară pe arduino cu transmisie de date pe internet. Realizăm automatizări pentru o fabrică de bere pe o singură placă

Încălzirea unei case de țară pe arduino cu transmisie de date pe internet. Realizăm automatizări pentru o fabrică de bere pe o singură placă

Automatizarea în societatea modernă este o măsură necesară, deoarece în era digitală este extrem de important să excludem factorul uman în diverse industrii pentru a standardiza și îmbunătăți calitatea produselor. Există, de asemenea, domenii în care o persoană pur și simplu nu este capabilă să facă ceea ce roboții sunt capabili, de exemplu, producția de nanomateriale și microplaci.

Cu toate acestea, automatizarea ajută nu numai în producție, ci poate fi utilă și pentru omul obișnuit. De exemplu, automatizarea unei fabrici de bere arduino poate facilita foarte mult procesul de producție a unui produs. Să ne dăm seama cum poate ajuta rectificarea automată pentru arduino și alte lucruri și să luăm în considerare exemple.

Principalele avantaje ale sistemelor automatizate bazate pe microcontrolerul Arduino

Nimeni nu vă interzice să vă lipiți propria placă și să o programați singur folosind limbaje de nivel scăzut. Cu toate acestea, automatizarea pe arduino și microcontrolerele gata făcute va facilita foarte mult întregul proces și va economisi timp. La urma urmei, este mult mai ușor să cumperi un produs gata făcut cu un set de biblioteci și să-l adaptezi nevoilor tale. Iar automatizarea disponibilă pe arduino mega 2560 poate fi utilă în multe domenii ale vieții, de la comutatoare vocale pentru o casă inteligentă până la zăvoare electrice cu detector de mișcare. Principalele avantaje pentru care automatizarea Arduino este renumită sunt:

  1. Prag scăzut de intrare. Nu este nevoie să obțineți o educație de inginerie, doar vizionați câteva videoclipuri de instruire și aveți o bază în programare.
  2. Un număr mare de biblioteci deja pregătite. Arduino este folosit în CSI de mulți amatori de robotică, în măsura în care producția de diverse electronice devine hobby-ul lor. În consecință, comunitatea de utilizatori este extrem de activă în rețea, postează un număr mare de șabloane și este gata să vă ajute în rezolvarea oricăror probleme. Calitatea bibliotecilor, din cauza pragului scăzut de intrare, are de suferit, dar nimeni nu interzice să vă creați propria, este suficient să studiați semantica limbajului C++ sau să folosiți traducători gata făcute.
  3. Un număr mare de periferice. Nu contează dacă ai nevoie de o automatizare de seră Arduino sau de un senzor de lumină, vei găsi orice module, până la senzori de sunet și recunoaștere de voce. Da, unele dintre plăci costă mulți bani, dar poți găsi întotdeauna analogi ieftini, de exemplu, modulul wi-fi de la producători terți esp8269, care este de 10 ori mai ieftin decât cel oficial.
  4. O mulțime de informații. Orice problemă pe care o întâlniți a fost deja întâmpinată de cineva și, cel mai probabil, veți găsi o soluție pe Google. Există, de asemenea, o literatură cu drepturi depline cu care vă puteți familiariza.

Cu toate acestea, să nu credeți că Arduino nu are defecte. Placa este renumită pentru performanța sa scăzută. În sarcini deosebit de complexe și cu o cantitate mare de cod, timpul de răspuns poate ajunge la 1 secundă, ceea ce este inacceptabil pentru microcontrolere. Memoria flash a majorității modulelor nu depășește 1 MB, ceea ce nu este suficient pentru crearea rețelelor neuronale sau utilizarea fișierelor media. Desigur, puteți conecta un card de memorie auxiliar, dar acest lucru mărește și timpul de răspuns, ocupă resurse suplimentare pentru alimentarea sa și se realizează într-un mod semi-artizanal.

Cu toate acestea, sistemele automate simple, de exemplu, pentru fabricarea berii sau sere, nu necesită nici măcar unele dintre resursele pe care le poate emite plata. În consecință, pentru majoritatea utilizatorilor, aceste neajunsuri vor părea lipsite de sens. Dacă decideți să vă asamblați propria imprimantă 3-D sau un design mai complex, ar trebui să aruncați o privire mai atentă asupra analogilor. Dar pragul de intrare pentru concurenții lui Arduino va fi mult mai mare.

Un exemplu de automatizare a proceselor bazat pe mk Arduino

Cel mai simplu exemplu de automatizare a proceselor poate fi o seră pe un arduino. Pentru a crea orice sistem, merită să subliniem clar sarcinile pe care trebuie să le îndeplinească. Folosind o seră ca exemplu, aceasta ar fi:

  1. Crearea unui climat deosebit.
  2. Pornirea și oprirea luminii în timp util.
  3. Udarea în timp util a plantelor și menținerea umidității aerului la același nivel.

Pe baza acestor sarcini, puteți observa imediat ce trebuie să cumpărați pentru placa principală:

  1. Senzor de temperatura. Se va asigura ca aerul sa nu se incalzeasca sau sa se raceasca, fiind in limitele prescrise de program. In cazul schimbarii temperaturii, placa va porni aparatul de aer conditionat sau bateriile electronice.
  2. Senzor de lumina. Desigur, puteți să vă limitați la o soluție software și să cumpărați lămpi scumpe cu imitație de lumină naturală. Dar dacă doriți să creați o seră cu drepturi depline, atunci va fi mult mai convenabil să instalați un tavan automat, care va fi controlat de Arduino.
  3. Senzor de umiditate. Aici totul este la fel ca și cu temperatura, conform scenariului prescris, placa va include pulverizatoare și umidificatoare, dacă este necesar.

Când ați achiziționat toate modulele necesare, nu rămâne decât să le programați. Până la urmă, fără cod, acestea sunt doar bucăți de fier, care nu sunt capabile de nimic.

Programare MK Arduino pentru automatizarea proceselor. Exemplu

Ca și în paragraful anterior, este important pentru programare să împartă sarcina în sub-articole separate și să o execute secvenţial. Programarea Arduino are loc datorită comenzilor din interfața AT și AT+, folosind biblioteci pregătite. În consecință, toate scripturile sunt scrise într-un mediu special în limbajul C++ și, înainte de a face orice, dedică timp studierii semanticii sale. Pe lângă îndeplinirea unor funcții simple, sistemul este și capabil să stocheze scripturi în memoria flash, ceea ce avem nevoie în acest exemplu.

Nu uitați că informațiile de la fiecare senzor vin în timp real și ca variabile, cu toate acestea, puteți limita timpul de răspuns, deoarece nu este nevoie să cheltuiți resurse și să măsurați fiecare parametru tot timpul. În consecință, setați timpii de pornire și oprire pentru fiecare senzor sau setați timpul de răspuns pentru o anumită perioadă.

De ce aveam nevoie de automatizare?

Automatizarea este necesară pentru a facilita procesul, deoarece acest controler în sine va monitoriza temperatura, o va menține și o va ridica la pauza de temperatură necesară. De asemenea, semnalați cu un semnal sonor despre intervenția necesară, de exemplu, trebuie să umpleți malțul sau să faceți un test de iod.

Am decis să-mi fac propria automatizare dintr-un proiect gata făcut. Funcționează pe arduino, un senzor de temperatură, două relee, un afișaj și butoane sunt conectate la el. Primul releu controlează elementul de încălzire, al doilea releu controlează pompa. Pompa de piure este foarte convenabilă deoarece nu este nevoie să amestecați piureul pentru întregul proces de piure (pentru mai multe detalii despre cum să preparați berea, vă recomand să citiți cele anterioare)

Am asamblat prima automatizare folosind module:

- Arduino mini
- Bloc de două relee 15A
- Display 2004
- Senzor de temperatura
- 4 butoane
- unitate de alimentare de 5 volți
Comoditatea ansamblării modulare, constă doar în faptul că nu este dificil să obțineți toate piesele și aproape nimic nu este nevoie pentru a lipi. Dar cel mai mare dezavantaj este numărul mare de fire, iar un releu chinezesc ieftin a interferat cu afișajul, așa că releul mecanic a trebuit să fie înlocuit cu unul solid.

De-a lungul timpului, am ajuns la concluzia că trebuie să-mi asamblez automatizarea pe un cip cu 64kb de memorie (arduino mini are doar 32kb) pe o singură placă. Nu am găsit o soluție gata făcută, așa că am început să creez eu un circuit și, ulterior, o placă pentru ambarcațiunea mea.

Sistem:

Am dezvoltat schema și am desenat, ca să zic așa, în genunchi și pentru mine, așa că pot exista unele deficiențe, dar schema funcționează complet:

A plati:

Am desenat schema, apoi rămâne să desenăm tabla, mai întâi am desenat folosind programul Sprint-Layout 6, foarte convenabil, dar nu suficient de funcționalitate în el, așa că am decis să-l las în direcția programului DipTrace si asta am primit:

Puteți descărca sursele.
După cum puteți vedea, am numit berăria mea QRBeer și aceasta este deja versiunea 0.5...

Tabla este gata, ramane de facut cumva. Pentru asta am decis sa folosesc. De ce tocmai ei, și nu LUT? Tocmai am decis să încerc o astfel de tehnologie nouă pentru mine, am încercat deja LUT, am simțit-o, ca să spun așa, nu voi spune că mi-a plăcut ...

Fotorezist:

Pentru a fabrica plăci de circuite imprimate folosind un fotorezistent, veți avea nevoie de:
- Film pentru imprimantă
-
- Lampa cu ultraviolete
- Soda

lampă cu ultraviolete

Pentru început, voi împărtăși informații despre cum mi-am făcut lampă UV... La început am vrut să folosesc o lampă gata făcută, apoi am decis să o asamblam pe șase LED-uri de 3W:
și am cumpărat același lucru pe Tao:


Le-urile le-am lipit de calorifer, deși a fost posibil să le asamblam pe un PCB, mă îndoiesc că s-ar fi supraîncălzit.
asta am facut:


Fabricarea plăcii

1. Așadar, am pregătit șablonul, rămâne doar să-l tipărim pe film. Așa cum am scris mai sus, aveți nevoie de o peliculă pentru o imprimantă, am încercat film atât pentru o imprimantă laser, cât și pentru o imprimantă cu jet de cerneală, cea mai bună opțiune se obține doar pe folie cu jet de cerneală. Trebuie să imprimați în negativ și în imagine în oglindă:

Am laminat imediat șablonul, astfel încât amprentele și resturile să poată fi spălate cu ușurință.
2. În continuare, trebuie să șlefuiți viitoarea noastră placă (fibră de sticlă falsificată). Un burete obișnuit ușor umezit sau un burete melaminat este potrivit pentru aceasta:


3. După această procedură, cuprul mai trebuie degresat cu acetonă:


După cum puteți vedea în fotografia mea, am degresat cu un șervețel obișnuit și am turnat acetonă într-o sticlă de peroxid, așa că este mai convenabil să luați ...
4. Următorul pas este să tăiați ușor fotorezistul pentru viitoarea dvs. placă cu o marjă și să îndepărtați cu grijă folia de protecție superioară pentru a nu o deteriora. Dacă fotorezistul este domestic, trebuie să dezlipiți partea mată, dacă este chinezească, atunci nu există nicio diferență...
5. Apoi, lipim fotorezistul pe textolit, astfel încât bulele de aer să nu apară sub fotorezist, altfel urmele nu vor apărea în astfel de locuri, tăiem excesul ...
Procesul de lipire a unui fotorezistent este similar cu lipirea unui protector de ecran pe un telefon.


6. Când fotorezistul este lipit, textolitul cu acesta trebuie trecut prin laminator de 2-3 ori sau folosiți un fier de călcat cald și călcați-l printr-o foaie de hârtie pliată de două ori:


Principalul lucru este să nu supraîncălziți fotorezistul, altfel se va dovedi astfel:


Dacă obțineți un jamb atunci când lipiți fotorezistul, atunci este mai bine să îl îndepărtați (spălați-l sau să-l răzuiți) și să-l lipiți din nou, altfel după ce ați gravat placa va fi trist... Nu voi elimina acest fotorezistent. , voi arăta rezultatul final.
7. Punem un șablon pe textolit cu un fotorezistent și îl apăsăm cu sticlă (am luat-o dintr-o ramă foto veche) și punem o încărcare pe sticlă:


8. Iluminăm fotorezistul folosind o lampă UV. Lampa mea durează aproximativ 2 minute:


După cum puteți vedea, fotorezistul care a fost aprins și-a schimbat culoarea de la albastru deschis la albastru închis, iar fotorezistul expus este foarte fragil.
9. Scoateți sticla și șablonul. Excesul de fotorezist poate fi (opțional) tăiat și separat cu grijă cu o pensetă:


10. Următorul pas este să spălăm fotorezistul nedezvoltat cu alcalii, pentru aceasta luăm 2 pahare de apă și o lingură de sodă, amestecăm bine. Îndepărtăm folia de protecție superioară de pe fotorezist și coborâm textolitul într-o soluție alcalină.


11. Luăm o perie și trei din fotorezist în alcali, treptat fotorezistul nedezvoltat este spălat:


Alcalii nu pot fi turnați, ci lăsați pe următoarea placă sau pentru a spăla fotorezistul după gravare, dar mai multe despre asta mai târziu...
12. Placă de gravare:
Există două metode cele mai accesibile: gravarea cu clorură ferică sau peroxid + acid citric și sare. Nu voi scrie despre clorura ferică, dar probabil o voi descrie cu peroxid:
- 100 ml. peroxid de hidrogen 3% - se vinde într-o farmacie pentru 7-12 ruble
- 30 gr. acid citric (disponibil la orice magazin alimentar)
- 1 lingura. o lingură de sare (sunt potrivite atât cele fine cât și cele de piatră)


Toate acestea sunt amestecate într-un recipient și o placă cu un fotorezistent gata făcut este scufundată acolo, după un timp apar bule pe placă:


Și după un timp, „cuprul gol” este complet gravat:


Apropo, dacă gravarea la o temperatură mai mare, de exemplu, lângă o lampă incandescentă sau într-o baie de apă, gravarea va scădea cu trei, principalul lucru este să nu exagerați, altfel excesul va fi gravat ...
13. Cel mai convenabil este să îndepărtați fotorezistul în același alcalin, în care fotorezistul negravat a fost spălat, după aproximativ 20 de minute va dispărea de la sine și nu trebuie să frecați nimic ...

Și iată „jamburile” mele:


Deși nu este semnificativ, dar cu toate acestea, neatenția este de vină pentru tot, nu a observat bule de aer sub fotorezist sau supraîncălzite ...

Următoarea placă s-a dovedit a fi „curată”:


14. Apoi, facem găuri și mânuim placa:


15. Lipim toate detaliile și spălăm excesul de flux:


Am lipit componentele SMD cu o stație de lipit chineză în infraroșu, foarte convenabil:

Asta e tot, cel mai dificil lucru s-a terminat, rămâne să sunați piesele pentru un scurtcircuit și să începeți programarea cipului.

Programare Atmega644

1. Pentru a începe programarea, trebuie să încărcați bootloader-ul în el. Acest lucru nu este dificil de făcut cu Arduino UNO, dar mai întâi trebuie să descărcați și să instalați programul.
2. Următorul pas este să adăugați sau să luați un ansamblu gata făcut la programul instalat:
3. Completați schița UNO ArduinoISP:

4. Și conectați placa noastră la UNO:


Conform instrucțiunilor de schiță:
// nume pin // resetare slave: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Conform schemei mele, se dovedește așa:

5. Apoi, instalați placa noastră în setări și încărcați bootloader-ul:




Dacă totul a mers bine, vom vedea mesajul: „Înregistrare bootloader finalizată”
Acest lucru completează bootloader-ul „o încărcare, puteți conecta afișajul, butoanele, senzorul de temperatură și îl completați. Sunt student la o universitate tehnică. Odată, stând într-o cafenea cu un prieten care studia atunci la o universitate de medicină, am decis să deschidem un bar.Au fost multe idei care, în principiu, meritau puțină atenție.De exemplu, un ring de dans, care schimbă unghiul de înclinare în funcție de stilul de muzică... Dar, împreună cu toată varietatea de idei, mai era și una -

... dar nu ar trebui să ne producem propria bere?

După câteva săptămâni, am făcut bere folosind ingrediente de la berăria în care lucra prietenul tatălui meu. Dar multe procese tehnologice au fost întrerupte, așa că în loc de bere a ieșit ceva cu un miros nu prea plăcut.

După câțiva ani, am decis să repet procesul, automatizându-l puțin folosind Arduino UNO. Și asta sa întâmplat.

Pentru început, ce ar trebui să facă întreaga instalare.

  • Verificați-vă - dacă totul funcționează, dacă totul este conectat;
  • Curata-te;
  • Pregătiți-vă pentru procesul de preparare a berii;
  • Preparați bere în mod semi-automat;
  • Preparați berea manual;
  • Preparați bere în modul automat (ca o mașină de spălat spăla hainele).

Primul punct nu a fost implementat momentan. Până acum, nici nu m-am gândit cum să o implementez.
Nici cel de-al doilea nu este implementat, dar îl voi termina în viitorul apropiat, abia aștept să fie livrate pompele de pe ebay.
Al treilea punct este destul de simplu.

Pregătirea pentru procesul de preparare a berii

Un mesaj de la sistem că este necesar să turnați apă în cuvă -> programul așteaptă să fie apăsată tasta OK -> programul trimite arduino o comandă de pornire a releului de stare solidă -> releul de stare solidă pornește tennul de un kilowatt din cuvă, îl aduce la o temperatură de 37 de grade, trimite programului o comandă că totul este gata de gătit. Mentine o temperatura de 37 de grade.

As dori sa fac o verificare pentru prezenta apei, dar senzorul inca asteapta plecarea lui de la "fratii chinezi".

Prepararea berii în modul semi-automat

În principiu, o procedură simplă:

Apăsați butonul „Încălzire” din programul de control, restul butoanelor de control sunt inactive;
- După încălzire, programul afișează mesajul „Totul este gata, poți găti”;
- Completați ingredientele, selectați programul de preparare - butonul „Prepare” devine activ;
- Apăsați butonul „Prepare bere”, procesul a început;
- În plus, sistemul va anunța periodic cu mesaje informaționale ce să facă și când.

Trebuie să urmați instrucțiunile.

Prepararea manuală a berii

Acest proces vă permite să setați parametrii de gătit, să îi modificați în ciclul de gătit. Încă nu am ajuns la el.

Gătit automat

Acesta este un vis. În prezent, nu există componente de implementat. Nu sunt suficiente pompe, senzori de nivel al apei. Nu știu cum să măsoare gravitatea mustului, cât de mult alcool este într-o bere tânără și multe altele. Dar nu disper și mă voi automatiza treptat până când prepararea berii arată așa:

Am pus ingredientele in tavile corespunzatoare, am apasat butonul si... dupa o luna jumatate am obtinut berea terminata.

Acesta este pe scurt despre proces, dar acum să trecem la partea tehnică.

Partea tehnică a procesului

După cum am menționat mai sus, arduino UNO acționează ca un microcontroler de control. La el sunt conectate 2 relee, 2
termometru digital DS18B20.

Arduino comunică cu programul principal prin portul com. pentru că Nu am un scut în timp real pentru arduino, a trebuit să iau cronometre din visual c #. Nu am experiență în scrierea de programe, așa că dacă dintr-o dată cineva are idei, critici - mail pentru onoare. Critica, derbante, ca sa zic asa, ca deodata nu iti place.

Iată textul programului pe arduino

#include OneWire ds (8); // senzorii de temperatură sunt pe pinul 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; // pornește ten int reley6 = 6; // zece pe mash tub 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);) buclă void (nulat) (dacă (Serial.available ()) (comutați (Serial.read ()) (case „i”: infuz (); break; case „p”: progrev (); break; case „a”: avariya (); break; case "v": varka (); break; case "t": temperatură (); break;))) void varka () (digitalWrite (reley6, HIGH); while (Serial.read ()! = "m") (temperatura (); dacă (temp1> = 52.00) digitalWrite (reley6, LOW); else digitalWrite (reley6, HIGH);) while (Serial.read ()! = "n") (// digitalWrite (reley6, HIGH); temperatură (); dacă (temp1> = 62.00) digitalWrite (reley6, LOW); else digitalWrite (reley6, HIGH);) while (Serial.read ()! = "b") (// digitalWrite (reley6, HIGH); temperatura (); dacă (temp1> = 75,00) digitalWrite (reley6, LOW); else digitalWrite (reley6, HIGH); ) digitalWrite (reley6, LOW); în timp ce (Serial.read ()! = "c") delay (1000); în timp ce (Serial.read ()! = "x") (digitalWrite (reley5, HIGH); temperatură ();) digitalWrite (reley5, LOW); ) void infuz () (// temperatură (); //Serial.available (); while (Serial.read ()! = "s") (// opriți ciclul de preparare a infuziei dacă (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) // întârziere (1000); Serial.println ("s"); ) void avariya () (digitalWrite (reley1, LOW); digitalWrite (reley2, LOW); digitalWrite (reley3, LOW); digitalWrite (reley4, LOW); digitalWrite (reley5, LOW);) void temperature () (octetul i; byte prezent = 0; byte data; byte addr; byte zator = (40, 23, 218, 43, 6, 0, 0, 22); // adresa senzorului de temperatură în byte de blocaj varilka = (40, 255, 240, 115, 59, 4, 0, 234); // adresa senzorului de temperatură în cuva de preparare float celsius; // float temp; boolean gde; if (! Ds.search (addr)) (//Serial. println("Nu mai sunt adrese. "); //Serial.println (); ds.reset_search (); întârziere (250); // return;) if (OneWire :: crc8 (adr, 7)! = Adr) ( Serial.println (" CRC nu este valid! "); // return;) ds.reset (); ds.select (addr); ds.write (0x44, 1); // începe conversia, cu pornirea parazitului la întârzierea finală (840) ; // poate 750 ms este suficient, poate nu // am putea face un ds.depower () aici, dar resetarea se va ocupa de asta.present = ds.reset (); ds.select ( addr); ds.write (0xBE); // Citiți Scratchpad pentru (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); } }

Totul ar fi bine, dar din anumite motive al treilea senzor arată întotdeauna 85 de grade. Nu pot spune încă de ce. Și este necesar pentru o automatizare suplimentară - menținerea temperaturii în frigider.

Voi descrie pe scurt ce face programul.

Programul este împărțit în subrutine, fiecare dintre acestea fiind activată dacă pe portul com apare un anumit simbol. De exemplu, dacă litera „p” lovește portul, atunci modul „Încălzire” este activat. Sau, dacă „a” - atunci subrutina avariya () este apelată și totul este oprit. Când este apelată subrutina temperatură (), datele sunt scrise în variabilele globale temp1, temp2. De acolo ajung la subrutinele necesare.

În viitor, vor exista subrutine pentru gătit diferite soiuri și chiar luciu de lună.

Acum pentru programul de control principal.

Programul principal de control

Este scris în Visual Studio c #.

Codul sursă al programului:

Codul sursă al programului

folosind System; folosind System.Collections.Generic; folosind System.ComponentModel; folosind System.Data; folosind System.Drawing; folosind System.Linq; folosind System.Text; folosind System.Threading.Tasks; folosind System.Windows.Forms; folosind System.IO.Ports; namespace WindowsFormsApplication1 (clasa parțială publică Form1: Form (// String portnumber; SerialPort Port1 = nou SerialPort ("COM5", 9600); int s = 0; public Form1 () (InitializeComponent ();) / * private const int CP_NOCLOSE_BUTTON = 0x200; suprascrie protejată CreateParams CreateParams (get (CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp;)) * / private void Form1_Load, Event (object Port semender; .Open ();) // Verificarea echipamentului privat void button1_Click (expeditorul obiectului, EventArgs e) (dacă (Port1.IsOpen == false) (încercați (// programul poate fi modificat informații de la podrugomu.com/node/987) Port1.PortName = label2.Text; Port1.Open (); Port1.Write ("Verificare"); // SerialPort Port2 = nou SerialPort ("COM4", 9600); //Port2.Open (); // label3. Text = Convert.ToString (Port2.ReadByte ()); // verificarea citirilor portului MessageBox.Show ("Procesul de verificare a echipamentului a început", "Informații" mesaj de rezoluție "); richTextBox1.Text = richTextBox1.Text + "\ n" + "Începe procesul de verificare hardware" + "" + DateTime.Now.ToString ("HH: mm"); button1.Enabled = fals; button2.Enabled = fals; button3.Enabled = fals; if (Port1.ReadByte () == 1000) (richTextBox1.Text = richTextBox1.Text + "\ n" + "Sfârșitul procesului de verificare a echipamentului" + "" + DateTime.Now.ToString ("HH: mm"); button1 . Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close (); MessageBox.Show ("Sfârșitul ciclului de verificare a echipamentului" + "" + DateTime.Now.ToString ("HH: mm") richTextBox1.SaveFile ("CheckLOG.rtf");)) catch (richTextBox1.Text = richTextBox1.Text + "\ n" + "Eroare proces de verificare hardware" + "" + DateTime.Now.ToString ("HH: mm ") ; MessageBox.Show ("Portul dispozitivului este selectat incorect. Procesul de verificare nu poate fi pornit", "Warninig"); richTextBox1.SaveFile ("jurnal / Verificare _" + DateTime.Now.ToString ("ddMMyyyy") + ". Rtf") ;))) // Curăţarea echipamentului private void button3_Click (emiţător obiect, EventArgs e) (dacă (Port1.IsOpen == false) (încercaţi (// programul poate fi modificat informaţia de pe podrugomu.com/) node/987 MessageBox.Show ("Ați turnat cu siguranță dezinfectant "," AVERTISMENT ", MessageBoxButtons.OK, MessageBoxIco n.Avertisment); Port1. PortName = label2.Text; Port1.Open (); Port1.Scrie ("Clean"); MessageBox.Show („Procesul de curățare a echipamentelor a început”, „Mesaj informativ”); button1.Enabled = fals; button2.Enabled = fals; button3.Enabled = fals; if (Port1.ReadByte () == 1000) (button1.Enabled = adevărat; button2.Enabled = adevărat; button3.Enabled = adevărat; Port1.Close (); MessageBox.Show ("Sfârșitul ciclului de curățare a echipamentului");) ) catch (MessageBox.Show ("Port dispozitiv nevalid selectat. Procesul de curățare nu poate fi pornit", "Warninig");))) private void contextMenuStrip1_Opening (sender obiect, CancelEventArgs e) () private void cOM1ToolStripMenuItem_Click (expeditor obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM1", 9600); // MessageBox.Show ("portul COM1 este selectat"); label1.Visible = true; label2.Text = "COM1";) private void label2_Click (expeditorul obiectului, EventArgs e) () private void cOM2ToolStripMenuItem_Click (expedător obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM2", 9600); // MessageBox.Show ("Port COM2 selectat"); label1.Visible = true; label2. Text = „COM2”;) private void cOM3ToolStripMenuItem_Click (expedător obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM3", 9600); // MessageBox.Show („Port COM3 selectat”); etichetă1.Vizibil = adevărat; label2.Text = "COM3"; ) private void cOM4ToolStripMenuItem_Click (emițător obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM4", 9600); // MessageBox.Show ("COM4 este selectat"); label1.Visible = true; label2.Text = "COM4 ";) private void cOM5ToolStripMenuItem_Click (expeditor obiect, EventArgs e) (SerialPort Port1 = nou SerialPort (" COM5 ", 9600); // MessageBox.Show (" COM5 este selectat "); label1.Visible = true; label2.Text = „COM5”;) private void cOM6ToolStripMenuItem_Click (expeditor obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM6", 9600); // MessageBox.Show ("portul COM6 este selectat"); label1.Visible = true; label2 . Text = „COM6”;) private void cOM7ToolStripMenuItem_Click (expeditor obiect, EventArgs e) (SerialPort Port1 = nou SerialPort ("COM7", 9600); // MessageBox.Show ("portul COM7 este selectat"); label1.Visible = true; label2.Text = "COM5";) private void programVarki ToolStripMenuItem_Click (expeditor obiect, EventArgs e) () // producerea berii private void button2_Click (expeditor obiect , EventArgs e) (// dacă (Port1.IsOpen == false) // (// încercați // (// programul poate fi modificat cu informații de la podrugomu.com/node/987 //Port1.PortName = label2. Text; //Port1.Open (); comutator (label3.Text) (caz „Infuzie mash selectat”: MessageBox.Show („Procesul de infuzie mash a început”, „Mesaj de informații”); Port1.WriteLine („i”); timer1.Start (); break; case „ Cooper brew selectat ": MessageBox.Show (" Procesul de mashing Cooper a început "," Mesaj informativ "); Port1.WriteLine (" v "); timer3.Start (); break;) button1.Enabled = false; button2.Enabled = fals; button3.Enabled = fals; // button5.Enabled = false; // richTextBox1.Text = Port1.ReadLine () + „\ n”; / * dacă (Port1.ReadLine () == "e \ r") (button1.Enabled = adevărat; button2.Enabled = adevărat; button3.Enabled = adevărat; button5.Enabled = adevărat; * / //Port1.Close ( ); // MessageBox.Show ("Sfârșitul ciclului de preparare"); //) //) // captură // (// MessageBox.Show ("Portul dispozitivului este selectat incorect. Procesul de preparare nu poate fi pornit" , "Warninig "); //) //)) private void button5_Click (expedător obiect, EventArgs e) (Port1.Write (" p "); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false ; cronometru2. Start (); richTextBox1.Text = richTextBox1.Text + „\ n” + „Începeți încălzirea apei în rezervorul de piure la 37 de grade” + „” + DateTime.Now.ToString ("HH: mm"); / * Port1.Open (); //Port1.Open (); //richTextBox1.Text = richTextBox1.Text + "\ n" + Port1.ReadLine (); Port1.WriteLine ("o"); Port1.Close () ; * /) private void exit ToolStripMenuItem_Click (emițător obiect, EventArgs e) (Închidere ();) private void button4_Click (trimitetor obiect, EventArgs e) () instrument privat void infuzie mash StripMenuItem_Click (expedător obiect, EventArgs e) (label3.Text = "Infuzie Mash selectată"; ) private void timer1_Tick (emițător obiect, 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 de minute este 4200 de secunde timer1.Stop (); //timer2.Start (); //Port1.Open (); Port1 .WriteLine ("s"); // Port1.Close (); MessageBox.Show ("mash de infuzie sa terminat, trebuie să filtrați mustul"); button1.Enabled = true; button2.Enabled = true; button3.Enabled = adevărat; button5.Enabled = adevărat; textBox1.Text = ""; textBox2.Text = "";) //Port1.Close ();) private void label4_Click (expedător obiect, EventArgs e) () private void timer2_Tick (obiect expeditor, EventArgs e) (label5 .Text = Port1.ReadLine (); if (Port1.ReadLine () == "s \ r") (timer2.Stop (); MessageBox.Show ("Apa are 37 de grade. Puteți adăuga malț și activa modul de piure "); richTextBox1.Text = richTextBox1.Text +" \ n "+" Sfârșitul procesului de preparare a cuvei de piure. Т = 37 de grade "+" "+ DateTime.Now.ToString (" HH: mm "); button2.Enabled = true;)) private void EmergencyToolStripMenuItem_Click (transmitorul obiectului, EventArgs e) (Port1.WriteLine ("a "); MessageBox.Show („Utilizatorul a oprit în mod anormal întregul sistem”);) vid privat al mashBoil ToolStripMenuItem_Click (expedător obiect, EventArgs e) (Port1.WriteLine (“k”)); MessageBox.Show („Cuva mash este activat. Așteptați 60 de minute") ; richTextBox1.Text = richTextBox1.Text + "\ n" + "Modul de fierbere a oală de piure este activat. Așteptați 60 de minute" + "" + DateTime.Now.ToString ("HH: mm") ;) private void timer3_Tick (emițător obiect, EventArgs e) (șir 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 ("Etapa de zdrobire la 62 de grade "); richTextBox1.Text = richTextBox1.Text +" \ n "+" Pas de piure la 62 de grade x "+" "+ DateTime.Now.ToString (" HH: mm "); ) if (s == 2250) (Port1.WriteLine ("n"); MessageBox.Show ("Etapa de mash la 78 de grade"); richTextBox1.Text = richTextBox1.Text + "\ n" + "Etapa de mash la 78 de grade" "+" "+ DateTime.Now.ToString (" HH: mm ");) if (s == 2700) (Port1.WriteLine (" b "); MessageBox.Show (" Etapa de amestecare s-a terminat, puteți scurge mustul "); richTextBox1.Text = richTextBox1.Text + "\ n" + "Etapa de zdrobire s-a încheiat. Puteți scurge mustul" + "" + DateTime.Now.ToString ("HH: mm");)) private void normal ToolStripMenuItem_Click (emițător obiect, EventArgs e) (label3.Text = „Cooper brew selectat”;)))

Programul comunică cu arduino prin portul com. Singurul lucru, nu pot câștiga în niciun fel, astfel încât la sondajul portului com, programul să nu se blocheze în momentul execuției subrutinei. După sfârșitul subrutinei, programul se blochează, dar până acum acest lucru nu este critic și chiar un anumit plus. Foolproof - pentru a nu apăsa nimic în timpul unei anumite proceduri.

Total, programul poate

- pregatirea echipamentelor pentru gatit;
- bucătar;
- scrieți un simplu jurnal de lucru (foarte util pentru analiza ulterioară a gătitului);
- alegeți un port pentru conectarea la controlerul de control (arduino UNO);
fierbe ibricul și piure cuve.

Când vor veni pompele și electrovalvele, voi automatiza în continuare. Între timp, în fiecare duminică voi adăuga un program de gătit. Vor fi 5 programe în total. Implementarea modului manual își așteaptă și rândul.
Cum se spune,

va urma ...

UPD:

Iată câteva poze cu berăria

Aceasta este o oală de gătit. Am două dintre ele. Un senzor de temperatură DS18B20 într-un cadru etanș este instalat pe lateral.
Multă vreme nu am putut să înțeleg de ce arduino se atârnă periodic până când a dezvăluit nevoia de a împământa totul, mai întâi lovește în carcasă, apoi pe carcasa senzorului și pe arduino.

Tubul de cupru din interior este pentru filtrarea mustului. O poți face mai frumoasă, dar e mai bine să folosești una falsă. Din păcate, chinezii nu se grăbesc să-l trimită.

Este prea devreme să vorbim despre rezultat, așa s-a întâmplat

Vederea generală a cuvei arată astfel.

Conectori obișnuiți folosiți
pentru conectarea senzorilor de temperatură, conectarea la o priză dublă. Este mai convenabil să spălați echipamentul. Deconectat, dus la baie. L-am spalat, am conectat si totul merge.

Totul făcea spume conform programului, prea mult nu s-a scurs. Iar cele mai apropiate planuri sunt să scurgem un lot de bere pentru o fermentare ulterioară, să mai preparăm una. Rețeta, în principiu, poate fi vizualizată în codul din subrutina varka () a arduino.

Electrovalvele au sosit în sfârșit. Procesul de automatizare continuă.

În 2014, am dat peste un videoclip cu un tip care făcea bere din concentrat de must de bere. M-am entuziasmat de ideea de a prepara bere și apoi a început...
Prepararea berii din conserve nu a devenit interesantă pentru mine după a 2-a oară și am decis să trec la toate cerealele. Odată am preparat bere pe gaz și mi-am dat seama că aceasta nu era metoda mea. Am decis să fac o automatizare. Serile au devenit mai interesante. M-am implicat atât de mult în programare încât am programat până la 2-3 dimineața. Erau necesare teste din lumea reală. În pubele am dezgropat un cazan și o sticlă fațetată.

Și cu asta am ajuns

Și acum vă voi spune cum să faceți o astfel de automatizare.
În primul rând, avem nevoie de următoarele detalii. Le-am cumparat din China.
ssd1289 sau ili9341.
Releu cu stare solidă pentru a controla elementul de încălzire (sau circuitul pornit)
Releu cu stare solidă pentru controlul pompei (pentru pompă AC) sau (DC)
Senzor termic sau sau
Alimentare 7,5-9V 1A. de exemplu
Conectori pentru conectarea unui senzor de temperatură și a unei pompe și
(Mai mult )
(buzzer)
Rezistor de 4,7 k ohmi

Circuit de joasă tensiune

Circuitul de alimentare. Ai grija. Dacă nu ești sigur, ai încredere în profesioniști.

Luăm secțiunea transversală a firelor în funcție de puterea totală a pompei și a elementului de încălzire. Pentru un element de încălzire în stare solidă, este necesar un radiator. nu este încălzit slab. Le punem totul în cutii. Completați firmware-ul, configurați și preparați bere.

(instrucțiuni în interior)

Dar funcțiile de bază nu au fost suficiente pentru mine. Și m-am hotărât să stric wifi-ul. Am cumpărat modulul ESP8266 de pe aliexpress. In acelasi timp am comandat modulul. băieți de pe forum, ei bine, foarte mult au cerut să-l implementeze în proiect (se poate și fără el). Și l-am conectat după următoarea schemă

Pentru a alimenta modulul wifi, avem nevoie de o sursă de alimentare de 5V. Nu poți folosi arduino. Puteți utiliza o sursă de alimentare separată sau puteți converti 9V în 5V. Pentru a face acest lucru, puteți asambla un circuit simplu cu un stabilizator de tensiune sau puteți cumpăra unul gata făcut de la chinezi. De exemplu (există o grămadă de alte opțiuni).

Următorul pas este să flashăm modulul nostru cu firmware-ul NodeMCU. Descărcarea. Lansăm. Apăsați Start și așteptați sfârșitul încărcării firmware-ului. Ai cerut-o? Asta este grozav. Acum încărcăm scriptul. Pentru asta avem nevoie. Există, desigur, și alte programe precum. Dar nu i-am putut face să lucreze cu modulul meu. În ESPlorer, creați un nou fișier init.lua cu următorul conținut:

Schimbați numele rețelei wifi și parola în propriile noastre. Setați viteza la 9600. Apăsați butonul „Deschidere” (dacă nu se conectează, apăsarea butonului de resetare de pe modul poate ajuta). Și faceți clic pe „Salvați în ESP”. După încărcarea scriptului, modulul ar trebui să se conecteze la router. Acest lucru poate fi verificat intrând în router și uitându-se la clienții DHCP. Dacă modulul tău nu este vizibil acolo, atunci ceva a mers prost.

Interfața web conține următoarele funcții.
1. Monitorizarea proceselor. Puteți monitoriza temperatura, starea pompei, indicatorii de piure și de gătit. Interfața web este echipată cu un dispozitiv de semnalizare sonoră.
2. Încărcați rețetele în memoria controlerului și stick-ul USB.
3. Construirea unui program global pentru întregul gătit.






Conectați-vă la interfața web

Top articole similare