hello
Sono giunto a conclusione del mio primo progettino per arduino...
Visto che è scritto a classi, le presento una alla volta, così nel caso è più comodo aiutare qualcuno che decida di riutilizzarle e abbia qualche dubbio/consiglio/richiesta ecc...
In oltre, guarda caso, le metterò in ordine di difficoltà, così può essere usato il tutto come tutorial da principiante a "esperto".
i link alle varie "lezioni":
parte 2 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295216277
parte 3 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295217572
parte 4 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295218329
parte 5 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295219016
parte 6 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295219565
Partiamo dall'inizio: leggere un giroscopio analogico, e trasformare le sue letture da V/gradi a radianti/secondi...
Giroscopio.h:
#ifndef Giroscopio_h
#define Giroscopio_h
#include "WProgram.h"
class Giroscopio{
public:
float setPin(int);
float leggi();
private:
int mid, gyroPin;
};
#endif
Giroscopio.cpp:
#import "Giroscopio.h"
static const float giroToRadiantAtSecond = (((5.0/1024.0)*1000)/0.67)/57.29578;
float Giroscopio::setPin(int pin){
gyroPin=pin;
mid = analogRead(gyroPin);
int i;
for (i=0; i < 1000;i++){
mid = ( mid+analogRead(gyroPin) )/2;
}
return mid;
}
float Giroscopio::leggi(){
int gyro=analogRead(gyroPin);
if (gyro==mid-1 || gyro==mid+1){ //questa parte limita un poco il drift del gyro
gyro=mid;
}
gyro = (gyro-mid)*giroToRadiantAtSecond;
return gyro;
}
la variabile giroToRadiantAtSecond va settata in base al vostro giroscopio:
5.0 vuol dire che l'output va da 0 a 5 V
1024 è il valore massimo che ci restituirà l'analogRead
Ovvio che se il vostro gyro va a 3,3V i due valori sono da cambiare di conseguenza.
1000 è per portare i valori precedenti da V a mV, da non modificare
0.67 sono i °/mV dal datasheet del giroscopio
Anche questo valore è da modificare in base al vostro giroscopio
57.29578 è invece il valore necessario per passare da gradi a radianti. Se vi serve il valore in gradi potete tranquillamente togliere la divisione.