Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • Ngrohja e një shtëpie të vendit në arduino me transmetim të të dhënave në internet. Ne bëjmë automatizimin për një fabrikë birre në një bord

Ngrohja e një shtëpie të vendit në arduino me transmetim të të dhënave në internet. Ne bëjmë automatizimin për një fabrikë birre në një bord

Automatizimi në shoqërinë moderne është një masë e nevojshme, sepse në epokën dixhitale është jashtëzakonisht e rëndësishme të përjashtohet faktori njerëzor në industri të ndryshme për të standardizuar dhe përmirësuar cilësinë e produktit. Ka edhe zona ku një person thjesht nuk është në gjendje të bëjë atë që robotët janë të aftë, për shembull, prodhimin e nano-materialeve dhe mikrobordave.

Sidoqoftë, automatizimi ndihmon jo vetëm në prodhim, por mund të jetë i dobishëm edhe për një person mesatar. Për shembull, automatizimi për një fabrikë birre arduino mund të lehtësojë shumë procesin e prodhimit të një produkti. Le të kuptojmë se si mund të ndihmojë korrigjimi automatik për arduino dhe gjëra të tjera dhe të shqyrtojmë shembuj.

Përparësitë kryesore të sistemeve të automatizuara të bazuara në mikrokontrolluesin Arduino

Askush nuk ju ndalon të bashkoni tabelën tuaj dhe ta programoni vetë duke përdorur gjuhë të nivelit të ulët. Sidoqoftë, automatizimi në arduino dhe mikrokontrolluesit e gatshëm do ta lehtësojë shumë të gjithë procesin dhe do të kursejë kohë. Në fund të fundit, është shumë më e lehtë të blini një produkt të gatshëm me një sërë bibliotekash dhe ta përshtatni atë me nevojat tuaja. Dhe automatizimi i disponueshëm në arduino mega 2560 mund të jetë i dobishëm në shumë fusha të jetës, nga çelsat e zërit për një shtëpi inteligjente deri te mbylljet elektrike me një detektor lëvizjeje. Përparësitë kryesore për të cilat është i famshëm automatizimi Arduino janë:

  1. Pragu i ulët i hyrjes. Nuk ka nevojë të merrni një arsim inxhinierik, thjesht shikoni disa video trajnimi dhe keni një bazë në programim.
  2. Një numër i madh bibliotekash tashmë të përgatitura. Arduino përdoret në CIS nga shumë amatorë të robotikës, aq sa prodhimi i pajisjeve të ndryshme elektronike bëhet hobi i tyre. Prandaj, komuniteti i përdoruesve është jashtëzakonisht aktiv në rrjet, poston një numër të madh shabllonesh dhe është i gatshëm t'ju ndihmojë në zgjidhjen e çdo problemi. Cilësia e bibliotekave, për shkak të pragut të ulët të hyrjes, vuan, por askush nuk e ndalon krijimin tuaj, mjafton të studioni semantikën e gjuhës C ++ ose të përdorni përkthyes të gatshëm.
  3. Një numër i madh i pajisjeve periferike. Nuk ka rëndësi nëse keni nevojë për një automatizim serë Arduino apo një sensor drite, do të gjeni çdo modul, deri në sensorë tingulli dhe njohës të zërit. Po, disa nga bordet kushtojnë shumë para, por gjithmonë mund të gjeni analoge të lira, për shembull, modulin wi-fi nga prodhuesit e palëve të treta esp8269, i cili është 10 herë më i lirë se ai zyrtar.
  4. Shumë informacion. Çdo problem që hasni tashmë është përjetuar nga dikush dhe me shumë mundësi do të gjeni një zgjidhje për të në Google. Ekziston edhe një literaturë e plotë me të cilën mund të njiheni.

Sidoqoftë, mos mendoni se Arduino nuk ka të meta. Bordi është i famshëm për performancën e tij të ulët. Në detyra veçanërisht komplekse dhe me një sasi të madhe kodi, koha e përgjigjes mund të arrijë 1 sekondë, gjë që është e papranueshme për mikrokontrolluesit. Memoria flash e shumicës së moduleve nuk kalon 1 MB, e cila nuk mjafton për krijimin e rrjeteve nervore ose përdorimin e skedarëve mediatikë. Sigurisht, mund të lidhni një kartë memorie ndihmëse, por kjo gjithashtu rrit kohën e përgjigjes, merr burime shtesë për furnizimin e saj me energji elektrike dhe bëhet në një mënyrë gjysmë artizanale.

Sidoqoftë, sistemet e thjeshta të automatizuara, për shembull, për prodhimin e birrës ose serrave, nuk kërkojnë as disa nga burimet që mund të lëshojë pagesa. Prandaj, për shumicën e përdoruesve, këto mangësi do të duken të pakuptimta. Nëse vendosni të montoni printerin tuaj 3-D ose një dizajn më kompleks, duhet t'i hidhni një vështrim më të afërt analogëve. Por pragu i hyrjes për konkurrentët e Arduino do të jetë shumë më i lartë.

Një shembull i automatizimit të procesit bazuar në mk Arduino

Shembulli më i thjeshtë i automatizimit të procesit mund të jetë një serë në një arduino. Për të krijuar çdo sistem, ia vlen të përshkruani qartë detyrat që duhet të kryejë. Duke përdorur një serë si shembull, kjo do të ishte:

  1. Krijimi i një klime të veçantë.
  2. Ndezja dhe fikja në kohë e ndriçimit.
  3. Lotim në kohë i bimëve dhe mbajtja e lagështisë së ajrit në të njëjtin nivel.

Bazuar në këto detyra, mund të vini re menjëherë se çfarë duhet të blini për bordin kryesor:

  1. Sensor temperature. Ai do të sigurohet që ajri të mos nxehet ose ftohet, duke qenë brenda kufijve të përcaktuar nga programi. Në rast ndryshimi të temperaturës, bordi do të ndezë kondicionerin ose bateritë elektronike.
  2. Sensori i dritës. Sigurisht, ju mund të kufizoni veten në një zgjidhje softuerike dhe të blini llamba të shtrenjta me imitim të dritës së ditës. Por nëse doni të krijoni një serë të plotë, atëherë do të jetë shumë më i përshtatshëm të instaloni një tavan automatik, i cili do të kontrollohet nga Arduino.
  3. Sensori i lagështisë. Këtu gjithçka është e njëjtë si me temperaturën, sipas skenarit të përshkruar, bordi do të përfshijë spërkatës dhe lagështues, nëse është e nevojshme.

Kur të keni blerë të gjitha modulet e nevojshme, mbetet vetëm t'i programoni ato. Në fund të fundit, pa një kod, këto janë vetëm copa hekuri, të paaftë për asgjë.

Programimi MK Arduino për automatizimin e proceseve. Shembull

Ashtu si në paragrafin e mëparshëm, është e rëndësishme që programimi ta ndajë detyrën në nën-artikuj të veçantë dhe ta kryejë atë në mënyrë sekuenciale. Programimi Arduino zhvillohet falë komandave në ndërfaqen AT dhe AT +, duke përdorur bibliotekat e përgatitura. Prandaj, të gjitha skriptet shkruhen në një mjedis të veçantë në gjuhën C ++ dhe, para se të bëni ndonjë gjë, kushtoni kohë studimit të semantikës së saj. Përveç kryerjes së funksioneve të thjeshta, sistemi është gjithashtu i aftë të ruajë skriptet në memorie flash, gjë që na nevojitet në këtë shembull.

Mos harroni se informacioni nga secili sensor vjen në kohë reale dhe si variabla, megjithatë, mund të kufizoni kohën e përgjigjes, pasi nuk ka nevojë të shpenzoni burime dhe të matni çdo parametër gjatë gjithë kohës. Në përputhje me rrethanat, vendosni kohën e ndezjes dhe fikjes për secilin sensor, ose caktoni kohën e përgjigjes për një periudhë të caktuar.

Pse më duhej automatizimi?

Automatizimi nevojitet për të lehtësuar procesin, sepse vetë ky kontrollues do të monitorojë temperaturën, do ta mbajë atë dhe do ta ngrejë atë në pauzën e kërkuar të temperaturës. Gjithashtu sinjalizoni me një sinjal zanor për ndërhyrjen e nevojshme, për shembull, duhet të mbushni maltin ose të bëni një test jodi.

Vendosa të bëj automatizimin tim nga një projekt i gatshëm. Punon në arduino, me të janë të lidhur një sensor i temperaturës, dy stafetë, një ekran dhe butona. Releja e parë kontrollon elementin e ngrohjes, stafeta e dytë kontrollon pompën. Pompa e puresë është shumë e përshtatshme sepse nuk ka nevojë të përzieni purenë për të gjithë procesin e purejes (për më shumë detaje se si të krijoni birrën, ju rekomandoj ta lexoni në ato të mëparshmet)

Unë mblodha automatizimin e parë duke përdorur module:

- Arduino mini
- Blloku i dy releve 15A
- Ekrani 2004
- Sensor temperature
- 4 butona
- Njësia e furnizimit me energji 5 volt
Komoditeti i montimit modular qëndron vetëm në faktin se nuk është e vështirë të merren të gjitha pjesët dhe pothuajse asgjë nuk nevojitet për bashkim. Por pengesa më e madhe është numri i madh i telave, dhe një stafetë e lirë kineze ndërhyri në ekran, kështu që stafeta mekanike duhej të zëvendësohej me një stafetë të ngurtë.

Me kalimin e kohës, arrita në përfundimin se më duhet të mbledh automatizimin tim në një çip me memorie 64 kb (arduino mini ka vetëm 32 kb) në një tabelë. Nuk gjeta një zgjidhje të gatshme, kështu që fillova të krijoj vetë një qark dhe më pas një tabelë për zanatin tim.

Skema:

Kam zhvilluar skemën dhe kam vizatuar, si të thuash, në gju dhe për veten time, kështu që mund të ketë disa mangësi, por skema funksionon plotësisht:

Paguaj:

Unë vizatova skemën, pastaj mbetet të vizatoj tabelën, së pari vizatova duke përdorur programin Sprint-Layout 6, shumë i përshtatshëm, por funksionalitet jo i mjaftueshëm në të, kështu që vendosa ta lë në drejtim të programit DipTrace dhe kjo është ajo që kam marrë:

Ju mund të shkarkoni burimet.
Siç mund ta shihni, unë e quajta fabrikën time të birrës QRBeer dhe ky është tashmë versioni 0.5 ...

Bordi është gati, mbetet për t'u bërë disi. Për këtë vendosa të përdor. Pse pikërisht ata, dhe jo LUT? Sapo vendosa të provoj një teknologji kaq të re për veten time, tashmë e kam provuar LUT, e ndjeva, si të thuash, nuk do të them që më pëlqeu ...

Fotorezist:

Për të prodhuar bordet e qarkut të printuar duke përdorur një fotorezist, do t'ju duhet:
- Film për printerin
-
- Llamba ultraviolet
- Hiri i sodës

llambë ultravjollcë

Për të filluar, unë do të ndaj informacione se si e kam bërë këtë Llambë UV... Në fillim doja të përdorja një llambë të gatshme dhe më pas vendosa ta montoj në gjashtë LED 3W:
dhe bleu të njëjtën gjë në Tao:


I ngjita LED-të në radiator, megjithëse ishte e mundur t'i montoja në një PCB, dyshoj se ato do të ishin mbinxehur.
Kjo është ajo që bëra:


Prodhimi i bordit

1. Pra, unë përgatita shabllonin, mbetet vetëm për ta printuar në film. Siç shkrova më lart, keni nevojë për një film për një printer, kam provuar film si për printer lazer ashtu edhe për një printer me bojë, opsioni më i mirë merret vetëm në film inkjet. Ju duhet të printoni në imazh negativ dhe në pasqyrë:

E laminova menjëherë shabllonin në mënyrë që gjurmët e gishtërinjve dhe mbeturinat të mund të laheshin lehtësisht.
2. Tjetra, ju duhet të rërësoni bordin tonë të ardhshëm (tekstil me fije qelqi të falsifikuar). Një sfungjer i zakonshëm pak i lagur ose sfungjer melamine është i përshtatshëm për këtë:


3. Pas kësaj procedure, bakri ende duhet të lyhet me aceton:


Siç mund ta shihni në foton time, unë u hoqa nga yndyra me një pecetë të zakonshme dhe derdha aceton në një shishe peroksidi, kështu që është më i përshtatshëm për të marrë ...
4. Hapi tjetër është të prisni pak me një diferencë fotorezistin për tabelën tuaj të ardhshme dhe të hiqni me kujdes filmin e sipërm mbrojtës në mënyrë që të mos e dëmtoni atë. Nëse fotorezisti është shtëpiak, duhet të hiqni anën mat, nëse është kinez, atëherë nuk ka asnjë ndryshim ...
5. Tjetra, ne ngjisim fotorezistin në tekstolit në mënyrë që flluskat e ajrit të mos shfaqen nën fotorezist, përndryshe gjurmët nuk do të shfaqen në vende të tilla, ne e presim tepricën ...
Procesi i ngjitjes së një fotorezisti është i ngjashëm me ngjitjen e një mbrojtësi ekrani në një telefon.


6. Kur fotorezisti është ngjitur, tekstoliti me të duhet të kalohet 2-3 herë në laminator ose të përdoret një hekur i ngrohtë dhe ta hekuroset përmes një fletë letre të palosur dy herë:


Gjëja kryesore nuk është të mbinxehni fotorezistin, përndryshe do të dalë kështu:


Nëse ju kap një bllokim kur ngjitni fotorezistin, atëherë është më mirë ta hiqni atë (të lani ose gërvishtni) dhe ta ringjisni, përndryshe pas gdhendjes së tabelës do të jetë e trishtuar ... Nuk do ta heq këtë fotorezist. , Unë do të tregoj rezultatin përfundimtar.
7. Vendosim një shabllon në tekstolitin me një fotorezist dhe e shtypim me xham (e mora nga një kornizë e vjetër fotografie) dhe vendosim një ngarkesë në xhami:


8. Ne ndriçojmë fotorezistin duke përdorur një llambë UV. Llamba ime zgjat rreth 2 minuta:


Siç mund ta shihni, fotorezisti që u ndez ndryshoi ngjyrën nga blu e hapur në blu të errët, dhe fotorezisti i ekspozuar është shumë i brishtë.
9. Hiqni gotën dhe shabllonin. Fotorezisti i tepërt mund (opsionale) të shkurtohet dhe të ndahet me kujdes me piskatore:


10. Hapi tjetër është larja e fotorezistit të pazhvilluar me alkali, për këtë marrim 2 gota ujë dhe një lugë gjelle sode, i trazojmë mirë. Ne heqim shtresën e sipërme mbrojtëse nga fotorezisti dhe e ulim tekstolitin tonë në një zgjidhje alkaline.


11. Marrim një furçë dhe tre fotorezistë në alkali, gradualisht fotorezisti i pazhvilluar lahet:


Alkali nuk mund të derdhet, por të lihet në tabelën tjetër ose të lahet fotorezisti pas gdhendjes, por më shumë për këtë më vonë ...
12. Tabela e gravurës:
Ka dy metoda më të arritshme: gdhendje me klorur hekuri ose peroksid + acid citrik dhe kripë. Nuk do të shkruaj për klorurin e hekurit, por me siguri do ta përshkruaj me peroksid:
- 100 ml. peroksid hidrogjeni 3% - shitet në një farmaci për 7-12 rubla
- 30 gr. acid citrik (i disponueshëm në çdo dyqan ushqimor)
- 1 lugë gjelle. një lugë kripë (e përshtatshme edhe e imët edhe guri)


E gjithë kjo përzihet në një enë dhe një tabelë me një fotorezist të gatshëm është zhytur atje, pas një kohe shfaqen flluska në tabelë:


Dhe pas një kohe, "bakri i zhveshur" është gdhendur plotësisht:


Nga rruga, nëse gdhendja në një temperaturë më të lartë, për shembull, afër një llambë inkandeshente ose në një banjë uji, gravurja do të ulet me tre, gjëja kryesore është të mos e teproni, përndryshe teprica do të gdhendet ...
13. Është më e përshtatshme të hiqni fotorezistin në të njëjtin alkali, në të cilin është larë fotorezisti i pagdhendur, pas rreth 20 minutash ai do të zhduket vetë dhe nuk keni nevojë të fërkoni asgjë ...

Dhe këtu janë "jambet" e mia:


Edhe pse jo domethënëse, por megjithatë, pavëmendja është fajtore për gjithçka, nuk vuri re flluska ajri nën fotorezistin ose mbinxehje ...

Bordi i mëposhtëm doli të ishte "i pastër":


14. Më pas, ne shpojmë vrima dhe rrafshojmë tabelën:


15. Ne bashkojmë të gjitha detajet dhe lajmë fluksin e tepërt:


Kam bashkuar komponentët SMD me një stacion saldimi kinez infra të kuqe, shumë i përshtatshëm:

Kjo është e gjitha, gjëja më e vështirë ka mbaruar, mbetet të telefononi gjurmët për një qark të shkurtër dhe të filloni të programoni çipin.

Programimi Atmega644

1. Për të filluar programimin, duhet të ngarkoni ngarkuesin në të. Kjo nuk është e vështirë të bëhet me Arduino UNO, por së pari ju duhet të shkarkoni dhe instaloni programin.
2. Hapi tjetër është të shtoni ose merrni një montim të gatshëm në programin e instaluar:
3. Plotësoni skicën UNO ArduinoISP:

4. Dhe lidhni bordin tonë me UNO:


Sipas udhëzimeve të skicës:
// emri i pinit // rivendosja e skllav: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Rezulton sipas skemës sime si kjo:

5. Më pas, instaloni bordin tonë në cilësimet dhe ngarkoni ngarkuesin:




Nëse gjithçka shkoi mirë, do të shohim mesazhin: "Regjistrimi i ngarkuesit përfundoi"
Kjo e plotëson ngarkuesin "një ngarkim, mund të lidhni ekranin, butonat, sensorin e temperaturës dhe ta plotësoni. Unë jam student i një universiteti teknik. Një herë, ulur në një kafene me një mik që studionte atëherë në një universitet mjekësor, vendosëm të hapnim një lokal. Kishte shumë ide që, në parim, meritonin një vëmendje.Për shembull, një pistë vallëzimi, e cila ndryshon këndin e prirjes në varësi të stilit të muzikës... Por, së bashku me gjithë shumëllojshmërinë i ideve, kishte edhe një tjetër -

... por a nuk duhet ta krijojmë birrën tonë?

Pas nja dy javësh, bëra birrë duke përdorur përbërës nga fabrika ku punonte miku i babait tim. Por shumë procese teknologjike u ndërprenë, kështu që në vend të birrës doli diçka me një erë jo shumë të këndshme.

Pas disa vitesh, vendosa ta përsëris procesin, duke e automatizuar pak duke përdorur Arduino UNO. Dhe kështu ndodhi.

Për të filluar, çfarë duhet të bëjë i gjithë instalimi.

  • Kontrolloni veten - nëse gjithçka funksionon, nëse gjithçka është e lidhur;
  • Pastroni veten;
  • Përgatituni për procesin e birrës;
  • Krijoni birrën në një mënyrë gjysmë automatike;
  • Krijo birrën me dorë;
  • Krijo birrën në modalitetin automatik (si një makinë larëse që lan rrobat).

Pika e parë nuk është zbatuar për momentin. Deri më tani as që kam menduar si ta zbatoj.
Edhe i dyti nuk eshte i implementuar por do ta perfundoj ne nje te ardhme te afert, me ngelet vetem te presim qe pompat te behen nga ebay.
Pika e tretë është mjaft e thjeshtë.

Përgatitja për procesin e birrës

Një mesazh nga sistemi që është e nevojshme të derdhet uji në kazan -> programi pret që të shtypet tasti OK -> programi i dërgon arduino një komandë për të ndezur relein e gjendjes së ngurtë -> stafetën e gjendjes së ngurtë ndez tenn një kilovat në tenxhere, e çon në temperaturën 37 gradë, i dërgon programit një komandë që gjithçka është gati për gatim. Ruan një temperaturë prej 37 gradë.

Do të doja të bëja një kontroll për praninë e ujit, por sensori ende pret largimin e tij nga "vëllezërit kinezë".

Pirja e birrës në modalitetin gjysmë automatik

Në parim, një procedurë e thjeshtë:

Shtypni butonin "Ngrohja" në programin e kontrollit, pjesa tjetër e butonave të kontrollit janë joaktive;
- Pas ngrohjes, programi shfaq mesazhin "Gjithçka është gati, ju mund të gatuani";
- Plotësoni përbërësit, zgjidhni programin e birrës - butoni "Brewing" bëhet aktiv;
- Shtypni butonin "Brewing beer", procesi ka filluar;
- Më tej, sistemi do të njoftojë periodikisht me mesazhe informative se çfarë duhet të bëjë dhe kur.

Ju duhet të ndiqni udhëzimet.

Pirja manuale e birrës

Ky proces ju lejon të vendosni parametrat e gatimit, t'i ndryshoni ato në ciklin e gatimit. Nuk e kam arritur akoma.

Gatim automatik

Kjo është një ëndërr. Aktualisht nuk ka komponentë për t'u zbatuar. Nuk ka mjaft pompa, sensorë të nivelit të ujit. Nuk e di se si të matet graviteti i mushtit, sa alkool ka në një birrë të re dhe shumë më tepër. Por unë nuk dëshpërohem dhe do të automatizoj gradualisht derisa pirja e birrës të duket kështu:

I vendosa përbërësit në tabakatë përkatëse, shtypa butonin dhe ... pas një muaji e gjysmë mora birrën e përfunduar.

Kjo ka të bëjë shkurtimisht me procesin, por tani le të kalojmë në anën teknike.

Ana teknike e procesit

Siç u përmend më lart, arduino UNO vepron si një mikrokontrollues kontrolli. 2 stafetë janë të lidhur me të, 2
Termometri dixhital DS18B20.

Arduino komunikon me programin kryesor nëpërmjet portës com. Sepse Unë nuk kam një mburojë në kohë reale për arduino, më është dashur të marr kohëmatës nga vizuale c #. Unë nuk kam përvojë në shkrimin e programeve, kështu që nëse papritmas dikush ka ide, kritika - postë për nder. Kritikoni, derbante, si të thuash, që befas nuk ju pëlqen.

Këtu është teksti i programit në arduino

#përfshi OneWire ds (8); // sensorët e temperaturës janë në pinin 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; // aktivizo ten int reley6 = 6; // dhjetë në kazan pure float temp1; float temp2; konfigurimi i zbrazët (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);) qark i pavlefshëm (i pavlefshëm) (nëse (Seriali. i disponueshëm ()) (çelës (Serial.lexo ()) (rasti "i": infuz (); pushim; rasti "p": progrev (); pushim; rasti "a": avariya (); pushim; rasti "v": varka (); thyer; rasti "t": temperatura (); thyer;))) void varka () (dixhitalShkruaj (reley6, LARTË); ndërsa (Serial.lexo ()! = "m") (temperatura (); nëse (temperatura 1> = 52.00) dixhitale Shkruani (reley6, LOW); tjetër dixhitale Shkruani (reley6, LARTË);) ndërsa (Serial.lexoni ()! = "n") (// dixhital Shkruani (reley6, LARTË); temperatura (); nëse (temp1> = 62.00) dixhitalWrite (reley6, LOW); tjetër digitalWrite (reley6, HIGH);) ndërsa (Serial.lexo ()! = "b") (// dixhital Shkruani (reley6, LARTË); temperatura (); nëse (temp1> = 75.00) digitalWrite (reley6, LOW); tjetër digitalWrite (reley6, LARTË); ) DigitalWrite (reley6, LOW); ndërsa (Seriali.lexo ()! = "c") vonesë (1000); ndërsa (Serial.lexo ()! = "x") (Dixhital Shkruani (reley5, LARTË); temperatura ();) DigitalWrite (reley5, LOW); ) void infuz () (// temperatura (); //Serial.disponohet (); ndërsa (Serial.lexo ()! = "s") (// çaktivizoni ciklin e përgatitjes së infuzionit nëse (temperatura<=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) // vonesë (1000); Serial.println ("s"); ) void avariya () (Dixhital Shkrimi (reley1, LOW); Shkrimi dixhital (reley2, LOW); Shkrimi dixhital (reley3, LOW); Shkrimi dixhital (reley4, LOW); Shkrimi dixhital (reley5, LOW);) temperatura e zbrazët () (byte i; bajt i pranishëm = 0; të dhëna bajte; shtim bajt; zator bajt = (40, 23, 218, 43, 6, 0, 0, 22); // adresa e sensorit të temperaturës në bllokimin e bajtit varilka = (40, 255, 240, 115 , 59, 4, 0, 234); // adresa e sensorit të temperaturës në enën e prodhimit të notimit celsius; // temperatura notuese; gde boolean; nëse (! Ds.search (addr))) (//Serial. println ("Nuk ka më adresa . "); //Serial.println (); ds.reset_search (); vonesë (250); // kthim;) nëse (OneWire :: crc8 (addr, 7)! = Adr) ( Serial.println (" CRC nuk është e vlefshme! "); // kthim;) ds.reset (); ds.select (addr); ds.write (0x44, 1); // nis konvertimin, me ndezjen e parazitit në vonesa e përfundimit (840) ; // ndoshta 750 ms është e mjaftueshme, ndoshta jo // mund të bëjmë një ds.depower () këtu, por rivendosja do të kujdeset për të.present = ds.reset (); ds.select ( addr); ds.write (0xBE); // Lexoni Scratchpad për (d.m.th = 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); } }

Gjithçka do të ishte mirë, por për disa arsye sensori i tretë tregon gjithmonë 85 gradë. Nuk mund të them ende pse. Dhe është e nevojshme për automatizim të mëtejshëm - ruajtjen e temperaturës në frigorifer.

Unë do të përshkruaj shkurtimisht se çfarë bën programi.

Programi është i ndarë në nënprograme, secila prej të cilave aktivizohet nëse një simbol i caktuar shfaqet në portën e komunikimit. Për shembull, nëse shkronja "p" godet portin, atëherë aktivizohet modaliteti "Ngrohja". Ose, nëse "a" - atëherë thirret nënprogrami avariya () dhe gjithçka fiket. Kur thirret nënprogrami i temperaturës (), të dhënat shkruhen në variablat globale temp1, temp2. Nga atje ata arrijnë në nënprogramet e kërkuara.

Në të ardhmen, do të ketë nënprograme për gatimin e varieteteve të ndryshme dhe madje edhe dritën e hënës.

Tani për programin kryesor të kontrollit.

Programi kryesor i kontrollit

Është shkruar në studion vizuale c #.

Kodi burimor i programit:

Kodi burimor i programit

duke përdorur Sistemin; duke përdorur System.Collections.Generic; duke përdorur System.ComponentModel; duke përdorur System.Data; duke përdorur System.Drawing; duke përdorur System.Linq; duke përdorur System.Text; duke përdorur System.Threading.Tasks; duke përdorur System.Windows.Forms; duke përdorur System.IO.Ports; hapësira e emrit WindowsFormsApplication1 (klasa publike e pjesshme Form1: Form (// Numri i portës së vargut; Porta Seriale1 = SerialPort i ri ("COM5", 9600); int s = 0; Form1 publik () (InitializeComponent ();) / * konstancë private int = CP_NOCLOSE_BUTTON 0x200; zëvendësim i mbrojtur CreateParams CreateParams (merr (CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; kthe myCp;)) * / privat void Form1_Load; .Open ();) // Kontrollimi i butonit privat të zbrazëtisë së pajisjes1_Klikoni (dërguesi i objektit, EventArgs e) (nëse (Port1.IsOpen == false) (provoni (// programi mund të modifikohet informacioni nga podrugomu.com/node/987 Port1.PortName = label2.Text; Port1.Open (); Port1.Write ("Kontrollo"); // SerialPort Port2 = SerialPort i ri ("COM4", 9600); //Port2.Open (); // label3. Text = Convert.ToString (Port2.ReadByte ()); // kontrollimi i leximeve të portit MessageBox.Show ("Procesi i kontrollit të pajisjeve ka filluar", "Info mesazh rezolucioni "); richTextBox1.Text = richTextBox1.Text + "\ n" + "Filloni procesin e kontrollit të harduerit" + "" + DateTime.Now.ToString ("HH: mm"); butoni1.Enabled = false; butoni2.Enabled = false; butoni3.Enabled = false; if (Port1.ReadByte () == 1000) (richTextBox1.Text = richTextBox1.Text + "\ n" + "Fundi i procesit të verifikimit të pajisjes" + "" + DateTime.Now.ToString ("HH: mm"); butoni1 . E aktivizuar = e vërtetë; butoni 2. i aktivizuar = i vërtetë; butoni 3. i aktivizuar = i vërtetë; Port1. Mbylle (); Kutia e mesazhit. Shfaq ("Përfundimi i ciklit të kontrollit të pajisjeve" + "" + DataTime. Tani.ToString ("HH: mm") ); richTextBox1.SaveFile ("CheckLOG.rtf");)) kapja (richTextBox1.Text = richTextBox1.Text + "\ n" + "Gabim i procesit të kontrollit të harduerit" + "" + DateTime.Now.ToString ("HH: mm ") ; MessageBox.Show ("Porta e pajisjes është zgjedhur gabimisht. Procesi i kontrollit nuk mund të fillohet", "Kujdes"); richTextBox1.SaveFile ("log / Kontrollo _" + DateTime.Now.ToString ("ddMMyyyy") + ". Rtf") ;))) // Pastrimi i butonit privat të zbrazëtisë së pajisjes3_Klikoni (dërguesi i objektit, EventArgs e) (nëse (Port1.IsOpen == false) (provoni (// programi mund të modifikohet informacioni nga podrugomu.com/ node/987 MessageBox.Show (" Ke derdhur me siguri dezinfektues "," PARALAJMËRIM ", MessageBoxButtons.OK, MessageBoxIco n.Paralajmërim); Porta 1. PortEmri = label2.Tekst; Porta 1.Open (); Port1.Write ("Clean"); MessageBox.Show ("Procesi i pastrimit të pajisjeve filloi", "Mesazhi informacioni"); butoni1.Enabled = false; butoni2.Enabled = false; butoni3.Enabled = false; nëse (Port1.ReadByte () == 1000) (button1.Enabled = e vërtetë; butoni2.Enabled = e vërtetë; button3.Enabled = e vërtetë; Port1.Close (); MessageBox.Show ("Fundi i ciklit të pastrimit të pajisjeve");) ) catch (MessageBox.Show ("U zgjodh porta e pavlefshme e pajisjes. Procesi i pastrimit nuk mund të fillohet", "Paralajmërim");))) kontekst privat i pavlefshëmMenuStrip1_Opening (dërguesi i objektit, CancelEventArgs e) () i pavlefshëm privat coOM1ToolStripMenuItem_Click (objekt dërgues) (SerialPort1 = SerialPort i ri ("COM1", 9600); // MessageBox.Show ("porta COM1 është zgjedhur"); label1.Visible = e vërtetë; label2.Text = "COM1";) private void label2_Click (dërguesi i objektit, EventArgs e) () void privat com2ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort1 = SerialPort i ri ("COM2", 9600); // MessageBox.Show ("porta COM2 e zgjedhur"); label1.E dukshme = e vërtetë; etiketa2. Tekst = "COM2";) zbrazëti private com3ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort Port1 = SerialPort i ri ("COM3", 9600); // MessageBox.Show ("porta COM3 e zgjedhur"); etiketa1.E dukshme = e vërtetë; label2.Text = "COM3"; ) private void com4ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort1 = SerialPort i ri ("COM4", 9600); // MessageBox.Show ("COM4 është zgjedhur"); label1.Visible = e vërtetë; label2.Text = "COM4 ";) void privat com5ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort1 = SerialPort i ri (" COM5 ", 9600); // MessageBox.Show (" COM5 është zgjedhur "); label1.Visible = true; label2.Text = "COM5";) void privat com6ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort1 = SerialPort i ri ("COM6", 9600); // MessageBox.Show ("porta COM6 është zgjedhur"); label1.E dukshme = e vërtetë; label2 Tekst = "COM6";) void privat com7ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (SerialPort1 = SerialPort i ri ("COM7", 9600); // MessageBox.Show ("porta COM7 është zgjedhur"); label1.E dukshme = e vërtetë; label2.Text = "COM5";) program privat i zbrazëtVarki ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) () // Bërja e birrës private buton i zbrazët2_Klikoni (dërguesi i objektit , EventArgs e) (// nëse (Port1.IsOpen == false) // (// provo // (// programi mund të modifikohet me informacion nga podrugomu.com/node/987 //Port1.PortName = label2. Teksti; //Port1.Open (); switch (label3.Text) (rasti "Infuzion mash zgjedhur": MessageBox.Show ("Procesi i përzierjes së infuzionit filloi", "Mesazhi informacioni"); Port1.WriteLine ("i"); timer1.Start (); pushim; rast " Cooper brew zgjedhur ": MessageBox.Show ("Procesi i bërjes së Cooper filloi "," Mesazh informacioni "); Port1.WriteLine (" v"); timer3.Start (); break;) button1.Enabled = false; button2.Enabled = false; butoni3.Enabled = false; // button5.Enabled = false; // richTextBox1.Text = Port1.ReadLine () + "\ n"; / * nëse (Port1.ReadLine () == "e \ r") (button1.Enabled = e vërtetë; button2.Enabled = e vërtetë; button3.Enabled = e vërtetë; button5.Enabled = e vërtetë; * / //Port1.Close ( ); // MessageBox.Show ("Fundi i ciklit të prodhimit"); //) //) // kap // (// MessageBox.Show ("Porta e pajisjes është zgjedhur gabimisht. Procesi i prodhimit nuk mund të fillojë" , "Paralajmërim "); //) //)) butoni privat i zbrazët5_Klikoni (dërguesi i objektit, EventArgs e) (Port1. Shkruani (" p "); butoni1.Enabled = false; button2.Enabled = false; button3.Enabled = false ; timer2. Start (); richTextBox1.Text = richTextBox1.Text + "\ n" + "Filloni ngrohjen e ujit në mash tun në 37 gradë" + "" + DateTime.Now.ToString ("HH: mm"); / * Port1.Open (); //Port1.Open (); //richTextBox1.Text = richTextBox1.Text + "\ n" + Port1.ReadLine (); Port1.WriteLine ("o"); Port1.Mbyll () ; * /) dalja private e zbrazëtisë ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (Mbyll ();) butonin privat të zbrazëtisë4_Klikoni (dërguesi i objektit, EventArgs e) () Mjeti i infuzionit të zbrazëtirës private mash StripMenuItem_Click (dërguesi i objektit, EventArgs e) (label3.Text = "Përzgjedhur pure e infuzionit"; ) private void timer1_Tick (dërguesi i objektit, EventArgs e) (textBox1.Text = Convert.ToString (Convert.ToInt32 (s / 60)); textBox2.Text = Convert.ToString (Convert.ToInt32 ((s))); s + +; label5.Text = Port1.ReadLine (); nëse (s == 4200) (// 70 minuta është 4200 sekonda timer1.Stop (); //timer2.Start (); //Port1.Open (); Port1 .WriteLine ("s"); // Port1.Close (); MessageBox.Show ("Pureja e infuzionit ka mbaruar, ju duhet të filtroni wort"); button1.Enabled = e vërtetë; button2.Enabled = e vërtetë; button3.Enabled = e vërtetë; button5.Enabled = e vërtetë; textBox1.Text = ""; textBox2.Text = "";) //Port1.Close ();) private void label4_Click (dërguesi i objektit, EventArgs e) () timer privat i zbrazët2_Tick (objekt dërguesi, EventArgs e) (label5 .Text = Port1.ReadLine (); nëse (Port1.ReadLine () == "s \ r") (timer2.Stop (); MessageBox.Show ("Uji është 37 gradë. Mund të shtoni malt dhe të aktivizoni modalitetin e puresë "); richTextBox1.Text = richTextBox1.Text +" \ n "+" Fundi i procesit të përgatitjes së tas pure. Т = 37 gradë "+" "+ DateTime.Now.ToString (" HH: mm "); button2.Enabled = true;)) zbrazëti private EmergencyToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (Port1.WriteLine (" a "); MessageBox.Show ("Përdoruesi ka mbyllur në mënyrë jonormale të gjithë sistemin");) zbrazëti private e mashBoil ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (Port1.WriteLine ("k"); MessageBox.Show ("Vendosja e mashit është aktivizuar. Prisni 60 minuta") ; richTextBox1.Text = richTextBox1.Text + "\ n" + "Modaliteti i zierjes së tenxhere me pure është i aktivizuar. Prisni 60 minuta" + "" + DateTime.Now.ToString ("HH: mm") ;) private void timer3_Tick (dërguesi i objektit, 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 e përbërjes në 62 gradë "); richTextBox1.Text = richTextBox1.Text +" \ n "+" Hapi i grimcuar në 62 gradë x "+" "+ DataTime.Now.ToString (" HH: mm "); ) nëse (s == 2250) (Port1.WriteLine ("n"); MessageBox.Show ("Faza Mash në 78 gradë"); richTextBox1.Text = richTextBox1.Text + "\ n" + "Faza Mash në 78 gradë "+" "+ DateTime.Now.ToString (" HH: mm ");) nëse (s == 2700) (Port1.WriteLine (" b "); MessageBox.Show (" Faza e mashimit ka mbaruar, mund të kulloni wort ") ; richTextBox1.Text = richTextBox1.Text + "\ n" + "Faza e purejes ka mbaruar. Mund ta kulloni lythin" + "" + DateTime.Now.ToString ("HH: mm");)) zbrazëti private normale ToolStripMenuItem_Click (dërguesi i objektit, EventArgs e) (label3.Text = "Cooper brew zgjedhur";)))

Programi komunikon me arduino nëpërmjet portës com. E vetmja gjë, nuk mund të fitoj në asnjë mënyrë, në mënyrë që gjatë votimit të portit com, programi të mos ngrijë në kohën e ekzekutimit të nënrutinës. Pas përfundimit të nënprogramit, programi varet, por deri më tani kjo nuk është kritike dhe madje një plus i caktuar. I pagabueshëm - në mënyrë që të mos shtypni asgjë gjatë një procedure të caktuar.

Gjithsej, programi mund

- të përgatisë pajisje për gatim;
- kuzhinier;
- shkruani një regjistër të thjeshtë të punës (shumë i dobishëm për analiza të mëtejshme të gatimit);
- zgjidhni një port për lidhje me kontrolluesin e kontrollit (arduino UNO);
ziejmë kazanin dhe i bëjmë pure kazanët.

Kur të vijnë pompat dhe valvulat solenoid, unë do të automatizoj më tej. Ndërkohë çdo të diel do të shtoj një program gatimi. Gjithsej do të ketë 5 programe. Zbatimi i modalitetit manual po pret gjithashtu radhën e tij.
Siç thonë ata,

vazhdon ...

UPD:

Këtu janë disa foto të fabrikës së birrës

Kjo është një tenxhere gatimi. Unë kam dy prej tyre. Një sensor i temperaturës DS18B20 në një kornizë të mbyllur është instaluar në anën.
Për një kohë të gjatë nuk arrija të kuptoja pse arduino varet periodikisht derisa u lind nevoja për të tokëzuar gjithçka, së pari godet në kasë, pastaj në kutinë e sensorit dhe në arduino.

Tubi i bakrit brenda është për filtrimin e lythit. Mund ta bëni më të bukur, por është më mirë të përdorni një false. Për fat të keq kinezët nuk e mbledhin me nxitim për ta dërguar atë.

Është shumë herët për të folur për rezultatin, ja çfarë ndodhi

Pamja e përgjithshme e vatrës duket kështu.

Përdoren lidhëse të rregullta
për lidhjen e sensorëve të temperaturës, lidhjen me një prizë të dyfishtë. Është më i përshtatshëm për të larë pajisjet. E shkëputur, e çuar në banjë. E lava, e lidha dhe gjithçka funksionon.

Gjithçka shkumonte sipas orarit, shumë nuk doli jashtë. Dhe planet më të afërta janë të kullojmë një grumbull birre për fermentim të mëtejshëm, për të krijuar një tjetër. Receta, në parim, mund të shihet në kodin në nënprogramin varka () të arduino.

Më në fund kanë ardhur valvulat solenoid. Procesi i automatizimit vazhdon.

Në vitin 2014, hasa në një video të një djaloshi që bënte birrë nga koncentrati i mushtit të birrës. U ndeza me idenë e prodhimit të birrës dhe më pas filloi ...
Pirja e birrës nga ushqimi i konservuar u bë jo interesante për mua pas herës së dytë dhe vendosa të kaloj në të gjitha drithërat. Një herë piva birrë me gaz dhe kuptova se kjo nuk ishte metoda ime. Vendosa të bëj një automatizim. Mbrëmjet u bënë më interesante. U përfshiva aq shumë në programim saqë isha duke koduar deri në orën 2-3 të mëngjesit. Duheshin teste të botës reale. Në kosha gërmova një kazan dhe një gotë me faqe.

Dhe kjo është ajo me të cilën përfundova

Dhe tani do t'ju tregoj se si të bëni një automatizim të tillë.
Së pari, na duhen detajet e mëposhtme. I bleva në Kinë.
ssd1289 ose ili9341.
Rele në gjendje të ngurtë për të kontrolluar elementin e ngrohjes (ose qarkun e ndezur)
Rele në gjendje të ngurtë për kontrollin e pompës (për pompën AC) ose (DC)
Sensori termik ose ose
Furnizimi me energji elektrike 7.5-9V 1A. për shembull
Lidhës për lidhjen e një sensori të temperaturës dhe një pompë dhe
(më shumë)
(biznes)
Rezistencë 4,7 k ohm

Qarku i tensionit të ulët

Qarku i fuqisë. Bej kujdes. Nëse nuk jeni të sigurt, besoni profesionistët.

Ne marrim seksionin kryq të telave në varësi të fuqisë totale të pompës dhe elementit të ngrohjes. Për një element ngrohjeje në gjendje të ngurtë, nevojitet një radiator. nuk nxehet dobët. Ne i vendosim të gjitha në kuti. Plotësoni firmuerin, konfiguroni dhe krijoni birrën.

(udhëzim brenda)

Por funksionet bazë nuk më mjaftonin. Dhe vendosa të prish Wi-Fi. Bleva modulin ESP8266 në aliexpress. Në të njëjtën kohë porosita modulin. djema nga forumi, mirë, shumë të kërkuar për ta zbatuar atë në projekt (është e mundur pa të). Dhe e lidha sipas skemës së mëposhtme

Për të fuqizuar modulin wifi, na duhet një furnizim me energji 5V. Ju nuk mund të përdorni arduino. Mund të përdorni një furnizim të veçantë me energji elektrike ose të konvertoni 9V në 5V. Për ta bërë këtë, mund të montoni një qark të thjeshtë me një stabilizues të tensionit ose të blini një të gatshëm nga kinezët. Për shembull (ka një mori opsionesh të tjera).

Hapi tjetër është të ndezim modulin tonë me firmware NodeMCU. Po shkarkohet. Ne nisim. Shtypni Start dhe prisni përfundimin e ngarkimit të firmuerit. E keni kërkuar? Kjo është e mrekullueshme. Tani ngarkojmë skenarin. Për këtë na duhet. Sigurisht që ka programe të tjera si. Por nuk mund t'i bëja ata të punonin me modulin tim. Në ESPlorer, krijoni një skedar të ri init.lua me përmbajtjen e mëposhtme:

Ndryshoni emrin e rrjetit wifi dhe fjalëkalimin në tonin. Vendosni shpejtësinë në 9600. Shtypni butonin "Hap" (nëse nuk lidhet, shtypja e butonit të rivendosjes në modul mund të ndihmojë). Dhe klikoni "Ruaj në ESP". Pas ngarkimit të skriptit, moduli duhet të lidhet me ruterin tuaj. Kjo mund të kontrollohet duke hyrë në ruter dhe duke parë klientët DHCP. Nëse moduli juaj nuk është i dukshëm atje, atëherë diçka shkoi keq.

Ndërfaqja e internetit përmban funksionet e mëposhtme.
1. Monitorimi i proceseve. Mund të monitoroni temperaturën, gjendjen e pompës, treguesit e purejes dhe gatimit. Ndërfaqja e internetit është e pajisur me një pajisje sinjalizimi zanor.
2. Ngarko recetat në memorien e kontrolluesit dhe në USB.
3. Ndërtimi i një orari global për të gjithë gatimin.






Hyni në ndërfaqen e internetit

Artikujt kryesorë të lidhur