Tunatengeneza otomatiki kwa kiwanda cha pombe kwenye ubao mmoja. Tunasoma atmega644. Tunatengeneza ubao kwa kutumia photoresist. Mifumo otomatiki kulingana na kidhibiti kidogo cha Arduino

Kwa nini nilihitaji automatisering?

Automation inahitajika ili kuwezesha mchakato, kwa sababu ... kidhibiti hiki chenyewe kitafuatilia halijoto, kukidumisha na kukipandisha kwa pause inayohitajika ya halijoto. Pia ishara ishara ya sauti kuhusu uingiliaji muhimu, kwa mfano, unahitaji kuongeza malt au kufanya mtihani wa iodini.

Niliamua kutengeneza otomatiki yangu mwenyewe kutoka kwa mradi uliotengenezwa tayari. Inaendesha kwenye arduino, sensor ya joto, relay mbili, maonyesho na vifungo vimeunganishwa nayo. Relay ya kwanza inadhibiti kipengele cha kupokanzwa, relay ya pili inadhibiti pampu. Pampu ya kusaga ni rahisi sana kwa sababu... hakuna haja ya kuchochea mash wakati wa mchakato mzima wa mashing (ninapendekeza kusoma zangu za awali kwa maelezo zaidi juu ya jinsi ya kutengeneza bia)

Nilikusanya otomatiki ya kwanza kwa kutumia moduli:

- Arduino mini
- Block ya relay mbili 15A
- Onyesho la 2004
- Sensor ya joto
- 4 vifungo
- 5 volt nguvu
Urahisi wa mkusanyiko wa kawaida ni kwamba si vigumu kupata sehemu zote na hakuna haja ya kuuza chochote. Lakini hasara kubwa zaidi ni idadi kubwa ya waya, na relay ya bei nafuu ya Kichina iliunda usumbufu kwenye onyesho, kwa hivyo relay ya mitambo ilibidi kubadilishwa na ile ya hali dhabiti.

Baada ya muda, nilifikia hitimisho kwamba nilihitaji kujenga otomatiki yangu kwenye chip na 64kb ya kumbukumbu (Arduino mini ina 32kb tu) kwenye ubao mmoja. Suluhisho tayari Sikuipata, kwa hivyo nilianza kuunda mzunguko mwenyewe na baadaye bodi ya ufundi wangu.

Mpango:

Nilitengeneza na kuchora mchoro, kwa kusema, kwa magoti yangu na kwangu mwenyewe, kwa hivyo mapungufu kadhaa yanawezekana, lakini mchoro unafanya kazi kabisa:

Lipa:

Nilichora mzunguko, basi inabaki kuteka ubao, kwanza nilichora kwa kutumia programu Muundo wa Sprint 6, rahisi sana, lakini haina utendaji wa kutosha, kwa hiyo niliamua kuondoka kutoka kwake kuelekea programu DipTrace na hii ndio nilipata:

Unaweza kupakua vyanzo.
Kama unavyoona, niliita kampuni yangu ya bia QRBeer na hii tayari ni toleo la 0.5...

Bodi iko tayari, kilichobaki ni kutengeneza kwa namna fulani. Kwa hili niliamua kutumia. Kwanini wao na sio LUT? Niliamua tu kujaribu hii mwenyewe teknolojia mpya, tayari nilijaribu LUT, nilihisi, kwa kusema, sitasema kwamba niliipenda ...

Mpiga picha:

Ili kutengeneza bodi za mzunguko zilizochapishwa kwa kutumia photoresist utahitaji:
- Filamu ya kichapishaji
-
- Taa ya ultraviolet
- Soda ash

taa ya ultraviolet

Kwanza, nitashiriki habari kuhusu jinsi nilivyotengeneza yangu Taa ya UV. Mwanzoni nilitaka kutumia taa iliyotengenezwa tayari, na kisha niliamua kuikusanya kwa kutumia taa sita za 3W:
na pia kununuliwa kwenye Tao:


Niliweka taa za LED kwenye radiator, ingawa zingeweza kukusanywa kwenye PCB, nina shaka kwamba zingekuwa zimezidi.
Hivi ndivyo nilipata:


Utengenezaji wa bodi

1. Kwa hiyo, nimeandaa template, kilichobaki ni kuchapisha kwenye filamu. Kama nilivyoandika hapo juu, ninahitaji filamu kwa printa, nilijaribu filamu kwa wote wawili printa ya laser, na kwa inkjet, chaguo bora kupatikana tu kwenye filamu kwa uchapishaji wa inkjet. Unahitaji kuchapisha kwa picha hasi na ya kioo:

Mara moja niliweka kiolezo ili alama za vidole na uchafu ziweze kuoshwa kwa urahisi.
2. Kisha tunahitaji mchanga bodi yetu ya baadaye (fiberglass laminate). Sifongo ya kawaida iliyo na unyevu kidogo au sifongo cha melamine inafaa kwa hili:


3. Baada ya utaratibu huu, shaba bado inahitaji kupunguzwa na asetoni:


Kama unavyoona kwenye picha yangu, niliifuta kwa kitambaa cha kawaida, na nikamwaga asetoni kwenye chupa ya peroxide, kwa hivyo ni rahisi zaidi kuchukua ...
4. Hatua inayofuata ni kukata photoresist kidogo ili kutoshea ubao wako wa baadaye na uondoe juu kwa makini filamu ya kinga ili usiiharibu. Ikiwa mpiga picha ni wa nyumbani, unahitaji kuondoa upande wa matte, ikiwa ni Kichina, basi hakuna tofauti ...
5. Ifuatayo, tunaweka mpiga picha kwenye PCB ili hakuna Bubbles za hewa zinazoonekana chini ya mpiga picha, vinginevyo nyimbo hazitaonekana katika sehemu kama hizo, kata ziada ...
Mchakato wa gluing photoresist ni sawa na gluing filamu ya kinga kwenye simu.


6. Wakati photoresist ni glued, textolite pamoja nayo lazima kupitishwa kwa laminator mara 2-3 au kutumia chuma joto na ironed kupitia karatasi folded katika nusu:


Jambo kuu sio kuzidisha mpiga picha, vinginevyo itageuka kama hii:


Ikiwa unapata "jamb" wakati wa gluing photoresist, basi ni bora kuiondoa (kuiosha au kuifuta) na kuiweka tena, vinginevyo baada ya kuunganisha ubao itakuwa huzuni ... sitaiondoa. mpiga picha huyu, nitakuonyesha matokeo ya mwisho.
7. Weka template kwenye PCB na photoresist na ubonyeze kwa kioo (nilichukua kutoka sura ya picha ya zamani), na uweke uzito kwenye glasi:


8. Tunaangazia photoresist kwa kutumia taa ya UV. Taa yangu hudumu kama dakika 2:


Kama unavyoona, mpiga picha aliyefichuliwa alibadilisha rangi kutoka kwa samawati hafifu hadi bluu iliyokolea, na mpiga picha aliyefichuliwa ni dhaifu sana.
9. Ondoa kioo na template. Photoresist ya ziada inaweza (hiari) kupunguzwa na kutenganishwa kwa uangalifu na kibano:


10. Hatua inayofuata ni kuosha photoresist ambayo haijatengenezwa na alkali, ili kufanya hivyo, chukua glasi 2 za maji na kijiko cha soda ash, koroga vizuri. Chambua filamu ya juu ya kinga ya mpiga picha na chovya maandishi yetu kwenye suluhisho la alkali.


11. Chukua brashi na kusugua vipande vitatu vya mpiga picha kwenye alkali, hatua kwa hatua mpiga picha ambaye hajaendelezwa huoshwa:


Hauwezi kumwaga alkali, lakini iache kwenye ubao unaofuata au kuosha mpiga picha baada ya kuweka, lakini zaidi juu ya hilo baadaye ...
12. Uwekaji ubao:
Kuna njia mbili zinazopatikana zaidi: etching na kloridi ya feri au peroxide + asidi citric na chumvi. Kuhusu kloridi ya feri Sitaandika, lakini labda nitaelezea kwa msaada wa peroxide:
- 100 ml. peroxide ya hidrojeni 3% - inauzwa katika maduka ya dawa kwa rubles 7-12
- 30 gr. asidi ya citric(inapatikana katika duka lolote la mboga)
- 1 tbsp. kijiko cha chumvi (chumvi nzuri na mwamba itafanya)


Yote hii imechanganywa kwenye chombo na ubao ulio na mpiga picha aliyekamilishwa hutiwa ndani, baada ya muda Bubble huonekana kwenye ubao:


Na baada ya muda, "shaba tupu" itawekwa kabisa:


Kwa njia, ikiwa una sumu zaidi joto la juu, kwa mfano, na taa ya incandescent au katika umwagaji wa maji, basi etchings tatu zitapunguzwa, jambo kuu sio kuipindua, vinginevyo ziada itawekwa ...
13. Njia rahisi zaidi ya kuondoa mpiga picha ni katika alkali ile ile ambayo mpiga picha ambaye hajashughulikiwa alioshwa; baada ya dakika 20 itaanguka yenyewe na hakuna haja ya kusugua chochote ...

Na hapa kuna "jambs" zangu:


Ingawa sio muhimu, lakini bado, uzembe ni lawama kwa kila kitu, haukugundua Bubbles za hewa chini ya mpiga picha au joto kupita kiasi ...

Nilipata bodi ifuatayo "safi":


14. Kisha, toboa mashimo na ubandike ubao:


15. Solder sehemu zote na osha flux ya ziada:


Vipengee vya SMD vilivyouzwa kutoka kwa infrared ya Kichina kituo cha soldering, raha sana:

Ni hayo tu, sehemu ngumu zaidi imekwisha, kilichobaki ni kupigia nyimbo mzunguko mfupi na anza kupanga chip.

Upangaji wa atmega644

1. Kuanza programu, unahitaji kupakia bootloader ndani yake. Hii si vigumu kufanya na kutumia Arduino UNO, lakini kwanza unahitaji kupakua na kusakinisha programu.
2. Hatua inayofuata katika programu iliyowekwa ongeza au chukua mkusanyiko uliotengenezwa tayari mara moja:
3. Jaza Mchoro wa UNO ArduinoISP:

4. Na unganisha bodi yetu na UNO:


Kulingana na maagizo ya mchoro:
// jina la siri // kuweka upya mtumwa: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Inageuka kulingana na mpango wangu kama hii:

5. Ifuatayo, sakinisha ubao wetu katika mipangilio na upakie kipakiaji cha boot:




Ikiwa kila kitu kilikwenda vizuri, tutaona ujumbe: "Rekodi ya Bootloader imekamilika"
Katika hatua hii, kupakia bootloader"a imekamilika, unaweza kuunganisha onyesho, vifungo, kihisi joto na kujaza

Mnamo 2014, nilikutana na video ya mwanamume anayetengeneza bia kutoka kwa mkusanyiko wa bia wort. Nilifurahishwa na wazo la kutengeneza pombe na kisha ilianza ...
Kupika bia kutoka kwa chakula cha makopo ikawa haipendezi kwangu baada ya mara ya 2 na niliamua kubadili nafaka zote. Mara moja nilitengeneza bia kwenye gesi na nikagundua kuwa hii haikuwa njia yangu. Niliamua kuifanya moja kwa moja. Jioni ikawa ya kuvutia zaidi. Nilijihusisha sana na programu hivi kwamba niliandika hadi saa 2-3 asubuhi. Vipimo vilihitajika hali halisi. Katika mapipa nilichimba boiler na glasi iliyokatwa.

Na hii ndio nilimaliza nayo

Sasa nitakuambia jinsi ya kufanya otomatiki kama hiyo.
Kuanza, tutahitaji maelezo yafuatayo. Nilinunua huko Uchina.
ssd1289 au ili9341.
Upeanaji wa hali thabiti ya kudhibiti kipengele cha kupokanzwa (au mchoro wa mzunguko)
Upeanaji wa hali thabiti kwa udhibiti wa pampu (kwa pampu kuwasha mkondo wa kubadilisha) au (DC)
Sensor ya joto au au
Ugavi wa nguvu 7.5-9V 1A. Kwa mfano
Viunganisho vya kuunganisha sensor ya joto na pampu na
(zaidi)
(buzzer)
Kipinga cha 4.7 kOhm

Mzunguko wa chini wa voltage

Mzunguko wa nguvu. Kuwa mwangalifu. Ikiwa huna uhakika, waamini wataalamu.

Tunachukua sehemu ya waya kulingana na nguvu ya jumla ya pampu na kipengele cha kupokanzwa. Kipengele cha kupokanzwa kinahitaji radiator kwa sababu ... Haina joto sana. Tunaweka yote kwenye sanduku. Tunapakia firmware, kusanidi na kutengeneza bia.

(maelekezo ndani)

Lakini kazi za msingi Sikuwa na vya kutosha. Na niliamua kuwasha wifi. Nilinunua moduli ya ESP8266 kwenye Aliexpress. Wakati huo huo niliamuru moduli kwa sababu ... Wavulana kutoka kwenye jukwaa waliuliza kweli kutekeleza kwenye mradi (unaweza kuifanya bila hiyo). Na kushikamana kulingana na mchoro unaofuata

Kwa chakula moduli ya wifi tunahitaji usambazaji wa umeme wa 5V. Hauwezi kutumia arduino. Unaweza kutumia usambazaji wa umeme tofauti au kubadilisha 9V hadi 5V. Kwa kufanya hivyo, unaweza kukusanya mzunguko rahisi na utulivu wa voltage au kununua moja tayari kutoka kwa Kichina. Kwa mfano (kuna chaguzi zingine nyingi).

Hatua inayofuata ni kuwasha firmware ya moduli yetu Firmware ya NodeMCU. Pakua. Hebu tuzindue. Bofya Anza na usubiri firmware ili kumaliza kupakia. Je, uliuliza? Hiyo ni nzuri. Sasa tunapakia script. Kwa hili tunahitaji. Kwa kweli kuna programu zingine kama . Lakini sikuweza kuwafanya wafanye kazi na moduli yangu. Katika ESPlorer tunaunda faili mpya init.lua na maudhui yafuatayo:

Kubadilisha jina mitandao ya wifi na nenosiri lako. Weka kasi hadi 9600. Bonyeza kitufe cha "Fungua" (ikiwa haiunganishi, bonyeza weka upya vifungo kwenye moduli). Na bofya "Hifadhi kwa ESP". Baada ya kupakua hati, moduli inapaswa kuunganishwa na kipanga njia chako. Unaweza kuangalia hii kwa kuingia kwenye router na kuangalia Wateja wa DHCP. Ikiwa moduli yako haionekani hapo, basi kuna kitu kilienda vibaya.

Kiolesura cha wavuti kina vitendaji vifuatavyo.
1. Ufuatiliaji wa mchakato. Unaweza kufuatilia hali ya joto, hali ya pampu, utendaji wa mashing na pombe. Kiolesura cha wavuti kina vifaa vya kengele inayosikika.
2. Pakia mapishi kwenye kumbukumbu ya mtawala na kwenye gari la flash.
3. Ujenzi wa grafu ya kimataifa ya mchakato mzima wa kupikia.






Ingia kwenye kiolesura cha wavuti

Mimi ni mwanafunzi katika chuo kikuu cha ufundi. Siku moja, wakiwa wameketi kwenye cafe pamoja na rafiki yao ambaye wakati huo alikuwa akisoma katika chuo kikuu cha matibabu, waliamua kufungua baa. Kulikuwa na maoni mengi ambayo, kimsingi, yalistahili kuzingatiwa. Kwa mfano, sakafu ya ngoma ambayo inabadilisha angle ya mwelekeo kulingana na mtindo wa muziki ... Lakini, pamoja na aina mbalimbali za mawazo, pia kulikuwa na moja zaidi -

... Je, hatupaswi kutengeneza bia yetu wenyewe?

Wiki chache baadaye, nilitengeneza bia kwa kutumia viungo kutoka kwa kiwanda cha bia ambapo rafiki ya baba yangu alifanya kazi. Lakini wengi michakato ya kiteknolojia zilikiukwa, kwa hivyo badala ya bia, kitu kisichokuwa na harufu ya kupendeza kilitoka.

Miaka michache baadaye niliamua kurudia mchakato huo, nikitumia kiotomatiki kidogo kwa kutumia Arduino UNO. Na hiki ndicho kilichotokea.

Nitaanza na kile usanidi wote unapaswa kufanya.

  • Jiangalie - kila kitu kinafanya kazi, kila kitu kimeunganishwa;
  • Jitakase;
  • Jitayarishe kwa mchakato wa kutengeneza pombe;
  • Bia bia kwenye sakafu mode otomatiki;
  • Bia bia kwa mikono;
  • Bia bia moja kwa moja (kama kuosha mashine anafua nguo).

Pointi ya kwanza wakati huu haijatekelezwa. Kufikia sasa sina hata mawazo yoyote juu ya jinsi ya kuitekeleza.
Ya pili pia haijatekelezwa, lakini nitaimaliza katika siku za usoni, nitasubiri tu pampu kutoka kwa ebay zitatolewa.
Jambo la tatu ni rahisi sana.

Kujiandaa kwa mchakato wa kutengeneza pombe

Ujumbe kutoka kwa mfumo kwamba ni muhimu kumwaga maji kwenye vat -> programu inasubiri ufunguo wa OK ili kushinikizwa -> programu inatuma arduino amri ya kuwasha relay ya hali-imara -> hali-imara. relay huwasha kipengele cha kupokanzwa cha kilowati moja kwenye vat, huleta kwa joto la digrii 37, hutuma amri kwa programu kwamba kila kitu ni tayari kwa kupikia. Inadumisha joto la digrii 37.

Ningependa kuwe na hundi ya kuwepo kwa maji, lakini sensor bado inasubiri kutumwa kutoka kwa "ndugu za Kichina".

Kutengeneza bia katika hali ya nusu otomatiki

Kimsingi, utaratibu rahisi:

Bonyeza programu ya kudhibiti Kitufe cha "Kuongeza joto", vifungo vingine vya udhibiti havifanyi kazi;
- Baada ya kuwasha moto, programu inaonyesha ujumbe "Kila kitu kiko tayari, unaweza kupika";
- Ongeza viungo, chagua programu ya kutengeneza pombe - kitufe cha "Bia ya Kutengeneza" kinafanya kazi;
- Bonyeza kitufe cha "Bia ya Kutengeneza", mchakato umeanza;
- Kisha, mfumo utaarifu mara kwa mara ujumbe wa habari nini cha kufanya na wakati gani.

Unahitaji kufuata maagizo.

Kutengeneza bia kwa mikono

Utaratibu huu unakuwezesha kuweka vigezo vya kupikia na kuzibadilisha wakati wa mzunguko wa kupikia. Bado sijaifikia.

Kupikia moja kwa moja

Ni ndoto. Kwa sasa hakuna vipengele vya kutekeleza. Hakuna pampu za kutosha na vitambuzi vya kiwango cha maji. Sijui jinsi ya kupima wiani wa wort, ni kiasi gani cha pombe katika bia ya vijana, na mengi zaidi. Lakini sikati tamaa na nitajiendesha polepole hadi kutengeneza bia inaonekana kama hii:

Nilitupa viungo kwenye trays zinazofaa, nikasisitiza kifungo na ... baada ya mwezi na nusu nilipokea bia iliyokamilishwa.

Huu ni muhtasari mfupi wa mchakato, sasa tuendelee kwenye upande wa kiufundi.

Upande wa kiufundi wa mchakato

Kama ilivyoelezwa hapo juu, microcontroller ni arduino UNO. Relay 2 zimeunganishwa nayo, 2
kipimajoto cha dijiti DS18B20.

Arduino huwasiliana na programu kuu kupitia bandari ya com. Kwa sababu Sina jina la wakati halisi la arduino, ilibidi nichukue vipima muda kutoka kwa c # ya kuona. Sina uzoefu wa kuandika programu, kwa hivyo ikiwa mtu yeyote ana maoni au ukosoaji wowote, ningeheshimiwa. Kosoa, piga, kwa kusema, ikiwa hupendi ghafla.

Hapa kuna maandishi ya programu kwenye arduino

#pamoja na OneWire ds(8); // sensorer za joto ziko kwenye pini 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; //wezesha tens int reley6 = 6; // joto juu ya mash tun kuelea temp1; temp2 ya kuelea; usanidi utupu(batili) ( Serial.begin(9600); pinMode(reley1,OUTPUT); pinMode(reley2,OUTPUT); pinMode(reley3,OUTPUT); pinMode(reley4,OUTPUT); pinMode(reley5,OUTPUT); pinMode( reley6, OUTPUT); Andika dijitali(reley1, CHINI); Andika kidijitali(reley2, CHINI); Andika kidijitali(reley3, CHINI); Andika kidijitali(reley4, CHINI); Andika kidijitali(reley5, CHINI); Andika kidijitali(reley6, CHINI);) kitanzi tupu (batili) ( ikiwa (Serial.available()) ( badilisha (Serial.read())( kesi "i": infuz(); break; kesi "p": progrev(); break; kesi "a": avariya (); break; kesi "v": varka(); break; kesi "t": joto(); break; ) ) ) varka batili() (digitWrite(reley6, HIGH); huku(Serial.read()! ="m") (joto(); ikiwa (temp1 >= 52.00) digitalWrite(reley6,LOW); vinginevyo digitalWrite(reley6,HIGH); ) huku(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); halijoto(); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) huku(Serial.read()!="b") ( //digitalWrite (reley6, JUU); halijoto(); ikiwa(temp1 >= 75.00) DijitaliAndika(reley6, CHINI); mwingine DijitaliAndika(reley6,HIGH); ) DijitaliAndika(reley6, CHINI); huku(Serial.read()!="c") kuchelewa(1000); while(Serial.read()!="x") (DijitaliAndika(reley5,HIGH); halijoto();) DijitaliAndika(reley5,LOW); ) utupu infuz() ( //temperature(); //Serial.available(); huku (Serial.read()!="s")( //zima mzunguko wa kutengeneza infusion ikiwa (joto<=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) //chelewesha(1000); Serial.println("s"); ) ajali tupu())( digitalWrite(reley1,LOW); DijitaliAndika(reley2,LOW);DijitaliAndika(reley3,LOW);DijitaliAndika(reley4,LOW);DijitaliAndika(reley5,LOW);) halijoto tupu() (byte i ; byte present = 0; data byte; byte addr; byte zator = (40, 23, 218, 43, 6, 0, 0, 22); // anwani ya kihisi joto katika mash byte varilka = (40, 255 , 240, 115 , 59, 4, 0, 234); //anwani ya kihisi joto kwenye float celsius ya pombe; // joto la kuelea; boolean wapi; ikiwa (!ds.search(addr)) ( //Serial .println("Hakuna anwani zaidi ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) ikiwa (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC si halali!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // anza ubadilishaji, na nguvu ya vimelea imewashwa mwishoni mwa kuchelewa(840) ;// labda 750ms inatosha, labda si // tunaweza kufanya ds.depower() hapa, lakini kuweka upya kutaishughulikia. present = ds.reset(); ds.select (addr); ds.write (0xBE); // Soma Scratchpad kwa (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); } }

Kila kitu kitakuwa sawa, lakini kwa sababu fulani sensor ya tatu inaonyesha digrii 85 kila wakati. Siwezi kusema kwa nini bado. Na inahitajika kwa otomatiki zaidi - kudumisha hali ya joto kwenye jokofu.

Nitaelezea kwa ufupi kile programu inafanya.

Programu imegawanywa katika subroutines, ambayo kila mmoja imeanzishwa ikiwa ishara fulani inaonekana kwenye bandari ya com. Kwa mfano, ikiwa herufi "p" inaingia kwenye bandari, hali ya "Kuongeza joto" imeanzishwa. Au, ikiwa "a", basi avariya () subroutine inaitwa na kila kitu kimezimwa. Wakati wa kupiga joto () subroutine, data imeandikwa kwa vigezo vya kimataifa temp1, temp2. Kutoka huko wanaingia kwenye subroutines muhimu.

Katika siku zijazo, kutakuwa na subroutines za kutengeneza aina anuwai na hata mwangaza wa mwezi.

Sasa, kuhusu programu kuu ya udhibiti.

Programu kuu ya udhibiti

Imeandikwa katika studio ya kuona c #.

Msimbo wa chanzo cha programu:

Msimbo wa chanzo cha programu

kutumia Mfumo; kwa kutumia System.Collections.Generic; kwa kutumia System.ComponentModel; kwa kutumia System.Data; kwa kutumia System.Drawing; kwa kutumia System.Linq; kwa kutumia System.Text; kwa kutumia System.Threading.Tasks; kwa kutumia Mfumo.Windows.Forms; kwa kutumia System.IO.Ports; nafasi ya jina WindowsFormsApplication1 ( darasa la sehemu ya umma Fomu1: Fomu ( // Nambari ya kamba; Bandari ya SerialPort1 = SerialPort mpya("COM5", 9600); int s=0; Form1 ya umma () ( InitializeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; ubatilishaji uliolindwa CreateParams CreateParams ( pata ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; rudisha myCp; ))*/ utupu wa faragha Form1_Load(mtumaji wa kitu, EventArgs.1 lebo = PortArgs. PortName; Port1.Open(); ) //Kuangalia kifaa kitufe cha utupu cha faragha1_Bofya(mtumaji wa kitu, EventArgs e) ( ikiwa (Port1.IsOpen == uongo) ( jaribu ( //programu inaweza kurekebishwa maelezo kutoka podrugomu.com/node /987 Port1.PortName = label2.Text; Port1.Open(); Port1.Andika("Angalia"); //SerialPort Port2 = SerialPort("COM4", 9600); //Port2.Fungua(); // lebo3 Nakala = Convert.ToString(Port2.ReadByte());//kuangalia usomaji wa bandari MessageBox.Show("Mchakato wa kuangalia maunzi umeanza", "Ujumbe wa habari"); richTextBox1.Text = richTextBox1.Text + "\n" + "Anza mchakato wa kuangalia maunzi"+" "+DateTime.Now.ToString("HH:mm"); button1.Imewezeshwa = uongo; button2.Imewezeshwa = uongo; button3.Imewezeshwa = uongo; ikiwa (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Maliza mchakato wa kuangalia maunzi"+" "+DateTime.Now.ToString("HH:mm"); kitufe1. Imewashwa = kweli; button2.Enabled = kweli; button3.Enabled = true; Port1.Close(); MessageBox.Onyesha("Mwisho wa Mzunguko wa Kukagua Vifaa" +" "+ DateTime.Now.ToString("HH:mm")) ; richTextBox1.SaveFile("CheckLOG.rtf"); ) ) kamata ( richTextBox1.Text = richTextBox1.Text + "\n" + "Hitilafu ya ukaguzi wa vifaa" +" "+ DateTime.Now.ToString("HH:mm" ) ; MessageBox.Show("Mlango batili wa kifaa umechaguliwa. Mchakato wa kuangalia hauwezi kuanza", "Warninig"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Kifaa cha kusafisha kitufe cha utupu cha faragha3_Bonyeza(mtumaji wa kitu, EventArgs e) ( ikiwa (Port1.IsOpen == uongo) ( jaribu ( //programu inaweza kurekebishwa maelezo kutoka kwa podrugomu.com/node/987 MessageBox. Onyesha(" Hakika umemwaga dawa ya kuua vijidudu", "ONYO", MessageBoxButtons.OK, MessageBoxIcon.Warning); Bandari 1. PortName = label2.Text; Bandari1.Fungua(); Bandari1.Andika("Safi"); MessageBox.Show("Mchakato wa kusafisha vifaa umeanza", "Ujumbe wa habari"); button1.Imewezeshwa = uongo; button2.Imewezeshwa = uongo; button3.Imewezeshwa = uongo; ikiwa (Port1.ReadByte() == 1000) ( button1.Enabled = true; button2.Enabled = kweli; button3.Enabled = kweli; Port1.Close(); MessageBox.Show("Mwisho wa Mzunguko wa Kusafisha Vifaa"); ) ) catch ( MessageBox.Show("mlango batili wa kifaa umechaguliwa. Mchakato wa kusafisha hauwezi kuanza", "Warninig"); ) ) ) muktadha wa utupu wa faraghaMenuStrip1_Opening(kitu mtumaji, CancelEventArgs e) ( ) utupu wa faragha cOM1ToolStripMenuItem_Click(object mtumaji, EventArgs e) ) ( SerialPort Port1 = SerialPort mpya("COM1", 9600); // MessageBox.Onyesha("mlango wa COM1 umechaguliwa"); label1.Visible = true; label2.Text = "COM1"; ) lebo ya faragha2_Bonyeza(kitu mtumaji, EventArgs e) ( ) utupu wa faragha cOM2ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM2", 9600); // MessageBox.Onyesha("mlango wa COM2 umechaguliwa"); lebo1.Inayoonekana = kweli; lebo2. Maandishi = "COM2"; ) utupu wa faragha cOM3ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM3", 9600); // MessageBox.Show("mlango wa COM3 umechaguliwa"); lebo1.Inayoonekana = kweli; label2.Text = "COM3"; ) utupu wa faragha cOM4ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM4", 9600); // MessageBox.Show("mlango wa COM4 umechaguliwa"); lebo1.Visible = kweli; lebo2.Text = "COM4 "; ) utupu wa faragha cOM5ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM5", 9600); // MessageBox.Show("mlango wa COM5 umechaguliwa"); lebo1.Visible = kweli; lebo2.Text = "COM5"; ) utupu wa faragha coOM6ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM6", 9600); // MessageBox.Show("mlango wa COM6 umechaguliwa"); lebo1.Inayoonekana = kweli; lebo2. Maandishi = "COM6"; ) utupu wa faragha coM7ToolStripMenuItem_Click(mtumaji wa kitu, EventArgs e) ( SerialPort Port1 = SerialPort mpya("COM7", 9600); // MessageBox.Onyesha("mlango wa COM7 umechaguliwa"); lebo1.Visible = kweli; label2.Text = "COM5"; ) programu ya faragha ya utupu BrewToolStripMenuItem_Click(object mtumaji, EventArgs e) ( ) // Brew private void button2_Click(object sender, EventArgs e) ( // if (Port1.IsOpen == uongo) //( // jaribu //( //programu inaweza kubadilishwa taarifa kutoka podrugomu.com/node/987 //Port1.PortName = label2. Maandishi; //Port1.Fungua(); swichi (lebo3.Text) ( kipochi "Infusion mashing imechaguliwa": MessageBox.Onyesha("Mchakato wa uchanganyaji umeanza", "Ujumbe wa habari"); Port1.WriteLine("i"); timer1.Start(); break; case " Cooper pombe imechaguliwa": MessageBox.Onyesha("Mchakato wa uchanganyaji wa Cooper umeanza", "Ujumbe wa Taarifa"); Port1.WriteLine("v"); timer3.Start(); break; ) button1.Enabled = uongo; button2.Imewezeshwa = uongo; button3.Imewezeshwa = uongo; // kifungo5.Imewezeshwa = uongo; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* ikiwa (Port1.ReadLine() == "e\r") (kitufe1.Imewezeshwa = kweli; kitufe2.Imewezeshwa = kweli; kitufe3.Imewezeshwa = kweli; kitufe5.Imewezeshwa = kweli; */ //Port1.Funga( ); // MessageBox.Show("Mwisho wa Mzunguko wa Kutengeneza Pombe"); // ) // ) // catch //( // MessageBox.Show("Mlango batili wa kifaa umechaguliwa. Mchakato wa kutengeneza pombe hauwezi kuanza", "Warninig "); //) // ) ) kitufe cha utupu cha faragha5_Bofya(mtumaji wa kitu, EventArgs e) ( Port1.Write("p"); button1.Enabled = uongo; button2.Enabled = uongo; button3.Enabled = uongo; timer2. Start(); richTextBox1.Text = richTextBox1.Text + "\n" + "Anza kupasha maji kwenye mash tun hadi digrii 37" + " " + DateTime.Now.ToString("HH:mm"); /* Port1. Fungua (); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine("o"); Port1.Funga(); */ ) utupu wa faragha exitToolStripMenuItem_Click(object sender, EventArgs e) ( Close(); ) kitufe cha utupu cha faragha4_Click(object mtumaji, EventArgs e) ( ) utupu wa faragha infusionMashToolStripMenuItem_Click(object sender, EventArgs e) (lebo ya kuchaguliwa =Infusion;3. ) kipima muda cha faragha1_Tika(kitu mtumaji, EventArgs e) ( textBox1.Text = Convert.ToString(Convert.ToInt32(s / 60)); textBox2.Text = Convert.ToString(Convert.ToInt32(s))); s++; lebo5.Text = Port1.ReadLine(); ikiwa (s==4200)( //70 dakika ni sekunde 4200 kipima saa1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(); MessageBox.Onyesha("infusion mash imekamilika, wort inahitaji kuchujwa"); button1.Enabled = kweli; button2.Enabled = kweli; button3.Enabled = kweli ; button5.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) lebo ya faragha4_Click(kitu mtumaji, EventArgs e) ( ) kipima saa cha faragha2_Tiki(mtumaji wa kitu, EventArgs e) ( lebo5 .Text = Port1.ReadLine(); ikiwa (Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("Maji ni nyuzi 37. Unaweza kuongeza kimea na kuwasha modi ya kusaga"); richTextBox1.Text = richTextBox1.Text + "\n" + "Mwisho wa mchakato wa kuandaa mash tun. Т=digrii 37" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) dharura ya utupu ya faraghaDisableToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Onyesha("Mtumiaji amezimwa kwa dharura kwa mfumo mzima"); ) utupu wa faragha tunToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Modi ya kuchemsha ya Mash tun imegeuka Washa. Subiri kwa dakika 60") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Modi ya kuchemsha ya misa imewashwa. Subiri dakika 60" + " " + DateTime.Now.ToString("HH:mm"). ; ) kipima muda cha faragha3_Tika(mtumaji wa kitu, EventArgs e) ( kamba s1 = ""; Port1.ReadLine(); ikiwa (s1.Substring(0, 2) == "t1") lebo5.Text = s1.Substring(4 , 5); ikiwa (s1.Substring (0, 2) == "t2") lebo9.Text = s1.Substring(4, 5); s++; ikiwa (s == 900) ( Port1.WriteLine("m" ); MessageBox.Show("Batilisha hatua kwa nyuzi 62"); richTextBox1.Text = richTextBox1.Text + "\n" + "Hatua ya mash kwa nyuzi 62" + " " + DateTime.Now.ToString("HH:mm" ); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Onyesha("Sugua hatua kwa nyuzi 78"); richTextBox1.Text = richTextBox1.Text + "\n" + "Sugua hatua kwa nyuzi 78 " + " " + DateTime.Now.ToString("HH:mm"); ) ikiwa (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Hatua ya Mash imekamilika, unaweza kumwaga wort") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Hatua ya kusaga imekwisha. Unaweza kumwaga wort" + " " + DateTime.Now.ToString("HH:mm"); ) ) faragha void normalToolStripMenuItem_Click(object mtumaji, EventArgs e) ( lebo3.Text = "Cooper pombe imechaguliwa"; ) ) )

Programu inawasiliana na arduino kupitia bandari ya com. Kitu pekee ambacho siwezi kushinda ni kwamba wakati wa kupigia kura bandari ya com, programu haifungii wakati subroutine inatekelezwa. Baada ya mwisho wa subroutine, mpango hutegemea, lakini kwa sasa hii sio muhimu na hata aina ya pamoja. Foolproof - kukuzuia kushinikiza chochote wakati wa utaratibu fulani.

Kwa jumla, programu inaweza

- kuandaa vifaa vya kupikia;
- kupika;
- kuandika logi rahisi ya kazi (muhimu sana kwa uchambuzi zaidi wa pombe);
- chagua bandari ya kuunganisha kwa mtawala wa kudhibiti (arduino UNO);
chemsha bia na suga tun.

Wakati pampu na valves za solenoid zinafika, nitaziendesha zaidi. Wakati huo huo, nitaongeza programu moja ya kupikia kila Jumapili. Kutakuwa na programu 5 kwa jumla. Utekelezaji wa hali ya mwongozo pia unasubiri zamu yake.
Kama msemo unavyokwenda,

itaendelea...

UPD:

Hizi ni baadhi ya picha za kiwanda cha bia

Hii ni digester. Nina mbili kati ya hizi. Sensor ya joto ya DS18B20 katika sura iliyofungwa imewekwa kando.
Kwa muda mrefu sikuweza kuelewa ni kwa nini arduino inafungia mara kwa mara, hadi ikanijia kwamba kila kitu kinahitaji kuwekwa msingi, vinginevyo ingeingia kwenye nyumba, kisha kwa nyumba ya sensorer na kwa arduino.

Bomba la shaba ndani ni la kuchuja wort. Inaweza kufanywa kuwa nzuri zaidi, lakini ni bora kutumia chini ya uongo. Kwa bahati mbaya, Wachina hawana haraka ya kuituma.

Ni mapema sana kuzungumza juu ya matokeo, hapa ndio kilichotokea

Mtazamo wa jumla wa vat inaonekana kama hii.

Viunganishi vilivyotumika vya kawaida
kwa ajili ya kuunganisha sensorer ya joto, kushikamana na tundu mbili. Ni rahisi zaidi kuosha vifaa. Niliizima na kwenda nayo bafuni. Nikanawa, nikaunganisha na kila kitu kinafanya kazi.

Kila kitu kilitoka povu kulingana na ratiba, hakuna ziada iliyovuja. Na mipango yangu ya haraka ni kumwaga kundi la bia kwa uchachushaji zaidi na kutengeneza nyingine. Kichocheo, kimsingi, kinaweza kutazamwa katika msimbo katika varka() subroutine ya arduino.

Valve za solenoid hatimaye zimefika. Mchakato wa otomatiki unaendelea.

Otomatiki katika jamii ya kisasa ni kipimo cha lazima, kwa sababu katika enzi ya dijiti ni muhimu sana kuondoa sababu ya kibinadamu katika tasnia anuwai ili kusawazisha na kuboresha ubora wa bidhaa. Pia kuna maeneo ambayo wanadamu hawawezi kufanya kile ambacho roboti zinaweza kufanya, kwa mfano, utengenezaji wa nanomaterials na microcircuits.

Hata hivyo, automatisering husaidia tu katika uzalishaji, lakini pia inaweza kuwa na manufaa kwa mtu wa kawaida. Kwa mfano, otomatiki kwa kampuni ya bia kwa kutumia Arduino inaweza kurahisisha sana mchakato wa kutengeneza bidhaa. Wacha tuone jinsi otomatiki ya urekebishaji kwenye Arduino na vitu vingine inaweza kusaidia, na angalia mifano.

Faida kuu za mifumo ya kiotomatiki kulingana na kidhibiti kidogo cha Arduino

Hakuna mtu anayekukataza kuuza bodi yako mwenyewe na kuipanga mwenyewe kwa kutumia lugha za kiwango cha chini. Walakini, otomatiki kwa kutumia Arduino na vidhibiti vidogo vilivyotengenezwa tayari vitawezesha sana mchakato mzima na kuokoa wakati. Baada ya yote, ni rahisi zaidi kununua bidhaa iliyopangwa tayari na seti ya maktaba na kuibadilisha kwa mahitaji yako. Na otomatiki kwa bei nafuu kwenye Arduino mega 2560 inaweza kuwa muhimu katika maeneo mengi ya maisha, kutoka kwa swichi za sauti za nyumba mahiri hadi lachi za umeme zenye kigunduzi cha mwendo. Faida kuu ambazo otomatiki ya Arduino ni maarufu ni:

  1. Kizuizi cha chini cha kuingia. Hakuna haja ya kupata elimu ya mhandisi; inatosha kutazama video kadhaa za mafunzo na kuwa na msingi katika upangaji programu.
  2. Idadi kubwa ya maktaba zilizoandaliwa tayari. Arduino inatumiwa kote katika CIS na wapenda robotiki wengi, hadi utengenezaji wa vifaa vya elektroniki vingi unakuwa hobby yao. Kwa hivyo, jumuiya ya watumiaji mtandaoni inafanya kazi sana, huchapisha idadi kubwa ya nafasi zilizo wazi na iko tayari kukusaidia kutatua matatizo yoyote. Ubora wa maktaba unateseka kwa sababu ya kizingiti cha chini cha kuingia, lakini hakuna mtu anayekukataza kuunda yako mwenyewe; inatosha kusoma semantiki za lugha ya C++ au kutumia vitafsiri vilivyotengenezwa tayari.
  3. Idadi kubwa ya vifaa vya pembeni. Haijalishi ikiwa unahitaji automatisering ya chafu ya Arduino-msingi au sensor ya mwanga, utapata moduli zozote, ikiwa ni pamoja na vitambuzi vya sauti na vitambuzi vya sauti. Ndio, bodi zingine zinagharimu pesa nyingi, lakini unaweza kupata analogues za bei nafuu kila wakati, kwa mfano, moduli ya esp8269 wi-fi kutoka kwa wazalishaji wa tatu, ambayo inagharimu mara 10 chini ya ile rasmi.
  4. Habari nyingi. Tatizo lolote unalokabiliana nalo tayari limekabiliwa na mtu mwingine, na pengine utapata suluhu kwenye Google. Pia kuna fasihi kamili ambayo unaweza kushauriana.

Walakini, usifikirie kuwa Arduino haina dosari. Bodi ni maarufu kwa utendaji wake wa chini. Katika kazi ngumu hasa na kwa kiasi kikubwa cha msimbo, muda wa majibu unaweza kufikia sekunde 1, ambayo haikubaliki kwa microcontrollers. Kumbukumbu ya flash ya moduli nyingi haizidi MB 1, ambayo haitoshi kuunda mitandao ya neural au kutumia faili za vyombo vya habari. Bila shaka, unaweza kuunganisha kadi ya kumbukumbu ya msaidizi, lakini hii huongeza muda wa majibu, inachukua rasilimali za ziada ili kuimarisha na inafanywa kwa njia ya nusu ya mikono.

Hata hivyo, mifumo rahisi ya automatiska, kwa mfano, kwa ajili ya bia ya pombe au greenhouses, hauhitaji hata sehemu ya rasilimali ambazo bodi inaweza kutoa. Ipasavyo, watumiaji wengi watapata mapungufu haya bila maana. Ikiwa unaamua kukusanya printer yako ya 3-D au muundo ngumu zaidi, unapaswa kuangalia kwa karibu analogues. Lakini kizuizi cha kuingia kwa washindani wa Arduino kitakuwa cha juu zaidi.

Mfano wa otomatiki wa mchakato kulingana na kidhibiti kidogo cha Arduino

Mfano rahisi zaidi wa mchakato wa automatisering unaweza kuwa chafu kwa kutumia Arduino. Ili kuunda mfumo wowote, inafaa kufafanua wazi kazi ambazo lazima ifanye. Kutumia chafu kama mfano, hii itakuwa:

  1. Uundaji wa hali ya hewa maalum.
  2. Kuwasha na kuzima kwa wakati kwa taa.
  3. Kumwagilia mimea kwa wakati na kudumisha unyevu wa hewa kwa kiwango sawa.

Kulingana na kazi hizi, unaweza kugundua mara moja kile utahitaji kununua kwa bodi kuu:

  1. Sensor ya joto. Itahakikisha kwamba hewa haina joto au baridi chini, kuwa ndani ya mipaka iliyowekwa na programu. Ikiwa hali ya joto inabadilika, bodi itawasha kiyoyozi au betri za elektroniki.
  2. Sensor ya mwanga. Bila shaka, unaweza kujizuia na ufumbuzi wa programu na kununua taa za gharama kubwa zinazoiga mchana. Lakini ikiwa unataka kuunda chafu iliyojaa, basi itakuwa rahisi zaidi kufunga dari moja kwa moja, ambayo itadhibitiwa na Arduino.
  3. Sensor ya unyevu. Hapa kila kitu ni sawa na hali ya joto, kulingana na hali iliyoagizwa, bodi itawasha vinyunyiziaji na unyevu, ikiwa ni lazima.

Unaponunua moduli zote muhimu, kilichobaki ni kuzipanga. Baada ya yote, bila kificho, haya ni vipande tu vya vifaa ambavyo havina uwezo wa chochote.

Kupanga vidhibiti vidogo vya Arduino kwa mchakato otomatiki. Mfano

Kama ilivyo katika hatua ya awali, kwa ajili ya programu ni muhimu kuvunja kazi katika pointi ndogo tofauti na kuifanya kwa mlolongo. Programu ya Arduino hutokea shukrani kwa amri katika interface ya AT na AT +, kwa kutumia maktaba yaliyoandaliwa. Ipasavyo, maandishi yote yameandikwa katika mazingira maalum katika C++ na, kabla ya kufanya chochote, tenga wakati wa kusoma semantiki zake. Mbali na kufanya kazi rahisi, mfumo pia una uwezo wa kuhifadhi maandishi kwenye kumbukumbu ya flash, ambayo ndiyo tunayohitaji katika mfano huu.

Usisahau kwamba taarifa kutoka kwa kila sensor huja kwa wakati halisi na kama vigezo, lakini unaweza kupunguza muda wa majibu, kwani hakuna haja ya kutumia rasilimali na kupima kila parameter daima. Ipasavyo, weka saa ya kuwasha na kuzima kwa kila kihisi au weka muda wa kujibu kwa kipindi fulani.