mercoledì 31 maggio 2023

Montacarichi con arduino

Montacarichi teorico

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.

Vai alla simulazione.


mercoledì 10 maggio 2023

Moduli Relays

Moduli relay

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.

Schema elettrico

Lo schema mostrato nel video sembra proprio quello usato dai moduli in commercio su amazon, ad esempio:Modulo Relay 5V a 2 canali con optoaccoppiatore Low-Level-Trigger

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.

Modulo Relay 2 canali
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.

Schema di un solo canale del modulo relay
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.

Arduino Uno collegato al Modulo Relay con isolamento galvanico
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.

arduino Uno collegato al modulo relay non isolato
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. 

Collegamento non isolato tra generic board con MCU a 3.3V
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.

Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale