Linux day 2012

Anche quest’anno il Luccalug organizzerà il  Linux day lucchese.

Io sarò presente con uno stand dedicato al processo di prototipazione con Arduino della ERA, e terrò un talk di presentazione del progetto Arduino. Il programma sarà ricco di eventi dedicati a Linux all’open source ed all’open Hardware, tema su cui il Luccalug sta puntanto molto in questi ultimi anni.

 

corso base arduino 2012 – Lucca

Il corso

Con arduino è possibile realizzare progetti di domotica o automazione in generale. Può essere utilizzato per controllare le luci di casa così come come l’impianto di irrigazione o un robot.

Le caratteristiche principali che distinguono questa scheda sono il suo prezzo contenuto e la semplicità con cui è possibile programmarla, per questo ha conquistato il cuore di tantissimi, hobbisti ma anche artisti e artigiani.

Programma

  • Introduzione alla programmazione su Arduino
  • Circuiti elementari
  • Acquisire segnali digitali
  • Acquisire segnali analogici
  • I sensori, introduzione ed esempi
  • Utilizzare sensori digitali ed analogici
  • Controllare led ed attuatori

Costo e orari

CORSO COMPLETO – ISCRIZIONI CHIUSE

Destinatari

Il corso è rivolto alle persone che per hobby, studio o interesse professionale sono appassionati di elettronica, domotica, automazione, informatica e robotica

Obbiettivi

Essere in grado di realizzare in autonomia semplici progetti:

  • dalla scelta e reperimento dei componenti;
  • alla ricerca di documentazione;
  • allo sviluppo del software;
  • fino alla realizzazione del prototipo;

Openscad – programmare in 3D

OpenSCAD è un software per creare oggetti cad 3D. Stiamo parlando di un software libero e disponibile per Linux/UNIX, MS Windows e Mac OS X.

Esso non si focalizza sulla modellazione artistica tipica di software come Blender, bensì mantiene un legame più stretto con la progettazione CAD.

Openscad è qualcosa di simile ad un compilatore 3D che legge un file script per descrivere un oggetto e renderizzarlo. Questo garantisce un controllo completo al designer e permette di modificare con semplicità ogni passaggio nel processo di modellazione o di creare modelli definiti da parametri configurabili.

IL programma offre principalmente 2 tecniche di modellazione:

  • Geometria solida costruttiva  (vedi sotto)
  • Estrusione di perimetri 2D

Come formato di scambio per i perimetri 2D è utilizzato il formato DXF, dal quale è inoltre possibile leggere dei parametri.

Infine OpenSCAD può leggere e creare modelli 3D nel formato STL and OFF.

CSG

La geometria solida costruttiva, abbreviata spesso in CSG, è un modello di rappresentazione di oggetti 3D, di tipo volume-based. In questo approccio le forme vengono costruite a partire da una famiglia di solidi geometrici elementari, che vengono chiamati primitive, come ad esempio il parallelepipedo, il cilindro, la sfera, il cono, il toro.
Per poter costruire volumi complessi a partire da questi volumi elementari si fa uso di operazioni booleane, che derivano dalle operazioni sugli insiemi:

  • Somma (unione)
  • Sottrazione (differenza)
  • Intersezione

Il procedimento che porta ad ottenere il solido finale può essere organizzato in uno schema, chiamato albero CSG: ogni foglia rappresenta un solido e ad ogni nodo corrisponde un’operazione booleana, mentre in cima troviamo l’oggetto finale.

Un esempio

Vediamo come creare una forma primitiva, nel nostro caso sperimentiamo con un cilindro modificando vari parametri:

cylinder(h = 10, r1 = 10, r2 = 20, center = false);
cylinder(h = 20, r1 = 20, r2 = 10, center = true);

Adesso proviamo a vedere cosa succede unendo i due oggeti o intersecandoli:

union() {
  cylinder(h = 10, r1 = 10, r2 = 20, center = false);
  cylinder(h = 20, r1 = 20, r2 = 10, center = true);}

difference() {
  cylinder(h = 10, r1 = 10, r2 = 20, center = false);
  cylinder(h = 20, r1 = 20, r2 = 10, center = true);}

touchscreen!

Presso  la sede delle Croce Verde di Ponte a Moriano, che utilizza il software gestionale GeT , ho installato un pannello touchscreen al posto della bacheca che conteneva le tabelle con i turni dei volontari.

Grazie a GeT adesso i turni sono aggiornati in tempo reale dagli operatori ed possibile consultarli per qualsiasi settimana dell’anno. I soccorritori potranno inoltre segnalare la propria disponibilità ad un turno in maniera rapida ed efficente.

Per farlo ho utilizzato una ubuntu 12.04 LTS, come applicativo chromium in modalità “kiosk”. Il touchscreen utilizzato è un Acer t230h 24 pollici con tecnologia resistiva che ha permesso di completare l’installazione ad un costo molto basso.

GET 0.3.2

Ho piacere di annunciare un nuovo agiornamento del software di gestione dei turni Get.

La versione 0.3.2 è un ulteriore affinamento della versione 0.3.1, sono stati corretti alcuni bug e  migliorate funzioni preesistenti. Di seguito un elenco più dettagliato delle novità:

  • Introdotto un tasto seleziona/deseleziona tutto nella pagina delle notifiche
  • Introdotte notifiche a scomparsa in diverse sezioni del programma
  • Impossibilità per un volontario di cancellarsi o segnarsi ad un turno passato
  • Possibilità di creare turni che si ripetono nel tempo
  • Requisiti minimi per un turno configurabili al momento della creazione
  • Possibilità di definire tipologie di turno con requisiti pre-configurati

Alcuni screenshot delle novità introdotte:

Nella pagina del progetto sono disponibili i sorgenti del programma.

 

Get 0.3.1

Ho appena apportato un aggiornamento a Get per quanto riguarda la gestione degli utenti. Nella versione precedente la gestione di quest’ultimi era affidata al pannello di amministrazione di Django, adesso è disponibile all’ interno del programma e offre la possibilità di eseguire in maniera rapida tutti i task necessari all’amministratore. In particolare è possibile:

  • creare/modificare/eliminare un utente
  • fornire i privilegi di staff ad un utente (solo il  superuser)
  • assegnare un utente ad un volontario

Inoltre è stata aggiunta la funzionalità per gli utenti di recuperare la password o di modificarla.

Di seguito alcuni screenshoot:

Python-Xbee

Python-xbee è  una libreria in python che permette di lavorare in modalità API sui moduli di comunicazione xbee ( vedi articolo: Digimesh ).

Digimesh

La libreria non implementa correttamente le api dei moduli Digimesh, per questo ho deciso di contribuire al progetto implementando i tipi di pacchetti mancanti.

Ho deciso di utilizzarla per sviluppare un progetto in cui dovrò mettere in comunicazione più arduino con un pc che funga da coordinatore.

Anche se alcune questioni sintattiche non mi aggradano troppo, trovo il python un ottimo linguaggio per la velocità con cui riesco a svilupparvi applicazioni funzionali, inoltre la libreria è molto semplice e anch’essa veloce da utilizzare.

Ecco un esempio:

In questo esempio ho voluto testare la funzione “ND” Network Discovery dei moduli Xbee. Al pc è connesso un Xbee Explorer e nell’area circostante sono attivi 2 Arduino Fio con anch’essi muniti di modulo Xbee DigiMesh.

Lo script non fa altro che un discovery dei nodi attivi, dopodiche invia un comando “RS” ciascuno per valutare la qualità del link.

In uscita viene restituita una tabella con identificativo,indirizzo e qualità della trasmissione.

#! /usr/bin/python

#importo Digimesh
from xbee import DigiMesh
import serial, time

#definisco una funzione di callback a cui saranno passati ipacchetti ricevuti
frame=[]
def print_data(data):
frame.append(data)

#inizializzo la seriale e vi associo la classe
ser = serial.Serial('/dev/ttyUSB0', 9600)
xbee = DigiMesh(ser, escaped=True, callback=print_data)

#invio il comando di scansione
print "eseguo la scansione dei nodi"
xbee.send('at', frame_id="S", command="ND")

#attendo 5 secondi che tutti i nodi abbiano risposto
time.sleep(5)
xbee.halt()
d=1
#per ogni pacchetto ricevuto eseguo il ciclo
for f in frame:
i=10
ID=''
while f['parameter'][i]!='x00':
ID+=f['parameter'][i]
i+=1
xbee = DigiMesh(ser, escaped=True)
#invio ad ogni modulo la richiesta della qualità di comunicazione
xbee.send('remote_at', frame_id='B', dest_addr_long=f['parameter'][2:10], command='DB')
indirizzo=' '.join( [ "%02X " % ord( x ) for x in f['parameter'][2:10] ] )
potenza=xbee.wait_read_frame()['parameter']
#stampa i dati ottenuti
print "nodo %d t| ID: %s t| Indirizzo: %s t|Potenza Segnale: -%d Db " % (d,ID,indirizzo,ord(potenza))
d+=1

xbee.halt()
ser.close()

Questo è quello che viene restituito nel mio caso:

 nodo 1 | ID: lulu3 | Indirizzo: 0013A200406914A4 |Potenza Segnale: -59 Db
 nodo 2 | ID: lulu2 | Indirizzo: 0013A20040691491 |Potenza Segnale: -48 Db

Digimesh.py

In allegato la nuova classe Digimesh in attesa che sia inclusa nel repository ufficiale:

digimesh.py