domenica 30 marzo 2014

Arduino Days 2014 @ Muse




Sabato è stata una giornata davvero interessante. Molta affluenza all'Arduino Day 2014 presso il Muse, con organizzazione a cura del FabLab locale.

Tra i visitatori un ospite speciale, il ministro (ormai ex) Massimo Bray  che si è soffermato con interesse su tutte le soluzioni esposte.




domenica 23 marzo 2014

Trasmissione dati di sensori via Bluetooth 4.0 - parte 3 : ricezione dati su iPhone

Per la ricezione dei dati ho utilizzato una app gratuita chiamata BLE Utility.
L'applicazione effettua una scansione del dispositivi BLE raggiungibili, permettendo di mostrare il dettaglio dei servizi implementati e relativi dati trasmessi.




Il valore ricevuto è in formato ascii (2055 nella screenshot) e ha una risoluzione a 12bit implementata tramite una tecnica di oversampling sulla porta A0 di Arduino (10bit nativi).

Per una implementazione custom, sono disponibili sul sito redBear una library dedicata.








Trasmissione dati di sensori via Bluetooth 4.0 - parte 2 : il codice

Per leggere e trasmettere i dati letti sulla porta A0 sono sufficienti davvero poche righe di codice.

La scrittura dei dati via BLE è fatta in modo seriale, semplificando tutte le operazioni di lettura e scrittura.


Per migliorare la trasmissione dei dati  il codice implementa:
- una lettura in oversampling, per migliorare la precisione della porta A0 da 10 a 12 bit 
- un "trigger" sul dato letto, per trasmettere effettivamente il valore letto solo quando questo differisce dal precedente.
Il valore letto viene inviato via BLE in formato stringa, seguito da un "line feed" (0x0A).


#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) 
  AltSoftSerial BLEMini; 
#else
  #define BLEMini Serial1
#endif

void setup()
{
    BLEMini.begin(57600);
    Serial.begin(57600);
}

int value=0;
int previousValue=0;
bool first=HIGH;
String valueStr="";

void loop()

{
   readValue(2); //0=(10 bit),1 (11 bit),2 (12 bit)
   valueStr=String(value);
   if (value!=previousValue || first==HIGH)
   {
     for (int i = 0; i < valueStr.length(); i++)
     {
         BLEMini.write(valueStr[i]);
     }
     BLEMini.write(0x0A);
     Serial.println(value);
   }
   previousValue=value;
   first=LOW;
   delay(10);
}

void readValue(int incr)  //0=(10 bit),1 (11 bit),2 (12 bit)
{
      value=0;
      for (k=0; k<oversampling; k++)
      {
        t0=micros();
        value = analogRead(A0)+value ;
        delayMicroseconds(30);
      }
      value= int(value/pow(2,4- incr)) ;
}

Nel prossimo post: come leggere su iPhone i dati trasmessi

Trasmissione dati di sensori via Bluetooth 4.0 - parte 1: il progetto

Si è imposto ormai da parecchio tempo il protocollo Bluetooth 4.0 (BLE: Bluetooth Low Energy), che non è la semplice evoluzione degli standard precedenti, ma rappresenta un nuovo sistema per far comunicare apparecchiature hardware con un consumo estremamente ridotto.
Questo apre scenari davvero interessanti, si pensi ad esempio all'uso dei Beacon per le applicazioni di micro-location e notifica a dispositivi smartphone, con l'impiego di Beacon la cui batteria dura mesi.

Anche i dispositivi iOS recenti (iPhone dal 4S in poi) dispongono di questo tecnologia, che può essere utilizzata con molta facilità.

Il progettino qui descritto è finalizzato all'acquisizione di un segnale da un sensore (nel mio caso un potenziometro) e la trasmissione in tempo reale del dato via Bluetooth, nel mio caso una app per iPhone.

RedBearLab ha a catalogo una piccola shield dal costo ridotto che copre perfettamente tutte le esigenze di trasmissione/ricezione dati BLE con Arduino.
Il prodotto si chiama BLE mini e è costituito da una piccola scheda che all'occorrenza può essere alimentata tramite una batteria tampone che ne garantisce il funzionamento per parecchie settimane.




Progetti per l'Arduino Day 2014 @ MUSE

Sto terminando oggi di preparare il materiale per l'Arduino Day 2014 che si terrà per la provincia di Trento al Muse, con organizzazione a cura del Muse Fablab (biglietti gratuiti disponibili su eventbrite.it).



Darò il mio contributo nell'area Exhibitor con 3 progetti:

  • PROGETTO 1: il classico self balancing robot, dove ormai ho raggiunto un sufficiente livello di stabilità.


  • PROGETTO 2: il registratore di presenze con Rfid

  • PROGETTO 3: un controller di luci basato sull'effetto capacitivo di frutta e materiale di recupero, utilizzando le Philips Hue con controllo wireless di cui ho già parlato