[parte 1]lettura giroscopi analogici

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.

Ciao lesto potresti aiutarmi? Ti spiego: ho un arduino Uno e vorrei realizzare un quadricottero utilizzando tutti i pezzi suggeriti su AeroQuad.com, ovviamente tutti quelli compatibili con il mio arduino quindi la shield 1.8, giroscopio e accelerometro... La variante sta nel fatto che lo voglio pilotare dal computer tramite i moduli XBee e Processing. Il mio problema quindi è: come modificare lo sketch Aeroquad.pde, che si trova qui Google Code Archive - Long-term storage for Google Code Project Hosting. ,per il mio caso? Ho aperto il file ma mi è sembrato molto complesso quindi non saprei programmare giroscopio e accelerometro... Se non richiede molto tempo, potresti semplificarmi lo sketch tagliando i pezzi che non servono e adattarlo per quanto possibile al mio caso? Grazie mille.

Ciao lesto,
complimenti per il lavoro, e grazie della condivisione.

Solo... il progetto finale qual'è (per mio limite nonson riuscito ad evincerlo)? :-[
Hai anche un filmatino youtube del risultato?

dunque si tratta di un software per la stabilizzazione di un quadricottero.
Però, essendo tutto fatto a classi, ogni pezzo può essere usato indipendentemente, per questo l'ho diviso in varie discussioni

ok,grazie lesto
Era per avere un quadro completo!
Bravo!

vogliamo sapere se vola :slight_smile: nn hai qualche foto da mettere? :wink:

c

hai pensato anche per chi volesse usare il wii motion plus? :slight_smile: