Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Interesant
  • Sisteme automate bazate pe microcontrolerul Arduino. Încălzirea unei case de țară folosind arduino cu transfer de date pe internet

Sisteme automate bazate pe microcontrolerul Arduino. Încălzirea unei case de țară folosind arduino cu transfer de date pe internet

Sunt student la o universitate tehnică. Într-o zi, stând într-o cafenea cu un prieten care atunci studia la o facultate de medicină, au decis să deschidă un bar. Au fost multe idei care, în principiu, meritau o oarecare atenție. De exemplu, un ring de dans care schimbă unghiul de înclinare în funcție de stilul de muzică... Dar, alături de toată varietatea de idei, a mai fost și una -

… nu ar trebui să ne producem propria bere?

Câteva săptămâni mai târziu, am fabricat bere folosind ingrediente de la fabrica de bere unde lucra prietenul tatălui meu. Dar multe procese tehnologice au fost încălcate, așa că în loc de bere a ieșit ceva cu un miros nu prea plăcut.

Câțiva ani mai târziu am decis să repet procesul, automatizându-l puțin cu folosind Arduino O.N.U. Și asta s-a întâmplat.

Voi începe cu ceea ce ar trebui să facă întreaga configurație.

  • Verificați-vă - totul funcționează, este totul conectat;
  • Curata-te;
  • Pregătiți-vă pentru procesul de preparare a berii;
  • Prepara bere pe podea mod automat;
  • Preparați berea manual;
  • Preparați berea automat (cum ar fi mașină de spălat spală rufe).

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

Pregătirea pentru procesul de preparare a berii

Un mesaj de la sistem că este necesar să turnați apă în cuvă -> programul așteaptă apăsarea tastei OK -> programul trimite comanda arduino pentru a porni releul de stare solidă -> releul de stare solidă pornește elementul de încălzire de un kilowatt din cuvă, îl aduce la o temperatură de 37 de grade, trimite o comandă la program că totul este gata de gătit. Mentine o temperatura de 37 de grade.

Aș dori să se verifice prezența apei, dar senzorul încă așteaptă să fie trimis de la „frații chinezi”.

Prepararea berii în modul semi-automat

În principiu, o procedură simplă:

Click pe program de control Butonul „Încălzire”, celelalte butoane de control sunt inactive;
- După încălzire, programul afișează mesajul „Totul este gata, poți găti”;
- Adăugați ingredientele, selectați programul de preparare - devine activ butonul „Brewing Beer”;
- Apăsați butonul „Brewing Beer”, procesul a început;
- În continuare, sistemul va notifica periodic mesaje informative ce să faci și când.

Trebuie să urmați instrucțiunile.

Prepararea berii manual

Acest proces vă permite să setați parametrii de gătit și să îi modificați în timpul ciclului de gătit. Nu am ajuns încă la asta.

Gătit automat

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

Am aruncat ingredientele în tăvile corespunzătoare, am apăsat butonul și... după o lună și jumătate am primit berea finită.

Aceasta este o scurtă prezentare generală a procesului, acum să trecem la partea tehnică.

Partea tehnică a procesului

După cum sa menționat mai sus, microcontrolerul de control este arduino UNO. La el sunt conectate 2 relee, 2
termometru digital DS18B20.

Arduino comunică cu programul principal prin portul com. Deoarece Nu am o plăcuță de identificare în timp real pentru arduino, a trebuit să iau cronometre din visual c#. Nu am experiență în scris programe, așa că dacă cineva are idei sau critici, aș fi onorat. Criticați, rupeți, ca să spunem așa, dacă dintr-o dată nu vă place.

Iată textul programului pe arduino

#include OneWire ds(8); // senzorii de temperatură sunt amplasați pe pinul 8 int reley1 = 13; int reley2 = 12; int reley3 = 11; int reley4 = 10; int reley5 = 7; //activează tens int reley6 = 6; // se încălzește pe mash tun float temp1; float temp2; void setup(void) ( Serial.begin(9600); pinMode(reley1,OUTPUT); pinMode(reley2,OUTPUT); pinMode(reley3,OUTPUT); pinMode(reley4,OUTPUT); pinMode(reley5,OUTPUT); pinMode( reley6, OUTPUT); digitalWrite(reley2,LOW); digitalWrite(reley6,LOW) (serial.disponibil()) i": infuz(); pauză; caz "p": progrev(); pauză; caz "a": avariya (); pauză; caz "v": varka(); pauză; caz "t"; pauză; ) ) void varka() ( digitalWrite(reley6, HIGH); while(Serial.read()! ="m") (temperatură(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6, HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); (Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperature(); if(temp1 >= 75.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") delay(1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); temperatura(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperature(); //Serial.available(); while (Serial.read()!="s")( //opriți ciclul de preparare a infuziei dacă (temp<=69.50) digitalWrite(reley5,HIGH); else digitalWrite(reley5,LOW); } digitalWrite(reley5,LOW); } void progrev() { while (temp1 <=36.00) temperature(); digitalWrite(reley6,HIGH); digitalWrite(reley6,LOW); //while (temperature() >40,0) //întârziere(1000); Serial.println("s"); ) accident accident())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) void temperature() (octetul i ; byte prezent = 0 byte zator = (40, 23, 218, 43, 6, 0, 0, 22); , 59, 4, 0, 234 //adresa senzorului de temperatură în rezervorul de infuzare float celsius if (!ds.search(addr)) ( //Serial.println; ."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC nu este valid!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // începe conversia, cu pornirea parazitului la întârziere finală (840) ; // poate 750ms este suficient, poate nu // s-ar putea să facem un ds.depower() dar resetarea se va ocupa de aceasta = ds.reset(); i = 0; i< 9; i++) { // we need 9 bytes data[i] = ds.read(); } int16_t raw = (data << 8) | data; byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms celsius = (float)raw / 16.0; for(i = 0; i<8; i++) { if (addr[i] == zator[i]) gde = true; else { gde = false; break; } } if (gde) { Serial.print("t2 "); //temperatura варочника temp2 = celsius; Serial.print(temp2); Serial.println(); } else { Serial.print("t1 "); //температура затора temp2 = celsius; Serial.print(temp1); } }

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

Voi descrie pe scurt ce face programul.

Programul este împărțit în subrutine, fiecare dintre acestea fiind activată dacă pe portul com apare un anumit simbol. De exemplu, dacă litera „p” intră în port, modul „Încălzire” este activat. Sau, dacă „a”, atunci subrutina avariya() este apelată și totul este oprit. La apelarea subrutinei temperature(), datele sunt scrise în variabilele globale temp1, temp2. De acolo intră în subrutinele necesare.

În viitor, vor exista subrutine pentru prepararea diferitelor soiuri și chiar luciu de lună.

Acum, referitor la programul principal de control.

Programul principal de control

Este scris în Visual Studio C#.

Cod sursa programului:

Codul sursă al programului

folosind System; folosind System.Collections.Generic; folosind System.ComponentModel; folosind System.Data; folosind System.Drawing; folosind System.Linq; folosind System.Text; folosind System.Threading.Tasks; folosind System.Windows.Forms; folosind System.IO.Ports; namespace WindowsFormsApplication1 ( clasă parțială publică Form1: Form ( // String portnumber; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InitializeComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; suprascrie protejată CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ private void Form1_Load, Event(Argject Port sender.1_T) PortName; Port1.Open() //Verificarea echipamentului private void button1_Click(object sender, EventArgs e) ( if (Port1.IsOpen == false) ( try ( //programul poate fi modificat de la podrugomu.com/node); /987 Port1.PortName = etichetă2.Text("Verifică" Port2 = new SerialPort("COM4", 9600) Text = Convert.ToString(); ReadByte()); //verificarea citirilor portului MessageBox.Show("Procesul de verificare hardware a început", "Mesaj de informare"); richTextBox1.Text = richTextBox1.Text + "\n" + "Începe procesul de verificare hardware"+" "+DateTime.Now.ToString("HH:mm"); button1.Enabled = fals; button2.Enabled = fals; button3.Enabled = fals; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Încheierea procesului de verificare hardware"+" "+DateTime.Now.ToString("HH:mm"); butonul1. Enabled = true; button2.Enabled = true button3.Enabled = true MessageBox.Show("End of Hardware Check Cycle" +" "+ DateTime.Now.ToString("richTextBox1.SaveFile"); CheckLOG.rtf"); ) catch ( richTextBox1.Text = richTextBox1.Text + "\n" + "Eroare proces de verificare hardware" +" "+ DateTime.Now.ToString("HH:mm") ; MessageBox.Show(" Portul dispozitivului este selectat. Procesul de verificare nu poate fi pornit", „Warninig"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf") ; ) ) ) // Echipamente de curățare private void button3_Click (expedător obiect, EventArgs e) ( dacă (Port1.IsOpen == false) ( încercați ( //programul poate fi modificat informații de la podrugomu.com/node/987 MessageBox.Show(" Cu siguranță ați turnat dezinfectant) ", „AVERTISMENT”, MessageBoxButtons.OK, MessageBoxIcon.Warning); Port1. PortName = label2.Text; Port1.Open(); Port1.Write("Curățare"); MessageBox.Show(„Procesul de curățare a echipamentului a început”, „Mesaj de informare”); button1.Enabled = fals; button2.Enabled = fals; button3.Enabled = fals; if (Port1.ReadByte() == 1000) ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Sfârșitul ciclului de curățare a echipamentului"); ) ) catch ( MessageBox.Show("Portul dispozitivului invalid selectat. Procesul de curățare nu poate fi pornit", "Warninig"); ) ) ) private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) ( ) private void cOM1ToolStripMenuItem_Click(object sender, EventArgs) ) ( SerialPort Port1 = nou SerialPort("COM1", 9600); // MessageBox.Show("COM1 port selectat"); label1.Visible = true; label2.Text = "COM1"; ) private void label2_Click(obiect sender, EventArgs e) ( ) private void cOM2ToolStripMenuItem_Click(expeditor obiect, EventArgs e) ( SerialPort Port1 = new SerialPort("COM2", 9600); // MessageBox.Show("COM2 port selectat"); label1.Visible = true; label2. Text = "COM2"; ) private void cOM3ToolStripMenuItem_Click(obiect sender, EventArgs e) ( SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("COM3 port select"); etichetă1.Vizibil = adevărat; label2.Text = "COM3"; ) private void cOM4ToolStripMenuItem_Click (expeditor obiect, EventArgs e) ( SerialPort Port1 = nou SerialPort("COM4", 9600); // MessageBox.Show("COM4 port selectat"); label1.Visible = true; label2.Text = "COM4 "; ) private void cOM5ToolStripMenuItem_Click(expeditor obiect, EventArgs e) ( SerialPort Port1 = nou SerialPort("COM5", 9600); // MessageBox.Show ("Port COM5 selectat"); label1.Visible = true; label2.Text = „COM5”; ) private void cOM6ToolStripMenuItem_Click(expeditor obiect, EventArgs e) ( SerialPort Port1 = new SerialPort("COM6", 9600); // MessageBox.Show("COM6 port selectat"); label1.Visible = true; label2. Text = "COM6"; ) private void cOM7ToolStripMenuItem_Click(expeditor obiect, EventArgs e) ( SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("COM7 port selected"); label1.Visible = true; label2.Text = "COM5" ) private void programBrewToolStripMenuItem_Click(object sender, EventArgs e) ( ) // Brewing private void button2_Click(object sender, EventArgs e) ( // if (Port1.IsOpen == false) //( / / try //( //programul poate fi modificat informații de la podrugomu.com/node/987 //Port1.PortName = label2. Text; //Port1.Open(); comutator (eticheta 3.Text) (caz „Mashing perfuzie selectat”: MessageBox.Show(„Procesul de mashing perfuzie a început”, „Mesaj de informare”); Port1.WriteLine(„i”); timer1.Start(); break; case „Cooper brew selectat”: MessageBox.Show(„Procesul de mașare Cooper a început”, „Mesaj de informare”(„v”); button1.Enabled; button2.Enabled = fals; button3.Enabled = fals; // button5.Enabled = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* dacă (Port1.ReadLine() == „e\r”) ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5.Enabled = true; */ //Port1.Close( ); // MessageBox.Show("Sfârșitul ciclului de preparare" // ) // catch //( // MessageBox.Show ("Portul dispozitivului este selectat. Procesul de preparare nu poate fi pornit", "Warninig" ") ( ); richTextBox1.Text = richTextBox1.Text + "\n" + "Începe încălzirea apei în rezervorul de piure la 37 de grade" + " " + DateTime.Now.ToString("HH:mm" /* Port1.Open); ); //Port1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.WriteLine("o" private void exitToolStripMenuItem_Click(object sender, EventArgs e)); private void button4_Click(emițător obiect, EventArgs e) ( ) private void infusionMashToolStripMenuItem_Click(emitent obiect, EventArgs e) ( label3.Text = "InfusionMash selectat"; ) private void timer1_Tick(exmițător obiect, EventArgs e) ( textBox1.Text = Convert.ToString(Convert.ToInt32(s / 60)); textBox2.Text = Convert.ToString(Convert.ToInt32((s))); s++; label5.Text = Port1.ReadLine(); if (s==4200)( //70 minute este 4200 secunde timer1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(MessageBox.Show"; Text = ""; ) //Port1.Close(); private void label4_Click(object sender, EventArgs e) ( ) private void timer2_Tick(object sender, EventArgs e) ( label5 .Text = Port1.ReadLine(); Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show ("Apa are 37 de grade. Puteți adăuga malț și porni modul de piure"); richTextBox1.Text = richTextBox1.Text + "\n" + "Sfârșitul procesului de preparare a piureului. Т=37 de grade" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void emergencyDisableToolStripMenuItem_Click(sender object, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("Utilizatorul a oprit întregul sistem" private void mash kettleToolStripMenuItem_Click(object sender, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("Modul de fierbere Mash tun este activat. Așteptați). 60 minute") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Modul de fierbere Mash tun este activat Așteptați 60 de minute" + " " + DateTime.Now.ToString("HH:mm") private void timer3_Tick. (emițător obiect, EventArgs e) ( șir s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") label5.Text = s1.Substring(4, 5); dacă (s1.Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5) if (s == 900) ( Port1.WriteLine("m"); MessageBox.Show; ("Suprascrie faza la 62 de grade"); richTextBox1.Text = richTextBox1.Text + "\n" + "Etapa de mash la 62 de grade" + " " + DateTime.Now.ToString("HH:mm"); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("Etapa de frecare la 78 de grade"); richTextBox1.Text = richTextBox1.Text + "\n" + "Etapa de frecare la 78 de grade " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("Etapa Mash este finalizată, puteți scurge must") ; richTextBox1.Text = richTextBox1.Text + "\n" + "Etapa de piure s-a încheiat" + " " + DateTime.Now.ToString("HH:mm" ) ) private void normalToolStripMenuItem_Click. (emițător obiect, EventArgs) e) ( label3.Text = „Cooper brew selectat”; ) ) )

Programul comunică cu arduino prin portul com. Singurul lucru pe care nu îl pot depăși este că atunci când interogând portul com, programul nu se îngheață în timp ce subrutina este executată. După sfârșitul subrutinei, programul se blochează, dar deocamdată acest lucru nu este critic și chiar un fel de plus. Foolproof - pentru a vă împiedica să apăsați ceva în timpul unei anumite proceduri.

În total, programul poate

- pregatirea echipamentelor pentru gatit;
- bucătar;
- scrieți un jurnal de lucru simplu (foarte util pentru analiza ulterioară a berii);
- selectați un port pentru conectarea la controlerul de control (arduino UNO);
fierbe bere și piure ton.

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

va urma...

UPD:

Iată câteva fotografii ale fabricii de bere

Acesta este un digestor. Am două dintre acestea. Un senzor de temperatură DS18B20 într-un cadru etanș este instalat pe lateral.
Multă vreme nu am putut înțelege de ce arduino îngheață periodic, până când mi-am dat seama că totul trebuie împământat, altfel s-ar sparge la carcasă, apoi la carcasa senzorului și la arduino.

Tubul de cupru din interior este pentru filtrarea mustului. Poate fi făcut mai frumos, dar este mai bine să folosiți un fund fals. Din păcate, chinezii nu se grăbesc să-l trimită.

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

Vederea generală a cuvei arată astfel.

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

Totul a spumat conform programului, nu s-a scurs niciun exces. Și planurile mele imediate sunt să scurg un lot de bere pentru o fermentație ulterioară și să prepar încă una. Rețeta, în principiu, poate fi vizualizată în codul din subrutina varka() a arduino.

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

Automatizarea în societatea modernă este o măsură necesară, deoarece în era digitală este extrem de importantă eliminarea factorului uman în diverse industrii pentru a standardiza și îmbunătăți calitatea produselor. Există, de asemenea, zone în care oamenii pur și simplu nu pot face ceea ce sunt capabili roboții, de exemplu, producția de nanomateriale și microcircuite.

Cu toate acestea, automatizarea nu ajută doar la producție, dar poate fi utilă și pentru omul obișnuit. De exemplu, automatizarea unei fabrici de bere care utilizează Arduino poate simplifica semnificativ procesul de producere a unui produs. Să ne dăm seama cum poate ajuta automatizarea pentru rectificare pe Arduino și alte lucruri și să ne uităm la exemple.

Principalele avantaje ale sistemelor automatizate bazate pe microcontrolerul Arduino

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

  1. Barieră scăzută la intrare. Nu este nevoie să obțineți o educație de inginer, este suficient să vizionați câteva videoclipuri de instruire și să aveți o bază în programare.
  2. Un număr mare de biblioteci deja pregătite. Arduino este folosit în întreaga CSI de mulți pasionați de robotică, până în punctul în care producția de diverse electronice devine hobby-ul lor. În consecință, comunitatea de utilizatori online este extrem de activă, postează un număr mare de spații libere și este gata să vă ajute să rezolvați orice problemă. Calitatea bibliotecilor suferă din cauza pragului scăzut de intrare, dar nimeni nu vă interzice să vă creați propria este suficient să studiați semantica limbajului C++ sau să folosiți traducători gata făcute;
  3. Un număr mare de periferice. Nu contează dacă aveți nevoie de automatizare pentru seră bazată pe Arduino sau de un senzor de lumină, veți găsi orice module, inclusiv senzori de sunet și recunoaștere de voce. Da, unele plăci costă foarte mulți bani, dar poți găsi oricând analogi ieftini, de exemplu, modulul wi-fi esp8269 de la producători terți, care costă de 10 ori mai puțin decât cel oficial.
  4. O mulțime de informații. Orice problemă cu care te confrunți a fost deja confruntă de altcineva și probabil vei găsi o soluție pe Google. Există și literatură completă pe care o puteți consulta.

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

Cu toate acestea, sistemele automate simple, de exemplu, pentru fabricarea berii sau sere, nu necesită nici măcar o fracțiune din resursele pe care placa le poate furniza. În consecință, majoritatea utilizatorilor vor găsi aceste deficiențe lipsite de sens. Dacă decideți să vă asamblați propria imprimantă 3-D sau un design mai complex, ar trebui să aruncați o privire mai atentă asupra analogilor. Dar bariera de intrare pentru concurenții lui Arduino va fi mult mai mare.

Un exemplu de automatizare a proceselor bazat pe microcontrolerul Arduino

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

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

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

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

Când achiziționați toate modulele necesare, nu rămâne decât să le programați. La urma urmei, fără cod, acestea sunt doar bucăți de hardware care nu sunt capabile de nimic.

Programarea microcontrolerelor Arduino pentru automatizarea proceselor. Exemplu

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

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

Salutare tuturor!
A trecut mult timp de când am decis să-mi construiesc propria mea fabrică de bere automatizată. Iată prima postare.
Astăzi controlerul este complet gata, tot ce rămâne este să realizezi propriul dispozitiv de gătit și filtrare. Totul a fost făcut cu propriile mele mâini. Vă rog să nu judecați strict, nu am studii inginerești, sunt un simplu umanist! Vă spun în ordine cum și din ce a fost făcută. Atentie, trafic, multe fotografii! Pe scurt despre dezvoltare. Realizat pe Arduino. Indicație de sunet, lumină, indicație de curent și tensiune (din moment ce dispozitivul este depanat, trebuie să monitorizez acești indicatori). Închidere de urgență. Întregul sistem se bazează pe relee semiconductoare. Partea de alimentare este decuplată de partea digitală. Control a 4 sarcini 25-40A (scalabile), memorie reteta pentru 8 bucati. 8 pauze de temperatură. Interfață intuitivă. Modul complet manual sau complet automat. Spălare automată CIP. 2 senzori de temperatura cu o precizie de 0,1 g. Senzor de lichid în cazan. Senzor de lichid în timpul pompării. Capacitate - de la 20l la 1000l. Controlul aerării, jacuzzi, pompă, ieșire de rezervă. PID personalizabil pentru diferite capacități (beta), USB pentru actualizări de software și, în viitorul apropiat - control de la distanță de pe iPhone/iPad. Acum îl puteți controla de pe un computer, de pe un ecran de monitor, chiar și prin Internet.
Sa incepem. În primul rând, am ales o husă în magazin. Preturile sunt foarte diferite. Am ales unul care să fie acceptabil ca mărime și preț, uitându-mă în viitor, voi spune că umplutura se potrivește la limită, într-o carcasă mai mică:

Lucrări complexe la marcarea elementelor de control. Toate componentele, cu excepția carcasei, firelor și contactorului, au fost achiziționate în străinătate. Nu puteți cumpăra nimic la un preț rezonabil în această țară.


Configurația a fost decisă, rândul de jos de butoane este lăsat pentru viitor, pentru extinderea capabilităților:

Am aplicat bandă de mascare și am desenat semne cu un creion.

Este o chestiune mică. Tăiați găurile. Cele dreptunghiulare au fost făcute cu un puzzle și o pilă cu cei mai mici dinți. Rotund - cu un burghiu în trepte. Mici rotunde - cu burghiu.

Toate găurile au fost prelucrate cu o pilă.

Și l-a pictat. Permiteți-mi să remarc că am făcut asta degeaba, vopseaua se rupte fără milă la orice contact. L-am vopsit in 3-4 straturi. Nu am folosit pământ.

Am așteptat o zi să se usuce vopseaua și am așezat elementele.


Radiatorul l-am cumpărat dintr-o reclamă, era de la un centru local de televiziune, era la un emițător TV pe un turn local de televiziune, a trebuit să-l dezleg, l-am dat fabricii, pentru că... Nu pot lua puzzle-ul, este greu și dintr-un aliaj necunoscut.

Pe partea din spate.

Interior.

Asamblate.

Verificarea electronicii.

Am schițat o diagramă foarte complexă, fără diagramă - nicăieri!

Am conectat totul și l-am lipit. Nu l-am filmat pas cu pas, nu am avut timp pentru asta.

O altă vedere. Lipim fiecare terminal de compresie.


Prize pentru actuatoare.

releu SSR. Am folosit două denumiri și producători diferiți, este mai interesant.

Asta s-a intamplat. Am pus diferite butoane de selecție, mai comode și mai verzi, așa că, cred că arată mai frumos, altfel e prea mult roșu :)


Am curățat puțin masa și m-am pregătit pentru test! În loc de element de încălzire, elementul de încărcare și încălzire este o lampă de masă vintage.

Am lipit semne pe Moment Crystal. Plăci speciale comandate de la firmă. Există două tipuri de Graverton și Gedacolor, care diferă ca preț, calitate și durabilitate. Nici nu-mi amintesc pe care le am. Și totul este gata!


Între timp, un nou creier cu capacități noi pentru cea mai recentă dezvoltare așteaptă deja pe masă! :)

Următoarea etapă este selecția componentelor pentru bere și construcția finală. Dar mai multe despre asta în partea următoare

Ce aș fi făcut altfel, nu l-aș fi pictat în fotografii sunt vizibile. Dar blocul este destinat instalării staționare pe perete, astfel încât vopseaua nu se va desprinde la fel de mult. Momentan totul funcționează conform așteptărilor, nu mai rămâne decât să terminați aragazul cu toată țeava. O chestiune de timp și bani.

Dorința mea către producătorii începători este să nu încercați să construiți o mașină imediată, nu va funcționa. Mai întâi trebuie să aprofundezi în toate detaliile, să arunci bani și timp.

Prin acord cu autorul codului, codul nu este pus la dispoziția publicului din mai multe motive: programul este adaptat pentru dezvoltarea mea specifică, pentru un anumit ciclu și poate că în viitor se va transforma într-un produs comercial. Am aratat doar un exemplu.

Îmi cer scuze pentru calitatea fotografiilor, totul a fost făcut pe telefon. Mulțumesc tuturor celor care au citit până la sfârșit!

Pentru cei interesați de prepararea berii acasă,

De ce aveam nevoie de automatizare?

Este necesară automatizarea pentru a facilita procesul, deoarece... acest controler în sine va monitoriza temperatura, o va menține și o va ridica la pauza de temperatură necesară. De asemenea, puteți folosi un semnal sonor pentru a indica intervenția necesară, de exemplu, trebuie să adăugați malț sau să faceți un test de iod.

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

