http://www.racingfr.com/forum/index.php?showtopic=44627&view=findpost&p=1361978[/color]
Vu les moteurs choisis dans cette configuration, ils ne seront pas suffisamment puissants pour te permettre plus d'une grosse demie heure de jeu (avec mouvements pas trop saccadés donc config xsim soft) - après ça va fumer avec, à terme, une perte de puissance notable.
Ces moteurs sont suffisants pour un 2dof classique (juste le siège).
Note également que si les potards indiquent une position trop haute ou trop basse (hors champ), le système se met en sécurité (plus d'alimentation) donc il faut bien faire attention quand tu montes à bord.
Sérieusement, Où trouver des moteurs plus gros ? a part dans le milieux industrielle mais la je pense que sa risque de douiller ...
Les MEG smolka représentent le meilleur rapport/qualité prix qu'on ait trouvé (35e pièce). ;)Surtout que c'était déjà dit dans ton excellent tuto ;)
je te confirme que ça tourne bien même "seulement" en 12V !
sinon il faut te tourner vers une pololu je dirai : pololu (http://www.pololu.com/catalog/product/2502)
mais je ne sais pas si elle se pilote pareil et si on peut la substituer facilement à la MotoMonster...
juste une question, les meg pour leur puissances c'est pas trop limites ?
Question ... quand est ce qu'on voit tout ça bouger ??! :)Pareil ! Je suis le sujet depuis le début, je m'y mettrai quand j'aurai un peu de place. Pour l'instant, pressé de voir ce que ça donne en action ! ^-
Alors heureux ?? ;D
J'ai édité un peu la procédure pour le réglage des forces, si tu veux le rajouter à ton tuto.... ;)oui, c'est super bien décrit ! et j'aime aussi ce petit topo de riton39 qui va bien compléter
http://www.racingfr.com/forum/index.php?showtopic=44627&view=findpost&p=1361978quelques points de repère:
que me conseillez vous ? inverter, ou mig no gas.dans tes critères, il peut y avoir le prix :
j'ai vu des modèles avec des ressorts qui n'ont pas l'air de trop jouer sur le comportement du simu.>:D mais qu'est ce que vous avez, tous, avec vos ressorts et amortisseurs ???
je pensais aussi à des amortos mais en ayant eu en mains, je sentais que ça n'irait pas
L'alu c'est plus rigide que l'acier Wink
L'acier est plus "élastique", il renverra mieux l'énergie emmagasinée.
j'ai les boules !Faut pas, il y a forcément une phase d'expérimentation et d'adaptation dans tout ça. Tu crois que le premier proto du simu a marché comme il devait du premier coup ? ;)
Bah en fait justement je pensais que la transduction serait meilleure. Du fait de la capacité de l'alu à plier mais en restant très rigide donc réactif (je ne sais pas si j'explique très bien ma pensée là) :-[
Pour illustrer, je prends l'exemple du cadre alu de velo, qui rend vraiment toutes les aspérités du terrain par rapport à un cadre acier qui garde beaucoup pour lui.
ps : on devrait peut être demander un topic unique pour ce butkicker non ?
Du coup si ça ne fonctionne pas pour les gens assez expérimentés, je ne vais peut être pas me lancer la dedans. :/
////////////////////////////////////////////////////////////////////////////////
// Function: convert Hex to Dec
////////////////////////////////////////////////////////////////////////////////
int NormalizeData(byte x[3])
////////////////////////////////////////////////////////////////////////////////
{
int result;
if ((x[2]==13) || (x[2]=='R') || (x[2]=='L')) //only a LSB and Carrier Return or 'L' or 'R' in case of value below 16 (ie one CHAR and not 2)
{
x[2]=x[1]; //move MSB to LSB
x[1]='0'; //clear MSB
}
for (int i=1; i<3; i++)
{
if (x[i]>47 && x[i]<58 ){//for xA to xF
x[i]=x[i]-48;
}
if ( x[i]>64 && x[i]<71 ){//for x0 to x9
x[i]=x[i]-55;
}
}
// map the range from Xsim (0 <-> 255) to the mechanically authorized range (potMini <-> potMaxi)
result=map((x[1]*16+x[2]),0,255,potMini,potMaxi);
return result;
}
le code complet toujours sur le tuto xsim : http://www.x-sim.de/forum/viewtopic.php?f=37&t=943 ////////////////////////////////////////////////////////////////////////////////
// DECLARATIONS
////////////////////////////////////////////////////////////////////////////////
/* VNH2SP30 pin definitions*/
// to have the wiring compliant with 20kHz pinout, you CANNOT stack the motomonster anymore!
/* Arduino /..Motomonster1
......GND <-> GND pin
........5V <-> 5V
.....pin 7 <-> pin 4 inA motor1
.....pin 8 <-> pin 8 inB motor1
.....pin 9 <-> pin 5 pwm motor1
*/
int inApin = 7; // INA: Clockwise input
int inBpin = 8; // INB: Counter-clockwise input
int pwmpin = 9; // PWM input
#define potR A5
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void setup()
{ // initialization of Arduino's pins
pinMode(inApin, OUTPUT);
pinMode(inBpin, OUTPUT);
pinMode(pwmpin, OUTPUT);
digitalWrite(inApin, HIGH);
digitalWrite(inBpin, LOW);
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Main Loop ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void loop()
{
int sensor;
sensor = analogRead(potR); // range 0-1024
analogWrite(pwmpin, (sensor/4));
}
////////////////////////////////////////////////////////////////////////////////
// DECLARATIONS
////////////////////////////////////////////////////////////////////////////////
/* VNH2SP30 pin definitions
// with 20kHz PWM pinout is changed, you CANNOT stack the motomonster anymore!
Arduino /..Motomonster1
......GND <-> GND pin
........5V <-> 5V
.....pin 7 <-> pin 4 inA motor1
.....pin 8 <-> pin 8 inB motor1
.....pin 9 <-> pin 5 pwm motor1
*/
int inApin = 7; // INA: Clockwise input
int inBpin = 8; // INB: Counter-clockwise input
int pwmpin = 9; // PWM input
#define potR A5
////////////////////////////////////////////////////////////////////////////////
// INITIALIZATION
////////////////////////////////////////////////////////////////////////////////
void analogWriteSAH_Init( void )
{
// Stop the timer while we muck with it
TCCR1B = (0 << ICNC1) | (0 << ICES1) | (0 << WGM13) | (0 << WGM12) | (0 << CS12) | (0 << CS11) | (0 << CS10);
// Set the timer to mode 14...
//
// Mode WGM13 WGM12 WGM11 WGM10 Timer/Counter Mode of Operation TOP Update of OCR1x at TOV1 Flag Set on
// CTC1 PWM11 PWM10
// ---- ----- ----- ----- ----- ------------------------------- ---- ----------------------- -----------
// 14 1 1 1 0 Fast PWM ICR1 BOTTOM TOP
// Set output on Channel A and B to...
//
// COM1z1 COM1z0 Description
// ------ ------ -----------------------------------------------------------
// 1 0 Clear OC1A/OC1B on Compare Match (Set output to low level).
TCCR1A =
(1 << COM1A1) | (0 << COM1A0) | // COM1A1, COM1A0 = 1, 0
(1 << COM1B1) | (0 << COM1B0) |
(1 << WGM11) | (0 << WGM10); // WGM11, WGM10 = 1, 0
// Set TOP to...
//
// fclk_I/O = 16000000
// N = 1
// TOP = 799
//
// fOCnxPWM = fclk_I/O / (N * (1 + TOP))
// fOCnxPWM = 16000000 / (1 * (1 + 799))
// fOCnxPWM = 16000000 / 800
// fOCnxPWM = 20000
ICR1 = 799;
// Ensure the first slope is complete
TCNT1 = 0;
// Ensure Channel A and B start at zero / off
OCR1A = 0;
OCR1B = 0;
// We don't need no stinkin interrupts
TIMSK1 = (0 << ICIE1) | (0 << OCIE1B) | (0 << OCIE1A) | (0 << TOIE1);
// Ensure the Channel A and B pins are configured for output
DDRB |= (1 << DDB1);
DDRB |= (1 << DDB2);
// Start the timer...
//
// CS12 CS11 CS10 Description
// ---- ---- ---- ------------------------
// 0 0 1 clkI/O/1 (No prescaling)
TCCR1B =
(0 << ICNC1) | (0 << ICES1) |
(1 << WGM13) | (1 << WGM12) | // WGM13, WGM12 = 1, 1
(0 << CS12) | (0 << CS11) | (1 << CS10);
}
void analogWriteD9( uint16_t value )
{
// My variable value varies from 0 to 1024
// but awaited range in OCR1A is from 0 to 799 and nothing else!
OCR1A = constrain(map(value, 0, 1024, 0, 799), 0, 799);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void setup()
{
analogWriteSAH_Init();
// initialization of Arduino's pins
pinMode(inApin, OUTPUT);
pinMode(inBpin, OUTPUT);
pinMode(pwmpin, OUTPUT);
digitalWrite(inApin, HIGH);
digitalWrite(inBpin, LOW);
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Main Loop ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void loop()
{
int sensor;
sensor = analogRead(potR); // range 0-1024
analogWriteD9(sensor);
}
Dans mon garage j'ai fabriqué un simulateur f16 98% fonctionnel
je poste sur checksix ou sur google tu tape mike-simulation
tiens, j'avais pas vu ta question...
les 2 pieds comme ça, c'est juste pour la photo
oui, en pratique c'est 99% du temps le pied droit pour l'accélérateur et le frein
ce qu'il manquait surtout sur ce premier simu, c'est la place à gauche de la pédale d'embrayage pour reposer le pied gauche et pouvoir se caler au fond du siège (le petit rebord que l'on appelle pédale morte dans les autos)
Bonjourcool !!
On a fabriqué avec un copain le même simulateur que vous avez fait ( le tutoriel est génial ! )
Par contre on a un souci lors de la mise sous tension. Des qu' il prend sa position initiale le moteur font avant arrière très très rapidement ! On ne l ai vous pas bouger mais sur la carte moteur on le voit ! Les moteurs grattent ! Il y a t il quelque chose à modifier dans le programme arduino ?
Merci d avance
Cdt