Un PLC da laboratorio, costruito su una scheda Arduino, che si programma dal browser.
Un PLC (controllore logico programmabile) è il "cervello" delle macchine automatiche: legge pulsanti e sensori, decide cosa fare secondo un programma e comanda lampade, motori, valvole. In azienda si programma con software dedicati e linguaggi standard.
ArduLearn trasforma una scheda Arduino in un piccolo PLC didattico: gli studenti scrivono il programma in una pagina web, con gli stessi linguaggi dell'industria, lo caricano sulla scheda e lo vedono funzionare dal vivo, con i collegamenti che si colorano quando sono attivi.
| Oggetto | A cosa serve |
|---|---|
| Una scheda: Arduino UNO R4 WiFi oppure Arduino Mega 2560 con la shield DFRobot Ethernet & PoE (DFR0850) | È il PLC: esegue il programma e comanda ingressi e uscite. |
| Un PC Windows con l'app ArduLearn.exe | Solo per installare ArduLearn sulla scheda (e ogni tanto per aggiornarla o diagnosticarla). Poi non serve più. |
| Un cavo USB (USB-C per la UNO R4, USB-B per la Mega) | Per la prima installazione e per alimentare la scheda. |
| La rete: Wi-Fi della scuola (UNO R4) o cavo di rete (Mega) | I PC degli studenti aprono la pagina della scheda attraverso la rete. |
| Facoltativi: pulsanti, LED, relè, sensori, display OLED o LCD | Per costruire impianti veri sul banco. Si può anche iniziare senza nulla, con i pulsanti virtuali della pagina. |
La scheda contiene sia il PLC sia un piccolo sito web: la pagina di ArduLearn. Chi apre l'indirizzo della scheda trova l'editor, scrive o modifica il programma e, se ha il PIN del docente, lo carica. Da quel momento la scheda lavora da sola: anche se si chiude il browser o si spegne il PC, il programma continua a girare, e resta in memoria anche togliendo l'alimentazione.
Il programma e la pagina sono gli stessi: cambiano il collegamento alla rete e il numero di pin.
Si collega al Wi-Fi della scuola, senza schede aggiuntive. Ha a bordo una matrice di 12×8 LED rossi che mostra l'indirizzo della scheda e, se il programma lo chiede, numeri, scritte e icone. Si aggiorna dalla pagina, anche da Internet.
Si collega con il cavo di rete (e, con uno switch PoE, prende anche l'alimentazione dal cavo). Ha molti più pin, adatti a impianti grandi. I programmi si conservano sulla microSD della shield.
| UNO R4 WiFi | Mega 2560 + shield DFR0850 | |
|---|---|---|
| Rete | Wi-Fi 2,4 GHz (rete della scuola o rete propria "ArduLearn-xxxx") | Cavo Ethernet (DHCP, oppure indirizzo automatico 169.254.x.y con cavo diretto al PC) |
| Pin digitali | D0–D13 | D0–D53 (alcuni riservati, vedi sotto) |
| Ingressi analogici | A0–A5 (A4 e A5 riservati se si usano display o orologio) | A0–A15 |
| Uscite PWM (~) | 3, 5, 6, 9, 10, 11 | 2–13, 44–46 |
| Programma attivo | fino a 7.680 byte, nella memoria interna | fino a 8.192 byte sulla microSD (3.072 byte senza microSD) |
| Programmi salvati | 99 posti nella memoria del modulo Wi-Fi | 99 posti sulla microSD (senza microSD: nessuno) |
| Matrice LED | sì (12×8) | no |
| Aggiornamenti | dalla pagina, anche da Internet, oppure con l'app | solo con l'app, via USB |
| Studenti collegati insieme | fino a circa 7 collegamenti contemporanei | una richiesta alla volta: con molti PC la pagina può rallentare |
Alcuni pin sono già usati dalla scheda stessa e nella pagina compaiono bloccati, con il motivo scritto accanto:
Il programma da installare una sola volta sul PC del docente: prepara le schede, le trova in rete, fa diagnosi.
L'app si scarica da GitHub ed è un singolo file, ArduLearn.exe, che non richiede installazione: basta avviarlo.
github.com/danielemichelotti/ArduLearn/releases/latest/download/ArduLearn.exe
L'app ha quattro schede in alto: Trova le schede, Carica il firmware, Monitor seriale e Guida.
I programmi salvati sulla scheda non vengono cancellati da un nuovo caricamento del firmware. Durante il caricamento non scollegare il cavo e non chiudere l'app.
Le colonne mostrano nome, indirizzo, tipo di scheda, rete, stato (RUN/STOP), nome del programma e se la pagina è aggiornata o da aggiornare. Se non compare nulla, l'app stessa elenca le cause più probabili (stessa rete, firewall, reti che isolano i dispositivi).
Serve per la diagnosi: scegli la porta (1), premi Connetti (2) e usa i pulsanti a destra. I più utili sono info (nome, indirizzo, programma), run / stop e soprattutto pin reset, che riporta il PIN del docente a 1234. Per la Mega ci sono anche le impostazioni di IP fisso e indirizzo MAC; per la UNO R4 i comandi wifi (stato della rete) e wifi clear (dimentica la rete Wi-Fi salvata). L'elenco completo è in Appendice.
La quarta scheda contiene un riassunto di queste istruzioni, sempre a portata di mano anche senza il manuale.
Da scheda nuova a scheda pronta per la lezione: circa dieci minuti, una volta sola.
Una scheda appena installata non conosce ancora nessuna rete Wi-Fi. Allora crea una sua rete, chiamata ArduLearn-xxxx (le ultime quattro lettere cambiano da scheda a scheda), con password ardulearn. La si usa solo per la configurazione.
wifi clear dal monitor seriale dell'app.Il nome in rete della scheda è del tipo ardulearn-2b28: sui PC che lo supportano la pagina si apre anche con http://ardulearn-2b28.local, comodo perché non cambia anche se cambia l'indirizzo numerico.
Un giro guidato dell'editor: cosa c'è, cosa fa il docente, cosa possono fare gli studenti.
Chiunque apra la pagina può guardare, modificare e provare. Alcune operazioni però cambiano la scheda per tutti e richiedono il PIN del docente:
| Senza PIN (studenti) | Con il PIN (docente) |
|---|---|
| Modificare il programma nell'editor, aprire esempi, slot e file, scaricare il progetto come file. Usare interruttori e cursori virtuali, provare le uscite a mano. Vedere tutto dal vivo. | Caricare un programma sulla scheda, avviarlo e fermarlo. Salvare, rinominare ed eliminare i programmi salvati. Cambiare le impostazioni (rete, nome, display, PIN). Aggiornare la scheda. |
Il PIN si inserisce premendo Docente, oppure viene chiesto al momento del bisogno. Resta valido finché non chiudi la scheda del browser. Se lo dimentichi: app → Monitor seriale → pin reset (torna a 1234).
Quando il docente ha fatto l'accesso, ogni sua modifica al progetto viene salvata sulla scheda come bozza condivisa (circa un secondo dopo). Gli studenti con la casella 👁 Segui il docente attiva (lo è di serie) vedono comparire le modifiche in tempo reale sul proprio schermo: la lezione alla lavagna diventa condivisa. Se uno studente ha fatto anche lui delle modifiche, la pagina chiede se mostrare quello del docente o tenere il proprio.
Sulla Mega la bozza condivisa richiede la microSD.
Quattro idee da spiegare prima di qualsiasi linguaggio.
Il PLC non "aspetta" gli eventi: ripete in continuazione lo stesso giro. Legge tutti gli ingressi, calcola il programma dall'inizio alla fine, aggiorna le uscite e ricomincia. Un giro si chiama ciclo e la sua durata compare nella barra di stato ("ciclo 0.18 ms"): in un programma normale meno di un millisecondo.
{1.1} per vedere "23.5").Tutti i tempi sono in millisecondi: 1000 = 1 secondo, 5000 = 5 secondi, 60000 = 1 minuto. In LADDER e GRAFCET si può scrivere anche nel formato dei PLC industriali: T#5S, T#500MS, T#1M30S.
Molte cose devono succedere nell'istante in cui un segnale cambia, non per tutto il tempo in cui resta acceso: contare una pressione, far avanzare una sequenza. Il fronte di salita è un impulso che dura un solo ciclo quando il segnale passa da 0 a 1 (quello di discesa, da 1 a 0). È troppo breve per vederlo a occhio, ma è quello che fa contare 1 anche se il pulsante resta premuto a lungo.
✎ Esperimento da fare in classe: collega un pulsante a un contatore, prima direttamente e poi attraverso un fronte. Tenendo premuto... cosa cambia?
Dire alla scheda cosa è collegato a ogni pin, e dare un nome a ingressi, uscite e memorie.
La configurazione dei pin fa parte del progetto e viene inviata con "Carica sulla scheda". Di solito non serve toccarla: quando in un blocco scegli un pin libero, la pagina lo configura da sola (e te lo dice con un messaggio).
| Modo | Quando si usa |
|---|---|
| Non usato | Pin libero. |
| Ingresso | Sensori che danno già 0 V / 5 V (moduli con uscita digitale). |
| Ingresso pull-up | Pulsanti, interruttori e finecorsa collegati tra il pin e GND: è il modo consigliato, non servono resistenze. |
| Uscita | LED, moduli relè, cicalini attivi. |
| Analogico | Solo pin A: potenziometri, fotoresistenze, sensori analogici. |
| Modulo | Impostato da solo quando un blocco modulo (sensore, servo...) usa il pin. |
Con l'ingresso pull-up il pin vale 1 a riposo e 0 quando il pulsante è premuto (perché lo collega a GND). È il contrario di quello che ci si aspetta! Per questo il blocco "Ingresso digitale" ha l'opzione Inverti (in LADDER e GRAFCET: la casella logica inversa nella scheda Pin): così premuto = 1. Quando la pagina configura un pulsante da sola, attiva già Inverti.
Ogni pin usato può avere un nome (es. Marcia, Motore): solo lettere, cifre e "_", senza spazi, iniziando con una lettera. I nomi compaiono nei blocchi e sono gli operandi del LADDER.
Nei progetti LADDER e GRAFCET ogni pin riceve anche un indirizzo in stile industriale, assegnato in ordine di pin:
| Indirizzo | Cosa indica | Esempio |
|---|---|---|
%I0.0, %I0.1… | ingressi digitali | il primo pulsante configurato |
%Q0.0, %Q0.1… | uscite digitali | la prima lampada |
%IW64, %IW66… | ingressi analogici (numero 0–1023) | un potenziometro |
%QW64… | uscite PWM (numero 0–255) | un LED regolabile |
%M0.0 … %M7.7 | merker: memorie di un bit (vero/falso) | "ciclo avviato" |
%MW0 … %MW30 | memorie numeriche (interi) | "pezzi prodotti" |
La Tabella degli ingressi, delle uscite e delle variabili (come la tabella dei tag di TIA Portal) riassume nome, tipo, indirizzo, pin e valore dal vivo. Nei progetti LADDER e GRAFCET, sotto, si aggiungono i merker con + Bool (%M) e + Int (%MW). Scrivendo in LADDER un nome nuovo, il merker viene creato da solo.
Il pulsante Prova uscita sotto un'uscita accende e spegne il pin a mano: utilissimo per controllare i collegamenti prima di scrivere il programma. Funziona solo se la configurazione dei pin è già sulla scheda e se quell'uscita non è comandata dal programma in esecuzione (altrimenti prima premi Ferma).
Sulla Mega i pin riservati (rete, microSD, display) compaiono bloccati, con il motivo scritto accanto.
Blocchi collegati da fili, come uno schema funzionale: il modo più intuitivo per cominciare.
Ogni blocco fa una cosa sola: legge un pulsante, fa un AND, aspetta, conta, accende un'uscita. Ha gli ingressi a sinistra e le uscite a destra. Un filo porta il valore di un'uscita nell'ingresso di un altro blocco: il segnale scorre da sinistra verso destra.
La scheda esegue i blocchi nell'ordine giusto da sola: prima quelli che forniscono i dati, poi quelli che li usano. Non importa dove li metti sul foglio.
Un ingresso non collegato vale 0, oppure il valore fisso scritto nelle proprietà (per esempio il tempo PT di un temporizzatore).
Sul blocco apre un menu con: Guida del blocco, proprietà, etichetta, Cambia in (per esempio da AND a OR o da TON a TOF senza rifare i fili), valori degli ingressi, scollega fili, duplica, copia, elimina. Sul foglio vuoto: incolla, aggiungi nota, seleziona tutto. Trascinando con il tasto destro si seleziona un'area.
Ctrl+Z/Ctrl+Y annulla/ripeti · Ctrl+C/Ctrl+V copia/incolla · Ctrl+D duplica · Canc elimina · Ctrl+A tutto · rotellina = zoom · trascina lo sfondo per spostarti.
Tre blocchi esistono solo nella pagina e permettono di provare un programma senza cablare niente:
Funzionano quando il programma è caricato e non ci sono modifiche in sospeso. Anche gli studenti senza PIN possono usarli: attenzione, agiscono davvero sulla scheda.
Numeri fra parentesi = valori proposti. Tutti i blocchi hanno una guida completa con il tasto destro.
| Blocco | Cosa fa | Esempio |
|---|---|---|
| Ingresso digitale (IN) | Legge un pin: 1 o 0. Opzione Inverti per i pulsanti con pull-up. | pulsante di marcia su D2 |
| Uscita digitale (OUT) | Accende il pin se l'ingresso è diverso da 0. | LED o relè su D13 |
| Ingresso analogico (ADC) | Legge un pin A: numero da 0 a 1023. | potenziometro su A0 |
| Uscita PWM (PWM) | Uscita "regolabile" da 0 a 255, solo pin con ~. | luminosità di un LED su D9 |
| Interruttore virtuale (SW) | Interruttore o pulsante cliccabile nella pagina. | marcia per le prove |
| Cursore virtuale (SLD) | Numero regolabile (0…100). | soglia o tempo da provare |
| Indicatore (VIEW) | Mostra un valore: numero, lampada o barra. | tempo che passa in un TON |
| AND · OR · XOR · NAND · NOR | Porte logiche da 2 a 8 ingressi. AND: tutti veri; OR: almeno uno; XOR: diversi; NAND e NOR: il contrario di AND e OR. | luce delle scale con due interruttori (XOR) |
| NOT | Inverte: 1 diventa 0 e viceversa. | spia "porta chiusa" |
| Memoria SR | S accende e ricorda, R spegne. Se S e R sono insieme prevale il RESET (scelta consigliata per sicurezza) o il SET. | marcia/arresto del motore |
| Fronte (EDGE) | Impulso di un ciclo quando l'ingresso sale, scende o entrambi. | contare le pressioni |
| Passo-passo (TOGGLE) | Ogni pressione su T cambia stato; R spegne. | un solo pulsante accende e spegne |
| Ritardo all'accensione (TON) | Q si accende quando IN è rimasto a 1 per PT ms (1000). ET = tempo trascorso. | luce che si accende dopo 5 s |
| Ritardo allo spegnimento (TOF) | Q resta acceso ancora PT ms dopo che IN torna a 0. | ventola del bagno che gira ancora 60 s |
| Impulso (TP) | A ogni fronte di IN, Q resta acceso esattamente PT ms. | luce delle scale 30 s |
| Lampeggiatore (BLINK) | Con EN a 1 lampeggia: ON ms acceso, OFF ms spento (500/500). | spia di allarme |
| Contatore (CTUD) | CU conta +1, CD −1, R azzera; Q si accende a CV ≥ PV (10). Può contare anche all'indietro. | 6 bottiglie per cassa |
| Costante (K) | Un numero fisso da usare in più blocchi. | lo stesso tempo per tre timer |
| Operazione (MATH) | A+B, A−B, A×B, A÷B (intera), resto, minimo, massimo. Diviso 0 dà 0. | 235 ÷ 10 = 23 |
| Confronto (CMP) | Q = 1 se A >, ≥, <, ≤, =, ≠ B. | è buio se luce < 300 |
| Scala (MAP) | Converte un intervallo in un altro (0…1023 → 0…100). | percentuale di un potenziometro |
| Soglia con isteresi (HYST) | Si accende sopra una soglia e si spegne solo sotto un'altra, più bassa. | termostato: 28 °C / 26 °C |
| Selettore (SEL) | Passa A se SEL = 0, altrimenti B. | manuale/automatico |
| Limita (LIM) | Tiene un valore fra un minimo e un massimo. | 0…255 prima di un PWM |
| Scritta su OLED / LCD | Scrive un testo con valori ({1}, {2}) in una riga e colonna; può lampeggiare o scorrere. | "Temp: {1.1} C" |
| Immagine su OLED | Mostra un'immagine o un'animazione disegnata nella scheda Immagini. | icona della ventola |
| Pagine display | Più schermate sullo stesso display, sfogliabili con pulsanti. | temperatura / umidità / ora |
| Immagine / Testo su matrice LED | Solo UNO R4 WiFi: icone 12×8 e testi che scorrono. | "23C" che scorre |
| Passo (sequenza) | Un passo di una sequenza: si attiva con IN, passa al successivo quando T è vero ed è trascorso almeno MIN ms. Uno solo è "passo iniziale". | semaforo a passi |
| Ripeti N volte | Con START dà N impulsi (ON/OFF ms). | cicalino che suona 3 volte |
| Script ST / Script C | Un piccolo programma scritto a testo dentro un blocco (capitolo 11). | somma con un ciclo FOR |
I blocchi dei moduli (sensori e attuatori) sono nel capitolo 13.
Il linguaggio a contatti, nello stile di Siemens TIA Portal: il programma si disegna come uno schema elettrico.
Un programma LADDER è fatto di segmenti (righe di schema). A sinistra c'è la barra di alimentazione, sempre "in tensione". La corrente scorre verso destra attraversando i contatti e arriva alle bobine.
─┤ ├─: fa passare la corrente se il suo operando vale 1.─┤/├─: fa passare la corrente se l'operando vale 0.─( )─: il suo operando diventa 1 se arriva corrente, 0 se non arriva.Il pulsante di Marcia accende il Motore; un contatto dello stesso Motore, in parallelo alla Marcia, lo "tiene" acceso quando si rilascia il pulsante. Il contatto NC di Arresto in serie interrompe tutto. È l'esempio "Marcia / arresto (LADDER)".
%I0.0) o un numero. Si può cliccare direttamente <??.?> sul disegno. Un nome nuovo diventa un merker.| Elemento | Cosa fa |
|---|---|
─┤P├─ / ─┤N├─ | Fronte di salita / discesa: passa corrente per un solo ciclo quando l'operando cambia. |
─┤NOT├─ | Inverte la corrente che arriva da sinistra. |
─(/)─ | Bobina negata: l'operando è il contrario della corrente. |
─(S)─ / ─(R)─ | Imposta a 1 (e resta 1) / riporta a 0. Coppia tipica per memorizzare. |
| TON · TOF · TP | Ritardo all'inserzione, alla disinserzione, impulso. PT = tempo (es. T#5S), ET = tempo trascorso (facoltativo). Nomi automatici "IEC_Timer_0"... |
| CTU · CTD · CTUD | Contatori avanti, indietro, avanti/indietro, con PV (valore da raggiungere) e CV (valore attuale). |
| CMP | Contatto di confronto: ==, <>, >, >=, <, <= fra due valori. |
| MOVE · ADD · SUB · MUL · DIV · MOD · SCALE | Copiano o calcolano valori quando arriva corrente (divisione intera). |
| SR · RS | Flip-flop con reset prevalente / set prevalente. |
| OLED · LCD · IMG · PAGE · MTX · MTXT | Scritte, immagini e pagine sui display e sulla matrice (con corrente). |
| SCL | Script ST eseguito solo quando arriva corrente. |
| Si può scrivere | Esempio |
|---|---|
| nome della tabella variabili o etichetta del pin | Marcia, "Motore" |
| indirizzo | %I0.0, %Q0.1, %IW64, %M1.3, %MW4 |
| costante o tempo | 100, TRUE, T#2S, T#1M30S |
| pin diretto | D22, A0 |
Per le macchine che lavorano a fasi: una tappa dopo l'altra, si avanza quando succede qualcosa.
FC_dx, il finecorsa di destra).| Scrivi | Significa |
|---|---|
Marcia AND FC_sx (anche · o *) | entrambe vere |
A OR B (anche +) | almeno una vera |
NOT FC1 oppure /FC1 | FC1 falso |
RE(Pulsante) / FE(Pulsante) | fronte di salita / discesa del pulsante |
X3 | la tappa 3 è attiva |
X2.T > T#5S | la tappa 2 è attiva da più di 5 secondi (tappa a tempo) |
Livello >= 500 | confronto fra una variabile e un numero (= <> < <= > >=) |
1 oppure TRUE | sempre vera (si passa subito) |
| parentesi | (A OR B) AND NOT C |
In alternativa, in Recettività scritta come si può scegliere Segmento LADDER: la condizione è vera quando la corrente arriva in fondo a destra del segmento.
| Tipo | Cosa fa | Esempio |
|---|---|---|
| N | uscita accesa finché la tappa è attiva (la più usata) | N Avanti |
| S / R | accende e lascia acceso / spegne | S Allarme … R Allarme |
| D | accesa dopo un ritardo dall'attivazione della tappa | D Sirena T#2S |
| L | accesa solo per un tempo limitato | L Cicalino T#1S |
| V | scrive un numero in una variabile finché la tappa è attiva | Angolo := 45 |
| P1 | un calcolo eseguito una volta, all'attivazione | Pezzi := Pezzi + 1 |
| MSG | messaggio su OLED o LCD | "Carrello in avanti" |
Nel pannello del grafico (senza nulla selezionato) c'è la Condizione di reinizializzazione: quando è vera (es. Emergenza) tutte le tappe si spengono e si torna alla situazione iniziale. Nella vista LADDER del progetto si possono aggiungere segmenti di sicurezza che leggono lo stato delle tappe (X1, X2…) e, per esempio, resettano le uscite con l'emergenza: così fa l'esempio "Carrello avanti e indietro (GRAFCET)".
Per calcoli, cicli e scelte fra molti casi: un piccolo programma a testo dentro un blocco.
Gli script sono un'estensione facoltativa, utile nelle classi che studiano già la programmazione. Il blocco Script ST (testo strutturato, il linguaggio testuale dei PLC) e il blocco Script C (una funzione nello stile di Arduino) si usano nei progetti a blocchi; in LADDER c'è il box SCL.
IN1…IN4 (solo lettura), uscite OUT1, OUT2: il blocco mostra solo quelli usati.x := 5;) e ricordano il valore da un ciclo all'altro (massimo 16 per script).IF … THEN … ELSIF … ELSE … END_IF;, FOR … TO … DO … END_FOR;, WHILE, REPEAT … UNTIL, EXIT.+ - * / MOD, confronti, AND OR XOR NOT. Funzioni: ABS MIN MAX LIMIT MILLIS.(* … *) o //. Solo numeri interi; niente CASE.(* somma da 1 a N *) somma := 0; FOR i := 1 TO IN1 DO somma := somma + i; END_FOR; OUT1 := somma; OUT2 := IN1;
& sono le uscite (fino a 4).static ricordano il valore.if/else, switch, for, while, e funzioni come min max abs constrain map millis.digitalRead, delay, Serial, numeri con la virgola, array o stringhe: ingressi e uscite passano sempre dai fili del blocco. La pagina spiega l'errore se li si scrive.Far "parlare" l'impianto: messaggi, valori, icone e animazioni.
| Display | Collegamento | Note |
|---|---|---|
| OLED 128×64 (0,96" o 1,3") | 4 fili: GND, 5V, SDA, SCL (Mega: pin 20 e 21; UNO R4: A4 e A5) | 21 caratteri × 8 righe. Controller SSD1306 o SH1106 (se vedi pixel a caso, scegli l'altro nelle Impostazioni). |
| LCD 16×2 / 20×4 con modulo I²C | come l'OLED (indirizzo di solito 0x27 o 0x3F) | Si imposta in Impostazioni → Display LCD. |
| LCD collegato in parallelo | 6 fili sui pin scelti nelle Impostazioni | Quei pin diventano riservati. |
| Matrice LED 12×8 | già sulla UNO R4 WiFi | Numeri brevi, scritte che scorrono, icone. |
I display sono facoltativi e si possono collegare anche a scheda accesa: la scheda li cerca ogni 3 secondi. Se nessun blocco scrive sul display, la scheda mostra da sola nome, indirizzo e stato: comodo per sapere l'indirizzo senza PC. In Impostazioni il pulsante Cerca dispositivi I²C dice cosa è collegato.
I blocchi Scritta su OLED e Scritta su LCD (in LADDER i box OLED e LCD, in GRAFCET l'azione MSG) scrivono un messaggio di massimo 40 caratteri in una riga e colonna, quando EN vale 1. Nel testo i segnaposto vengono sostituiti dai valori dei fili V1 e V2:
| Segnaposto | Risultato | Esempio (V1 = 235) |
|---|---|---|
{1} {2} | il valore di V1 o V2 | "Pezzi: {1}" → Pezzi: 235 |
{1.1} {1.2} | con uno o due decimali | "T: {1.1} C" → T: 23.5 C |
{1:3} | almeno 3 cifre, con zeri davanti | V1 = 7 → 007 |
{1:3.1} | le due cose insieme | V1 = 57 → 05.7 |
L'effetto può essere Lampeggia o Scorre (se il testo è più lungo della riga). Con il blocco Pagine display si preparano fino a 16 schermate diverse e si sfogliano con dei pulsanti: ogni scritta ha l'ingresso PAGINA che dice in quale schermata compare.
Con il blocco Testo su matrice LED il testo resta fermo se entra (circa 2 caratteri, per esempio "42"), altrimenti scorre. Il blocco Immagine su matrice LED mostra un'immagine 12×8, anche animata. La pagina mostra in basso a destra un'anteprima identica a quella della scheda.
Quando nessun programma usa la matrice, la scheda la usa per sé: un puntino che si muove = RUN, un quadrato = STOP, un trattino = nessun programma, "!" = errore nel programma, e l'indirizzo che scorre quando la rete cambia.
Le immagini fanno parte del progetto e occupano spazio nel programma (la pagina dice quanti byte). Si mostrano con i blocchi Immagine su OLED e Immagine su matrice LED.
Blocchi pronti per i componenti più usati nei laboratori, senza scrivere codice.
I blocchi dei moduli sono nella categoria Moduli (sensori e attuatori) della colonna di sinistra (in LADDER, nel menu Box…). Scegliendo i pin nel blocco, la pagina li riserva al modulo.
| Modulo | Cosa dà / cosa fa | Collegamento e note |
|---|---|---|
| Suono (tone) | Fa suonare un cicalino passivo alla frequenza FREQ (Hz) finché EN = 1. | Cicalino passivo o piccolo altoparlante con resistenza da 100 Ω. Sulla Mega mentre suona non funziona il PWM sui pin 9 e 10. |
| DHT11 / DHT22 | Temperatura e umidità in decimi (235 = 23,5 °C), aggiornate ogni 2 s. | Un pin dati; resistenza da 10 kΩ verso 5 V (i moduli su basetta ce l'hanno già). |
| Sonda DS18B20 | Temperatura in decimi, circa una volta al secondo; uscita OK se la sonda risponde. | Un pin dati con resistenza da 4,7 kΩ fra dati e 5 V. Una sonda per pin. |
| Distanza HC-SR04 | Distanza in millimetri (fino a MAX cm), circa 16 volte al secondo. | Pin TRIG e ECHO. |
| Encoder rotativo | Posizione (fra MIN e MAX) e verso di rotazione della manopola. | Pin A: Mega 2, 3, 18 o 19; UNO R4 solo 2 o 3. Massimo 2 encoder. Il pulsante della manopola è un ingresso normale. |
| Servomotore | Porta il servo all'ANGOLO (0–180°), con velocità VEL facoltativa. | Un pin di segnale. Massimo 4 servo. Sulla Mega disattiva il PWM sui pin 44–46. Più servo: alimentazione esterna a 5 V. |
| Motore passo-passo | Velocità o posizione (TARGET in passi; 2048 = un giro del 28BYJ-48). | 28BYJ-48 con scheda ULN2003 (4 pin) oppure driver STEP/DIR. Velocità entro qualche centinaio di passi/s. |
| Striscia LED RGB (WS2812) + Colore LED | Fino a 60 LED colorati: si sceglie il colore di ogni LED (o di tutti) e la luminosità. | Pin DIN; alimentazione a 5 V, separata se i LED sono molti. |
| Orologio RTC DS3231 | Ore, minuti, giorno… anche come HHMM (es. 1030) per gli orari. | Sugli stessi fili del display (SDA/SCL). Si regola in Impostazioni → Orologio con l'ora del PC. |
Schemi semplici per il banco di lavoro, e le regole per non rovinare le schede (e nessuno si faccia male).
| Componente | Collegamento consigliato |
|---|---|
| LED | resistenza da 470 Ω – 1 kΩ in serie (va bene per entrambe le schede) |
| Pulsante, interruttore, finecorsa | fra pin e GND, modo "Ingresso pull-up" con Inverti; gli arresti con contatto NC |
| Cicalino attivo (suona da solo) | come un LED, su un'uscita digitale (se assorbe poco) o tramite transistor/relè |
| Cicalino passivo | blocco "Suono", resistenza da 100 Ω |
| Motore in corrente continua | mai diretto: relè o driver per motori, alimentazione separata |
| Alimentazione della scheda | cavo USB, alimentatore sul connettore della scheda, oppure PoE (solo Mega con la shield) |
Il programma in esecuzione, i programmi salvati sulla scheda, i file sul PC e gli esempi.
.plcb sul PC), Apri file…. Sotto: blocchi, pin usati e spazio occupato ("572 byte su 7680 disponibili")..plcb si aprono su qualsiasi scheda ArduLearn. Un progetto scritto per la Mega aperto sulla UNO R4 viene adattato ai pin disponibili (la pagina avvisa di controllarli).In fondo alla scheda Progetti ci sono esempi pronti in tutti i linguaggi: Primo programma, Marcia / arresto, Luce delle scale, Termostato, Contapezzi, Dimmer PWM, Semaforo a passi, Somma con ciclo FOR (ST), Media e allarme (C), Carrello avanti e indietro e Semaforo con tempi di tappa (GRAFCET), e le versioni LADDER di marcia/arresto, luce delle scale, lampeggio con due timer, contapezzi con display. Si aprono con Apri nell'editor; poi basta "Carica sulla scheda". Molti funzionano anche senza collegare nulla, con i pulsanti virtuali.
ArduLearn migliora nel tempo: ecco come portare le schede all'ultima versione.
Quando esce una nuova versione, nella barra in alto compare la pastiglia lampeggiante ⬆ Aggiornamento disponibile. È il PC a controllare su Internet (ogni 6 ore): la scheda non ha bisogno di uscire in Internet.
Programmi salvati, rete Wi-Fi e impostazioni restano. Alla fine la pagina si ricarica e mostra le versioni installate.
La Mega si aggiorna con l'app: scarica l'ultima versione di ArduLearn.exe da GitHub, collega la scheda via USB e usa Carica il firmware; poi Trova le schede → Prepara la microSD / Aggiorna la pagina per la pagina. Anche la UNO R4 WiFi si può aggiornare così. I programmi salvati restano.
Sette esercitazioni, dalla più semplice alla più complessa. Ognuna ha la soluzione pronta negli Esempi della pagina.
Ogni esercizio indica l'obiettivo, cosa collegare (tutti si possono fare anche solo con i comandi virtuali), la soluzione commentata e qualche variante per differenziare. Le soluzioni si aprono da Progetti → Esempi: si può far lavorare la classe da zero e mostrare la soluzione alla fine, oppure partire dall'esempio e chiedere le varianti.
Prendere confidenza con la pagina: blocchi, fili, caricamento, comandi virtuali.
ConsegnaUn interruttore nella pagina fa lampeggiare il LED della scheda (D13): 0,3 s acceso e 0,3 s spento.
MaterialeNessuno: il LED "L" è già sulla scheda.
SOLUZIONE FBD · esempio "Primo programma"Interruttore virtuale → Lampeggiatore (EN) con ON = OFF = 300 ms → Uscita digitale D13. Quando l'interruttore è spento, EN vale 0 e il LED resta spento.
SOLUZIONE LADDER · esempio "Lampeggio con due timer"Due TON da 0,5 s si resettano a vicenda: quando il primo finisce accende l'uscita e avvia il secondo, che a sua volta resetta il primo. È lo schema classico dei PLC senza blocco lampeggiatore.
VariantiCapire la memoria (autoritenuta) e la priorità dell'arresto.
ConsegnaIl pulsante MARCIA accende il motore, che resta acceso anche rilasciando il pulsante; il pulsante ARRESTO lo spegne. Se si premono insieme, deve vincere l'arresto.
MaterialeDue pulsanti su D2 (Marcia) e D3 (Arresto) verso GND; un LED su D13 al posto del motore. Oppure solo pulsanti virtuali.
SOLUZIONE FBD · esempio "Marcia / arresto"Il pulsante vero e quello virtuale entrano in un OR (così funzionano entrambi) e vanno in S e R di una Memoria SR con "prevale RESET". L'uscita Q comanda il motore.
SOLUZIONE LADDER · esempio "Marcia / arresto (LADDER)"Contatto Marcia in parallelo al contatto del Motore (autoritenuta), in serie al contatto NC di Arresto, e la bobina Motore.
Domande per la classeUsare un temporizzatore a impulso.
ConsegnaPremendo il pulsante la luce si accende e resta accesa 5 secondi, poi si spegne da sola.
MaterialeUn pulsante su D2, un LED su D13 (o pulsante virtuale).
SOLUZIONE FBD · esempio "Luce delle scale"Pulsante (vero o virtuale) → Impulso (TP) con PT = 5000 ms → luce. Durante l'impulso altre pressioni non allungano il tempo.
SOLUZIONE LADDER · esempio "Luce delle scale (LADDER)"Contatori, fronti e display.
ConsegnaUn sensore conta i pezzi che passano; a 10 pezzi si accende la spia "scatola piena" e sul display compare il conteggio. Un pulsante azzera.
MaterialePulsante o sensore su un ingresso, pulsante di reset, LED; facoltativi display OLED o LCD.
SOLUZIONE FBD · esempio "Contapezzi"Contatore con PV = 10: CU dal sensore, R dal reset, Q alla spia, CV al display ("Pezzi: {1}").
SOLUZIONE LADDER · esempio "Contapezzi con display (LADDER)"Le sequenze: prima con i blocchi Passo, poi con il GRAFCET.
ConsegnaVerde 4 s, giallo 1,5 s, rosso 4 s, e poi di nuovo verde, all'infinito.
MaterialeTre LED (verde, giallo, rosso) su tre uscite, con resistenze; facoltativo il display.
SOLUZIONE FBD · esempio "Semaforo a passi"Tre blocchi Passo in catena: il verde è il passo iniziale; T = 1 (costante "Sempre vero") e MIN = durata della luce. L'AVANTI dell'ultimo torna all'IN del primo.
SOLUZIONE GRAFCET · esempio "Semaforo con tempi di tappa"Tre tappe con azione N sulle lampade (e MSG sul display). Le transizioni usano il tempo di tappa: X1.T > T#5S (verde), X2.T > T#2S (giallo), X3.T > T#5S (rosso, e si torna alla tappa 1). Nell'esempio i tempi sono un po' diversi da quelli della consegna: un buon primo esercizio è correggerli.
Confronta le due soluzioni: quale si legge meglio?
Un vero esercizio di automazione con finecorsa, marcia ed emergenza.
ConsegnaCon il carrello a sinistra (FC_sx) e il pulsante Marcia, il carrello va avanti fino al finecorsa destro (FC_dx), poi torna indietro fino a FC_sx e si ferma. L'emergenza ferma tutto e riporta la sequenza all'inizio.
MaterialePulsanti per Marcia, Emergenza (NC), due finecorsa; due LED o due relè per Avanti e Indietro.
SOLUZIONE GRAFCET · esempio "Carrello avanti e indietro (GRAFCET)"Tappa 1 Attesa; T1 = Marcia AND FC_sx; tappa 2 Avanti (N Avanti); T2 = FC_dx; tappa 3 Indietro (N Indietro); T3 = FC_sx torna alla 1.
Condizione di reinizializzazione: Emergenza. Un segmento LADDER di sicurezza resetta Avanti e Indietro con l'emergenza.
X4.T > T#3S).Grandezze analogiche, conversione e isteresi.
ConsegnaUn potenziometro simula un sensore di temperatura da 0 a 50 °C. La ventola si accende sopra 28 °C e si spegne solo sotto 26 °C; il display mostra la temperatura con un decimale.
MaterialePotenziometro su A0, LED o relè per la ventola, display OLED facoltativo.
SOLUZIONE FBD · esempio "Termostato"Ingresso analogico → Scala 0…1023 → 0…500 (decimi di grado) → Soglia con isteresi 280 / 260 → ventola. Il valore va anche al display OLED ("Temp:" con un decimale), insieme allo stato della ventola.
Domande per la classeArduLearn è uno strumento didattico: ecco cosa non fa, per scegliere gli esercizi giusti.
| Limite | Dettaglio |
|---|---|
| Non è un PLC di sicurezza | Non va usato per comandare macchine reali o proteggere persone. Gli arresti di emergenza veri devono agire direttamente sull'alimentazione, non passare dal programma. |
| Dimensione del programma | Massimo 96 blocchi (anche LADDER e GRAFCET diventano blocchi interni). Spazio: 7.680 byte (UNO R4), 8.192 byte (Mega con microSD), 3.072 byte (Mega senza microSD). Testi dei display e script: 1.024 byte (UNO R4), 512 byte (Mega). |
| Solo numeri interi | Niente numeri con la virgola: si lavora in decimi o centesimi. La divisione è intera (7 ÷ 2 = 3). |
| Memorie | Merker %M0.0–%M7.7 e parole %MW0–%MW30. I loro valori, i contatori e i temporizzatori ripartono da zero a ogni accensione: non esistono memorie "ritentive". |
| Script | ST: 16 variabili per script, codice fino a 400 byte, niente CASE. C: una funzione per blocco, niente virgola, array, stringhe, accesso diretto ai pin. Massimo 4000 istruzioni per ciclo. |
| Velocità | Adatto a segnali "umani" (pulsanti, finecorsa, sensori lenti). Non legge impulsi velocissimi (encoder industriali ad alta risoluzione, contatori veloci). |
| Corrente dei pin | Circa 20 mA (Mega) e 8 mA (UNO R4 WiFi) per pin, a 5 V: ogni carico più grande di un LED richiede relè o driver. |
| Rete Wi-Fi (UNO R4) | Solo 2,4 GHz, reti con password semplice (non WPA2-Enterprise/eduroam). Reti che isolano i dispositivi impediscono di vedere la scheda. Circa 7 collegamenti contemporanei: con classi numerose alcuni PC possono dover ricaricare la pagina. |
| Rete via cavo (Mega) | La scheda risponde a una richiesta alla volta: con molti studenti collegati la pagina può essere lenta. Mentre cerca l'indirizzo in rete (DHCP) il ciclo può fermarsi qualche secondo. |
| Pagina | Pensata per PC con mouse e schermo grande: su telefono non è utilizzabile. |
| Linguaggi | Un progetto usa un solo linguaggio (il GRAFCET include segmenti LADDER); non c'è conversione automatica fra FBD, LADDER e GRAFCET. |
| Aggiornamenti | UNO R4 dalla pagina (serve Internet sul PC); Mega solo via USB con l'app. |
| Schede supportate | Solo UNO R4 WiFi e Mega 2560 con shield DFR0850. Non Arduino Uno classico, UNO R4 Minima o altre schede. |
| Uso come Arduino normale | Sulla UNO R4 WiFi ArduLearn sostituisce il firmware del modulo Wi-Fi: per tornare a usare le librerie Wi-Fi di Arduino si deve riscrivere il firmware originale del modulo Wi-Fi dall'IDE Arduino (Strumenti → Aggiornamento firmware). Sulla Mega basta caricare un altro sketch. |
Le situazioni più frequenti in laboratorio, e cosa fare.
| Problema | Cosa fare |
|---|---|
| L'app non trova la scheda | PC e scheda devono essere sulla stessa rete. Controlla il firewall di Windows (deve permettere l'app). Sulla UNO R4 guarda l'indirizzo che scorre sulla matrice e aprilo a mano. Alcune reti Wi-Fi scolastiche isolano i dispositivi: serve una rete dedicata. |
| La pagina non si apre con il nome .local | Usa l'indirizzo numerico (dall'app, dalla matrice o dal display). Il nome .local non funziona su tutte le reti. |
| La UNO R4 non si collega al Wi-Fi | Dopo 3 tentativi torna sulla sua rete ArduLearn-xxxx: ricollegati e ricontrolla nome e password. Reti a 5 GHz o con nome utente personale non sono supportate. |
| "PIN errato" / PIN dimenticato | App → Monitor seriale → pin reset: il PIN torna 1234. |
| "Carica sulla scheda" dice di correggere i problemi | Leggi l'elenco nel pannello a destra (clic su un problema = porta al blocco): pin non scelto, pin riservato, blocchi senza collegamenti necessari, troppi blocchi. |
| I pulsanti virtuali non fanno nulla | Il programma deve essere caricato e senza modifiche in sospeso ("✓ uguale alla scheda"). |
| Il pulsante funziona "al contrario" | Con l'ingresso pull-up attiva Inverti (o "logica inversa" in LADDER/GRAFCET). |
| Un'uscita non si accende | Usa Prova uscita nella scheda Pin (a programma fermo) per separare i problemi di cablaggio da quelli di programma. Ricorda il limite di corrente del pin. |
| Uno studente ha "perso" il lavoro | Riaprendo la pagina sullo stesso PC le modifiche non caricate vengono riprese. Per il futuro: Scarica file o uno slot. |
| Le modifiche di uno studente vengono sostituite | È attivo "Segui il docente": togli la spunta per lavorare in autonomia. |
| Il display non mostra niente | Impostazioni → Cerca dispositivi I²C; controlla indirizzo e tipo (SSD1306/SH1106). Sulla Mega i fili vanno a 20/21, sulla UNO R4 ad A4/A5. |
| La Mega si riavvia aprendo il monitor seriale | È normale: il programma riparte dopo qualche secondo. |
| Il caricamento del firmware fallisce | Chiudi IDE Arduino e altri programmi che usano la porta, cambia cavo USB; sulla UNO R4 premi due volte il tasto RESET e riprova. |
| Sulla matrice LED compare una X | Il PLC non riesce a comunicare con il modulo Wi-Fi: scollega e ricollega l'alimentazione; se continua, ricarica il firmware con l'app. |
| "Aggiornamento non verificabile" | Il PC non raggiunge Internet (GitHub): aggiorna da un PC collegato o con l'app. |
Comandi del monitor seriale, glossario e contatti.
| Comando | Cosa fa | Schede |
|---|---|---|
help | elenco dei comandi | entrambe |
info | versione, nome, rete, indirizzo, programma, memoria libera | entrambe |
run / stop | avvia / ferma il programma (ricordato) | entrambe |
io, io on, io off | stato di ingressi, uscite e blocchi (una volta / ogni secondo / basta) | entrambe |
pin reset | PIN docente di nuovo 1234 | entrambe |
sd | diagnosi della microSD | Mega |
ip dhcp · ip A M G | indirizzo automatico · indirizzo fisso (anche dai campi dell'app) | Mega |
mac … | cambia l'indirizzo MAC (ogni scheda della rete deve averne uno diverso) | Mega |
wifi | stato del Wi-Fi | UNO R4 |
wifi clear | dimentica la rete e riattiva la rete ArduLearn-xxxx | UNO R4 |
wifi ap | passa alla rete della scheda senza dimenticare quella salvata | UNO R4 |
| PLC | Controllore logico programmabile: il "cervello" delle macchine automatiche. |
| Ciclo (scansione) | Un giro completo: lettura ingressi, esecuzione del programma, scrittura uscite. |
| FBD | Function Block Diagram: programma a blocchi collegati. |
| LADDER (KOP) | Linguaggio a contatti, simile a uno schema elettrico. |
| GRAFCET / SFC | Rappresentazione a tappe e transizioni delle sequenze. |
| Recettività | La condizione scritta su una transizione del GRAFCET. |
| Merker | Memoria interna di un bit (%M), usata come "relè ausiliario". |
| Pull-up | Modo di un ingresso che lo tiene a 1 a riposo: il pulsante verso GND lo porta a 0. |
| PWM | Uscita che si accende e spegne velocissima per regolare luminosità o velocità (0–255). |
| Fronte | L'istante in cui un segnale cambia; in ArduLearn dura un ciclo. |
| Firmware | Il programma "di base" installato sulla scheda con l'app: ArduLearn stesso. |
| Slot | Uno dei 99 posti in cui la scheda conserva i programmi salvati. |
| I²C | Il collegamento a 4 fili (GND, 5V, SDA, SCL) usato da display e orologio. |
| DHCP / .local | Il modo in cui la rete dà un indirizzo alla scheda / il nome facile della scheda (es. ardulearn-2b28.local). |
ArduLearn è stato ideato e realizzato da Daniele Michelotti. È software libero (licenza GPL-3.0): si può usare, copiare e migliorare liberamente.
E-mail: daniele.michelotti@gmail.com
Progetto, app e nuove versioni: github.com/danielemichelotti/ArduLearn
ArduLearn è gratuito: se ti è utile, puoi sostenerlo con una donazione su PayPal: paypal.me/danistn
Arduino, UNO e Mega sono marchi di Arduino S.r.l.; la shield Ethernet & PoE DFR0850 è un prodotto DFRobot. ArduLearn è un progetto indipendente, non affiliato a questi produttori.