Am asamblat prima automatizare folosind module:

- Arduino mini
- Bloc de două relee de 15A
- Display 2004
- Senzor de temperatura
- 4 butoane
- sursa de alimentare de 5 volti
Comoditatea ansamblării modulare este că nu este dificil să obțineți toate piesele și practic nu este nevoie să lipiți nimic. Dar cel mai mare dezavantaj este numărul mare de fire, iar releul chinezesc ieftin a creat interferențe pe afișaj, așa că releul mecanic a trebuit să fie înlocuit cu unul solid.

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

Sistem:

Am dezvoltat și desenat diagrama, ca să spun așa, în genunchi și pentru mine, așa că sunt posibile unele neajunsuri, dar diagrama funcționează complet:

A plati:

Am desenat circuitul, apoi rămâne să desenăm placa, mai întâi am desenat-o folosind programul Sprint-Layout 6, foarte convenabil, dar nu are suficientă funcționalitate, așa că am decis să mă îndepărtez de el către program DipTrace si asta am primit:

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

Placa este gata, rămâne doar să o fabricăm cumva. Pentru asta am decis sa folosesc. De ce ei și nu LUT? Tocmai am decis să încerc această nouă tehnologie pentru mine, am încercat deja LUT, am simțit-o, ca să spun așa, nu voi spune că mi-a plăcut...

Fotorezist:

Pentru a face plăci de circuite imprimate folosind photorezist veți avea nevoie de:
- Film pentru imprimantă
-
- Lampă cu ultraviolete
- Soda

lampă cu ultraviolete

În primul rând, voi împărtăși informații despre cum l-am făcut pe al meu lampă UV. La început am vrut să folosesc o lampă gata făcută, apoi am decis să o asamblam folosind șase LED-uri de 3W:
și achiziționat, de asemenea, pe Tao:


Am lipit LED-urile de calorifer, deși ar fi putut fi asamblate pe un PCB, mă îndoiesc că s-ar fi supraîncălzit.
Iată ce am primit:


Fabricarea plăcilor

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

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


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


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


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


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


Dacă obțineți un „jamb” atunci când lipiți fotorezistul, atunci este mai bine să îl îndepărtați (spălați-l sau să-l răzuiți) și să îl relipiți, altfel după ce ați gravat placa va fi trist... nu voi îndepărta acest fotorezistent, vă voi arăta rezultatul final.
7. Puneți un șablon pe PCB cu fotorezist și apăsați-l cu sticlă (am luat-o dintr-o ramă foto veche) și puneți o greutate pe sticlă:


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


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


10. Următorul pas este să spălați fotorezistul nedezvoltat cu alcalii, luați 2 pahare de apă și o lingură de sodă, amestecați bine. Îndepărtați folia de protecție superioară a fotorezist și scufundați textolitul nostru într-o soluție alcalină.


11. Luați o perie și frecați trei bucăți de fotorezist în alcalii, treptat, fotorezistul nedezvoltat este spălat:


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


Toate acestea se amestecă într-un recipient și placa cu fotorezistul finit este scufundată acolo, după un timp apar bule pe placă:


Și după ceva timp, „cuprul gol” va fi complet gravat:


Apropo, dacă gravați la o temperatură mai mare, de exemplu cu o lampă incandescentă sau într-o baie de apă, atunci gravarea va fi redusă cu trei, principalul lucru este să nu exagerați, altfel excesul se va grava...
13. Cel mai convenabil mod de a îndepărta fotorezistul este în același alcalin în care a fost spălat fotorezistul negravat după 20 de minute, acesta va cădea singur și nu este nevoie să freci nimic...

Și iată „jamburile” mele:


Deși nu este semnificativ, dar totuși, nepăsarea este de vină pentru tot, nu a observat bule de aer sub fotorezist sau supraîncălzite...

Am primit următoarea placă „curată”:


14. Apoi, găuriți și cosiți placa:


15. Lipiți toate piesele și spălați excesul de flux:


Am lipit componentele SMD cu o stație de lipit cu infraroșu chinezesc, foarte convenabil:

Asta e tot, partea cea mai grea s-a terminat, tot ce rămâne este să testăm pistele pentru scurtcircuite și să începem programarea cipului.

Programare atmega644

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

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


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

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




Dacă totul a mers bine, vom vedea mesajul: „Înregistrare bootloader finalizată”
În acest moment, încărcarea bootloader-ului „a este finalizată, puteți conecta afișajul, butoanele, senzorul de temperatură și umplerea

Cele mai bune articole pe această temă