Visualizza un messaggio singolo
Vecchio 10-05-20, 12:52 AM   #10
wrighizilla
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

ok ho settato la controller per la prima volta sul camion arancione e ho scoperto di avere il segnale del gas al contrario.. in realtà potrei ovviare in altri modi ma ho preferito modificare lo sketch per adattarmi alle impostazioni radio preesistenti.
riporto lo sketch di esempio, ho dovuto cambiare un valore maggiore in minore alla stringa
codice:
 if (Gaspulse > Slowlimit) {
codice:
 if (Gaspulse < Slowlimit) {
vedrò di aggiungere una nota nello sketch alla prossima revisione.

di conseguenza a questa differenza anche altri valori sono leggermente cambiati.
vi riporto il codice di esempio che ho applicato al mio camion, per capire quali sono le differenze lo potete confrontare con quello dato nel post precedente.

codice:
//----------- signal setup -------------------------------------
#define Neutral 1508 // -- minimum throttle forward signal
#define Maxspeed 1062 // -- maximum throttle forward signal
#define Antsx 1829 // -- in front servo signal sx
#define Antdx 1140 // -- in front servo signal dx
#define Postsx 1250 // out rear servo sx end point (if inverted with postdx it reverse)
#define Postdx 1950 //-- out rear servo dx endpoint (if inverted with postsx it reverse)
#define Center -130 //-- add or subtract your value to center steering (+- 50 or more)

//--------- user driving setup ------------------------------

#define Max_gain 250 //-- gain steering reduction width at max throttle (if reverse add (-) before value)
#define Slowlimit 1200 //-- slow forward percentage without endpoint correction

#define Tolerance 0 //-- if poor quality servo vibrates try 5

//----------------------------
#include <Servo.h>
Servo myservo;
#define N_STST  7          
#define N_STGAS     7
unsigned int stSt[ N_STST ];
unsigned int stGas[ N_STGAS ];    
long toStSt = 0;        
long toStGas = 0;      
int inSt = 0;                                      
int inGas = 0;        
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
unsigned int NewPos, OldPos;
void setup() {
for ( int i=0; i<N_STST; i++ ) stSt[ i ] = 0;
for ( int i=0; i<N_STGAS; i++ ) stGas[ i ] = 0;
myservo.attach(10); //-- rear servo signal out pin
pinMode(8, INPUT); //-- front servo signal in pin
pinMode(7, INPUT); //-- throttle signal in pin
}
void loop(){
    noInterrupts();
Rxpulse = pulseIn(8, HIGH);
Gaspulse = pulseIn(7, HIGH);
     interrupts();  
delay(5);
if (Gaspulse < Slowlimit) {
Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain );
NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain));
  }
else {
NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx);
  }
if (abs(NewPos - OldPos)> Tolerance) {
OldPos = NewPos;
myservo.write(NewPos + Center);
}
}
ad ogni modo vi spiego i passaggi che ho fatto durante questo primo setup sul modello:

prima di tutto ho settato alla meglio la meccanica e entrambi gli sterzi.
ho controllato il gas che fosse trimmato bene.
poi ho caricato il programma che serve per controllare nel serial monitor quale è l'effettivo valore di corsa dei segnali provenienti dal gas e dallo sterzo

codice:
int rxpulse;
void setup () {
Serial.begin (9600);
}
void loop () {
rxpulse = pulseIn (7, HIGH); // - 8 to know true front steering signal 7 throttle
Serial.println (rxpulse);
l'ho caricato la prima volta col valore 7 , sono andato nel serial monitor e mi sono annotato i numeri corrispondenti a neutro, massimo e minimo gas.
poi l'ho ricaricato variando il numero 8 per controllare lo sterzo, stessa procedura nel serial monitor girando il volantino.

i miei valori sono stati:
throttle min 2036 max 1062 neutro 1508
sterzo 1829 -1140
annotati questi valori li ho trascritti nella prima parte del setup

ho reversato lo sterzo invertendo Postsx e Postdx perchè era al contrario anche quello.. ovvero sarei andato in diagonale invece che curvare.

ho invertito il valore maggiore - minore nella stringa che ho messo all'inizio del post perchè il gas throttle sul mio camion è reversato.

a questo punto ho caricato lo sketch e ho guardato come reagiva..

c'era troppa corsa di sterzo che sforzava, quindi ho corretto i valori varie volte fino a trovare il giusto compromesso.

ho sistemato la centratura del servo che ha voluto una minima correzione e
ho ricaricato il programma..

infine ho sistemato Slowlimit e Max-gain in concezione inversa perchè il gas è reverse (vedi codice) portandoli a un valore di gas accettabile e una corsa minima di sterzo a tutto gas.
valori teorici fatti a banco almeno fino a quando non lo provo su strada ma direi che sembrano soddisfacenti.

ho preferito lasciare un pochina di corsa alla massima velocità e non chiudere del tutto lo sterzo posteriore, rimane da verificare su strada se il setup mi piace.


per fare tutto questo c'è voluta un oretta perchè ho dovuto iniziare smontando entrambi gli sterzi per centrarli meglio e riportando il subtrim della radio a zero.

il setup vero e proprio non è stato complicato, giusto capire a quale valore postdx postsx corrisponde la direzione meccanica del servo ma basta mettere valori aumentati o diminuiti di 100-200 per capirlo facilmente controllando cosa si è perso o guadagnato.

cambiando questi valori si sballa un pochino anche la centratura che appunto si corregge aggiungendo o sottraendo quanto serve per ricentrarsi.

a breve metto un video cercando di inquadrare anche il radiocomando.
wrighizilla non è in linea   Rispondi quotando