Esperimenti con il bluetooth

Annunci

Android ti presento Arduino

Google recentemente ha rivelato che i device Android potranno essere collegati a dispositivi hardware grazie all’utilizzo di ADK (Android Open Accessory Development Kit).

Ma chi non ha voglia di spendere i 400 dollari del kit può già sperimentare una sorta di comunicazione partendo da una spesa praticamente irrisoria.

Ebbene si, non useremo i soliti wi-fi o bluetooth, ma un semplice filo smaltato, una resistenza e un diodo. Eresia? State a vedere.

In realtà il principio di funzionamento è estremamente semplice: i dispositivi recenti sono dotati di magnetometro, uno strumento sensibile alle variazioni e alla direzione dei campi magnetici, e noi useremo il filo come una bobina e variando il campo magnetico prodotto comunicheremo con il device.

Chiaramente avrete già capito che si tratta di una comunicazione di sola andata e a bassa velocità, ma per quello che costa cosa vi aspettavate?

Il circuito da costruire è anch’esso estremamente semplice, la resistenza servirà a limitare la corrente, mentre il diodo offrirà una protezione flyback.

La bobina, formata da circa 30 giri del diametro di 1 cm, produrrà un campo magnetico in base alla quantità di corrente che vi faremo scorrere.

Per trovare la posizione esatta del magnetometro nel telefono useremo un’ottima applicazione gratuita che potete scaricare dal market, Tricorder.

(Chi è fan di Star Trek starà già sbavando..)

Questa applicazione ci mostra dei semplici grafici ottenuti dai vari sensori presenti sul device, tra cui appunto il magnetometro.

Una volta individuato, potete usare anche una calamita, possiamo passare alla stesura dello sketch, ma prima una chiarificazione: i limiti di questo esperimento ci sono e sono abbastanza pesanti, il magnetometro ha un sampling rate di soli 40 Hz, quindi nulla di estremamente veloce.

Ma a parte questo ecco lo sketch da caricare:

#define BIT_DELAY 140
int i;
char *text = “Hello World! “;
void setup() {
  pinMode(13,OUTPUT);
}
void loop() {
  char *s;
  s = text;
  while (*s != 0) {
    transmitByte(*s++);
  }
  delay (BIT_DELAY*10);
}
/**
 * Bit bang a byte
 */
void transmitByte (byte c) {
  // Start bit
  digitalWrite (13,1);
  delay(BIT_DELAY);
  // Data bits
  for (i = 0; i < 8; i++) {
      digitalWrite (13, ( (c&0x80)!=0 ? 1 : 0) );
      delay(BIT_DELAY);
      c <<= 1;
  }
  // Stop bit
  digitalWrite (13, 0);
  delay(BIT_DELAY);
}

Ed ecco fatto, come vi avevo promesso non si tratta di nulla di trascendentale, a questo punto vi basterà scaricare il software android da qui , e cominciare a sperimentare!

A chi non bastasse tutto ciò,  può spingere al massimo questa idea con alcuni piccoli accorgimenti:  utilizzando un vero DAC, (o al massimo il pwm su un filtro passa basso),  possiamo sfruttare gli 8 bit di risoluzione del magnetometro, oppure visto e considerato che il sensore è sensibile alle variazioni sui 3 assi, potremmo costruire 3 bobine da utilizzare contemporaneamente.

Chiaramente questo è solo un piccolo assaggio di ciò che vorremmo fare, il mondo dell’open source e quello dell’open hardware si tendono la mano in questo piccolo esperimento, ma il futuro sembra estremamente roseo.

A mio avviso è da notare un’altra soluzione low cost suggerita da un commento dell’articolo originale, ormai molti device hanno una fotocamera e un flash a led, e quindi suggeriva di utilizzare questi abbinati ad un led e una fotoresistenza su arduino.

In questo caso quindi si avrebbe una comunicazione a due vie, e probabilmente si potrebbe addirittura andare un pochino più veloci, anche se avere la fotocamera continuamente accesa porterebbe ad un consumo eccessivo della batteria. (il sensore di luminosità che controlla lo schermo è troppo lento).

Come ultima possibilità, in onore del low cost, possiamo pensare di passare attraverso il jack delle cuffie.

Esiste già un programma, AudioSerialOut, che permette di utilizzare le cuffie come un’uscita seriale, pronta ad essere raccolta da un microcontrollore.

In questo caso poi, si avrebbe una velocità notevole, ma ancora una sola via di comunicazione..

A meno che non si riesca a collegare il microfono delle cuffie ad un uscita di Arduino e far leggere ad Android i dati ricevuti.

Queste sono le alternative che ho trovato per far comunicare il nostro telefono con il nostro Arduino, ma sicuramente ce ne saranno delle altre, avete qualche altra proposta low cost? scrivetela nei commenti!

MultiWii: come collegare il nunchuck e il Wii motion plus ad Arduino

Dopo aver provato ad utilizzare i giroscopi e gli accelerometri presenti nei sensori della wii all’interno dei loro case, è giunto il momento di estrarli e collegarli direttamente.

Per far ciò ho preferito saldare direttamente i fili già presenti invece di saldare direttamente sui pcb a causa delle dimensioni degli stessi, quando avrò una stazione saldante più seria mi cimenterò anche in queste saldature più piccole.

Si tratta solo di collegare i fili giusti, quindi la difficoltà non è altissima..

Per il collegamento basta seguire queste due immagini (io ho usato un arduino Uno)

Per ulteriori dubbi o perplessità vi rimando al video in cui vi mostro come ho smontato e collegato i due sensori, e il loro funzionamento attraverso il software MultiWii.

 

EDIT: come richiesto metto una foto che mostra dove va il filo verde citato nel video

Pan & Tilt con un accelerometro e arduino

Stavo cercando un modo concreto per apprezzare le capacità dell’accelerometro adxl335 che ho preso un pò di tempo fa su adafruit.

Ho pensato allora di costruire un sistema pan e tilt con due servomotori, ma non avendo delle staffe decenti ho fissato il tutto precariamente con degli elastici..

Il sistema funziona, ho provato a migliorare i dati acquisiti prendendo dieci valori, eliminando il più alto e il più basso, e facendo una media dei rimanenti..

Un filtraggio maggiore potrebbe renderlo più fluido e eliminare alcune oscillazioni, ma come inizio non c’è male.

Vi lascio anche il codice per l’arduino.PanTilt.pde

UPDATE: Ho trovato un vecchio diodo laser e non mi sono lasciato sfuggire questa occasione 😛