Come configurare smartphone e PC. Portale informativo
  • casa
  • Interessante
  • Sistemi automatizzati basati sul microcontrollore Arduino. Riscaldamento di una casa di campagna con arduino con trasferimento dati su internet

Sistemi automatizzati basati sul microcontrollore Arduino. Riscaldamento di una casa di campagna con arduino con trasferimento dati su internet

Sono uno studente in un'università tecnica. Un giorno, seduti in un bar con un amico che allora studiava all'università di medicina, decisero di aprire un bar. C'erano molte idee che, in linea di principio, meritavano una certa attenzione. Ad esempio, una pista da ballo che cambia l'angolo di inclinazione a seconda dello stile musicale... Ma oltre a tutta la varietà di idee, ce n'era anche un'altra:

…non dovremmo produrre la nostra birra?

Un paio di settimane dopo, ho preparato la birra utilizzando gli ingredienti del birrificio dove lavorava l’amico di mio padre. Ma molti processi tecnologici furono violati, quindi al posto della birra uscì qualcosa con un odore non molto gradevole.

Qualche anno dopo ho deciso di ripetere il processo, automatizzandolo un po' con utilizzandoArduino ONU. E questo è quello che è successo.

Inizierò con ciò che dovrebbe fare l'intera configurazione.

  • Controlla tu stesso: tutto funziona, tutto è connesso;
  • Purificati;
  • Prepararsi per il processo di produzione della birra;
  • Prepara la birra sul pavimento Modalità automatica;
  • Preparare la birra manualmente;
  • Prepara la birra automaticamente (come lavatrice lava i vestiti).

Primo punto in questo momento non implementato. Finora non ho nemmeno idea di come implementarlo.
Anche la seconda non è stata realizzata, ma la finirò a breve, aspetto solo che mi arrivino le pompe di ebay.
Il terzo punto è abbastanza semplice.

Preparazione per il processo di produzione della birra

Un messaggio dal sistema che è necessario versare acqua nella vasca -> il programma attende la pressione del tasto OK -> il programma invia comando arduino per accendere il relè a stato solido -> il relè a stato solido accende la resistenza da un kilowatt della vasca, la porta alla temperatura di 37 gradi, manda il comando al programma che è tutto pronto per la cottura. Mantiene una temperatura di 37 gradi.

Vorrei che ci fosse un controllo sulla presenza di acqua, ma il sensore aspetta ancora l'invio da parte dei “fratelli cinesi”.

Produzione della birra in modalità semiautomatica

In linea di principio, una procedura semplice:

Clicca su programma di controllo Pulsante “Riscaldamento”, gli altri pulsanti di controllo sono inattivi;
- Dopo il riscaldamento, il programma visualizza il messaggio “Tutto è pronto, puoi cucinare”;
- Aggiungere gli ingredienti, selezionare il programma di erogazione - il pulsante “Produrre Birra” diventa attivo;
- Premere il pulsante “Brewing Beer”, il processo è iniziato;
- Successivamente, il sistema avviserà periodicamente messaggi informativi cosa fare e quando.

È necessario seguire le istruzioni.

Produzione manuale della birra

Questo processo consente di impostare i parametri di cottura e modificarli durante il ciclo di cottura. Non ci sono ancora riuscito.

Cottura automatica

È un sogno. Al momento non ci sono componenti da implementare. Non ci sono abbastanza pompe e sensori del livello dell'acqua. Non so come misurare la densità del mosto, quanto alcol c'è nella birra giovane e molto altro. Ma non dispero e automatizzerò gradualmente finché la produzione della birra non sarà simile a questa:

Ho gettato gli ingredienti nelle apposite vaschette, ho premuto il pulsante e... dopo un mese e mezzo ho ricevuto la birra finita.

Questa è una breve panoramica del processo, passiamo ora alla parte tecnica.

Lato tecnico del processo

Come detto sopra, il microcontrollore di controllo lo è Arduino ONU. Ad esso sono collegati 2 relè, 2
termometro digitale DS18B20.

Arduino comunica con il programma principale tramite la porta com. Perché Non ho una targhetta in tempo reale per Arduino, ho dovuto prendere i timer da Visual C#. Non ho esperienza nella scrittura di programmi, quindi se qualcuno avesse idee o critiche ne sarei onorato. Critica, strappa, per così dire, se all'improvviso non ti piace.

Ecco il testo del programma su arduino

#includere OneWire ds(8); // i sensori di temperatura si trovano sul pin 8 int reley1 = 13; int relè2 = 12; int relè3 = 11; int relè4 = 10; int relè5 = 7; //abilita le decine int reley6 = 6; // riscalda il mash tun float temp1; temperatura galleggiante2; void setup(void) ( Serial.begin(9600); pinMode(reley1,OUTPUT); pinMode(reley2,OUTPUT); pinMode(reley3,OUTPUT); pinMode(reley4,OUTPUT); pinMode(reley5,OUTPUT); pinMode( reley6,OUTPUT); digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); digitalWrite(reley6,LOW); ) void loop (void) ( if (Serial.available()) ( switch (Serial.read())( case "i": infuz(); break; case "p": progrev(); break; case "a": avariya (); break; case "v": varka(); break; case "t": temperatura(); break; ) ) ) void varka() ( digitalWrite(reley6, HIGH); while(Serial.read()! ="m") ( temperatura(); if (temp1 >= 52.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="n") ( //digitalWrite (reley6,HIGH); temperatura(); if(temp1>= 62.00) digitalWrite(reley6,LOW); else digitalWrite(reley6,HIGH); ) while(Serial.read()!="b") ( //digitalWrite (reley6,HIGH); temperatura(); if(temp1 >= 75.00) digitalWrite(reley6,LOW); altrimenti digitalWrite(reley6,HIGH); ) digitalWrite(reley6,LOW); while(Serial.read()!="c") ritardo(1000); while(Serial.read()!="x") ( digitalWrite(reley5,HIGH); temperatura(); ) digitalWrite(reley5,LOW); ) void infuz() ( //temperatura(); //Serial.available(); while (Serial.read()!="s")( //disattiva il ciclo di infusione se (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) //ritardo(1000); Serial.println("s"); ) void accident())( digitalWrite(reley1,LOW); digitalWrite(reley2,LOW); digitalWrite(reley3,LOW); digitalWrite(reley4,LOW); digitalWrite(reley5,LOW); ) void temperature() ( byte i ; byte presente = 0; byte dati; byte addr; byte zator = (40, 23, 218, 43, 6, 0, 0, 22); // indirizzo del sensore di temperatura nel mash byte varilka = (40, 255 , 240, 115 , 59, 4, 0, 234); //indirizzo del sensore di temperatura nella vasca di birra float celsius; // float temp; boolean dove; if (!ds.search(addr)) ( //Serial .println("Niente più indirizzi."); //Serial.println(); ds.reset_search(); delay(250); // return; ) if (OneWire::crc8(addr, 7) != addr) ( Serial.println("CRC non valido!"); // return; ) ds.reset(); ds.select(addr); ds.write(0x44, 1); // avvia la conversione, con accensione parassita attiva alla fine delay(840) ; // forse 750ms sono sufficienti, forse no // potremmo fare un ds.depower() qui, ma il reset se ne occuperà. present = ds.reset(); ds.select (addr); ds.write (0xBE); // Leggi Scratchpad per (i = 0; io< 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); } }

Andrebbe tutto bene, ma per qualche motivo il terzo sensore mostra costantemente 85 gradi. Non posso ancora dire il motivo. Ed è necessario per un'ulteriore automazione, mantenendo la temperatura nel frigorifero.

Descriverò brevemente cosa fa il programma.

Il programma è suddiviso in subroutine, ciascuna delle quali si attiva se sulla porta com appare un determinato simbolo. Ad esempio, se nella porta entra la lettera “p”, viene attivata la modalità “Warming”. Oppure, se "a", viene chiamata la subroutine avariya() e tutto viene disattivato. Quando si chiama la subroutine temperature(), i dati vengono scritti nelle variabili globali temp1, temp2. Da lì entrano nelle subroutine necessarie.

In futuro, ci saranno subroutine per preparare varie varietà e persino il chiaro di luna.

Ora, per quanto riguarda il programma di controllo principale.

Programma di controllo principale

È scritto in Visual Studio C#.

Codice sorgente del programma:

Codice sorgente del programma

