lunedì 20 ottobre 2014

ADXL335 su Arduino Due


L'ADXL335 e' un accelerometro triassiale analogico.
Ne ho comprato uno gia' saldato su basetta su Sparkfun ed il suo utilizzo e' piuttosto immediato. Basta dare corrente e leggere i valori di tensione sui tre pin di misura (uno per ogni asse)

Problema: quale tensione?? Sulla scheda tecnica dell'ADXL335 c'e' indicato che deve alimentato a 3.3V mentre su altre fonti viene riportato che sulla schedina di Sparkfun c'e' gia' un regolatore di tensione per cui puo' essere alimentato dai 5V dell'Arduino
Per non rischiare ho alimentato il pin VCC con il pin da 3V dell'Arduino e collegato il GND



Per la prova ho utilizzato solo l'asse Z collegato alla porta A0 (analogica 0 dell'Arduino)
Ho utilizzato una Arduino Due piu' che altro per avere un dato a 12 bit



Lo sketch montato sulla scheda e' quanto mai semplice

------------------------------------------------
void setup() {
  Serial.begin(9600);
}

void loop() {
  analogReadResolution(12);
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);     
}
------------------------------------------------

Sul portatile ho messo un piccolo script in Python in modo da salvare oltre al dato anche il tempo (in millisecondi) per vedere quanto era stabile il passo di acquisizione

------------------------------------------------
import serial
import time

ser = serial.Serial('/dev/cu.usbmodem621', 9600)
while True:
line = ser.readline() 
millis = int(round(time.time() * 1000))
print str(millis)+","+line,
------------------------------------------------

Per avere un'idea della qualita' del dato ho fatto prima una misura cercando di non avere accelerazioni sull'asse verticale

Senza perturbazione
La misura ha avuto un valore medio di 1670 unita' +/- 2 unita' di standard deviation. Il valore massimo misurato e' stato di 1677 unita' (3 misure) ed un valore minimo di 1661 (1 misura)

Osservando la scala dei tempi, il passo di campionamento e' piuttosto variabile con un valore medio di 6 ms +/- 2 ms

Successivamente ho provato a fare una misura camminando attorno al tavolo dove era appoggiato il sensore.

Camminando attorno al tavolo

Il valore medio misurato e' stato di 1669 unita' (coerente con quello precedente) con valore massimo di 1679 u e minimo di 1659 u
Sul grafico sono inserite le rette dei valori massimi, minimo e +/- st.dev della misura senza perturbazione.
I dati sono molto grossolani ma c'e' una qualche indicazione che il sensore abbia registrato la variazione di accelerazione verticale indotta dal mio camminare

Giusto per prova ho provato anche con il campionamento a 10 bit sempre su Arduino 2

il valore medio e' stato di 419 unita' con una standard deviation di 0.5 unita' (su 500 misure)

419 unita' a 10 bit su Arduino 2 valgono 2.04 V
1669 unita' a 12 bit su Arduino 2 valgono 2.03 V

In questo caso pero' ho deliberatamente picchiettato sul tavolo (come si vede chiaramente dal grafico, nella figura in basso un ingrandimento). Si vedono chiaramente i rimbalzi del segnale




Cerchero' nei prossimi giorni di fare qualche esperienza di campagna per vedere se l'integrato puo' essere utilizzato come piccolo sismometro