Go Down

Topic: [parte 1]lettura giroscopi analogici (Read 3731 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy