Vecchio 29-04-20, 05:40 PM   #1
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito centralina 4 ruote sterzanti con arduino nano

volevo condividere con voi questo progetto capace di gestire il servo di sterzo posteriore su crawler e automodelli con 4 ruote sterzanti.
la centralina al momento permette di:
invertire la direzione del servocomando
impostare gli end points
settare la centratura delle ruote

materiale occorrente:
-una board arduino nano v3 ATmega328p la trovate anche su ebay a partire da 2 euro, in Italia costa circa 5 euro spedita.
- un cavetto Y per servocomandi (1 femmina 2 maschi)
-un cavetto per servocomandi maschio
-un cavetto per servocomandi femmina
-il programma arduino ide https://www.arduino.cc/en/main/software
-il driver CH341SER per le schede nano clone CH341SER.EXE è scritto in cinese ma basta premere il rettangolino azzurro
-un cavetto usb-miniusb

allego 2 foto dello schema per la costruzione

1) scaricate arduino ide, installate il driver.

2) aprite arduino ide e collegate la vostra board nano, non importa se ancora non avete saldato nulla.
andate in "strumenti" e settate la "porta" com (io ho la com3 ma varia, la com1 non è mai quella corretta)
settate il tipo di "scheda" arduino nano" e "processore" ATmega328p"

3) saldate il cavetto per servocomando maschio (che andrà poi a collegarsi al servo posteriore) ai piedini VIN (positivo rosso) GND (nero massa) piedino D10 segnale di uscita del servo posteriore

4) saldate il cavetto femmina (che collegherete a una delle 2 estremità del cavetto a Y) ai piedini VIN , GND, piedino D8 (entrata del segnale di sterzo)
l'altra estremità della Y la collegate al servo anteriore, mentre l'ingresso della Y la collegate al canale radio dello sterzo del vostro automodello.

5) settate alla meglio lo sterzo anteriore delle vostra macchina cercando di non avere subtrim indecenti, il settaggio migliore va fatto sempre e comunque con la giusta lunghezza dei rinvii e la squadretta centrata.
collegate la nano alla spina usb, ovviamente collegate la Y e i servi in modo di verificare tutto il progetto.

6) fate un test del segnale di entrata per vedere i valori massimi e minimi del vostro raggio di sterzata, di default li ho messi a 1000-2000 con centratura 1500 ma possono logicamente variare in base a tanti fattori.
i valori li leggete nel "serial monitor" >strumenti di arduino ide girando lo sterzo del radiocomando da un estremità all'altra.

questo è lo sketch per testare gli endpoints, lo copiate in un nuovo tab vuoto e lo lanciate con la freccia nel cerchietto
codice:
int rxpulse;
void setup() {
Serial.begin(9600);
}
void loop() {
rxpulse = pulseIn(8, HIGH); //-- per sapere qual'è il valore del segnale di sterzo
Serial.println(rxpulse);
}
7) una volta determinati gli endpoints del vostro sterzo anteriore ve li segnate e finalmente caricate lo sketch della controller di sterzo

https://pastebin.com/s27QJ37c

8 ) riportate i valori del vostro sterzo nelle stringhe iniziali "DEFINE" antsx antdx sostituendo i numeri di default con i vostri valori ottenuti dal test fatto nel serial monitor.

9) caricate lo sketch nella nano dal menu "sketch> carica" oppure usando la freccina nel cerchietto.
provate la macchina e vedete come siete messi, se la corsa è troppa o poca, se la centratura va rivista, se le ruote girano nel verso giusto etc..

al che, se dovete modificare i parametri.. e sarà molto probabile..

10) cambiate i valori di endpoint "define postdx e postsx che adesso sono approssimativi settati su 30 e 150
per invertire il servo basta invertire i valori di postdx e postsx scambiandoli tra loro
rivedete la centratura delle ruote cambiando il valore 0 con un numero negativo o positivo (es -5, +10 etc.)
se il servo vibra alzate la tolleranza.
di default la tolleranza l'ho impostata a 5 ma se il servo è buono potrebbe essere portata anche a zero. più alta è la tolleranza e più il servo si muoverà a step by step, ad esempio se la mettere a 30 avrete un servo che si sposta come un selettore a scatti.

tutto qui.

allego lo sketch scritto, nel quale ho snellito una procedura con una piccola modifica rispetto al link pastebin.
non avete da fare altro che copiarlo e incollarlo in un nuovo tab
codice:
#define antsx 1000 //-- segnale ingresso  servo anteriore finecorsa sx
#define antdx 2000 //-- segnale ingresso servo anteriore finecorsa dx
#define postsx 30//-- finecorsa servo posteriore sx se invertito con postdx il servo reversa
#define postdx 150 //-- finecorsa servo posteriore dx se invertito con postsx il servo reversa
#define centro 0 //-- aggiunge o sottrae xx valore per correggere la centratura
#define tolerance 5 //-- tolleranza per eventuali vibrazioni ritmiche

#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int newPos, oldPos;
void setup() {
myservo.attach(10); //-- piedino di uscita segnale servo posteriore
pinMode(8, INPUT); //-- piedino di ingresso segnale servo anteriore
void loop() {
rxpulse = pulseIn(8, HIGH);
newPos = map(rxpulse, antsx, antdx,postsx, postdx); 
if (abs (newPos - oldPos)> tolerance) {
oldPos = newPos;

myservo.write(newPos + centro);
}
}
i piedini potete sceglierli voi.. io ho usato l'8 e il 10 ma se volete entrare nella scheda da altri piedini non avete altro da fare che cambiare quei numeri nello schetch e saldarvi ai vostri piedini preferiti.

infine se volete stravolgere il progetto, avete in mente altre possibili feature da aggiungere, siete i benvenuti per qualsiasi modifica possiate proporre, idem dubbi e domande
Icone allegate
centralina 4 ruote sterzanti con arduino nano-rear_servo_2.jpg   centralina 4 ruote sterzanti con arduino nano-servo_2ch_steering.jpg  

Ultima modifica di wrighizilla; 06-05-20 a 09:06 PM
wrighizilla non è in linea   Rispondi quotando
Vecchio 29-04-20, 05:45 PM   #2
Utente Senior
 
L'avatar di Litto97
 
Registrato dal: Feb 2016
residenza: Cabiate
Messaggi: 5,745
Litto97 è una brava persona!Litto97 è una brava persona!Litto97 è una brava persona!Litto97 è una brava persona!
predefinito

Ottima idea se non hai le radio con un sistema per il mixing o vuoi settare in modo particolare lo sterzo delle ruote posteriori


Inviato con il mio Redmi Note 7 - Scarica l‘app del Forum di Modellismo.net
Litto97 non è in linea   Rispondi quotando
Vecchio 29-04-20, 06:27 PM   #3
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

Quote:
Originariamente inviata da Litto97 Visualizza il messaggio
Ottima idea se non hai le radio con un sistema per il mixing o vuoi settare in modo particolare lo sterzo delle ruote posteriori


Inviato con il mio Redmi Note 7 - Scarica l‘app del Forum di Modellismo.net
grazie ho cercato di scrivere il post in modo da mettere in grado chiunque di poterla costruire, anche senza aver mai fatto un solo passo in arduino, io stesso mi colloco in questa categoria, solo 2 settimane addietro mi spaventava soltanto.

la controller funziona anche con la peggiore radio 2ch, la centralina è destinata proprio a chi non ha una radio con mix.

altrettanto interessante almeno per me è questo progetto per radio 3ch dove la stessa feature si può attivare o disattivare con il canale ausiliario 2 posizioni fisse.
io l'ho messa sul mio camion dynahead per controllare la microcamera fpv
in modo da avere una posizione dove il servo rimane fermo (e vedo solo avanti) e una seconda dove il servo segue lo sterzo (e posso darmi un occhiata attorno.. magari da fermo è meglio)
sostanzialmente è uguale a quella descritta nel post precedente ma la attivi e disattivi attraverso il segnale del canale ausiliario che ho assegnato al piedino 9
sul circuito l'unica differenza è appunto il piedino 9 aggiunto per entrare con il segnale di aux nella board nano.
codice:
#include <Servo.h>

Servo myservo;
#define antsx 1000 //-- in fronte servo finecorsa sx
#define antdx 2000 //-- in fronte servo finecorsa dx
#define postsx 30//--   out finecorsa posteriore servo sx 
#define postdx 150 //-- out finecorsa posteriore destra dx 
#define centro 0 //--    un numero aggiunto o sottratto per centrare le ruote
#define tolleranza 0 //-- settare a 5 se il servo vibra


unsigned int rxpulse;
unsigned int newPos, oldPos;

unsigned int centralPos = 1500;

void setup() {
myservo.attach(10); //--piedino uscita segnale servo posteriore
pinMode(9, INPUT); //--piedino segnale ingresso aux
pinMode(8, INPUT); //-- piedino segnale ingresso sterzo
}

void loop() {
rxpulse = pulseIn(9, HIGH); 
if (rxpulse > 1600) {
myservo.write(centralPos); 
} else {
newPos = map(pulseIn(8, HIGH), antsx, antdx, postsx, postdx);
if(abs(newPos - oldPos) > tolleranza) {
oldPos = newPos;
myservo.write(newPos + centro); 
}

}
}
se invece usate un bec esterno potete mandare nella ricevente radio anche solo i segnali. l'importante è alimentare i servi e la nano ai piedini VIN e GND con i 5v del bec ma la nano sulla porta VIN accetta alimentazioni fino a 9v anche la batteria 2s diretta la potrebbe alimentare..
di fatto non consuma nulla quindi basta il bec della ricevente.
come vedete in allegato non ho fatto altro che aggiungere in verde un filo di segnale tra il canale aux e il piedino 9
Icone allegate
centralina 4 ruote sterzanti con arduino nano-rear-servo-aux.jpg  

Ultima modifica di wrighizilla; 06-05-20 a 09:04 PM
wrighizilla non è in linea   Rispondi quotando
Vecchio 30-04-20, 02:26 AM   #4
Utente Senior
 
L'avatar di blackcat
 
Registrato dal: Apr 2005
residenza: Firenze
Messaggi: 2,168
blackcat è una brava persona!blackcat è una brava persona!blackcat è una brava persona!blackcat è una brava persona!
Thumbs up

Bravo te
A me è venuto il mal di testa solo a leggere
__________________
Massimo Turrà
blackcat non è in linea   Rispondi quotando
Vecchio 30-04-20, 10:48 AM   #5
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

Quote:
Originariamente inviata da blackcat Visualizza il messaggio
Bravo te
A me è venuto il mal di testa solo a leggere
ti garantisco che è facile, se quando ci liberano vieni da me con una schedina nano in mezz'ora hai la centralina.

di fatto c'è solo da saldare 4-5 piedini e caricare il programma, collegare le spinette e provarla.
nel post mi sono dilungato proprio per chi non sa nulla di nulla ma nella sostanza è roba che in 15 minuti si monta e si programma.
fidati, un par di settimane addietro avrebbe fatto venire il mal di testa anche a me.
è semplice anche imparare a settarla anche perchè non puoi fare danni.

iniziare con questo linguaggio senza sperimentare qualcosa di pratico diventa una strada in salita, viceversa se hai in mente un progetto e inizi a farlo impari tantissimo in breve tempo.
wrighizilla non è in linea   Rispondi quotando
Vecchio 30-04-20, 11:27 AM   #6
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

...

Ultima modifica di wrighizilla; 01-05-20 a 01:55 PM
wrighizilla non è in linea   Rispondi quotando
Vecchio 30-04-20, 08:06 PM   #7
Utente Senior
 
L'avatar di blackcat
 
Registrato dal: Apr 2005
residenza: Firenze
Messaggi: 2,168
blackcat è una brava persona!blackcat è una brava persona!blackcat è una brava persona!blackcat è una brava persona!
Thumbs up

Quote:
Originariamente inviata da wrighizilla Visualizza il messaggio
ti garantisco che è facile, se quando ci liberano vieni da me con una schedina nano in mezz'ora hai la centralina.
(...)
Ti ringrazio per l'invito. Quando ci liberano, un giorno vorrei venire davvero a trovarti, anche solo per vedere dal vivo i tuoi splendidi modelli autocostruiti
Arduino mi affascina per le mille cose se ci si possono fare, in molti ambiti, ma è un mondo che ad oggi non ho approfondito.
__________________
Massimo Turrà
blackcat non è in linea   Rispondi quotando
Vecchio 30-04-20, 09:24 PM   #8
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

Quote:
Originariamente inviata da blackcat Visualizza il messaggio
Ti ringrazio per l'invito. Quando ci liberano, un giorno vorrei venire davvero a trovarti, anche solo per vedere dal vivo i tuoi splendidi modelli autocostruiti
Arduino mi affascina per le mille cose se ci si possono fare, in molti ambiti, ma è un mondo che ad oggi non ho approfondito.
avoglia, quando vuoi mi scrivi e ti do l'indirizzo

ho cancellato l'ultimo sketch con lo sterzo posteriore inversamente proporzionale al gas, appena ho le idee chiare lo aggiorno.
sto cercando di sistemare un paio di problemini pratici dovuti alla retromarcia .

Ultima modifica di wrighizilla; 01-05-20 a 01:58 PM
wrighizilla non è in linea   Rispondi quotando
Vecchio 06-05-20, 09:59 PM   #9
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

Grazie alla collaborazione e al prezioso aiuto di amici di forums, è nata una nuova centralina arduino per controllare lo sterzo posteriore con radio 2ch basilari senza alcun mix.

questa versione permette di assegnare una certa quantità di gas throttle oltre la quale il servo posteriore inizia a chiudersi fino anche ad arrivare a eliminare completamente le 4 ruote sterzanti.

in pratica attraverso il settaggio di 2 parametri (Slowlimit e Max_gain ) è possibile decidere a quale velocità iniziare una progressione proporzionale della corsa di sterzo in modo da poter andare a tutto gas con solo 2 ruote sterzanti o una piccola porzione sterzante delle ruote posteriori.

per costruirla ho usato una scheda arduino nano e la procedura per quanto riguarda il programma arduino ide è la stessa che ho scritto nel primo post.

logicamente coinvolgendo il segnale del gas occorre assegnare un nuovo piedino al quale far arrivare il segnale dalla vostra ricevente.

allego in foto lo schema dei collegamenti alla scheda nano


nello sketch ho allegato una spiegazione globale del progetto e del settaggio necessario a farla funzionare al meglio ma qualche spiegazione vedrò di aggiungerla anche qui.

questo è il codice

codice:
/* 
I used an inexpensive nano board v3 ATmega 328p the pins used are VIN(+)and GND(-) 
you can feed the power from your bec (5-9 volt) 
the pins I used are: pin D7 throttle signal input. D8 front steering input signal. D10 rear steering signal output.
-----------------------------------------
basic setup instructions: first you get the best mechanical setup of the rear servo.
the values you find by default should make the controller work quite right away.
however if you want to be sure about what are your real radio signals,check them before starting this sketch. 
create a new tab and check your input signals with this program (7 for steering - 8 for throttle gas)

int rxpulse;
void setup () {
Serial.begin (9600);
}
void loop () {
rxpulse = pulseIn (7, HIGH); // - 7 to know true front steering signal 8 throttle
Serial.println (rxpulse);

you can read the values in the serial monitor by turning the steering wheel of the radio control and moving the throttle.
write the values obtained in the first part of the setup, replace the default ones with yours send by transmitter.
-------------------------------------------------- ------
the user driving setup consists of 2 functions: you can choose how much throttle allow at low speed 
before the width of the rear servo starts to close (Speedlimit function).

the second function allows you to determine the rear servo width  at maximum throttle (Max_gain).
you can choose to close it completely or leave a width available to turn with 4 steering wheels even at maximum speed

the other functions are: tolerance that avoids the rhythmic vibrations of the loop.
if the servo is good it could stay at zero, analog or low quality servos want at least a value of 4
it can happen that you exceed with the values and invert the direction, be careful to find the best suitable values for your model.
to get the servo reverse you just have to exchange the Postsx Postdx rear steering values and put a sign (-) in front of the Max_gain value
---------
there is a relationship between Slowlimit and Max_gain, it can happen that if you lower one you will have to raise the other
however I am sure that it will take you little time to understand how it works
*/

//----------- signal setup -------------------------------------
#define Neutral 1500 // -- minimum throttle forward signal

#define Maxspeed 2000 // -- maximum throttle forward signal

#define Antsx 1000 // -- in front servo signal end point sx

#define Antdx 2000 // -- in front servo signal end point dx

#define Postsx 1000 // out rear servo sx end point (if inverted with postdx rear servo will reverse)

#define Postdx 2000 //-- out rear servo dx endpoint (if inverted with postsx rear servo will reverse)

#define Center 30 //-- add or subtract your value to center steering (+- 50 or more)
 
//--------- user driving setup ------------------------------
 
#define Max_gain 400 //-- gain steering reduction width at max throttle (if rear servo is reverse add (-) before this value)

#define Slowlimit 1800 //-- slow forward percentage without endpoint correction
 
#define Tolerance 0 //--  if  value is 10 to 50 servo move by step 

//---------------------------- main program - nothing to do here ------------
#include <Servo.h>
Servo myservo; 

#define N_STST  7   //--   if servo vibrating (try values from 4 to 10)         
#define N_STGAS  7   //-- if servo vibrating (try values from 4 to 10) 
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);
}
}
il setup è un filino più complicato perchè ha più parametri rispetto alle altre controller.
io ho messo dei valori di default che dovrebbero far funzionare la controller abbastanza bene fin da subito, tuttavia i segnali delle vostre radio potrebbero essere leggermente diversi quindi sarebbe sempre meglio controllarli da serial monitor con questo codice che potete incollare in un nuovo sketch vuoto nell'arduino ide

codice:
int rxpulse;
void setup () {
Serial.begin (9600);
}
void loop () {
rxpulse = pulseIn (7, HIGH); // - 7 to know true front steering signal (number  8 to check throttle signal)
Serial.println (rxpulse);
in pratica se avete collegato il segnale di sterzo anteriore al piedino 7 come da disegno potete andare nel serial monitor e girando lo sterzo vedere i vostri valori radio di endpoint.
idem col gas, basta cambiare il numero con (8, HIGH) e muovere il grilletto o lo stick e annotarsi i valori risultanti.

a questo punto avete i valori di fine corsa dello sterzo anteriore, del gas da massima retro a massimo gas e anche il valore del gas neutro e potete cambiare i valori 1000-2000 di default con quelli della vostra radio.

i valori di Postsx e Postdx li potete anche cambiare per via empirica controllando che lo sterzo posteriore arrivi al massimo della corsa possibile evitando così di sforzare i biccherini dell'asse posteriore.
stessa sorte per il "define center" per quanto la centratura dello sterzo sia sempre bene farla al meglio meccanicamente.
per centrare il servo fate progressioni di 30-50 anche per capire in che direzione state andando..

se invece mettete davanti al valore di Center il segno meno (-) andrete nel verso opposto.

per reversare il servo basta invertire i valori di Postsx con quelli di Postdx e aggiungere il segno meno (-) davanti alla correzione inversamente proporzionale al gas (Max_gain) esempio "define Max_gain -400"
----------------------------
ok avete fatto il setup di base della controller, resta da settare i 2 parametri del setup di guida Slowlimit e Max_gain

c'è una relazione tra questi 2 parametri ma è intuitiva da capire..
ad esempio se impostate Slowlimit a 1600 avrete lo sterzo posteriore tutto chiuso al massimo della velocità impostando Max_gain intorno a 630
oppure 1700 - 700 e così via..
se superate i valori lo sterzo il servo si reverserà al massimo del gas e la macchina andrà in diagonale.. nulla di grave, trovate i valori che più vi piacciono sia di quantità di gas che di massima sterzata.

il valore minimo di slowlimit sarà il vostro neutro (1500) ma ovviamente lo sterzo inizierà a ridurre la sua corsa appena inizierete a muovervi.
quindi direi che valori tra 1600-1800 sono ideali per avere tutto sterzo a bassa o media velocità e lasciare che si riduca solo quando andate veloci.

quanto chiudere lo decidete voi impostando (Max_gain) di default ho messo 400 che è circa metà della corsa disponibile.

lo sterzo posteriore lo potete chiudere anche tutto e avere a massima velocità una comune macchina 2 ruote sterzanti oppure lasciarvi una porzione di corsa allo sterzo.

chiaramente se la macchina è veloce con 4ws è facile ribaltare e magari le 4 ruote sterzanti fanno comodo solo nei passaggi più lenti tra sassi e radici, la controller nasce per questo.

in retromarcia lo sterzo posteriore è sempre al massimo della sua apertura.


infine Tolerance che è rimasto da modifiche precedenti, di fatto adesso serve a poco e l'ho messo a zero in default ma se lo impostate a 50 avete uno sterzo che si muove a brevi scatti tipo step by step

nella parte di codice del programma non avete da fare nulla, ci sono anche lì 2 define che ho impostato a 7, servono nel caso il servo abbia vibrazioni.. potete provare a mettere 5 per velocizzare il servocomando ma oltre 15 il servo rallenta vistosamente e sotto 5 potrebbe vibrare in maniera ciclica.
------------------------------------------

la controller l'ho provata abbastanza a fondo e domani la monto sul mio camion, magari faccio 2 scatti e un breve video.

magari la prima volta che la usate scollegate il rinvio di sterzo posteriore o provatela con un servo sul banco.. così la capite molto meglio, in mezz'ora non avrà più segreti.

se avete domande o vi siete persi non esitate a chiedere, un paio di settimane addietro neanche io sapevo cosa fosse arduino e come farlo funzionare quindi avete sicuramente tutta la mia disponibilità
Icone allegate
centralina 4 ruote sterzanti con arduino nano-rear_servo_inv_prop_gain.jpg  

Ultima modifica di wrighizilla; 06-05-20 a 10:17 PM
wrighizilla non è in linea   Rispondi quotando
Vecchio 10-05-20, 12:52 AM   #10
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
Vecchio 10-05-20, 03:50 PM   #11
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito

in questo video potete vedere come si comporta la centralina.
ho impostato un basso valore di Slowlimit in modo che la correzione parta poco dopo il gas neutro e ho alzato il valore di Max_gain per chiudere completamente la corsa del servo posteriore quando si procede a tutto gas.
in retro invece non cambia nulla.. lo sterzo ha sempre tutta la massima escursione disponibile.

wrighizilla non è in linea   Rispondi quotando
Rispondi

Strumenti della discussione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato


Discussioni simili
Discussione Ha iniziato questa discussione Forum Risposte Ultimo messaggio
Lego - ruote sterzanti con servomotore Signore 7.8 Lego 3 08-01-18 06:34 AM
Servo Arduino delu1995 Automodelli elettrici 1/10 Touring 1 11-02-17 09:33 PM
ESC & Arduino Jim_Morrison Impianti radio, caricatori, ESC e batterie 1 02-12-14 11:13 AM
Esc & Arduino Ithos92 Automodelli elettrici 1/10 Touring 1 12-01-12 08:48 AM
Savage: ruote posteriori sterzanti pisa1877 Automodelli a scoppio Monster Truck 3 27-10-05 09:29 PM


Tutti gli orari sono GMT +2. Attualmente sono le 12:07 PM.


Chi Siamo | Pubblicità | Scambio banner | Disclaimer | Regolamento | P.IVA 00319251203
Disponibile su App Store Disponibile su Google Play