utilizzando il sistema; utilizzando System.Collections.Generic; utilizzando System.ComponentModel; utilizzando System.Data; utilizzando System.Drawing; utilizzando System.Linq; utilizzando System.Text; utilizzando System.Threading.Tasks; utilizzando System.Windows.Forms; utilizzando System.IO.Ports; namespace WindowsFormsApplication1 ( public partial class Form1: Form ( // String numero porta; SerialPort Port1 = new SerialPort("COM5", 9600); int s=0; public Form1() ( InizializzaComponent(); ) /*private const int CP_NOCLOSE_BUTTON = 0x200; override protetto CreateParams CreateParams ( get ( CreateParams myCp = base.CreateParams; myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON; return myCp; ) )*/ private void Form1_Load(mittente oggetto, EventArgs e) ( label2.Text = Port1. PortName; Port1.Open(); ) //Controlla l'apparecchiatura private void button1_Click(mittente oggetto, EventArgs e) ( if (Port1.IsOpen == false) ( prova ( //il programma può essere modificato informazioni da podrugomu.com/node /987 Port1.PortName = label2.Text; Port1.Open(); Port1.Write("Check"); //SerialPort Port2 = new SerialPort("COM4", 9600); //Port2.Open(); // label3.Text = Convert.ToString(Port2.ReadByte()); //controllo delle letture della porta MessageBox.Show("Il processo di controllo dell'hardware è iniziato", "Messaggio informativo"); richTextBox1.Text = richTextBox1.Text + "\n" + "Avvia processo di controllo hardware"+" "+DateTime.Now.ToString("HH:mm"); pulsante1.Abilitato = falso; pulsante2.Abilitato = falso; pulsante3.Abilitato = falso; if (Port1.ReadByte() == 1000) ( richTextBox1.Text = richTextBox1.Text + "\n" + "Termina processo di controllo hardware"+" "+DateTime.Now.ToString("HH:mm"); button1. Abilitato = vero; button2.Enabled = vero; button3.Enabled = vero; Port1.Close(); MessageBox.Show("Fine del ciclo di controllo hardware" +" "+ DateTime.Now.ToString("HH:mm")) ; richTextBox1.SaveFile("CheckLOG.rtf"); ) ) catch ( richTextBox1.Text = richTextBox1.Text + "\n" + "Errore processo di controllo hardware" +" "+ DateTime.Now.ToString("HH:mm" ) ); MessageBox.Show("Porta dispositivo selezionata non valida. Impossibile avviare il processo di verifica", "Avviso"); richTextBox1.SaveFile("log/Check_"+DateTime.Now.ToString("ddMMyyyy")+".rtf" ) ; ) ) ) // Pulizia dell'attrezzatura private void button3_Click(mittente oggetto, EventArgs e) ( if (Port1.IsOpen == false) ( try ( //il programma può essere modificato informazioni da podrugomu.com/node/987 MessageBox. Show(" Hai versato sicuramente del disinfettante", "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Warning); Porta1. NomePorta = etichetta2.Testo; Porta1.Apri(); Porta1.Write("Pulisci"); MessageBox.Show("Il processo di pulizia dell'attrezzatura è iniziato", "Messaggio informativo"); pulsante1.Abilitato = falso; pulsante2.Abilitato = falso; pulsante3.Abilitato = falso; if (Port1.ReadByte() == 1000) ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; Port1.Close(); MessageBox.Show("Fine ciclo di pulizia dell'apparecchiatura"); ) ) catch ( MessageBox.Show("Porta dispositivo selezionata non valida. Impossibile avviare il processo di pulizia", ​​"Avviso"); ) ) ) private void contextMenuStrip1_Opening(mittente oggetto, CancelEventArgs e) ( ) private void cOM1ToolStripMenuItem_Click(mittente oggetto, EventArgs e ) ( SerialPort Port1 = new SerialPort("COM1", 9600); // MessageBox.Show("Porta COM1 selezionata"); label1.Visible = true; label2.Text = "COM1"; ) private void label2_Click(mittente oggetto, EventArgs e) ( ) private void cOM2ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM2", 9600); // MessageBox.Show("Porta COM2 selezionata"); label1.Visible = true; label2. Text = "COM2"; ) private void cOM3ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM3", 9600); // MessageBox.Show("Porta COM3 selezionata"); etichetta1.Visible = vero; etichetta2.Testo = "COM3"; ) private void cOM4ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM4", 9600); // MessageBox.Show("Porta COM4 selezionata"); label1.Visible = true; label2.Text = "COM4 "; ) private void cOM5ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM5", 9600); // MessageBox.Show("Porta COM5 selezionata"); label1.Visible = true; label2.Text = "COM5"; ) private void cOM6ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM6", 9600); // MessageBox.Show("Porta COM6 selezionata"); label1.Visible = true; label2. Text = "COM6"; ) private void cOM7ToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( SerialPort Port1 = new SerialPort("COM7", 9600); // MessageBox.Show("Porta COM7 selezionata"); label1.Visible = true; label2.Text = "COM5"; ) programma void privato BrewToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( ) // Prepara private void button2_Click(mittente oggetto, EventArgs e) ( // if (Port1.IsOpen == false) //( // prova //( //il programma può essere modificato con le informazioni da podrugomu.com/node/987 //Port1.PortName = label2. Testo; //Porta1.Apri(); switch (label3.Text) ( case "Infusion mashing selezionato": MessageBox.Show("Il processo di infusion mashing è iniziato", "Messaggio informativo"); Port1.WriteLine("i"); timer1.Start(); break; case " Cooper brew selezionato": MessageBox.Show("Processo di mashing Cooper avviato", "Messaggio informativo"); Port1.WriteLine("v"); timer3.Start(); break; ) button1.Enabled = false; pulsante2.Abilitato = falso; pulsante3.Abilitato = falso; // pulsante5.Enabled = false; // richTextBox1.Text = Port1.ReadLine()+"\n"; /* if (Port1.ReadLine() == "e\r") ( button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button5.Enabled = true; */ //Port1.Close( ); // MessageBox.Show("Fine del ciclo di preparazione"); // ) // ) // catch //( // MessageBox.Show("Porta del dispositivo selezionata non valida. Impossibile avviare il processo di preparazione", "Attenzione "); //) // ) ) private void button5_Click(mittente oggetto, EventArgs e) ( Port1.Write("p"); button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; timer2. Start(); richTextBox1.Text = richTextBox1.Text + "\n" + "Inizia a scaldare l'acqua nel mash tun a 37 gradi" + " " + DateTime.Now.ToString("HH:mm"); /* Port1. Open (); //Porta1.Open(); //richTextBox1.Text = richTextBox1.Text + "\n" + Port1.ReadLine(); Port1.WriteLine("o"); Port1.Close(); */ ) private void exitToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( Close(); ) private void button4_Click(mittente oggetto, EventArgs e) ( ) private void infusionMashToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( label3.Text = "InfusionMash selezionato"; ) private void timer1_Tick(mittente oggetto, 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 minuti sono 4200 secondi timer1.Stop(); //timer2.Start(); //Port1.Open(); Port1.WriteLine ("s"); // Port1.Close(); MessageBox.Show("l'infusione è terminata, il mosto deve essere filtrato"); button1.Enabled = true; button2.Enabled = true; button3.Enabled = true ; button5.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; ) //Port1.Close(); ) private void label4_Click(mittente oggetto, EventArgs e) ( ) private void timer2_Tick(mittente oggetto, EventArgs e) ( label5 .Text = Port1.ReadLine(); if (Port1.ReadLine() == "s\r") ( timer2.Stop(); MessageBox.Show("L'acqua è di 37 gradi. Puoi aggiungere malto e attivare la modalità di ammostamento"); richTextBox1.Text = richTextBox1.Text + "\n" + "Fine del processo di preparazione del mash tun. Т=37 gradi" + " " + DateTime.Now.ToString("HH:mm"); button2.Enabled = true; ) ) private void emergenzeDisableToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( Port1.WriteLine("a"); MessageBox.Show("L'utente ha eseguito l'arresto di emergenza dell'intero sistema"); ) private void mash tunToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( Port1.WriteLine("k"); MessageBox.Show("La modalità di ebollizione di Mash tun è attivata on. Attendi 60 minuti") ; richTextBox1.Text = richTextBox1.Text + "\n" + "La modalità di bollitura di Mash tun è attivata. Attendi 60 minuti" + " " + DateTime.Now.ToString("HH:mm") ; ) private void timer3_Tick(mittente oggetto, EventArgs e) ( string s1 = ""; Port1.ReadLine(); if (s1.Substring(0, 2) == "t1") label5.Text = s1.Substring(4 , 5); if (s1.Substring (0, 2) == "t2") label9.Text = s1.Substring(4, 5); s++; if (s == 900) ( Port1.WriteLine("m" ); MessageBox.Show("Sovrascrivi fase a 62 gradi"); richTextBox1.Text = richTextBox1.Text + "\n" + "Mash fase a 62 gradi" + " " + DateTime.Now.ToString("HH:mm" ); ) if(s== 2250) ( Port1.WriteLine("n"); MessageBox.Show("Rub stage a 78 gradi"); richTextBox1.Text = richTextBox1.Text + "\n" + "Rub stage a 78 gradi " + " " + DateTime.Now.ToString("HH:mm"); ) if (s ==2700) ( Port1.WriteLine("b"); MessageBox.Show("La fase mash è completa, puoi svuotare il mosto") ; richTextBox1.Text = richTextBox1.Text + "\n" + "La fase di ammostamento è terminata. Puoi scolare il mosto" + " " + DateTime.Now.ToString("HH:mm"); ) ) private void normalToolStripMenuItem_Click(mittente oggetto, EventArgs e) ( label3.Text = "Cooper brew selezionato"; ) ) )

Il programma comunica con arduino tramite la porta com. L'unica cosa che non riesco a risolvere è che quando si interroga la porta com, il programma non si blocca mentre viene eseguita la subroutine. Dopo la fine della subroutine, il programma si blocca, ma per ora questo non è fondamentale e nemmeno una sorta di vantaggio. Infallibile: per impedirti di premere qualsiasi cosa durante una determinata procedura.

In totale, il programma può

-preparare l'attrezzatura per cucinare;
- cucinare;
- scrivere un semplice registro di lavoro (molto utile per ulteriori analisi della produzione della birra);
- selezionare una porta per la connessione al controller di controllo (arduino UNO);
fai bollire il birraio e schiaccialo.

Quando arriveranno le pompe e le elettrovalvole le automatizzerò ulteriormente. Nel frattempo aggiungerò un programma di cucina ogni domenica. Ci saranno 5 programmi in totale. Anche l'implementazione della modalità manuale attende il suo turno.
Come dice il proverbio,

continua...

AGGIORNAMENTO:

Ecco alcune foto del birrificio

Questo è un digestore. Ho due di questi. Sul lato è installato un sensore di temperatura DS18B20 in un telaio sigillato.
Per molto tempo non sono riuscito a capire perché l'arduino si blocca periodicamente, finché non mi sono reso conto che tutto doveva essere messo a terra, altrimenti sarebbe penetrato nell'alloggiamento, quindi nell'alloggiamento del sensore e nell'arduino.

Il tubo di rame all'interno serve per filtrare il mosto. Si può rendere più bello, ma è meglio usare un doppio fondo. Sfortunatamente, i cinesi non hanno fretta di inviarlo.

E' troppo presto per parlare del risultato, ecco cosa è successo

La vista generale della vasca è questa.

Utilizzati connettori normali
per il collegamento dei sensori di temperatura, collegati su doppia presa. È più conveniente lavare l'attrezzatura. L'ho spento e l'ho portato in bagno. L'ho lavato, collegato e funziona tutto.

Tutto ha schiumato secondo il programma, nessun eccesso è fuoriuscito. E i miei piani immediati sono di scolare un lotto di birra per un'ulteriore fermentazione e prepararne un'altra. La ricetta, in linea di principio, può essere visualizzata nel codice della subroutine varka() di arduino.

Finalmente sono arrivate le elettrovalvole. Il processo di automazione continua.

L'automazione nella società moderna è una misura necessaria, perché nell'era digitale è estremamente importante eliminare il fattore umano in vari settori al fine di standardizzare e migliorare la qualità dei prodotti. Ci sono anche settori in cui gli esseri umani semplicemente non possono fare ciò di cui sono capaci i robot, ad esempio la produzione di nanomateriali e microcircuiti.

Tuttavia, l’automazione non aiuta solo nella produzione, ma può essere utile anche per la persona media. Ad esempio, l'automazione di un birrificio tramite Arduino può semplificare notevolmente il processo di produzione di un prodotto. Scopriamo come l'automazione per la rettifica su Arduino e altre cose può aiutare e guardiamo gli esempi.

I principali vantaggi dei sistemi automatizzati basati sul microcontrollore Arduino

Nessuno ti vieta di saldare la tua scheda e programmarla tu stesso utilizzando linguaggi di basso livello. Tuttavia, l'automazione tramite Arduino e microcontrollori già pronti faciliterà notevolmente l'intero processo e farà risparmiare tempo. Dopotutto, è molto più semplice acquistare un prodotto già pronto con una serie di librerie e adattarlo alle proprie esigenze. E l'automazione conveniente su Arduino mega 2560 può essere utile in molti ambiti della vita, dagli interruttori vocali per una casa intelligente alle serrature elettriche con rilevatore di movimento. I principali vantaggi per cui l'automazione Arduino è famosa sono:

  1. Bassa barriera all'ingresso. Non è necessario conseguire una formazione da ingegnere, è sufficiente guardare un paio di video di formazione e avere basi di programmazione.
  2. Un gran numero di biblioteche già preparate. Arduino è utilizzato in tutta la CSI da molti appassionati di robotica, al punto che la produzione di vari dispositivi elettronici diventa il loro hobby. Di conseguenza, la comunità di utenti online è estremamente attiva, pubblica un gran numero di spazi vuoti ed è pronta ad aiutarti a risolvere qualsiasi problema. La qualità delle librerie soffre a causa della bassa soglia di ingresso, ma nessuno vieta di crearne di proprie, basta studiare la semantica del linguaggio C++ o utilizzare traduttori già pronti.
  3. Un gran numero di periferiche. Non importa se hai bisogno di un'automazione per serre basata su Arduino o di un sensore di luce, troverai qualsiasi modulo, inclusi sensori sonori e riconoscitori vocali. Sì, alcune schede costano un sacco di soldi, ma puoi sempre trovare analoghi economici, ad esempio il modulo Wi-Fi esp8269 di produttori di terze parti, che costa 10 volte meno di quello ufficiale.
  4. Molte informazioni. Qualsiasi problema che stai affrontando è già stato affrontato da qualcun altro e probabilmente troverai una soluzione su Google. C'è anche una letteratura completa che puoi consultare.

Non pensate però che Arduino non abbia difetti. La tavola è famosa per le sue basse prestazioni. In compiti particolarmente complessi e con una grande quantità di codice, il tempo di risposta può raggiungere 1 secondo, il che è inaccettabile per i microcontrollori. La memoria flash della maggior parte dei moduli non supera 1 MB, il che non è sufficiente per creare reti neurali o utilizzare file multimediali. Certo, è possibile collegare una scheda di memoria ausiliaria, ma questo aumenta i tempi di risposta, richiede risorse aggiuntive per alimentarla ed è fatto in modo semi-artigianale.

Tuttavia, i semplici sistemi automatizzati, ad esempio per la produzione della birra o le serre, non richiedono nemmeno una frazione delle risorse che il consiglio può fornire. Di conseguenza, la maggior parte degli utenti troverà queste carenze prive di significato. Se decidi di assemblare la tua stampante 3D o un progetto più complesso, dovresti dare un'occhiata più da vicino agli analoghi. Ma la barriera all’ingresso per i concorrenti di Arduino sarà molto più alta.

Un esempio di automazione dei processi basata sul microcontrollore Arduino

L'esempio più semplice di automazione dei processi può essere una serra che utilizza Arduino. Per creare qualsiasi sistema, vale la pena definire chiaramente i compiti che deve svolgere. Usando una serra come esempio, questo sarebbe:

  1. Creazione di un clima speciale.
  2. Accensione e spegnimento tempestivi dell'illuminazione.
  3. Irrigazione tempestiva delle piante e mantenimento dell'umidità dell'aria allo stesso livello.

In base a queste attività, puoi immediatamente notare cosa dovrai acquistare per la scheda principale:

  1. Termometro. Garantirà che l'aria non si riscaldi o si raffreddi, rientrando nei limiti prescritti dal programma. Se la temperatura cambia, la scheda accenderà il condizionatore o le batterie elettroniche.
  2. Sensore di luce. Naturalmente, puoi limitarti a una soluzione software e acquistare lampade costose che simulano la luce del giorno. Ma se vuoi creare una serra a tutti gli effetti, sarà molto più conveniente installare un soffitto automatico, che sarà controllato da Arduino.
  3. Sensore di umidità. Qui tutto è uguale alla temperatura, secondo lo scenario prescritto, la scheda accenderà gli spruzzatori e gli umidificatori, se necessario.

Una volta acquistati tutti i moduli necessari, non resta che programmarli. Dopotutto, senza codice, questi sono solo pezzi di hardware che non sono capaci di nulla.

Programmazione di microcontrollori Arduino per l'automazione dei processi. Esempio

Come nel punto precedente, per la programmazione è importante suddividere l'attività in sottopunti separati ed eseguirli in sequenza. La programmazione di Arduino avviene grazie ai comandi dell'interfaccia AT e AT+, utilizzando librerie predisposte. Di conseguenza, tutti gli script sono scritti in un ambiente speciale in C++ e, prima di fare qualsiasi cosa, dedicano tempo allo studio della sua semantica. Oltre ad eseguire semplici funzioni, il sistema è anche in grado di memorizzare script nella memoria flash, che è ciò di cui abbiamo bisogno in questo esempio.

Non dimenticare che le informazioni provenienti da ciascun sensore arrivano in tempo reale e come variabili, ma puoi limitare il tempo di risposta, poiché non è necessario spendere risorse e misurare costantemente ciascun parametro. Di conseguenza, impostare il tempo di accensione e spegnimento per ciascun sensore o impostare il tempo di risposta per un determinato periodo.

Ciao a tutti!
È passato molto tempo da quando ho deciso di costruire il mio birrificio automatizzato. Ecco il primo post.
Oggi il controller è completamente pronto, non resta che realizzare il dispositivo di cottura e filtraggio stesso. Tutto è stato fatto con le mie mani. Per favore, non giudicare rigorosamente, non ho una formazione ingegneristica, sono un semplice umanista! Ti dirò in ordine come e da cosa è stato realizzato. Attenzione, traffico, tante foto! Brevemente sullo sviluppo. Realizzato su Arduino. Suono, indicazione luminosa, indicazione di corrente e tensione (poiché il dispositivo sta eseguendo il debug, devo monitorare questi indicatori). Arresto di emergenza. L'intero sistema si basa su relè a semiconduttore. La parte di potenza è disaccoppiata dalla parte digitale. Controllo di 4 carichi 25-40A (scalabile), memoria ricette per 8 pezzi. 8 pause termiche. Interfaccia intuitiva. Modalità completamente manuale o completamente automatica. Lavaggio CIP automatico. 2 sensori di temperatura con una precisione di 0,1 g. Sensore di liquido in caldaia. Sensore del liquido durante il pompaggio. Capacità: da 20 l a 1000 l. Controllo di aerazione, idromassaggio, pompa, uscita di riserva. PID personalizzabile per diverse capacità (beta), USB per aggiornamenti software e, nel prossimo futuro, controllo remoto da iPhone/iPad. Adesso puoi controllarlo da un computer, dallo schermo di un monitor, anche tramite Internet.
Cominciamo. Per prima cosa ho scelto una custodia nel negozio. I prezzi sono molto diversi. Ne ho scelto uno accettabile come dimensioni e prezzo, guardando avanti dirò che il riempimento è al limite, non starebbe in una custodia più piccola:

Lavoro complesso sulla marcatura degli elementi di controllo. Tutti i componenti, ad eccezione dell'alloggiamento, dei cavi e del contattore, sono stati acquistati all'estero. Non puoi comprare nulla a un prezzo ragionevole in questo paese.


La configurazione è stata decisa, la fila inferiore di pulsanti è lasciata per il futuro, per espandere le capacità:

Ho applicato del nastro adesivo e ho disegnato i segni con una matita.

E' una cosa da poco. Ritaglia i fori. Quelli rettangolari sono stati realizzati con un seghetto alternativo e una lima con i denti più piccoli. Rotondo - con punta a spina di pesce a gradini. Piccoli rotondi - con un trapano.

Tutti i fori sono stati elaborati con un file.

E l'ho dipinto. Faccio notare che l'ho fatto invano, la vernice si sgretola senza pietà a qualsiasi contatto. L'ho dipinto in 3-4 strati. Non ho usato la terra.

Ho aspettato un giorno che la vernice si asciugasse e ho posizionato gli elementi.


Ho comprato il radiatore da una pubblicità, era di un centro televisivo locale, era su un trasmettitore televisivo di una torre televisiva locale, ho dovuto segarlo, l'ho dato alla fabbrica, perché... Non posso sopportare il seghetto alternativo, è pesante e fatto di una lega sconosciuta.

Sul retro.

Dentro.

Assemblato.

Controllo dell'elettronica.

Ho abbozzato un diagramma molto complesso, senza diagramma - da nessuna parte!

Ho collegato tutto e l'ho saldato. Non l’ho filmato passo dopo passo, non avevo tempo per quello.

Un'altra vista. Saldo ciascun terminale di compressione.


Prese per attuatori.

Relè SSR. Ho usato due denominazioni e produttori diversi, è più interessante.

Questo è quello che è successo. Ho messo diversi pulsanti di selezione, più comodi e verdi, così penso che sia più bello, altrimenti c'è troppo rosso :)


Ho ripulito un po' il tavolo e ci siamo preparati per la prova! Al posto di un elemento riscaldante, l'elemento portante e riscaldante è una lampada da tavolo vintage.

Ho incollato i segni su Moment Crystal. Piatti speciali ordinati dall'azienda. Esistono due tipi di Graverton e Gedacolor, che differiscono per prezzo, qualità e durata. Non ricordo nemmeno quali ho. E tutto è pronto!


Nel frattempo, un nuovo cervello con nuove capacità per gli ultimi sviluppi è già in attesa sul tavolo! :)

La fase successiva è la selezione dei componenti per il birrificio e la costruzione finale. Ma ne parleremo più avanti nella parte successiva

Cosa avrei fatto di diverso non l'avrei verniciato, nelle foto sono visibili numerose sbeccature. Ma il blocco è destinato all'installazione fissa a parete, quindi la vernice non si staccherà così tanto. Al momento funziona tutto come previsto, non resta che rifinire la cucina con tutte le tubazioni. Una questione di tempo e denaro.

Il mio augurio ai birrai alle prime armi è di non provare a costruire subito una macchina, non funzionerà. Devi prima approfondire tutti i dettagli, buttare via denaro e tempo.

In accordo con l'autore del codice, il codice non viene reso pubblico per diversi motivi: il programma è adattato al mio sviluppo specifico, per un ciclo specifico, e forse in futuro si trasformerà in un prodotto commerciale. Ho appena mostrato un esempio.

Mi scuso per la qualità delle foto, tutto è stato scattato con un telefono. Grazie a tutti coloro che hanno letto fino alla fine!

Per chi è interessato alla produzione della birra fatta in casa,

Perché avevo bisogno dell'automazione?

L'automazione è necessaria per facilitare il processo, perché... questo controller stesso monitorerà la temperatura, la manterrà e la aumenterà fino alla pausa di temperatura richiesta. Puoi anche utilizzare un segnale acustico per indicare l'intervento necessario, ad esempio se devi aggiungere malto o fare un test dello iodio.

Ho deciso di realizzare la mia automazione da un progetto già pronto. Funziona su Arduino, ad esso sono collegati un sensore di temperatura, due relè, un display e pulsanti. Il primo relè controlla l'elemento riscaldante, il secondo relè controlla la pompa. La pompa di ammostamento è molto comoda perché... non è necessario mescolare il mosto durante l'intero processo di ammostamento (consiglio di leggere i miei precedenti per maggiori dettagli su come preparare la birra)

Ho assemblato la prima automazione utilizzando i moduli:

-Arduino mini
- Blocco di due relè da 15A
- Visualizzazione 2004
- Termometro
- 4 pulsanti
- Alimentazione 5 volt
La comodità dell'assemblaggio modulare è che non è difficile ottenere tutte le parti e praticamente non è necessario saldare nulla. Ma lo svantaggio più grande è l'enorme numero di cavi e il relè cinese economico creava interferenze sul display, quindi il relè meccanico ha dovuto essere sostituito con uno a stato solido.

Col tempo sono giunto alla conclusione che dovevo costruire la mia automazione su un chip con 64kb di memoria (Arduino Mini ha solo 32kb) su una scheda. Non ho trovato una soluzione già pronta, quindi ho iniziato a creare io stesso un circuito e successivamente una scheda per il mio mestiere.

Schema:

Ho sviluppato e disegnato il diagramma, per così dire, in ginocchio e per me stesso, quindi sono possibili alcuni difetti, ma il diagramma funziona perfettamente:

Paga:

Ho disegnato il circuito, poi resta da disegnare il tabellone, prima l'ho disegnato utilizzando il programma Layout dello sprint 6, molto comodo, ma non ha abbastanza funzionalità, quindi ho deciso di spostarmi da esso verso il programma DipTrace e questo è quello che ho ottenuto:

Puoi scaricare i sorgenti.
Come puoi vedere, ho chiamato il mio birrificio QRBeer e questa è già la versione 0.5...

La tavola è pronta, non resta che fabbricarla in qualche modo. Per questo ho deciso di utilizzare . Perché loro e non LUT? Ho semplicemente deciso di provare di persona questa nuova tecnologia, ho già provato LUT, l'ho sentito, per così dire, non dico che mi è piaciuto...

Fotoresist:

Per realizzare circuiti stampati utilizzando il fotoresist avrai bisogno di:
- Pellicola per stampante
-
- Lampada ultravioletta
- Soda

lampada ultravioletta

Innanzitutto, condividerò le informazioni su come ho realizzato il mio Lampada UV. Inizialmente volevo utilizzare una lampada già pronta, poi ho deciso di assemblarla utilizzando sei LED da 3W:
e acquistato anche su Tao:


Ho incollato i led al radiatore, anche se avrebbero potuto essere assemblati su un PCB, dubito che si sarebbero surriscaldati.
Ecco cosa ho ottenuto:


Produzione di schede

1. Allora, ho preparato il modello, non resta che stamparlo su pellicola. Come ho scritto sopra ho bisogno di una pellicola per stampante, ho provato la pellicola sia per stampante laser che per stampante inkjet, l'opzione migliore si ottiene solo con pellicola per stampa inkjet. È necessario stampare in negativo e immagine speculare:

Ho immediatamente laminato il modello in modo che le impronte digitali e i detriti potessero essere facilmente rimossi.
2. Successivamente dobbiamo levigare la nostra futura tavola (laminato in fibra di vetro). A questo scopo è adatta una spugna normale o una spugna di melammina leggermente inumidita:


3. Dopo questa procedura, il rame deve ancora essere sgrassato con acetone:


Come puoi vedere nella mia foto, l'ho sgrassato con un normale tovagliolo e ho versato l'acetone in una bottiglia di acqua ossigenata, quindi è più comodo da prendere...
4. Il passaggio successivo consiste nel tagliare leggermente il fotoresist per adattarlo alla futura scheda e rimuovere con attenzione la pellicola protettiva superiore per non danneggiarla. Se il fotoresist è domestico, è necessario rimuovere la parte opaca, se è cinese, non c'è differenza...
5. Successivamente, incolliamo il fotoresist sul PCB in modo che non compaiano bolle d'aria sotto il fotoresist, altrimenti le tracce non appariranno in tali punti, taglia l'eccesso...
Il processo di incollaggio del fotoresist è simile all'incollaggio di una pellicola protettiva su un telefono.


6. Quando il fotoresist è incollato, la textolite con esso deve essere passata attraverso una plastificatrice 2-3 volte oppure utilizzare un ferro caldo e stirare attraverso un foglio di carta piegato a metà:


La cosa principale è non surriscaldare il fotoresist, altrimenti risulterà così:


Se si forma uno "stipite" quando si incolla il fotoresist, allora è meglio rimuoverlo (lavarlo via o raschiarlo via) e incollarlo nuovamente, altrimenti dopo aver inciso la tavola sarà triste... Non lo rimuoverò questo fotoresist, ti mostrerò il risultato finale.
7. Posiziona una dima sul PCB con fotoresist e pressala con il vetro (io l'ho preso da una vecchia cornice per foto), e posiziona un peso sul vetro:


8. Illuminiamo il fotoresist utilizzando una lampada UV. La mia lampada dura circa 2 minuti:


Come puoi vedere, il fotoresist esposto ha cambiato colore da azzurro a blu scuro e il fotoresist esposto è molto fragile.
9. Rimuovere il vetro e la sagoma. Il fotoresist in eccesso può (facoltativamente) essere tagliato e separato attentamente con una pinzetta:


10. Il passo successivo è lavare via il fotoresist non sviluppato con alcali, per fare questo, prendere 2 bicchieri d'acqua e un cucchiaio di carbonato di sodio, mescolare bene. Stacca la pellicola protettiva superiore del fotoresist e immergi la nostra textolite in una soluzione alcalina.


11. Prendi un pennello e strofina tre pezzi di fotoresist nell'alcali, gradualmente il fotoresist non sviluppato viene lavato via:


Non puoi versare l'alcali, ma lasciarlo sul pannello successivo o lavare via il fotoresist dopo l'incisione, ma ne parleremo più avanti...
12. Incisione su tavola:
Esistono due metodi più accessibili: incisione con cloruro ferrico o perossido + acido citrico e sale. Non scriverò del cloruro ferrico, ma probabilmente lo descriverò usando il perossido:
-100 ml. perossido di idrogeno al 3%: viene venduto in farmacia per 7-12 rubli
- 30 gr. acido citrico (disponibile in qualsiasi negozio di alimentari)
- 1 cucchiaio. un cucchiaio di sale (andrà bene sia il sale fino che il salgemma)


Tutto questo viene mescolato in un contenitore e lì viene immersa la tavola con il fotoresist finito, dopo un po 'sulla tavola compaiono delle bolle:


E dopo qualche tempo, il “rame nudo” sarà completamente inciso:


A proposito, se incidete ad una temperatura più alta, ad esempio con una lampada a incandescenza o a bagnomaria, l'incisione si ridurrà di tre, l'importante è non esagerare, altrimenti l'eccesso si inciderà...
13. Il modo più conveniente per rimuovere il fotoresist è nello stesso alcali in cui è stato lavato via il fotoresist non inciso, dopo 20 minuti cadrà da solo e non è necessario strofinare nulla...

Ed ecco i miei “stipiti”:


Anche se non in modo significativo, la colpa di tutto è comunque la disattenzione, non ho notato bolle d'aria sotto il fotoresist o surriscaldamento...

Ho ottenuto la seguente scheda “pulita”:


14. Successivamente, pratica i fori e stagna la tavola:


15. Saldare tutte le parti e lavare via il flusso in eccesso:


Ho saldato componenti SMD con una stazione di saldatura a infrarossi cinese, molto comoda:

Questo è tutto, la parte più difficile è passata, non resta che testare i cortocircuiti sulle piste e iniziare a programmare il chip.

Programmazione atmega644

1. Per iniziare la programmazione, è necessario caricare il bootloader al suo interno. Questo non è difficile da fare usando Arduino UNO, ma prima devi scaricare e installare il programma.
2. Il passo successivo è aggiungere o portare immediatamente un assembly già pronto al programma installato:
3. Carica lo schizzo ArduinoISP sull'ONU:

4. E collega la nostra scheda a UNO:


Secondo le istruzioni dello schizzo:
// nome pin // reset slave: 10: // MOSI: 11: // MISO: 12: // SCK: 13:
Risulta secondo il mio schema in questo modo:

5. Successivamente, installa la nostra scheda nelle impostazioni e carica il bootloader:




Se tutto è andato bene, vedremo il messaggio: “Registrazione Bootloader completata”
A questo punto, caricato il bootloader"a è completato, è possibile collegare display, pulsanti, sensore di temperatura e riempimento

I migliori articoli sull'argomento