La domanda me la sono posta io per primo, ma cosa sarebbe un Montacarichi teorico?
La risposta la trovate in questo topic sul forum di arduino: link
Visualizzatore montacarichi con Arduino nano.
l titolo del topic non menziona il Montacarichi, ma leggendo si scopre che l'utente sta seguendo un progetto scolastico nel quale non hanno ancora usato motori, servo RC e altre parti elettromeccaniche che potrebbero essere coinvolte se il progetto fosse concreto.
Per cui per mancanza di esperienza diretta si sono inventati il Montacarichi teorico. Esso è composto da 9 led a piano per 3 piani siamo al totale di 27 led e quindi è più pratico usare una scheda arduino MEGA.
Variante di progetto
Per sperimentare con le matrici di led 8x8 e il max7219 ho apportato delle varianti di progetto, vediamole:
Arduino nano al posto di arduino MEGA
3 matrici led 8x8 una per piano.
Display old con SSD1306
5 pulsanti gestiti con JC_Button library :
Pulsante rosso - Attiva/disattiva spostamento di piano
Pulsante blu - Spostamento in alto o spostamento di piano.
Pulsante verde - Spostamento in basso o spostamento di piano.
Pulsante grigio - Spostamento a destra.
Pulsante giallo - Spostamento a sinistra.
Funzionamento
All'avvio il montacarichi virtuale si trova al piano 0, prima posizione in basso a sinistra. I quattro tasti freccia UP(Blue), DOWN(Green), LEFT(Yellow) e RIGHT(Grey) permettono di posizionare il montacarichi virtuale in una delle 9 possibili posizioni. Il movimento in diagonale non è implementato.
Per cambiare piano non ho posto alcun vincolo di posizione, quindi da qualunque posizione sarà possibile salire o scendere di un piano. Premendo il pulsante rosso si attiva una specie di capslock che resta attivo per due secondi. Quando il capslock è attivo sul Display appare la scritta shift, ora i pulsanti UP e DOWN permettono lo spostamento di piano, mentre i pulsanti LEFT e RIGHT hanno la stessa funzione di prima. Per disattivare il capslock (se attivo) premere il pulsante rosso, oppure attendere che si disattivi automaticamente dopo 2 secondi. Con il capslock disattivato i pulsanti hanno la funzione descritta ad inizio di questa sezione.
Numero di piani
Il numero di piani può essere diverso da 3, ed in effetti per test ho aggiunto un piano. Nel codice ho dovuto modificare la macro MAX_N_PIANI. Non ho idea se ci sia un limite al numero di matrici poste in cascata, se c'è un limite questo influenzerà il numero massimo di piani. Mentre il valore minimo è di 1 piani. La libreria LedControl sembra possa gestire solo fino a 8 moduli 8x8.
Montacarichi concreto
Qualora il montacarichi si dovesse concretizzare, questo visualizzatore può ancora essere utile, tuttavia servirà apportare delle modifiche per indicare che il montacarichi è in movimento verso la destinazione selezionata. Quando in movimento i 4 led della posizione di destinazione dovranno alternare acceso spento ad indicare movimento. Raggiunta la destinazione si accenderanno tutti e 4.
In commercio ci sono diversi moduli relay tutti apparentemente simili, ma di
nessuno di questi pare essere reperibile una manuale d'uso. Per fortuna
qualcosa in rete si trova, ma non è facile distinguere tra fonti affidabile e
meno affidabili. Su youtube in effetti ci sono molti tutorial, ma a me
sinceramente non interessa tanto il tutorial, preferirei lo schema teorico
perché oltre a sapere come funziona saprei come collegarlo senza correre il
rischio di effettuare un collegamento errato dettato dalla poca comprensione
che ne ricavo guardando un video.
Ho cercato in passato nella rete e mai ho trovato qualcosa di chiaro ed non
equivocabile, non posso certo guardare tutti i video, ci impiegherei un tempo
spropositato, senza per questo avere la certezza di trovare un video
interessante ed esplicativo. Però l'ultima ricerca è stata sufficientemente
fruttuosa, infatti questo video su youtube è per me la fonte di ispirazione
necessaria per scrivere questo articolo.
Per chi fosse totalmente ignaro sull'argomento e bene che segua questi link di
seguito elencati:
Relay o Relè sono
componenti elettromeccanici in cui un elettromagnete (bobina) attira
magneticamente una leva che spinge meccanicamente due contatti elettrici
ad unirsi.
Accoppiatori
ottici o optocoupler sono componenti elettronici accoppiati otticamente.
Un emettitore di raggi infrarosso (IR
Led) è accoppiato
otticamente alla giunzione di base di un
transistor
sensibile ai
raggi infrarosso.
PCB o
Printed Circuit Board (semplicemente circuito stampato).
Lo
schema elettrico
teorico è una rappresentazione grafica composta da simboli e linee di
connessione. Il suo scopo è sia descrittivo che progettuale.
Isolamento galvanico
In commercio si trovano moduli relay con isolamento galvanico che a tale
scopo impiegano un accoppiatore ottico. Altri moduli relay sono privi di
questo isolamento il che riduce costi e dimensioni. Per la sperimentazione
pratica il modulo isolato offre maggiori garanzie sul fronte della sicurezza
che sul fronte del funzionamento pratico. Tuttavia per l'applicazione finale
il progettista può decidere di non usare alcuna separazione galvanica.
Attenzione solo il progettista a seguito di sperimentazione pratica e test
di laboratorio superati con successo può decidere in favore di un circuito
di comando del relay non isolato. Tutti gli altri sperimentatori è bene
usino moduli relay con isolamento galvanico, sia durante la sperimentazione
che nella applicazione finale.
Come correttamente descritto sono Low Level Trigger (LLT), cioè il relay si
eccita quando il pin di comando IN1 è LOW. Il comando con logica negata crea
non poca confusione al principiante che si aspetta il comportamento
opposto. Ovviamente esistono anche High Level Trigger (HLT) ma sono
meno diffusi. Questi moduli sono adatti ad essere comandati da schede
arduino la cui MCU lavora alla tensione di 5.0Vdc (Uno, Mega, nano), mentre
quando la MCU lavora a 3.3Vdc potrebbe non funzionare, ma per queste c'è una
sezione più avanti.
Figura 1: Modulo Relay 2 canali
L'immagine sopra è di qualità sufficiente a leggere anche i valori dei
componenti, incluso il transistor siglato J3Y equivalente a SS5080, BC817 ed
in genere sostituibile con qualunque transistor NPN con Hfe = 100 ÷ 250, IC
= 500 ÷ 800mA, VCE >= 25V.
Nel datasheet del relay
SONGLE
è specificato che la resistenza della bobina è di 70 ohm per la versione a
5.0Vdc. La corrente IL nella bobina la calcolo così: IL = 5.0V / 70 ohm
= 0,0714 Amper (71.4mA). Il transistor Q1 può erogare al massimo 800mA e c'è
quindi un abbondante margine.
Vediamo lo schema teorico di uno solo dei canali perché l'altro è identico.
Figura 2: Schema di un solo canale del modulo Relay 2 canali
Purtroppo la qualità della immagine dello schema non è delle migliori,
pazienza. In alto a sinistra si vede il jumper inserito e mi pare di capire
che il modulo arrivi così.
Bene sappiate che se il jumper è inserito non c'è isolamento galvanico
di cui accennavo prima, tuttavia il collegamento risulta semplificato perché
bastano solo 3 fili per comandare l'eccitazione del relay, cioè 5.0V, GND e
IN1 da collegare ad uno dei pin di arduino. Questo è sicuramente un
collegamento di comodo per testare il modulo appena arrivato.
In seguito per abilitare l'isolamento galvanico è necessario rimuovere il
jumper e collegare al pin 1 di J1 (JD-Vcc) la 5.0Vdc di un alimentatore
dedicato al relay, cioè separato da quello con cui è alimentato arduino. Il
negativo di questo alimentatore separato su uno dei due pin siglati GND,
meglio usare il GND su J1.
Mentre su J3 la 5.0Vdc su Vcc e il pin di comando su IN1. In totale avremo
minimo 4 fili per comandare uno dei relay del modulo a 2 canali. Aggiungendo
anche IN2 avremmo in totale 5 fili. In questo modo abbiamo l'isolamento
galvanico che è quello che più ci interessa.
Con schede a 3.3V
Quando usiamo una scheda che lavora con alimentazione di 3.3V dal pin GPIO di
controllo abbiamo:
High state circa 3.3V (o anche meno). Range valido 2.9÷3.3V.
Low state circa 0.0V (o anche più). Range valido 0.0V÷0.6V.
Con questi livelli lavora correttamente a patto di avere almeno una sorgente
di alimentazione a 5V con GND in comune alla tensione di 3.3V con la quale è
alimenta la MCU.
Dal pin della MCU scorrono circa 2.0mA quando lo stato di questo è LOW (relay
eccitato). Questa corrente è minima e non c'è alcun problema per arduino UNO,
MEGA, nano ecc, poiché ogni pin può erogare tranquillamente anche 30mA. Mentre
con MCU che lavorano solo a 3.3V c'è da documentarsi per ogni scheda, tuttavia
in genere in stato LOW la massima corrente è di circa 20mA per pin e anche in
questo caso non ci sono problemi.
Questi dati possono tornare utili (anche se non precisi) nel caso in cui con
un solo pin vogliamo eccitare diversi pin IN1, IN2 ecc. Ad esempio 2.0mA x 10
pin = 20mA, significa che con UNO, MEGA ecc possiamo eccitare 10 relay con un
solo pin e abbiamo margine. Mentre con MCU a 3.3V siamo al limite massimo
assoluto, quindi per rientrare ed avere un margine diciamo che al massimo
possiamo eccitare 8 relay. Diversamente ad esempio con ESP8266 il datasheet
specifica una Imax per pin di 12mA. Per raspberry pi siamo a circa 16mA per
pin. Per stare al sicuro ed evitare guasti occorre rimanere sotto i valori
specificati in ogni datasheet, purtroppo non sempre il datasheet è chiaro come
nel caso delle MCU AVR.
Collegamenti
Due diversi schemi di collegamento, il primo senza il jumper inserito con il
quale c'è isolamento galvanico. Questo collegamento richiede due
alimentatori uno per arduino UNO e l'altro per il modulo relay.
Figura 3: Collegamento con isolamento galvanico.
Mentre qui sotto il collegamento senza isolamento galvanico richiede un solo
alimentatore per alimentare arduino UNO. Adesso serve inserire il jumper tra
1 e 2 di J1, sempre che non l'abbiamo smarrito. Attenzione con questo
jumper, perché inserendolo tra 2 e 3 di J1 mettiamo in corto circuito la 5
volts.
Figura 4: Collegamento SENZA isolamento galvanico.
Anche con schede la cui MCU lavora a 3.3V ci serve almeno un sorgente di
alimentazione a 5V con GND in comune con la 3.3V. Ad esempio lo schema di
collegamento seguente mostra una scheda generica alimentata tramite USB che
fornisce la sorgente a 5V di cui necessitiamo.
Figura 5: Collegamento SENZA isolamento galvanico con MCU a 3.3V
Se pensiamo di usare la 3.3V al posto di 5V sbagliamo. Anche se potrebbe
sembrare funzionante non lo è. Un modo per usare la 3.3V c'è ma richiede la
modifica del resistore R1 in serie con il led di U1, R1 = 220 ohm è
sufficiente per lavorare con 3.3V. Questa modifica funziona solo con il
collegamento isolato di Figura 3, che richiede una alimentatore 5V dedicata
alla bobina del relay che lavora a 5V.