Go Down

Topic: [parte 1]lettura giroscopi analogici (Read 3 times) previous topic - next topic

lesto

Jan 16, 2011, 11:11 pm Last Edit: Jan 17, 2011, 12:31 am by lestofante Reason: 1
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:
Code: [Select]

#ifndef Giroscopio_h
#define Giroscopio_h

#include "WProgram.h"

class Giroscopio{
 public:
 float setPin(int);
 float leggi();
 private:
 int mid, gyroPin;
};
#endif


Giroscopio.cpp:
Code: [Select]

#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.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

giando

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 http://code.google.com/p/aeroquad/downloads/list ,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.

pitusso

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?

lesto

#3
Jan 18, 2011, 07:47 pm Last Edit: Jan 18, 2011, 07:48 pm by lestofante Reason: 1
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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pitusso

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

camba192

vogliamo sapere se vola  :) nn hai qualche foto da mettere?  ;)

c

camba192

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

Go Up