GUIDA Guida introduttiva ai PLC

Il Dottore

Utente Attivo
824
155
CPU
i5 4690k
Dissipatore
Seidon 120v
Scheda Madre
Gigabyte Gaming 5
HDD
WD Blue 1 Tb
RAM
4x4 Gb @ 1333
GPU
Sapphire r9 290 tri-x
Monitor
AOC E2460SH
PSU
Antec Neo ECO 620w
Case
CM SCOUT II
Periferiche
Blue Snowball - HX Cloud 2 - Logitec G403 - Corsair Strafe MX Red
Net
50/20
OS
W8.1
Buongiorno a tutti quelli che hanno il codice booleano nel sangue e a chi ha voglia di imparare!

Con questo piccolo tutorial passeremo da questo (immagine kit arduino uno) a questo (foto ultimo arduino).
Gli “sketch” sono tutti correlati tra di loro, quindi una volta impostato, scritto e lanciato il primo, il secondo sarà solamente un aggiustamento di quello iniziale. Il grado di difficoltà è basso ma comunque leggermente crescente andando avanti negli sketch.
Prima di passare al materiale occorrente è meglio fare delle piccole precisazioni per evitare flame o utenti che fanno la voce grossa perché sanno di più:
-Tutti gli sketch e i progetti si baseranno sullo “Starter Kit Arduino UNO”;
-Stiamo parlando della base Arduino;
-I consigli sono accettati ma siate conformi al topic;
-Non inquinate il topic;
-Proponete idee (magari anche anche qualche scorciatoia per arrivare alla stessa soluzione);


Materiale occorrente:
-Starter Kit Arduino UNO (ATTENZIONE: esistono molte copie in commercio del controllore e nelle specifiche viene scritto molto spesso “compatibile arduino” quindi le marche che riportano tale dicitura sono da ritenersi COPIE NON ORIGINALI; per sentito dire funzionano bene anch’esse, ma per sicurezza, affidabilità e compatibilità con il linguaggio degli sketch vi consigliamo l’originale);
-Rudimenti di programmazione;
-Tanta pazienza;
-Voglia di imparare;
-IDE Arduino (programma per gli sketch).


Prima di elencare cosa faremo e come lo andremo a fare è opportuno segnalarvi alcune piccole paroline che potrebbero (giustamente) non essere nel vostro vocabolario.
Glossario:
-“Sketch”: per Sketch intendiamo il programmino scritto al pc che mette in comunicazione i vari componenti che abbiamo messo sulla Breadboard.
-“Breadboard”: E’ una basetta, ovvero un circuito coperto da una sezione di plastica bianca numerata in modo da avere ordine tra le linee di massa, circuito, led….e così via. (ATTENZIONE: nel nostro Sketch la posizione in cui collochiamo i vari componenti non conta, quindi non andremo MAI a specificare nel programma quale linea alimentare NELLA BREADBOARD e quale no).
Le lettere e i numeri indicano le linee, rispettivamente, i numeri vanno ad individuare la linea orizzontale della breadboard e le lettere individuano le linee verticali della breadboard.
I simboli + e – ai lati della breadboard si comportano come le linee verticali individuate dalle lettere.
-“RGB”: E’ un semplice led a 4 vie che può assumere tre colorazioni: Red, Green, Blue. (Rosso, Giallo, Blu).
-“Buzzer”: E’ un componente hardware anch’esso e ha come caratteristica quello di emettere suoni (man mano che andremo avanti capiremo come usarlo) ad ogni comando nello sketch corrisponde un suono diverso del buzzer, per farla breve immaginatelo come il compositore di suonerie di un Nokia 3310.
-“Potenziometro”: E’ uno strumento in grado di variare la potenza, quindi aumenta o diminuisce il flusso di corrente, funziona come un normale regolatore o un rubinetto dell’acqua.
-“Jumper”: Connettori, solitamente nella confezione vengono forniti in due colori rossi e neri, ma in giro se ne trovano anche di colori diversi, utili per i cablaggi più complessi.


Questo non è tutto il glossario Arduino, ma è da intendersi come glossario riferito a questo sketch, andando avanti con il tempo, aumentando la difficoltà, il glossario verrà ampliato. Per ora però fermiamoci a questo.
Come detto, Arduino è un PLC ovvero un Controllore Logico Programmabile.
Questo significa che Arduino è in grado di lavorare autonomamente dopo che il programma è stato lanciato e messo in memoria e questo verrà eseguito finchè noi non gli diciamo “STOP!”, a meno che nel programma da noi scritto e lanciato abbiamo scritto “esegui, controlla e se tutto è ok fermati” (ad esempio).
L’ultima ipotesi è plausibile, ma difficilmente un controllore esegue un solo ciclo, immaginate ad esempio una linea di produzione che lavora ininterrottamente: se il controllore dovesse avere il comando di eseguire un controllo alle ore 8:00 e il check di tutti gli apparati è andato a buon fine il controllore darà il via alla produzione e si spegnerà, alle ore 8:30 succede un guasto sulla linea nel settore 1 alla macchina A, nessuno riuscirebbe a capirlo specialmente se la produzione è completamente automatizzata e inoltre il controllore non ha rilevato nessun guasto in quanto è spento poiché in sua memoria è presente il check della linea delle ore 8:00 quindi secondo lui è ancora tutto ok e la linea sta procedendo senza intoppi, al contrario invece la linea sta producendo rottami, quindi ZERO RICAVI E MILIARDI DI EURO DI PERDITE.
Se invece il controllore ripete il check ogni 2 minuti o monitora tutti i parametri costantemente, al primo dato non coincidente il controllore va in emergenza, la linea si arresta, a schermo viene individuata la sezione e la macchina che ha subito il guasto e tramite un codice d’errore o avviso sapremo anche la causa dell’arresto della linea esempio: “Linea 1, Settore 1, Macchina A, PERDITA D’OLIO”.
Il controllore non è di certo molto prestante in termini di memoria ma per i piccoli progettini riesce ad essere molto valido (le memorie variano a seconda dei modelli più o meno recenti di Arduino).
D’altronde esistono le cosiddette “shield”, ovvero moduli (ad esempio il modulo ethernet, quello wi-fi, quello per il pilotaggio di motori, ecc.) da montare ad incastro direttamente sull’Arduino UNO tramite pin in modo da incrementare le sue funzioni.

Come è possibile notare sulla destra di Arduino UNO abbiamo la dicitura DIGITAL e dei numeri che vanno da 0 a 13: queste sono le uscite digitali ovvero le uscite che fanno fare il lavoro fisico al controllore, queste uscite vanno inserite nello sketch per indicare quali linee alimentare e quali no, solitamente le uscite 0 e 1 non vengono usate poiché sono impegnate da Arduino per comunicare con il computer.
Sulla sinistra invece troviamo la dicitura ANALOG IN e delle lettere affiancate a dei numeri che vanno da A0 ad A5: questi sono ingressi analogici che quindi possono “leggere” input variabili nel tempo.

Dopo questa intro siamo pronti per il primo sketch.
Materiale occorrente:
-Arduino UNO;
-Tre led (possibilmente di tre colori diversi: nel nostro caso due rossi e uno verde);
-3 resistenze da 180 Ohm;
-Pc e programma (IDE) Arduino.




Problema:
Supponiamo di avere una linea composta da tre macchine utensili, tutte e tre eseguono una determinata operazione ciclicamente, ad esempio: Macchina 1-Numerazione; Macchina 2-Controllo; Macchina 3-Imballaggio. Ogni macchina dopo l’utilizzo ritorna allo stato di riposo.
Le operazioni quindi sono tutte correlate, infatti se il pezzo non è stato controllato non può essere imballato e se non è stato numerato non può essere controllato.

Impostazione:
Supponiamo che le nostre tre macchine siano fisicamente i tre led a nostra disposizione.
Quindi dovranno accendersi in sequenza con un certo intervallo di tempo l’uno dall’altro; inoltre vogliamo che il lavoro (quindi l’accensione) sia ciclica e ininterrotta.

Procedimento:
Prendiamo come riferimento le uscite DIGITALI 5,6,7 (nessuno vi vieta di prendere la 2,3,4) oppure prendete la 0,1,2? Se avete letto attentamente il topic saprete che nella nostra domanda c’è “qualcosa che non va”, se lo pensate avete ragione altrimenti vi consiglio di rileggere poco più sopra. :)
Prese le uscite 5,6,7 prendete i vostri jumper rossi e collegateli a 3 linee della breadboard a caso (io vi consiglio di alimentare 3 linee in corrispondenza della lettera G e non andare oltre (e adesso capirete perché).

Prendete i tre led, vedrete che questi hanno due gambe:,una più corta ed una più lunga ad indicare anodo e catodo: la gamba lunga di ogni led andrà posizionato in F ed il lato corto in E.

Prendete le 3 resistenze e posizionatele in serie ad ogni led quindi ogni resistenza avrà una gamba sulla linea del ““ e una gamba sulla linea precedente a quella in cui avete messo la gamba corta del led, in questo caso in D.

Prendiamo ora i jumper rossi e alimentiamo le linee dei 3 led dalla parte della gamba lunga, quindi in posizione G.

Prendiamo ora due jumper neri e colleghiamoli rispettivamente:

-un capo di un jumper alla linea POWER di arduino posta sulla sinistra prendendo il pin dei 5 volts quindi al pin “5V” posto in alto agli ingressi digitali, l’altro capo del jumper lo colleghiamo alla linea ““ sulla sinistra della breadboard;

-il secondo jumper lo colleghiamo con un capo in GND ovvero in GROUND, quindi la terra e l’altro capo viene collegato alla linea E della breadboard.
Finita la parte del cablaggio avrete qualcosa di simile a questo: FOTO

IMG_20150610_210109.jpg
Adesso viene la parte della programmazione:
Arduino opera per COSTANTI INTERE (in questo caso), quindi con numeri decimali interi.
All’avvio del programma troveremo la pagina vuota e figureranno solo le voci:
VOID SETUP e VOID LOOP.
In testa allo sketch verranno dichiarate tutte le variabili del programma in particolare noi andremo a dichiarare le uscite, ovvero le linee utilizzate per il programma quindi le linee 5,6,7.
Nel SETUP saranno inseriti le “modalità” di ogni porta: quindi avremo, in generale, input e output. In questo caso solo output.
Nel LOOP invece andremo a dichiarare le variabili che costituiranno un “loop”, quindi un ciclo continuo e il ripetersi continuo delle operazioni, ciclicità che non cessa fin quando non viene dichiarato nel programma.


Dobbiamo dunque dichiarare le costanti intere tramite il comando:
const int = n° output; ”

Dichiariamo quindi:

const int cinque = 5;
const int sei = 6;
const int sette = 7;
le costanti varieranno in funzione del pin da voi scelto es: se avete scelto il pin 10 scriverete:
const int dieci = 10;
e così via…
La dicitura “cinque”,”sei”,”sette”,”dieci” non è obbligatoria ma ai fini dell’ordine e per semplificare la vita del programmatore la variabile viene sempre dichiarata: è più che altro una questione di semplicità.

Dichiariamo ora in setup i pin utilizzati tramite il comando pinMode e dichiariamo i pin 5,6,7 come output, Scriviamo quindi:

void setup() {
// put your setup code here, to run once:

pinMode(cinque,OUTPUT);
pinMode(sei,OUTPUT);
pinMode(sette,OUTPUT);
}

Dichiariamo adesso le variabili di loop perché sappiamo da problema che le nostre macchine lavorano in ciclo continuo, senza fermarsi e con un certo ordine.
Di conseguenza sappiamo che i 3 led non si accenderanno mai contemporaneamente ma si accenderanno ad intervalli di tempo definiti.
Quindi il ciclo prevede 3 stadi:
Primo stadio: Led 1 collegato a pin 5, accesso; Led 2 collegato a pin 6, spento; Led 3 collegato a pin 7, spento.
Secondo stadio: Led 1 collegato a pin 5, spento; Led 2 collegato a pin 6, acceso; Led 3 collegato a pin 7, spento.
Terzo stadio: Led 1 collegato a pin 5, spento; Led 2 collegato a pin 6, spento; Led 3 collegato a pin 7, acceso.
Essendo dichiarati in loop questi 3 stadi si ripetono all’infinito finchè ovviamente l’alimentazione non cessa o dopo nostro comando.
Il problema ora è far capire ad Arduino quali led accendere e quali spegnere, dichiareremo che i led accesi saranno individuati dal comando HIGH, mentre quelli spenti saranno individuati dal comando LOW.
Essendo i led collegati alle uscite digitali, nel linguaggio del programma lo stato dei led viene indicato dallo stato degli ingressi, quindi dallo stato delle uscite 5,6,7.
Il comando per dichiarare l’accensione e lo spegnimento dei led è:
" digitalWrite(NUMERO PORTA, HIGH oppure LOW) ", ovviamente attribuiremo HIGH oppure LOW in funzione dello stato in cui vogliamo che i nostri led/macchine stiano.

Scriviamo dunque all’interno di “void loop” i tre stadi:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
queste prime tre istruzioni completano il primo stadio.

Ci accorgiamo che il problema chiede qualcosa in più:

Abbiamo visto che le tre macchine non lavorano mai contemporaneamente, quindi i 3 led non si accenderanno mai insieme.
Supponiamo che le macchine lavorino ad una velocità elevata e che quindi il pezzo passa da una stazione all’altra in un tempo breve, fissiamo arbitrariamente questo tempo a mezzo secondo.

Dobbiamo quindi introdurre all’interno dello sketch la variabile DELAY, questa variabile indica la variabile “tempo” e messa prima di un’altra istruzione (quindi prima del secondo stadio) facente parte del loop ritarda l’esecuzione dell’istruzione successiva in questo caso dunque ritarda l’accensione del led 2 di un tot di tempo.
La variabile DELAY opera in millesimi di secondo (ms), quindi significa che impostando delay(500) imposteremo un ritardo di accensione di mezzo (0,5) secondo, impostando delay(1000) avremo un ritardo di 1 secondo, impostando delay(2000) avremo un ritardo di 2 secondi, e così via…
Il comando opera semplicemente così: " delay(tempo di ritardo in millisecondi) ";

Scrivo quindi nello sketch loop prima del secondo ciclo e dunque alla fine del primo stadio : delay(500) impostando quindi un ritardo a mezzo secondo.
Se impostato a fine di un ciclo di loop il delay sarà riferito al primo stadio facente parte del loop, quindi il ritardo sarà applicato al primo stadio dopo il completamento del ciclo.

Quindi scriviamo il delay nello sketch:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);

avendo ora tutte le nozioni possiamo impostare il ciclo di loop:
void loop(){
// put your main code here, to run repeatedly:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque, LOW);
digitalWrite(sei,HIGH);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque, LOW);
digitalWrite(sei,LOW);
digitalWrite(sette,HIGH);
delay(500);
}

Abbiamo quindi scritto il programma completo:

const int cinque = 5;

const int sei = 6;
const int sette = 7;

void setup() {
// put your setup code here, to run once:
pinMode(cinque,OUTPUT);
pinMode(sei,OUTPUT);
pinMode(sette,OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(cinque,HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque,LOW);
digitalWrite(sei,HIGH);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque,LOW);
digitalWrite(sei,LOW);
digitalWrite(sette,HIGH);
delay(500);
}


Lo step successivo è ora quello di controllare che il programma sia scritto bene per via della punteggiatura e dei comandi, se qualcosa non va il debug sarà segnalato in errore e ci indicherà anche quale errore abbiamo fatto e in che linea (la maggior parte delle volte).
Fate click quindi sulla spunta in alto a sinistra per controllare il programma.
Fatto ciò, inserite l’usb sul modulo Arduino e nel pc, nel programma da voi scritto andate in Strumenti/porta e selezionate la porta COM15 (nel nostro caso) o comunque la porta nella quale viene visualizzato il controllore che dipende dal vostro pc. Se il vostro è un primo avvio probabilmente non è stato rilevato il modulo.
Adesso lanciate il programma su arduino facendo click su “carica” posto accanto a “verifica”, aspettate che il programma sia caricato in memoria….
Enjoy.

Per avete un po’ più di dimestichezza provate a vedere cosa succede se invertite l’accensione e lo spegnimento dei led, provate inoltre ad aumentare o diminuire il delay e vedere cosa succede per avere un’esperienza nel pieno della scoperta e della novità.

Nota:
Ogni volta che il debug viene cambiato su arduino non succede nulla finchè il programma non viene lanciato sulla memoria di arduino, lanciato il nuovo programma, quello precedente viene perso, quindi prima di modificare e lanciare un nuovo programma creato da uno già esistente, salvate. :)


Ideato, scritto e corretto da:
@IlDottore & @PietroJoe
 
Ultima modifica:

nicola71

Nuovo Utente
6
2
Ottima guida! la programmazione dei PLC può essere complicata.. io per fortuna ho avuto modo di fare pratica con un micro plc della Pixsys acquistato per controllare un forno. Ora cerco di programmare con arduino per usi domestici :)
 

Il Dottore

Utente Attivo
824
155
CPU
i5 4690k
Dissipatore
Seidon 120v
Scheda Madre
Gigabyte Gaming 5
HDD
WD Blue 1 Tb
RAM
4x4 Gb @ 1333
GPU
Sapphire r9 290 tri-x
Monitor
AOC E2460SH
PSU
Antec Neo ECO 620w
Case
CM SCOUT II
Periferiche
Blue Snowball - HX Cloud 2 - Logitec G403 - Corsair Strafe MX Red
Net
50/20
OS
W8.1
Ottima guida! la programmazione dei PLC può essere complicata.. io per fortuna ho avuto modo di fare pratica con un micro plc della Pixsys acquistato per controllare un forno. Ora cerco di programmare con arduino per usi domestici :)

Grazie :) E complimenti per il lavoro di controllo svolto. :)
 

Francy2040

Utente Attivo
209
57
Buongiorno a tutti quelli che hanno il codice booleano nel sangue e a chi ha voglia di imparare!

Con questo piccolo tutorial passeremo da questo (immagine kit arduino uno) a questo (foto ultimo arduino).
Gli “sketch” sono tutti correlati tra di loro, quindi una volta impostato, scritto e lanciato il primo, il secondo sarà solamente un aggiustamento di quello iniziale. Il grado di difficoltà è basso ma comunque leggermente crescente andando avanti negli sketch.
Prima di passare al materiale occorrente è meglio fare delle piccole precisazioni per evitare flame o utenti che fanno la voce grossa perché sanno di più:
-Tutti gli sketch e i progetti si baseranno sullo “Starter Kit Arduino UNO”;
-Stiamo parlando della base Arduino;
-I consigli sono accettati ma siate conformi al topic;
-Non inquinate il topic;
-Proponete idee (magari anche anche qualche scorciatoia per arrivare alla stessa soluzione);


Materiale occorrente:
-Starter Kit Arduino UNO (ATTENZIONE: esistono molte copie in commercio del controllore e nelle specifiche viene scritto molto spesso “compatibile arduino” quindi le marche che riportano tale dicitura sono da ritenersi COPIE NON ORIGINALI; per sentito dire funzionano bene anch’esse, ma per sicurezza, affidabilità e compatibilità con il linguaggio degli sketch vi consigliamo l’originale);
-Rudimenti di programmazione;
-Tanta pazienza;
-Voglia di imparare;
-IDE Arduino (programma per gli sketch).


Prima di elencare cosa faremo e come lo andremo a fare è opportuno segnalarvi alcune piccole paroline che potrebbero (giustamente) non essere nel vostro vocabolario.
Glossario:
-“Sketch”: per Sketch intendiamo il programmino scritto al pc che mette in comunicazione i vari componenti che abbiamo messo sulla Breadboard.
-“Breadboard”: E’ una basetta, ovvero un circuito coperto da una sezione di plastica bianca numerata in modo da avere ordine tra le linee di massa, circuito, led….e così via. (ATTENZIONE: nel nostro Sketch la posizione in cui collochiamo i vari componenti non conta, quindi non andremo MAI a specificare nel programma quale linea alimentare NELLA BREADBOARD e quale no).
Le lettere e i numeri indicano le linee, rispettivamente, i numeri vanno ad individuare la linea orizzontale della breadboard e le lettere individuano le linee verticali della breadboard.
I simboli + e – ai lati della breadboard si comportano come le linee verticali individuate dalle lettere.
-“RGB”: E’ un semplice led a 4 vie che può assumere tre colorazioni: Red, Green, Blue. (Rosso, Giallo, Blu).
-“Buzzer”: E’ un componente hardware anch’esso e ha come caratteristica quello di emettere suoni (man mano che andremo avanti capiremo come usarlo) ad ogni comando nello sketch corrisponde un suono diverso del buzzer, per farla breve immaginatelo come il compositore di suonerie di un Nokia 3310.
-“Potenziometro”: E’ uno strumento in grado di variare la potenza, quindi aumenta o diminuisce il flusso di corrente, funziona come un normale regolatore o un rubinetto dell’acqua.
-“Jumper”: Connettori, solitamente nella confezione vengono forniti in due colori rossi e neri, ma in giro se ne trovano anche di colori diversi, utili per i cablaggi più complessi.


Questo non è tutto il glossario Arduino, ma è da intendersi come glossario riferito a questo sketch, andando avanti con il tempo, aumentando la difficoltà, il glossario verrà ampliato. Per ora però fermiamoci a questo.
Come detto, Arduino è un PLC ovvero un Controllore Logico Programmabile.
Questo significa che Arduino è in grado di lavorare autonomamente dopo che il programma è stato lanciato e messo in memoria e questo verrà eseguito finchè noi non gli diciamo “STOP!”, a meno che nel programma da noi scritto e lanciato abbiamo scritto “esegui, controlla e se tutto è ok fermati” (ad esempio).
L’ultima ipotesi è plausibile, ma difficilmente un controllore esegue un solo ciclo, immaginate ad esempio una linea di produzione che lavora ininterrottamente: se il controllore dovesse avere il comando di eseguire un controllo alle ore 8:00 e il check di tutti gli apparati è andato a buon fine il controllore darà il via alla produzione e si spegnerà, alle ore 8:30 succede un guasto sulla linea nel settore 1 alla macchina A, nessuno riuscirebbe a capirlo specialmente se la produzione è completamente automatizzata e inoltre il controllore non ha rilevato nessun guasto in quanto è spento poiché in sua memoria è presente il check della linea delle ore 8:00 quindi secondo lui è ancora tutto ok e la linea sta procedendo senza intoppi, al contrario invece la linea sta producendo rottami, quindi ZERO RICAVI E MILIARDI DI EURO DI PERDITE.
Se invece il controllore ripete il check ogni 2 minuti o monitora tutti i parametri costantemente, al primo dato non coincidente il controllore va in emergenza, la linea si arresta, a schermo viene individuata la sezione e la macchina che ha subito il guasto e tramite un codice d’errore o avviso sapremo anche la causa dell’arresto della linea esempio: “Linea 1, Settore 1, Macchina A, PERDITA D’OLIO”.
Il controllore non è di certo molto prestante in termini di memoria ma per i piccoli progettini riesce ad essere molto valido (le memorie variano a seconda dei modelli più o meno recenti di Arduino).
D’altronde esistono le cosiddette “shield”, ovvero moduli (ad esempio il modulo ethernet, quello wi-fi, quello per il pilotaggio di motori, ecc.) da montare ad incastro direttamente sull’Arduino UNO tramite pin in modo da incrementare le sue funzioni.

Come è possibile notare sulla destra di Arduino UNO abbiamo la dicitura DIGITAL e dei numeri che vanno da 0 a 13: queste sono le uscite digitali ovvero le uscite che fanno fare il lavoro fisico al controllore, queste uscite vanno inserite nello sketch per indicare quali linee alimentare e quali no, solitamente le uscite 0 e 1 non vengono usate poiché sono impegnate da Arduino per comunicare con il computer.
Sulla sinistra invece troviamo la dicitura ANALOG IN e delle lettere affiancate a dei numeri che vanno da A0 ad A5: questi sono ingressi analogici che quindi possono “leggere” input variabili nel tempo.

Dopo questa intro siamo pronti per il primo sketch.
Materiale occorrente:
-Arduino UNO;
-Tre led (possibilmente di tre colori diversi: nel nostro caso due rossi e uno verde);
-3 resistenze da 180 Ohm;
-Pc e programma (IDE) Arduino.




Problema:
Supponiamo di avere una linea composta da tre macchine utensili, tutte e tre eseguono una determinata operazione ciclicamente, ad esempio: Macchina 1-Numerazione; Macchina 2-Controllo; Macchina 3-Imballaggio. Ogni macchina dopo l’utilizzo ritorna allo stato di riposo.
Le operazioni quindi sono tutte correlate, infatti se il pezzo non è stato controllato non può essere imballato e se non è stato numerato non può essere controllato.

Impostazione:
Supponiamo che le nostre tre macchine siano fisicamente i tre led a nostra disposizione.
Quindi dovranno accendersi in sequenza con un certo intervallo di tempo l’uno dall’altro; inoltre vogliamo che il lavoro (quindi l’accensione) sia ciclica e ininterrotta.

Procedimento:
Prendiamo come riferimento le uscite DIGITALI 5,6,7 (nessuno vi vieta di prendere la 2,3,4) oppure prendete la 0,1,2? Se avete letto attentamente il topic saprete che nella nostra domanda c’è “qualcosa che non va”, se lo pensate avete ragione altrimenti vi consiglio di rileggere poco più sopra. :)
Prese le uscite 5,6,7 prendete i vostri jumper rossi e collegateli a 3 linee della breadboard a caso (io vi consiglio di alimentare 3 linee in corrispondenza della lettera G e non andare oltre (e adesso capirete perché).

Prendete i tre led, vedrete che questi hanno due gambe:,una più corta ed una più lunga ad indicare anodo e catodo: la gamba lunga di ogni led andrà posizionato in F ed il lato corto in E.

Prendete le 3 resistenze e posizionatele in serie ad ogni led quindi ogni resistenza avrà una gamba sulla linea del ““ e una gamba sulla linea precedente a quella in cui avete messo la gamba corta del led, in questo caso in D.

Prendiamo ora i jumper rossi e alimentiamo le linee dei 3 led dalla parte della gamba lunga, quindi in posizione G.

Prendiamo ora due jumper neri e colleghiamoli rispettivamente:

-un capo di un jumper alla linea POWER di arduino posta sulla sinistra prendendo il pin dei 5 volts quindi al pin “5V” posto in alto agli ingressi digitali, l’altro capo del jumper lo colleghiamo alla linea ““ sulla sinistra della breadboard;

-il secondo jumper lo colleghiamo con un capo in GND ovvero in GROUND, quindi la terra e l’altro capo viene collegato alla linea E della breadboard.
Finita la parte del cablaggio avrete qualcosa di simile a questo: FOTO

Adesso viene la parte della programmazione:
Arduino opera per COSTANTI INTERE (in questo caso), quindi con numeri decimali interi.
All’avvio del programma troveremo la pagina vuota e figureranno solo le voci:
VOID SETUP e VOID LOOP.
In testa allo sketch verranno dichiarate tutte le variabili del programma in particolare noi andremo a dichiarare le uscite, ovvero le linee utilizzate per il programma quindi le linee 5,6,7.
Nel SETUP saranno inseriti le “modalità” di ogni porta: quindi avremo, in generale, input e output. In questo caso solo output.
Nel LOOP invece andremo a dichiarare le variabili che costituiranno un “loop”, quindi un ciclo continuo e il ripetersi continuo delle operazioni, ciclicità che non cessa fin quando non viene dichiarato nel programma.


Dobbiamo dunque dichiarare le costanti intere tramite il comando:
const int = n° output; ”

Dichiariamo quindi:

const int cinque = 5;
const int sei = 6;
const int sette = 7;
le costanti varieranno in funzione del pin da voi scelto es: se avete scelto il pin 10 scriverete:
const int dieci = 10;
e così via…
La dicitura “cinque”,”sei”,”sette”,”dieci” non è obbligatoria ma ai fini dell’ordine e per semplificare la vita del programmatore la variabile viene sempre dichiarata: è più che altro una questione di semplicità.

Dichiariamo ora in setup i pin utilizzati tramite il comando pinMode e dichiariamo i pin 5,6,7 come output, Scriviamo quindi:

void setup() {
// put your setup code here, to run once:

pinMode(cinque,OUTPUT);
pinMode(sei,OUTPUT);
pinMode(sette,OUTPUT);
}

Dichiariamo adesso le variabili di loop perché sappiamo da problema che le nostre macchine lavorano in ciclo continuo, senza fermarsi e con un certo ordine.
Di conseguenza sappiamo che i 3 led non si accenderanno mai contemporaneamente ma si accenderanno ad intervalli di tempo definiti.
Quindi il ciclo prevede 3 stadi:
Primo stadio: Led 1 collegato a pin 5, accesso; Led 2 collegato a pin 6, spento; Led 3 collegato a pin 7, spento.
Secondo stadio: Led 1 collegato a pin 5, spento; Led 2 collegato a pin 6, acceso; Led 3 collegato a pin 7, spento.
Terzo stadio: Led 1 collegato a pin 5, spento; Led 2 collegato a pin 6, spento; Led 3 collegato a pin 7, acceso.
Essendo dichiarati in loop questi 3 stadi si ripetono all’infinito finchè ovviamente l’alimentazione non cessa o dopo nostro comando.
Il problema ora è far capire ad Arduino quali led accendere e quali spegnere, dichiareremo che i led accesi saranno individuati dal comando HIGH, mentre quelli spenti saranno individuati dal comando LOW.
Essendo i led collegati alle uscite digitali, nel linguaggio del programma lo stato dei led viene indicato dallo stato degli ingressi, quindi dallo stato delle uscite 5,6,7.
Il comando per dichiarare l’accensione e lo spegnimento dei led è:
" digitalWrite(NUMERO PORTA, HIGH oppure LOW) ", ovviamente attribuiremo HIGH oppure LOW in funzione dello stato in cui vogliamo che i nostri led/macchine stiano.

Scriviamo dunque all’interno di “void loop” i tre stadi:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
queste prime tre istruzioni completano il primo stadio.

Ci accorgiamo che il problema chiede qualcosa in più:

Abbiamo visto che le tre macchine non lavorano mai contemporaneamente, quindi i 3 led non si accenderanno mai insieme.
Supponiamo che le macchine lavorino ad una velocità elevata e che quindi il pezzo passa da una stazione all’altra in un tempo breve, fissiamo arbitrariamente questo tempo a mezzo secondo.

Dobbiamo quindi introdurre all’interno dello sketch la variabile DELAY, questa variabile indica la variabile “tempo” e messa prima di un’altra istruzione (quindi prima del secondo stadio) facente parte del loop ritarda l’esecuzione dell’istruzione successiva in questo caso dunque ritarda l’accensione del led 2 di un tot di tempo.
La variabile DELAY opera in millesimi di secondo (ms), quindi significa che impostando delay(500) imposteremo un ritardo di accensione di mezzo (0,5) secondo, impostando delay(1000) avremo un ritardo di 1 secondo, impostando delay(2000) avremo un ritardo di 2 secondi, e così via…
Il comando opera semplicemente così: " delay(tempo di ritardo in millisecondi) ";

Scrivo quindi nello sketch loop prima del secondo ciclo e dunque alla fine del primo stadio : delay(500) impostando quindi un ritardo a mezzo secondo.
Se impostato a fine di un ciclo di loop il delay sarà riferito al primo stadio facente parte del loop, quindi il ritardo sarà applicato al primo stadio dopo il completamento del ciclo.

Quindi scriviamo il delay nello sketch:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);

