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 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.  |