Visualizza messaggio singolo
Vecchio 30 ottobre 12, 19:08   #4 (permalink)  Top
faustog_2
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
il primo

ciao ElNonino...

io devo sempre ringraziarti, perchè mi hai sempre illustrato tutto con chiarezzza, guarda ho fatto le prove io roteo il nunchuk e così rotea anche il servo! meglio di così ?

io di elettronica son una frana , come programmatore.. diciamo che ancora me la cavo. dunque per il momento posto i sorgenti in tutto sono tre:


il primo

#ifndef _NUNCHUK_H_
#define _NUNCHUK_H_

#define NUNCHUK_BUFFER_SIZE 6

class Nunchuk
{
public:
void initialize();
bool update();


//__________________________________________________ _____
int joystick_x() const
{
return _buffer[0];
}
//__________________________________________________ _____
int joystick_y() const
{
return _buffer[1];
}
//__________________________________________________ _____
int x_acceleration() const
{
return ((int) (_buffer[2]) << 2) | ((_buffer[5] >> 2) & 0x03);
}
//__________________________________________________ _____
int y_acceleration() const
{
return ((int) (_buffer[3]) << 2) | ((_buffer[5] >> 4) & 0x03);
}
//__________________________________________________ _____
int z_acceleration() const
{
return ((int) (_buffer[4]) << 2) | ((_buffer[5] >> 6) & 0x03);
}

bool z_button() const
{
return !(_buffer[5] & 0x01);
}
bool c_button() const
{
return !(_buffer[5] & 0x02);
}

private:

void request_data();
char decode_byte(const char);

unsigned char _buffer[NUNCHUK_BUFFER_SIZE];

};
#endif





Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Fausto direi che questa volta non ci siamo proprio, ti leggo sempre con attenzione ed apprezzo il tuo desiderio di comunicare i tuoi risultati ad altri però.......

Poichè in questo forum cercano suggerimenti e risposte molti niubbi ritengo doveroso correggere alcune imprecisioni.

Con un accelerometro a 3 assi come quello contenuto nel Nunchuck (originale) non è possibile rilevare la rotazione della testa per un head tracker, bensì solo le inclinazioni del capo fronte/retro e destra/sinistra come già ti scrissi in un altro post.

Se tu sei riuscito a leggere la rotazione sull'asse Z con un accelerometro ti sarei grato se postassi l'algoritmo utilizzato.

Anche il sistema di filtraggio del PWM con elettrolitici da 220uF è decisamente sbagliato, per convertire un PWM in tensione va utilizzato un apposito filtro passa-basso opportunamente dimensionato in base alla frequenza e durata impulso (min/Max) del PWM, filtro che deve tener conto anche della tempo di risposta all'impulso. (ad es. rotazione repentina della testa da dx a sx).

Questa tecnica è quella comunemente usata nei convertitori DAC, lo schema qui sotto mostra come sono solito convertire in alcune applicazioni un PWM in cc.



I componenti che formano il PB sono: R5, R8, R9 e C8, C9.

faustog_2 non è collegato   Rispondi citando