Wij maken automatisering voor een brouwerij op één bord. We bestuderen atmega644. We maken een bord met fotoresist. Geautomatiseerde systemen gebaseerd op Arduino-microcontroller

Waarom had ik automatisering nodig?

Automatisering is nodig om het proces te vergemakkelijken, omdat... deze controller bewaakt zelf de temperatuur, handhaaft deze en verhoogt deze tot de gewenste temperatuurpauze. Ook signaal geluidssignaal over de noodzakelijke ingreep, je moet bijvoorbeeld mout toevoegen of een jodiumtest doen.

Ik besloot om van een kant-en-klaar project mijn eigen automatisering te maken. Hij draait op Arduino, er zijn een temperatuursensor, twee relais, een display en knoppen op aangesloten. Het eerste relais bestuurt het verwarmingselement, het tweede relais bestuurt de pomp. De maischpomp is erg handig omdat... het is niet nodig om de puree tijdens het hele maischproces te roeren (ik raad aan mijn eerdere te lezen voor meer details over het brouwen van bier)

Ik heb de eerste automatisering samengesteld met behulp van modules:

- Arduino-mini
- Blok van twee 15A-relais
- Weergave 2004
- Temperatuursensor
- 4 knoppen
- 5 volt voeding
Het gemak van modulaire montage is dat het niet moeilijk is om aan alle onderdelen te komen en dat er vrijwel niets hoeft te worden gesoldeerd. Maar het grootste nadeel is het enorme aantal draden, en het goedkope Chinese relais veroorzaakte interferentie op het display, dus het mechanische relais moest worden vervangen door een solid-state relais.

Na verloop van tijd kwam ik tot de conclusie dat ik mijn automatisering moest bouwen op een chip met 64 KB geheugen (Arduino mini heeft slechts 32 KB) op één bord. Klaar oplossing Ik kon het niet vinden, dus begon ik zelf een circuit te maken en vervolgens een bord voor mijn vak.

Schema:

Ik heb het diagram als het ware op mijn knieën en voor mezelf ontwikkeld en getekend, dus er zijn enkele tekortkomingen mogelijk, maar het diagram werkt volledig:

Betalen:

Ik heb het circuit getekend, daarna moet ik nog het bord tekenen, eerst heb ik het getekend met behulp van het programma Sprintindeling 6, erg handig, maar het heeft niet genoeg functionaliteit, dus besloot ik ervan af te stappen en naar het programma te gaan DipTrace en dit is wat ik kreeg:

Je kunt de bronnen downloaden.
Zoals je ziet heb ik mijn brouwerij QRBeer genoemd en dit is al versie 0.5...

Het bord is klaar, het enige dat overblijft is om het op de een of andere manier te vervaardigen. Hiervoor heb ik besloten om . Waarom zij en niet LUT? Ik besloot deze gewoon zelf te proberen nieuwe technologie, Ik heb LUT al geprobeerd, ik voelde het, om zo te zeggen, ik zal niet zeggen dat ik het leuk vond...

Fotoresist:

Om printplaten te maken met fotoresist heb je het volgende nodig:
- Printerfilm
-
- UV-lamp
- Natriumcarbonaat

UV-lamp

Eerst zal ik informatie delen over hoe ik de mijne heb gemaakt UV-lamp. In eerste instantie wilde ik een kant-en-klare lamp gebruiken, maar toen besloot ik deze in elkaar te zetten met zes 3W-LED's:
en ook gekocht op Tao:


Ik heb de LED's op de radiator gelijmd, hoewel ze op een printplaat hadden kunnen worden gemonteerd, betwijfel ik of ze oververhit zouden zijn geraakt.
Dit is wat ik heb:


Plaatproductie

1. Dus ik heb de sjabloon voorbereid, het enige dat overblijft is om deze op film af te drukken. Zoals ik hierboven schreef heb ik een film nodig voor de printer, ik heb de film voor beide geprobeerd laserprinter, en voor inkjet, beste optie alleen verkregen op film voor inkjet printen. U moet in negatief en spiegelbeeld afdrukken:

Ik heb de sjabloon onmiddellijk gelamineerd, zodat vingerafdrukken en vuil gemakkelijk konden worden afgewassen.
2. Vervolgens moeten we ons toekomstige bord (glasvezellaminaat) schuren. Hiervoor is een licht bevochtigde gewone spons of melaminespons geschikt:


3. Na deze procedure moet het koper nog ontvet worden met aceton:


Zoals je op mijn foto kunt zien, heb ik het ontvet met een gewoon servet en heb ik de aceton in een peroxidefles gegoten, dus het is handiger om mee te nemen...
4. De volgende stap is het lichtjes afsnijden van de fotoresist, zodat deze op uw toekomstige bord past, en voorzichtig de bovenkant verwijderen beschermende film om het niet te beschadigen. Als de fotoresist huishoudelijk is, moet je de matte kant eraf pellen, als het Chinees is, is er geen verschil...
5. Vervolgens lijmen we de fotoresist op de print zodat er geen luchtbellen onder de fotoresist verschijnen, anders verschijnen de sporen op zulke plaatsen niet, snij het overtollige af...
Het proces van het lijmen van fotoresist is vergelijkbaar met het lijmen van een beschermfolie op een telefoon.


6. Wanneer de fotoresist is gelijmd, moet de textoliet ermee 2-3 keer door een laminator worden gevoerd of een warm strijkijzer gebruiken en door een vel papier worden gestreken dat in tweeën is gevouwen:


Het belangrijkste is om de fotoresist niet te oververhitten, anders wordt het zo:


Als je een "stijl" krijgt bij het lijmen van de fotoresist, dan is het beter om deze te verwijderen (afwassen of afschrapen) en opnieuw te lijmen, anders zal het na het etsen van het bord verdrietig zijn... Ik zal het niet verwijderen deze fotoresist, ik laat je het eindresultaat zien.
7. Plaats een sjabloon met fotoresist op de print en druk deze aan met glas (ik heb deze van de printplaat gehaald). oude fotolijst), en plaats een gewicht op het glas:


8. We belichten de fotoresist met een UV-lamp. Mijn lamp gaat ongeveer 2 minuten mee:


Zoals je kunt zien, veranderde de belichte fotolak van kleur van lichtblauw naar donkerblauw, en de belichte fotolak is erg kwetsbaar.
9. Verwijder het glas en de sjabloon. Overtollige fotoresist kan (optioneel) worden bijgesneden en zorgvuldig worden gescheiden met een pincet:


10. De volgende stap is om de onontwikkelde fotoresist af te wassen met alkali; doe dit, neem 2 glazen water en een eetlepel natriumcarbonaat, goed roeren. Trek de bovenste beschermende film van de fotoresist af en dompel onze textoliet in een alkalische oplossing.


11. Neem een ​​penseel en wrijf drie stukjes fotoresist in de alkali, geleidelijk wordt de onontwikkelde fotoresist weggewassen:


Je kunt de alkali niet uitgieten, maar op het volgende bord laten liggen of de fotoresist na het etsen afwassen, maar daarover later meer...
12. Bordetsen:
Er zijn twee meest toegankelijke methoden: etsen met ijzerchloride of peroxide + citroenzuur en zout. Over ijzerchloride Ik zal niet schrijven, maar ik zal het waarschijnlijk beschrijven met behulp van peroxide:
- 100 ml. waterstofperoxide 3% - het wordt in een apotheek verkocht voor 7-12 roebel
- 30 gr. citroenzuur(verkrijgbaar bij elke supermarkt)
- 1 eetl. lepel zout (zowel fijn zout als steenzout zijn voldoende)


Dit alles wordt in een container gemengd en het bord met de afgewerkte fotoresist wordt daar ondergedompeld, na een tijdje verschijnen er belletjes op het bord:


En na enige tijd zal het “blote koper” volledig geëtst zijn:


Trouwens, als je meer vergiftigt hoge temperatuur Bijvoorbeeld met een gloeilamp of in een waterbad worden drie etsen verkleind, het belangrijkste is om het niet te overdrijven, anders wordt het teveel geëtst...
13. De gemakkelijkste manier om de fotoresist te verwijderen is in dezelfde alkali waarin de niet-geëtste fotoresist is afgewassen; na 20 minuten valt deze er vanzelf af en is wrijven niet nodig...

En hier zijn mijn "stijlen":


Hoewel niet significant, maar toch is onzorgvuldigheid de oorzaak van alles, merkte ik geen luchtbellen op onder de fotoresist of oververhit...

Ik heb het volgende bord “schoon” gekregen:


14. Boor vervolgens gaten en vertin het bord:


15. Soldeer alle onderdelen en spoel overtollig vloeimiddel weg:


Gesoldeerde SMD-componenten van Chinees infrarood soldeerstation, erg handig:

Dat is alles, het moeilijkste deel is voorbij, het enige dat overblijft is het luiden van de nummers kortsluiting en begin met het programmeren van de chip.

Programmering atmega644

1. Om te beginnen met programmeren, moet je de bootloader erin laden. Dit is niet moeilijk om mee te doen met behulp van Arduino UNO, maar eerst moet je het programma downloaden en installeren.
2. De volgende stap erin geïnstalleerd programma voeg direct een kant-en-klare montage toe of neem deze mee:
3. Vul aan UNO-schets ArduinoISP:

4. En sluit ons bord aan op UNO:


Volgens de schetsinstructies:
// pinnaam // slave-reset: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Het blijkt volgens mijn schema als volgt:

5. Installeer vervolgens ons bord in de instellingen en laad de bootloader:




Als alles goed is gegaan, zien we het bericht: “Bootloader-opname voltooid”
Op dit punt is het laden van bootloader "a voltooid, u kunt het display, de knoppen, de temperatuursensor aansluiten en vullen

In 2014 kwam ik een video tegen van een man die bier maakte van bierwortconcentraat. Ik werd enthousiast over het idee om te gaan brouwen en toen begon het...
Bier brouwen uit ingeblikt voedsel werd na de tweede keer oninteressant voor mij en ik besloot over te stappen op volkoren. Ik heb ooit bier op gas gebrouwen en besefte dat dit niet mijn methode was. Ik besloot het automatisch te doen. De avonden werden interessanter. Ik raakte zo betrokken bij het programmeren dat ik tot 2-3 uur 's nachts codeerde. Er waren tests nodig echte omstandigheden. In de bakken heb ik een ketel en een geslepen glas opgegraven.

En dit is waar ik mee eindigde

Nu zal ik je vertellen hoe je een dergelijke automatisering kunt maken.
Om te beginnen hebben we de volgende gegevens nodig. Ik heb ze in China gekocht.
ssd1289 of ili9341.
Solid state relais voor het aansturen van het verwarmingselement (of schakelschema)
Solid state relais voor pompbesturing (voor pomp aan wisselstroom) of (DC)
Thermische sensor of of
Voeding 7,5-9V 1A. Bijvoorbeeld
Connectoren voor het aansluiten van een temperatuursensor en een pomp en
(meer )
(zoemer)
4,7 kOhm weerstand

Laagspanningscircuit

Stroomcircuit. Wees voorzichtig. Als u het niet zeker weet, vertrouw dan op de professionals.

We nemen de draaddoorsnede afhankelijk van het totale vermogen van de pomp en het verwarmingselement. Een solide verwarmingselement heeft een radiator nodig omdat... Het warmt niet te veel op. We stoppen het allemaal in een doos. We uploaden de firmware, configureren deze en brouwen bier.

(instructies binnenin)

Maar basisfuncties Ik had niet genoeg. En ik besloot wifi aan te zetten. Ik kocht een ESP8266-module op AliExpress. Tegelijkertijd heb ik de module besteld omdat... De jongens van het forum hebben echt gevraagd om het in het project te implementeren (je kunt het zonder doen). En aangesloten volgens het volgende diagram

Voor eten wifi-module we hebben een 5V-voeding nodig. Arduino kan niet worden gebruikt. Je kunt een aparte voeding gebruiken of 9V omzetten naar 5V. Om dit te doen, kunt u een eenvoudig circuit samenstellen met een spanningsstabilisator of een kant-en-klaar circuit kopen bij de Chinezen. Bijvoorbeeld (er zijn nog veel andere opties).

De volgende stap is het flashen van de firmware van onze module NodeMCU-firmware. Downloaden. Laten we lanceren. Klik op Start en wacht tot de firmware klaar is met uploaden. Heb je het gevraagd? Dat is geweldig. Nu laden we het script. Hiervoor hebben we nodig. Er zijn natuurlijk ook andere programma's zoals . Maar ik kreeg ze niet aan de praat met mijn module. In ESPlorer creëren we nieuw bestand init.lua met de volgende inhoud:

Het wijzigen van de naam wifi-netwerken en wachtwoord voor jou. Stel de snelheid in op 9600. Druk op de knop "Openen" (als deze geen verbinding maakt, drukt u op reset-knoppen op de module). En klik op “Opslaan in ESP”. Na het downloaden van het script moet de module verbinding maken met uw router. Dit kun je controleren door in te loggen op de router en te kijken DHCP-clients. Als uw module daar niet zichtbaar is, is er iets misgegaan.

De webinterface bevat de volgende functies.
1. Procesbewaking. U kunt de temperatuur, de pompstatus en de maisch- en zetprestaties monitoren. De webinterface is voorzien van een akoestisch alarm.
2. Laad recepten in het geheugen van de controller en op een flashstation.
3. Constructie van een globale grafiek van het gehele kookproces.






Log in op de webinterface

Ik studeer aan een technische universiteit. Op een dag, terwijl ze in een café zaten met een vriend die toen aan een medische universiteit studeerde, besloten ze een bar te openen. Er waren veel ideeën die in principe enige aandacht verdienden. Bijvoorbeeld een dansvloer waarvan de hellingshoek verandert afhankelijk van de muziekstijl... Maar naast de verscheidenheid aan ideeën was er nog één:

…moeten we niet ons eigen bier brouwen?

Een paar weken later brouwde ik bier met ingrediënten uit de brouwerij waar de vriend van mijn vader werkte. Maar veel technologische processen werden geschonden, dus in plaats van bier kwam er iets uit met een niet erg aangename geur.

Een paar jaar later besloot ik het proces te herhalen en het een beetje te automatiseren met behulp van Arduino UNO. En dit is wat er gebeurde.

Laten we beginnen met wat de hele installatie zou moeten doen.

  • Controleer uzelf: werkt alles, is alles aangesloten;
  • Reinig jezelf;
  • Bereid je voor op het brouwproces;
  • Bier brouwen op de vloer automatische modus;
  • Handmatig bier brouwen;
  • Automatisch bier brouwen (zoals wasmachine wast kleding).

Eerste punt binnen op dit moment niet geïmplementeerd. Tot nu toe heb ik niet eens een idee hoe ik het moet implementeren.
De tweede is ook niet geïmplementeerd, maar ik zal hem in de nabije toekomst afmaken, ik wacht gewoon tot de pompen van eBay geleverd worden.
Het derde punt is heel eenvoudig.

Voorbereiding van het brouwproces

Een bericht van het systeem dat het nodig is om water in het vat te gieten -> het programma wacht tot de OK-toets wordt ingedrukt -> het programma stuurt de Arduino een opdracht om het solid-state relais in te schakelen -> de solid-state het relais schakelt het verwarmingselement van één kilowatt in het vat in, brengt het op een temperatuur van 37 graden en stuurt een commando naar het programma dat alles klaar is om te koken. Handhaaft een temperatuur van 37 graden.

Ik zou graag willen dat er gecontroleerd wordt op de aanwezigheid van water, maar de sensor wacht nog steeds op verzending door de “Chinese broers”.

Bier brouwen in halfautomatische modus

In principe een eenvoudige procedure:

Klik op controle programma Knop “Opwarming”, andere bedieningsknoppen zijn inactief;
- Na het opwarmen geeft het programma de melding “Alles is klaar, je kunt koken”;
- Voeg de ingrediënten toe, selecteer het zetprogramma - de knop “Bier brouwen” wordt actief;
- Druk op de knop “Bier brouwen”, het proces is begonnen;
- Vervolgens zal het systeem periodiek een melding geven informatieve berichten wat te doen en wanneer.

U moet de instructies volgen.

Handmatig bier brouwen

Met dit proces kunt u de kookparameters instellen en deze tijdens de kookcyclus wijzigen. Ben er nog niet aan toegekomen.

Automatisch koken

Dit is een droom. Er zijn momenteel geen componenten om te implementeren. Er zijn niet genoeg pompen en waterniveausensoren. Ik weet niet hoe ik de dichtheid van het wort moet meten, hoeveel alcohol er in jong bier zit en nog veel meer. Maar ik wanhoop niet en ga geleidelijk automatiseren totdat het brouwen van bier er zo uitziet:

Ik gooide de ingrediënten in de daarvoor bestemde bakjes, drukte op de knop en... na anderhalve maand ontving ik het afgewerkte bier.

Dit is een kort overzicht van het proces. Laten we nu verder gaan met de technische kant.

Technische kant van het proces

Zoals hierboven vermeld, is de besturingsmicrocontroller dat wel Arduino UNO. Er zijn 2 relais op aangesloten, 2
digitale thermometer DS18B20.

Arduino communiceert met het hoofdprogramma via com-poort. Omdat Ik heb geen real-time naamplaatje voor Arduino, ik moest timers van Visual C# nemen. Ik heb geen ervaring met het schrijven van programma's, dus als iemand ideeën of kritiek heeft, zou ik vereerd zijn. Bekritiseer, rip, om zo te zeggen, als je het opeens niet leuk vindt.

Hier is de tekst van het programma op Arduino

#erbij betrekken OneWire ds(8); // temperatuursensoren bevinden zich op pin 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; // schakel tientallen int reley6 = 6 in; // verwarm de vlottertemp1 van de maischkuip; vlottertemp2; 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(reley2,LOW); digitalWrite(reley4,LOW); (ongeldig) ( if (Serial.available()) ( schakelaar (Serial.read())( case " i": infuz(); break; case "p": progrev(); break; case "a": avariya (); break; case "v": varka(); break; case "t": break; ) ) void varka() ( digitalWrite(reley6, HIGH); while(Serial.read()! ="m") ( temperatuur(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6, HOOG); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); if(temp1>= 62.00) digitalWrite(reley6,LOW); anders digitalWrite(reley6,HIGH); while (Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperatuur(); if(temp1 >= 75.00) digitalWrite(reley6,LOW);<=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) //vertraging(1000);< 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); } }

Serieel.println("s"); ) void accident())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) void temperatuur() ( byte i ; byte aanwezig = 0; byte addr; = (40, 23, 218, 43, 6, 0, 0, 22); , 59, 4, 0, 234); //adres van de temperatuursensor in de brouwtank vlotter Celsius; // vlottertemperatuur; (!ds.search(addr)) ( //Serial.println("Geen adressen meer ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC is niet geldig!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversie, met parasiet ingeschakeld aan het einde vertraging(840) ; // misschien is 750 ms genoeg, misschien niet // we kunnen hier een ds.depower() doen, maar de reset zorgt ervoor present = ds.reset( // Lees Scratchpad for (); ik = 0; i

Alles zou in orde zijn, maar om de een of andere reden geeft de derde sensor constant 85 graden aan. Ik kan nog niet zeggen waarom. En het is nodig voor verdere automatisering: het handhaven van de temperatuur in de koelkast.

Ik zal kort beschrijven wat het programma doet.

Het programma is onderverdeeld in subroutines, die elk worden geactiveerd als een bepaald symbool op de com-poort verschijnt. Als bijvoorbeeld de letter “p” de poort binnenkomt, wordt de “Warming” -modus geactiveerd. Of, als “a”, dan wordt de subroutine avariya() aangeroepen en wordt alles uitgeschakeld. Bij het aanroepen van de subroutine temperatuur() worden de gegevens naar de globale variabelen temp1, temp2 geschreven. Van daaruit komen ze in de noodzakelijke subroutines.

In de toekomst zullen er subroutines zijn voor het brouwen van verschillende soorten en zelfs maneschijn.

Nu wat betreft het hoofdbesturingsprogramma.

Hoofdbesturingsprogramma

Het is geschreven in visuele studio c#.

Programmabroncode:

gebruik maken van systeem; met behulp van System.Collections.Generic; met behulp van System.ComponentModel; met behulp van System.Data; gebruik maken van System.Drawing; met behulp van System.Linq; met behulp van System.Text; met behulp van System.Threading.Tasks; met behulp van System.Windows.Forms; met behulp van System.IO.Ports; naamruimte WindowsFormsApplication1 ( publieke gedeeltelijke klasse Form1: Form ( // String poortnummer; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; beschermde overschrijving CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ private void Form1_Load (objectafzender, EventArgs e) ( label2.Text = Port1. PortName; Port1.Open(); // Apparatuur privé void button1_Click (objectafzender, EventArgs e) controleren ( if (Port1.IsOpen == false) ( try ( // het programma kan gewijzigde informatie van podrugomu.com/node zijn) /987 Port1.PortName = label2.Text; Port1.Write("Check"); //SerialPort Port2 = nieuwe SerialPort("COM4", 9600); //Port2.Open(); ReadByte()); //controle van de poortwaarden MessageBox.Show("Het hardwarecontroleproces is gestart", "Informatiebericht"); Poortnaam = label2.Text; Tekst; //Poort1.Open(); U kunt mout toevoegen en de maischmodus inschakelen"); richTextBox1.Text = richTextBox1.Text + "\n" + "Einde van het voorbereidingsproces van de maischkuip. Т=37 graden" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void emergencyDisableToolStripMenuItem_Click(objectafzender, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("De gebruiker heeft het hele systeem afgesloten"); private void mash kettleToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Mash tun kookmodus is ingeschakeld. Wacht 60 minuten") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Mash-kuipmodus is ingeschakeld. Wacht 60 minuten" + " " + DateTime.Now.ToString("HH:mm" ) private void. timer3_Tick(objectafzender, 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 == 900) ( Port1.WriteLine("m"); MessageBox. Show("Schrijffase op 62 graden"); richTextBox1.Text = richTextBox1.Text + "\n" + "Mashfase op 62 graden" + " " + DateTime.Now.ToString("HH:mm");

Programmabroncode

Het programma communiceert met Arduino via de com-poort. Het enige wat ik niet kan verhelpen is dat bij het pollen van de com-poort het programma niet vastloopt terwijl de subroutine wordt uitgevoerd. Na het einde van de subroutine blijft het programma hangen, maar voorlopig is dit niet kritisch en zelfs een soort pluspunt. Foolproof - om te voorkomen dat u tijdens een bepaalde procedure op iets drukt.

In totaal kan het programma
- apparatuur voorbereiden om te koken;
- kok;
- schrijf een eenvoudig werklogboek (erg handig voor verdere analyse van het brouwen);
kook de brouwer en pureerkuip.

Als de pompen en magneetventielen er zijn, ga ik deze verder automatiseren. In de tussentijd voeg ik elke zondag één kookprogramma toe. In totaal zullen er 5 programma's zijn. Ook de implementatie van de handmatige modus wacht op zijn beurt.
Zoals ze zeggen,

wordt vervolgd...

UPD:

Hier zijn enkele foto's van de brouwerij

Dit is een vergister. Ik heb er twee. Aan de zijkant is een DS18B20 temperatuursensor in een afgedicht frame gemonteerd.
Lange tijd kon ik niet begrijpen waarom de Arduino periodiek bevriest, totdat het tot me doordrong dat alles geaard moet worden, anders zou het doorbreken naar de behuizing, vervolgens naar de sensorbehuizing en naar de Arduino.

De koperen buis aan de binnenkant is bedoeld voor het filteren van het wort. Het kan mooier gemaakt worden, maar het is beter om een ​​dubbele bodem te gebruiken. Helaas hebben de Chinezen geen haast om het te verzenden.

Het is te vroeg om over het resultaat te praten, dit is wat er is gebeurd

Het algemene beeld van het vat ziet er als volgt uit.

Gebruikte gewone connectoren
voor het aansluiten van temperatuursensoren, aangesloten op een dubbel stopcontact. Het is handiger om de apparatuur te wassen. Ik zette hem uit en nam hem mee naar de badkamer. Ik heb hem gewassen, aangesloten en alles werkt.

Alles schuimde volgens schema, er lekte geen overtollig materiaal uit. En mijn onmiddellijke plannen zijn om een ​​partij bier af te tappen voor verdere gisting en er nog een te brouwen. Het recept kan in principe worden bekeken in de code in de varka()-subroutine van arduino.

De magneetventielen zijn eindelijk gearriveerd. Het automatiseringsproces gaat door.

Automatisering in de moderne samenleving is een noodzakelijke maatregel, omdat het in het digitale tijdperk uiterst belangrijk is om de menselijke factor in verschillende industrieën te elimineren om de productkwaliteit te standaardiseren en te verbeteren. Er zijn ook gebieden waar mensen eenvoudigweg niet kunnen doen waartoe robots in staat zijn, bijvoorbeeld de productie van nanomaterialen en microschakelingen.

Automatisering helpt echter niet alleen bij de productie, maar kan ook nuttig zijn voor de gemiddelde persoon. Automatisering voor een brouwerij met behulp van Arduino kan bijvoorbeeld het productieproces van een product aanzienlijk vereenvoudigen. Laten we eens kijken hoe automatisering voor rectificatie op Arduino en andere dingen kan helpen, en naar voorbeelden kijken.

De belangrijkste voordelen van geautomatiseerde systemen op basis van de Arduino-microcontroller

Niemand houdt je tegen om je eigen bord te solderen en het zelf te programmeren met behulp van talen op laag niveau. Automatisering met behulp van Arduino en kant-en-klare microcontrollers zal het hele proces echter enorm vergemakkelijken en tijd besparen. Het is immers veel gemakkelijker om een ​​kant-en-klaar product met een set bibliotheken te kopen en dit aan uw behoeften aan te passen. En betaalbare automatisering op de Arduino mega 2560 kan op veel gebieden van het leven nuttig zijn, van spraakschakelaars voor een smart home tot elektrische grendels met bewegingsmelder. De belangrijkste voordelen waar Arduino-automatisering bekend om staat zijn:

  1. Lage toetredingsdrempel. Het is niet nodig om een ​​ingenieursopleiding te volgen; het is voldoende om een ​​paar trainingsvideo's te bekijken en een basis in programmeren te hebben.
  2. Een groot aantal reeds voorbereide bibliotheken. Arduino wordt in het hele GOS door veel robotica-enthousiastelingen gebruikt, tot het punt dat de productie van verschillende elektronica hun hobby wordt. Dienovereenkomstig is de online gebruikersgemeenschap buitengewoon actief, plaatst een groot aantal lege plekken en staat klaar om u te helpen bij het oplossen van eventuele problemen. De kwaliteit van bibliotheken lijdt onder de lage instapdrempel, maar niemand verbiedt je om je eigen bibliotheken te creëren; het is voldoende om de semantiek van de C++-taal te bestuderen of kant-en-klare vertalers te gebruiken.
  3. Een groot aantal randapparatuur. Het maakt niet uit of u op Arduino gebaseerde kasautomatisering of een lichtsensor nodig heeft, u vindt er alle modules, inclusief geluidssensoren en stemherkenners. Ja, sommige borden kosten veel geld, maar je kunt altijd goedkope analogen vinden, bijvoorbeeld de esp8269 wifi-module van externe fabrikanten, die 10 keer minder kost dan de officiële.
  4. Veel informatie. Elk probleem waarmee u wordt geconfronteerd, is al door iemand anders onder ogen gezien en u zult waarschijnlijk een oplossing vinden op Google. Er is ook volledige literatuur die u kunt raadplegen.

Denk echter niet dat Arduino geen gebreken vertoont. Het bord staat bekend om zijn lage prestaties. Bij bijzonder complexe taken en bij een grote hoeveelheid code kan de responstijd oplopen tot 1 seconde, wat onaanvaardbaar is voor microcontrollers. Het flashgeheugen van de meeste modules is niet groter dan 1 MB, wat niet voldoende is om neurale netwerken te creëren of mediabestanden te gebruiken. Natuurlijk kunt u een extra geheugenkaart aansluiten, maar dit verlengt de responstijd, vergt extra middelen om deze van stroom te voorzien en gebeurt op een semi-handwerkmanier.

Eenvoudige geautomatiseerde systemen, bijvoorbeeld voor het brouwen van bier of kassen, vergen echter nog geen fractie van de middelen die het bestuur kan leveren. Dienovereenkomstig zullen de meeste gebruikers deze tekortkomingen zinloos vinden. Als u besluit uw eigen 3D-printer of een complexer ontwerp samen te stellen, moet u de analogen nader bekijken. Maar de toetredingsdrempel voor de concurrenten van Arduino zal veel hoger zijn.

Een voorbeeld van procesautomatisering op basis van een Arduino-microcontroller

Het eenvoudigste voorbeeld van procesautomatisering kan een kas zijn met behulp van Arduino. Om welk systeem dan ook te creëren, is het de moeite waard om de taken die het moet uitvoeren duidelijk te definiëren. Als we een kas als voorbeeld gebruiken, zou dit zijn:

  1. Creëren van een speciaal klimaat.
  2. Tijdig in- en uitschakelen van verlichting.
  3. Planten tijdig water geven en de luchtvochtigheid op hetzelfde niveau houden.

Op basis van deze taken kunt u meteen zien wat u voor het moederbord moet kopen:

  1. Temperatuursensor. Het zorgt ervoor dat de lucht niet opwarmt of afkoelt, binnen de door het programma voorgeschreven grenzen. Als de temperatuur verandert, schakelt het bord de airconditioner of elektronische batterijen in.
  2. Lichtsensor. Je kunt je uiteraard beperken tot een softwareoplossing en dure lampen kopen die daglicht simuleren. Maar als je een volwaardige kas wilt creëren, dan is het veel handiger om een ​​automatisch plafond te installeren, dat wordt aangestuurd door Arduino.
  3. Vochtigheidssensor. Hier is alles hetzelfde als met de temperatuur, volgens het voorgeschreven scenario zal het bord indien nodig sproeiers en luchtbevochtigers inschakelen.

Wanneer u alle benodigde modules aanschaft, hoeft u ze alleen nog maar te programmeren. Zonder code zijn dit immers slechts stukjes hardware die tot niets in staat zijn.

Programmeren van Arduino-microcontrollers voor procesautomatisering. Voorbeeld

Net als in het vorige punt is het voor het programmeren belangrijk om de taak in afzonderlijke subpunten op te delen en deze opeenvolgend uit te voeren. Arduino-programmering vindt plaats dankzij opdrachten in de AT- en AT+-interface, met behulp van voorbereide bibliotheken. Dienovereenkomstig worden alle scripts geschreven in een speciale omgeving in C++ en besteden ze, voordat ze iets doen, tijd aan het bestuderen van de semantiek ervan. Naast het uitvoeren van eenvoudige functies is het systeem ook in staat scripts op te slaan in flashgeheugen, wat we in dit voorbeeld nodig hebben.

Vergeet niet dat de informatie van elke sensor in realtime en als variabelen komt, maar u kunt de responstijd beperken, omdat u geen middelen hoeft uit te geven en elke parameter voortdurend hoeft te meten. Stel daarom voor elke sensor de aan- en uittijd in of stel de responstijd voor een bepaalde periode in.