€29,00 IVA Inclusa
Disponibilità immediata.
Shield di espansione, compatibile con le varie schede Arduino e con la nostra Fishino UNO che, senza praticamente impegnare risorse hardware, permette di avere a disposizione ben 16 uscite in PWM e 16 ingressi/uscite digitali aggiuntivi
|
Shield di espansione, compatibile con le varie schede Arduino e con la nostra Fishino UNO che, senza praticamente impegnare risorse hardware, permette di avere a disposizione ben 16 uscite in PWM e 16 ingressi/uscite digitali aggiuntivi. Non solo, le schede sono sovrapponibili fino ad un massimo di 8, consentendo di gestire con Arduino fino a 128 I/O digitali e 128 uscite PWM aggiuntive; il tutto reso completamente trasparente all’utilizzatore tramite una libreria realizzata ad-hoc.
Il prodotto viene fornito completamente montato per quanto concerne tutta la parte SMD, mentre rimarrà da saldare la sola parte dei connettori verso Arduino e verso i dispositivi esterni. N.B. Arduino/Fishino e i servo RC non sono compresi (vedere prodotti correlati). |
Perchè è stata realizzata
|
Per quanto pratiche e capaci di realizzare innumerevoli applicazioni, le schede Arduino e compatibili hanno due limiti: la memoria di programma relativamente ridotta e la ridotta quantità di uscite disponibili, specie di I/O cui si può assegnare un segnale PWM. Per esempio, una Arduino/Fishino UNO dispone di sole sei uscite PWM e, a meno di non generare i relativi segnali via software (con notevole impegno del processore), permette il pilotaggio di un solo driver e quindi un solo LED RGBW di potenza, o in alternativa di sei led monocromatici.
Lo stesso limite emerge quando si vogliono pilotare più di 6 servomotori con le stesse schede; la realizzazione di un robot tipo “hexapod”, che richiede ben 12 servi, risulta problematica, se non impossibile. Anche gli ingressi e le uscite digitali sono limitati; sempre parlando delle schede Arduino, abbiamo un totale di 13 I/O digitali e 6 ingressi analogici, utilizzabili anch’essi in digitale; sembrerebbero anche abbondanti, se non fosse che molti di questi vengono utilizzati per le periferiche a bordo o dagli shield di espansione. In pratica, realizzando un progetto con uno shield Ethernet/WiFi, una memoria SD e che necessita dell’uscita seriale e di qualche ingresso analogico, restano a disposizione solo sei I/O digitali che sono spesso insufficienti per progetti di media complessità. |
La Libreria
|
Come già accennato, per questa scheda abbiamo realizzato un’apposita libreria software, denominata Octopus, dotata di alcune particolarità che ne rendono semplicissimo l’utilizzo. La prima particolarità interessante della libreria si può notare dalle linee dell’include file (Octopus.h):
#define Octopus __octopus() e dalle linee del file sorgente (Octopus.cpp): OctopusClass &__octopus() Wire.begin(); prima dell’utilizzo della libreria, risulta impossibile creare la variabile statica Octopus al momento del caricamento del programma, visto che l’interfaccia Wire in quel momento non è ancora stata inizializzata. // return number of boards founduint8_t getNumBoards(void) const; Come detto in precedenza, la frequenza del PWM è unica per ogni scheda, quindi per ogni gruppo di 16 uscite PWM; è impostabile tramite le due funzioni seguenti, la prima scheda per scheda e la seconda per tutte le schede connesse in un solo comando: // set pwm frequency for a single connected board Nella prima occorre indicare il numero di scheda (che va da 0 a Octopus.getNumBoards()) e la frequenza di PWM, da 24 Hz a 1.526 Hz; nella seconda è sufficiente indicare la frequenza e tutte le schede verranno impostate su quella. All’accensione, la frequenza preimpostata è di 200 Hz, adatta ai servocontrolli ma anche ai LED. Il valore delle uscite PWM è impostabile, analogamente alle librerie di Arduino, tramite la funzione seguente: // pwm output Ad esempio, per impostare l’uscita 30 ( la terzultima della seconda scheda connessa) al 50% del valore massimo, occorre scrivere Octopus.analogWrite(30, 2048);Il terzo parametro opzionale, invert, è utile nel caso si connettano dei led in uscita sfruttando le uscite in modalità open collector e collegandone gli anodi al positivo; in questo caso si ha bisogno di un’uscita inversa (più tempo resta alta, meno corrente scorre nel led) ed è quindi necessario impostare il parametro |
Uno Sketch di prova
|
Per concludere, presentiamo un semplice sketch che permette di visualizzare una “coda” luminosa utilizzando 16 LED connessi alle uscite PWM (Listato 1). Il codice inizializza l’interfaccia seriale, stampa un messaggio, inizializza l’I²C, stampa il numero di schede rilevate e, utilizzando la prima di esse (uscite PWM da 0 a 15) crea una sorta di ‘serpente’ luminoso sfruttando 16 led. I valori di luminosità del ‘serpente’ sono preventivamente calcolati nella setup ed inseriti in una tabella contenente 16 valori; a seconda del punto di partenza della tabella (variabile ‘i’ nel loop) la ‘testa del serpente’ si trova in un punto differente, creando quindi l’effetto visivo voluto. Come si nota, a parte il dover inserire ‘Octopus.’ davanti ai comandi analogWrite() l’utilizzo è praticamente identico alla libreria nativa di Arduino. L’unica cosa degna di nota è il calcolo dei valori di luminosità, effettuato qui con un polinomio del secondo ordine in modo da creare un effetto di onda; sono possibili altri metodi con funzioni trigonometriche o semplicemente con una variazione lineare su cui potrete sperimentare; ad esempio:for(int k = 0; k < 16; k++) sinTable[k] = 4096 * sin(M_PI / 16 * k);per un andamento sinusoidale, oppure for(int k = 0; k < 16; k++) per un andamento bilineare. Concludiamo qui la descrizione della nostra scheda Octopus; potete ora sperimentare i diversi effetti luminosi utilizzando ad esempio il driver Colibrì presentato nel numero scorso di Elettronica In. |
Documentazione e link utili
|
Documentazione Tecnica | |
PDF italiano |
-
€89,00 IVA Inclusa
Disponibilità immediata.
-
€9,90 IVA Inclusa
Disponibilità immediata.
-
€8,00 IVA Inclusa
Disponibilità immediata.
-
€7,50 IVA Inclusa
Momentaneamente esaurito: arriva il 05/05/2025
-
€11,00 IVA Inclusa
Disponibilità immediata.
-
€9,00 IVA Inclusa
Disponibilità immediata.
-
-
€129,00 IVA Inclusa
Disponibilità immediata.
-
€43,90 IVA Inclusa
Momentaneamente esaurito, data di arrivo da confermare.