Arduino & Firefly
Uno strumento molto potente per creare sofistificati modelli parametrici è senza dubbio Grasshopper. Grasshopper è un editor visuale per lo scripting, completamente gratuito e progettato in modo da non richiedere conoscenze di programmazione. attraverso un intuitivo metodo grafico basato su interfaccia a nodi, l'utente definisce sequenze di istruzioni che vengono tradotte in modelli tridimensionali nella finestra di Rhino. [Arturo Tedeschi, Architettura Parametrica]
Quindi al contrario di Rhinoscript non richiede la conoscenza di linguaggi di rpogrammazione. Tuttavia manca della capacità di comunicare con hardware esterno come, ad esempio, Arduino. Anche qui non avere dimestichezza con i linguaggi può essere un ostacolo, ed è qui che entra in gioco Firefly. La caratteristica principale di questo plug-in di grasshopper è la possibilità di far dialogare quasi in tempo reale inpu e output dal mondo phisical al digital, attraverso un interfaccia visiva!
Cominciamo!
Per prima cosa dobbiamo avere installato sul nostro computer:
- Rhinoceros (4.0 sr8 o 5.0)
- Grasshopper (v. 8.004 o più recente)
- Arduino IDE
A questo punto scarichiamo dal sito la fersione più recente di Firefly e seguiamo le istruzioni per installarla ed la palette di firefly comparirà nel menu di grasshopper.
Per prima cosa, dobbiamo verificare che firefly comunichi con Arduino per la porta giusta:
- Posizioniamo il nodo Ports Aviable sul desk di Grasshopper
- Adesso trasciniamo il nodo Open Port e colleghiamo il suo input Port all'output dell'altro nodo
- Ora dobbiamo trascinare un Boolean Toggle da Params>Input>Boolean Toggle
- Colleghiamo il suo output all'input Open del Open/Close Port
- A questo punto creiamo due Panel da Params>Input>Panel e li colleghiamo all'output dei componenti Open Port e Aviable Port
Se tutto è andato bene dovreste ottenere un graficante messaggio HOORAAY
Perfetto adesso il passo successivo è quello di vedere gli input che riceve dai Pin analogici e Digitali.
Piccola, ma importante, digressione sui Pin di Arduino:
I segnali in ingresso o in uscita, possono essere analogici o digitali. Un segnale analogico può assumere qualsiasi valore (all'interno di un range noto). Con notevole semplificazione, si può pensare che siano "analogiche" tutte le grandezze fisiche misurabili nell'ambiente. Un segnale digitale può assumere due soli stati (High/Low, 1/0), corrispondenti a due livelli di tensione convenzionali (ad esempio, 5-0V). Con simile semplificazione, si può pensare che siano "digitali" tutte le informazione scambiate tra componenti logici (microprocessori, memorie, interfaccie di rete, display...). Possiamo quindi schematizzare in questo modo:
Dei pin digitali solo alcuni sono predisposti per segnali di tipo PWM (per maggiori dettagli rimando al post precedente) qui sotto sono quelli in verde. Infine ci sono 6 pin dedicati ai segnali analogici (in giallo), ma solo in input, ossia questi pin servono principalmente per acquisire dei segnali provenienti da sensori di tipo analogico: trimmer, potenziometri, fororesistenze, ultrasuoni, IR, ecc… ossia tutti quei sensori che possono generare un segnale analogico in funzione della loro stimolazione (luminosa, meccanica, ecc).
Sapere questo come vedremo è estremamente importante, come vedremo in seguito, per creare i nostri progetti.
Bene, andiamo avanti. Adesso quindi vogliamo che gli input analogici di Arduino vengano letti da firefly, come possiamo fare?
- Per prima cosa trascianiamo nel desk il componente Uno Read (Firefly>Arduino Boards>Uno Read)
- Colleghiamo l'output di Port Aviable al port input di Uno Read
- Prendiamo un nuovo Bolean Toggle e colleghiamolo allo start input di Uno Read
- Colleghiamo un Panel per output di Uno Read
- Prendiamo un GH_Timer (Params>Special>Timer) e colleghiamolo all'Uno Read.
- Settiamo come valore del timer 1ms, in questo modo i valori che otteremo saranno aggiornati pressochè in tempo reale
- Attiviamo il bolean Toggle
A questo punto vedremo apparire dei valori nei vari panel di output (ricordiamo che dagli analogici avrevo valori compresi tra 0 e 1023 e dai digitali 0[low] e 1[HIGH]) anche se non abbiamo sensori collegati ai pin analogici vedremo comunque dei valori, che cambiano in continuazione, niente paura si tratta semplicimente di disturbi statici (white noise) ininfluenti per noi. Se avete fatto tutto bene dovreste trovarvi con una situazione del genere:
Il prossimo passo sarà quello di far rispondere il nostro modello agli input analogici.