avendo ora tutte le nozioni possiamo impostare il ciclo di loop:
void loop(){
// put your main code here, to run repeatedly:
digitalWrite(cinque, HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque, LOW);
digitalWrite(sei,HIGH);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque, LOW);
digitalWrite(sei,LOW);
digitalWrite(sette,HIGH);
delay(500);
}

Abbiamo quindi scritto il programma completo:

const int cinque = 5;

const int sei = 6;
const int sette = 7;

void setup() {
// put your setup code here, to run once:
pinMode(cinque,OUTPUT);
pinMode(sei,OUTPUT);
pinMode(sette,OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(cinque,HIGH);
digitalWrite(sei,LOW);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque,LOW);
digitalWrite(sei,HIGH);
digitalWrite(sette,LOW);
delay(500);
digitalWrite(cinque,LOW);
digitalWrite(sei,LOW);
digitalWrite(sette,HIGH);
delay(500);
}


Lo step successivo è ora quello di controllare che il programma sia scritto bene per via della punteggiatura e dei comandi, se qualcosa non va il debug sarà segnalato in errore e ci indicherà anche quale errore abbiamo fatto e in che linea (la maggior parte delle volte).
Fate click quindi sulla spunta in alto a sinistra per controllare il programma.
Fatto ciò, inserite l’usb sul modulo Arduino e nel pc, nel programma da voi scritto andate in Strumenti/porta e selezionate la porta COM15 (nel nostro caso) o comunque la porta nella quale viene visualizzato il controllore che dipende dal vostro pc. Se il vostro è un primo avvio probabilmente non è stato rilevato il modulo.
Adesso lanciate il programma su arduino facendo click su “carica” posto accanto a “verifica”, aspettate che il programma sia caricato in memoria….
Enjoy.

Per avete un po’ più di dimestichezza provate a vedere cosa succede se invertite l’accensione e lo spegnimento dei led, provate inoltre ad aumentare o diminuire il delay e vedere cosa succede per avere un’esperienza nel pieno della scoperta e della novità.

Nota:
Ogni volta che il debug viene cambiato su arduino non succede nulla finchè il programma non viene lanciato sulla memoria di arduino, lanciato il nuovo programma, quello precedente viene perso, quindi prima di modificare e lanciare un nuovo programma creato da uno già esistente, salvate. :)


Ideato, scritto e corretto da:
@IlDottore & @PietroJoe
Ben fatto, questa guida è molto interessante per iniziare la programmazione con arduino e affini
 

Il Dottore

Utente Attivo
824
155
CPU
i5 4690k
Dissipatore
Seidon 120v
Scheda Madre
Gigabyte Gaming 5
HDD
WD Blue 1 Tb
RAM
4x4 Gb @ 1333
GPU
Sapphire r9 290 tri-x
Monitor
AOC E2460SH
PSU
Antec Neo ECO 620w
Case
CM SCOUT II
Periferiche
Blue Snowball - HX Cloud 2 - Logitec G403 - Corsair Strafe MX Red
Net
50/20
OS
W8.1
Chiedo scusa per l'assenza, FORSE e dico FORSE siamo tornati! :D
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!