aiuto per uno sketch rc
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
il nodo che non riesco a sciogliere è:
se io uso un define significa che Postsx e Postdx sono definiti, non si toccano. non sono variabili in gioco ma valori definiti.
allora perchè cambiando i valori di Slowlimit e Max_gain ( altri 2 valori definiti ) vedo accorciarsi o allungarsi la corsa del servo appena carico il programma con la radio in neutro?
cambiando Slowlimit mi aspetterei di avere solo maggiore corsa del gas a disposizione per usare lo sterzo posteriore con tutta la corsa definita da Postsx Postdx
cambiando Max_gain mi aspetterei di veder cambiare l'ampiezza della corsa disponibile del servo quando arriva a maxspeed ovvero tutto gas, serve solo a scegliere se arrivati a tutto gas avere chiusa tutta la corsa o lasciarne una parte utilizzabile.
non mi aspetto ed è spiacevole vedere scombinare il settaggio dei fine corsa che sono stati definiti con 2 valori precisi.
ho scritto male oppure manca qualcosa, magari anche solo un paio di { } ma non c'arrivo.
mi ingrippo sulla questione che i dati in define non dovrebbero venire cambiati dalle risultanti del void loop.
ti ringrazio, adesso provo a trasformare tutto in microseconds. vediamo se me la cavo.
se io uso un define significa che Postsx e Postdx sono definiti, non si toccano. non sono variabili in gioco ma valori definiti.
allora perchè cambiando i valori di Slowlimit e Max_gain ( altri 2 valori definiti ) vedo accorciarsi o allungarsi la corsa del servo appena carico il programma con la radio in neutro?
cambiando Slowlimit mi aspetterei di avere solo maggiore corsa del gas a disposizione per usare lo sterzo posteriore con tutta la corsa definita da Postsx Postdx
cambiando Max_gain mi aspetterei di veder cambiare l'ampiezza della corsa disponibile del servo quando arriva a maxspeed ovvero tutto gas, serve solo a scegliere se arrivati a tutto gas avere chiusa tutta la corsa o lasciarne una parte utilizzabile.
non mi aspetto ed è spiacevole vedere scombinare il settaggio dei fine corsa che sono stati definiti con 2 valori precisi.
ho scritto male oppure manca qualcosa, magari anche solo un paio di { } ma non c'arrivo.
mi ingrippo sulla questione che i dati in define non dovrebbero venire cambiati dalle risultanti del void loop.
ti ringrazio, adesso provo a trasformare tutto in microseconds. vediamo se me la cavo.
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
Perché newPos essendo fuori dalla condizione if else viene sempre calcolato con la correzione gain che per basse velocità è correlata a slowlimit.
Sono da separare i due casi
Hai provato a caricare le righe che ti avevo rimandato ieri? Anche se ho paura di sapere come si comporta!
Hai tenuto una copia del programma con la pulseIn? Perché se si aggiungono troppe cose che ancora non funzionano bene rischia di diventare complicato imputare la colpa a questo o quel comando
Sono da separare i due casi
Hai provato a caricare le righe che ti avevo rimandato ieri? Anche se ho paura di sapere come si comporta!
Hai tenuto una copia del programma con la pulseIn? Perché se si aggiungono troppe cose che ancora non funzionano bene rischia di diventare complicato imputare la colpa a questo o quel comando
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
si funziona tanto meglio con questo codice
adesso lo testo prima di cantare vittoria.. grazie infinite, è la strada giusta.
Codice: Seleziona tutto
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 5 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 175 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 3 //-- if poor quality servo vibrates try 5
#define Max_gain 120 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1800 //-- slow forward without endpoint correction
#include <Servo.h>
Servo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
unsigned int NewPos, OldPos;
void setup() {
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(){
Rxpulse = pulseIn(8, HIGH);
Gaspulse = pulseIn(7, HIGH);
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);
}
}
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
funziona molto meglio di prima, adesso i fine corsa non cambiano, non si allargano più
l'unica cosa che cambia adesso è l'interazione tra Slowlimit e Max_gain ovvero se abbasso slowlimit la corsa del servo a tutto gas cambia e devo ritoccare anche Max_gain
la prova la faccio sempre cercando di ottenere il servo fermo al massimo del gas
ad esempio slowlimit 1600 e Max_gain 115 ho il servo nuovamente fermo al centro a tutto gas.
ma aumentando slowlimit a 1800 devo mettere Max_gain a 170
ad ogni modo è certamente il risultato migliore trovato fino ad adesso.
l'unica cosa che cambia adesso è l'interazione tra Slowlimit e Max_gain ovvero se abbasso slowlimit la corsa del servo a tutto gas cambia e devo ritoccare anche Max_gain
la prova la faccio sempre cercando di ottenere il servo fermo al massimo del gas
ad esempio slowlimit 1600 e Max_gain 115 ho il servo nuovamente fermo al centro a tutto gas.
ma aumentando slowlimit a 1800 devo mettere Max_gain a 170
ad ogni modo è certamente il risultato migliore trovato fino ad adesso.
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
Oooooooooooottima notizia sono contento.
Quel problema che dici che ha ancora è perché come ti avevo detto bisogna accertarsi che max gain + fine corsa sinistro faccia 90. E di conseguenza fine corsa dx meno max gain faccia anche lui 90.
Quindi direi che siamo arrivati al discorso che avevo accennato ieri sull'eliminare le impostazioni manuali di alcuni valori.
Max gain lo deve calcolare il programma perché una volta definito il finecorsa è univocamente determinato.
Poi a cascata eliminerei tutti i settaggi a mano del "secondo semiveicolo"... non so come dire... ma il succo è che se imposti i valori di sx, quelli di dx li deve calcolare il programma
Quel problema che dici che ha ancora è perché come ti avevo detto bisogna accertarsi che max gain + fine corsa sinistro faccia 90. E di conseguenza fine corsa dx meno max gain faccia anche lui 90.
Quindi direi che siamo arrivati al discorso che avevo accennato ieri sull'eliminare le impostazioni manuali di alcuni valori.
Max gain lo deve calcolare il programma perché una volta definito il finecorsa è univocamente determinato.
Poi a cascata eliminerei tutti i settaggi a mano del "secondo semiveicolo"... non so come dire... ma il succo è che se imposti i valori di sx, quelli di dx li deve calcolare il programma
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
ni.. perchè non è che deve per forza finire con lo sterzo tutto chiuso annullando le 4ws a tutto gas..kele-1 ha scritto: ↑03/05/2020, 18:42Oooooooooooottima notizia sono contento.
Quel problema che dici che ha ancora è perché come ti avevo detto bisogna accertarsi che max gain + fine corsa sinistro faccia 90. E di conseguenza fine corsa dx meno max gain faccia anche lui 90.
Quindi direi che siamo arrivati al discorso che avevo accennato ieri sull'eliminare le impostazioni manuali di alcuni valori.
Max gain lo deve calcolare il programma perché una volta definito il finecorsa è univocamente determinato.
Poi a cascata eliminerei tutti i settaggi a mano del "secondo semiveicolo"... non so come dire... ma il succo è che se imposti i valori di sx, quelli di dx li deve calcolare il programma
puoi decidere di averne un pò oppure anche tutta la corsa di sterzo 4ws comunque anche a tutto gas..
sono io che per accertarmi del corretto funzionamento cerco la posizione dove la corsa del servo si chiude del tutto.
per i codici è meglio se li tagghiamo con (code) (/code) parentesi quadre ovviamente.
se sai pulirlo e snellirlo, non ho chiaro cosa dovrei cancellare di quello che è già scritto perchè poi mi mancherebbero le variabili nel void loop
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
ok. Allora si setta a mano la differenza con il valore a 90. Ma Maxgain deve in ogni caso essere calcolato dal programma
Prova se così funziona. Per decidere quanto poter sterzare quando sei al massimo setti max_gain_diff invece di max_gain.
Intanto il fine corsa destro si calcola in base a quello sinistro. Poi per il discorso dei segnali che la tua radio può inviare con valori differenti non so come funziona quindi non so se ci sono un po' di limitazioni o se è tutto variabile a piacere.
Nel senso, se puoi decidere sia il valore minimo che massimo del segnale, allora va tenuto tutto così.
Se invece scendi per esempio di 100 punti, quindi da 1000 vai a 900 e sei obbligato ad avere un range di 1000 fino al valore massimo, allora l'altro valore si può calcolare come
valoreMassimo = valoreMinimo + 1000;
Ma non sapendo come funziona quell'opzione non ho modificato.
Codice: Seleziona tutto
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 5 // out rear servo sx endpoint if inverted with postdx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 3 //-- if poor quality servo vibrates try 5
#define Max_gain_diff 10 //
#define Slowlimit 1800 //-- slow forward without endpoint correction
#include <Servo.h>
Servo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
unsigned int NewPos, OldPos;
unsigned int Max_gain = 90 - Max_gain_diff - Postsx;
unsigned int Postdx = 180 - Postsx;
void setup() {
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(){
Rxpulse = pulseIn(8, HIGH);
Gaspulse = pulseIn(7, HIGH);
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);
}
}
Intanto il fine corsa destro si calcola in base a quello sinistro. Poi per il discorso dei segnali che la tua radio può inviare con valori differenti non so come funziona quindi non so se ci sono un po' di limitazioni o se è tutto variabile a piacere.
Nel senso, se puoi decidere sia il valore minimo che massimo del segnale, allora va tenuto tutto così.
Se invece scendi per esempio di 100 punti, quindi da 1000 vai a 900 e sei obbligato ad avere un range di 1000 fino al valore massimo, allora l'altro valore si può calcolare come
valoreMassimo = valoreMinimo + 1000;
Ma non sapendo come funziona quell'opzione non ho modificato.
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
no non è cambiato molto, funziona come prima quindi abbastanza bene, con l'unica differenza che con slowlimit a 1800 devo mettere un valore negativo Max_gain_diff -70 per tornare alla posizione col servo fermo centrato a tutto gas.
invece con Slowlimit a 1600 devo mettere Max_gain_diff a -30
invece con Slowlimit a 1600 devo mettere Max_gain_diff a -30
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
ho capito che tipo di pulizia hai fatto, in linea di massima hai ragione e magari Postsx potrebbe cambiare nome in endpoint dove metti un valore solo semplificando tutto, ma ci sono alcune condizioni sulle macchine che a volte obbligano ad avere corse diverse tra destra e sinistra.. questo capita quando il servocomando non è al centro del modello ma messo di lato con rinvii di lunghezze differenti.
per esempio il camion che ti ho fatto vedere non ha questo problema ma il Tamiya dynahead si.. infatti per avere una corsa decente dello sterzo anteriore ho dovuto mettere un settaggio radio dove un lato eccede rispetto all'altro.
penso che forse sia meglio tornare al code precedente, è più "automodellisticamente" pratico
per lo stesso motivo anche il travel della radio non ha un solo settaggio che allarga entrambi i lati ma 2 travel separati.
per esempio il camion che ti ho fatto vedere non ha questo problema ma il Tamiya dynahead si.. infatti per avere una corsa decente dello sterzo anteriore ho dovuto mettere un settaggio radio dove un lato eccede rispetto all'altro.
penso che forse sia meglio tornare al code precedente, è più "automodellisticamente" pratico
per lo stesso motivo anche il travel della radio non ha un solo settaggio che allarga entrambi i lati ma 2 travel separati.
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
Aspetta, se vuoi avere lo sterzo centrato max gain diff dovrebbe stare a 0. perché quello è il parametro che dicevi per avere alla massima velocità ancora un certo valore di sterzata.
Settato così a 10 dovrebbe voler dire che alla massima velocità, quando giri tutto, il servo posteriore è a 80 gradi.
Per la questione dello sterzo se è come dici allora tocca impostare a mano. Non sapevo questa cosa.
Questo perché le aste che girano le ruote assumono angoli diversi rimanendo attaccate al servo che ruota? Quindi si spostano lateralmente di angoli diversi?
Avresti modo di farmi vedere questo sistema di sterzo?
In ogni caso, tornando a noi, basta che cancelli quell'operazione che ho aggiunto e aggiungi di nuovo Postdx nei define.
Ma max gain diff lascialo perché quello deve funzionare mannaggia. prova a settarlo a 0 come ti ho all'inizio di questo post per vedere se si riallinea
Settato così a 10 dovrebbe voler dire che alla massima velocità, quando giri tutto, il servo posteriore è a 80 gradi.
Per la questione dello sterzo se è come dici allora tocca impostare a mano. Non sapevo questa cosa.
Questo perché le aste che girano le ruote assumono angoli diversi rimanendo attaccate al servo che ruota? Quindi si spostano lateralmente di angoli diversi?
Avresti modo di farmi vedere questo sistema di sterzo?
In ogni caso, tornando a noi, basta che cancelli quell'operazione che ho aggiunto e aggiungi di nuovo Postdx nei define.
Ma max gain diff lascialo perché quello deve funzionare mannaggia. prova a settarlo a 0 come ti ho all'inizio di questo post per vedere se si riallinea
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
con l'ultimo sketch con un solo Postsx
se metto
praticamente ho lo sterzo quasi tutto aperto anche a tutto gas.. qualcosa chiude ma poca cosa un 10%.
se metto
chiude leggermente ancora meno la corsa a tutto gas diciamo un 5%
se invece metto
a tutto gas chiudo tutto lo sterzo, come non averlo
invece con lo sketch precedente, se:
Slowlimit è a 1600 Max_gain deve stare a 115 per ottenere una corsa uguale identica a Slowlimit 1800 - Max_gain 155
questo sketch
se metto
Codice: Seleziona tutto
#define Max_gain_diff 10 //
#define Slowlimit 1800 //--
se metto
Codice: Seleziona tutto
#define Max_gain_diff 0 //
#define Slowlimit 1800
se invece metto
Codice: Seleziona tutto
#define Max_gain_diff -80 //
#define Slowlimit 1800
invece con lo sketch precedente, se:
Slowlimit è a 1600 Max_gain deve stare a 115 per ottenere una corsa uguale identica a Slowlimit 1800 - Max_gain 155
questo sketch
Codice: Seleziona tutto
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 5 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 175 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 3 //-- if poor quality servo vibrates try 5
#define Max_gain 155 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1800 //-- slow forward without endpoint correction
#include <Servo.h>
Servo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
unsigned int NewPos, OldPos;
void setup() {
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(){
Rxpulse = pulseIn(8, HIGH);
Gaspulse = pulseIn(7, HIGH);
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);
}
}
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
Questa è tosta. Non ne sto venendo fuori.
A questo punto aggiungerei queste righe tra le ultime due parentesi
Serial.println(gain);
delay(500);
per leggere sul monitor del pc i valori di gain. Perché sono ad un punto morto e mi sa che da qua non mi schiodo
A questo punto aggiungerei queste righe tra le ultime due parentesi
Serial.println(gain);
delay(500);
per leggere sul monitor del pc i valori di gain. Perché sono ad un punto morto e mi sa che da qua non mi schiodo
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
aspetta perchè sta diventando un lavoro di gruppo.. ho coinvolto altri 3 modellisti su 2 forum e qualcuno è già impazzito
la soluzione è sicuramente semplicissima, c'è una relazione tra 2 valori che invece dovrebbero essere indipendenti.. una situazione del tutto simile a wulla che c'era prima che tu riuscissi ad escludere i fine corsa dagli altri.
va a finire che la soluzione gli somiglierà.
intanto ho fatto delle prove e ho scoperto che posso settare tutto così
in questa condizione ho circa 30% di gas prima di veder partire la correzione e alla fine lo stezo è tutto chiuso col servo perfettamente fermo al centro
così invece
ho il 70-80% di gas prima di veder partire la correzione che ovviamente sarà abbastanza repentina dato che la corsa rimanente è davvero poca.
ma il servo è altrettanto immobile inchiodato al centro
visivamente si setta molto meglio usando i valori alti.
a livello pratico è la stessa cosa di prima, nessuna differenza.
per reversare il servo è sufficiente scambiare i valori di Postsx e Postdx e mettere un valore negativo davanti a Max_gain, perfettamente reversato e identico.
la soluzione è sicuramente semplicissima, c'è una relazione tra 2 valori che invece dovrebbero essere indipendenti.. una situazione del tutto simile a wulla che c'era prima che tu riuscissi ad escludere i fine corsa dagli altri.
va a finire che la soluzione gli somiglierà.
intanto ho fatto delle prove e ho scoperto che posso settare tutto così
Codice: Seleziona tutto
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 1000 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 2000 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 5 //-- if poor quality servo vibrates try 5
#define Max_gain 650 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1600 //-- slow forward without endpoint correction
così invece
Codice: Seleziona tutto
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 2000 // -- maximum forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 1000 // out rear servo sx endpoint if inverted with postdx it reverse
#define Postdx 2000 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define Center 0 //-- add or subtract xx value to center steering
#define Tolerance 5 //-- if poor quality servo vibrates try 5
#define Max_gain 950 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1800 //-- slow forward without endpoint correction
ho il 70-80% di gas prima di veder partire la correzione che ovviamente sarà abbastanza repentina dato che la corsa rimanente è davvero poca.
ma il servo è altrettanto immobile inchiodato al centro
visivamente si setta molto meglio usando i valori alti.
a livello pratico è la stessa cosa di prima, nessuna differenza.
per reversare il servo è sufficiente scambiare i valori di Postsx e Postdx e mettere un valore negativo davanti a Max_gain, perfettamente reversato e identico.
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
ahahah bene! Non fanno male un po' di rinforzi! Però a me quel max gain impostato a mano non convince per niente...perché quando calcoli newPos rischi che se giri a sinistra viene fuori un valore di sterzo che supera la mezzeria e finisce a destra.....
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
si ovvio.. ma te ne accorgi subito
per questo problema posso anche scrivere due linee guida piuttosto che lavorare sulla possibilità di renderlo impossibile.
alla fine sono parecchi i settaggi che se li sballi di brutto crei mostri
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
per caso hai qualche soluzione per le vibrazioni ritmiche del servo? ho messo Tolerance ma non risolve molto.
mi chiedevo se fosse possibile filtrare in qualche modo il segnale d'ingresso che oscilla tra 1000 e 1005 penso sia questo a generare la vibrazione a ritmo blues.
sto studiando se posso usare detach oppure stabilizzare il segnale d'ingresso direttamente all'inizio dello sketch al pulseIn dei piedini 7-8 invece che usare Tolerance alla fine.
mi chiedevo se fosse possibile filtrare in qualche modo il segnale d'ingresso che oscilla tra 1000 e 1005 penso sia questo a generare la vibrazione a ritmo blues.
sto studiando se posso usare detach oppure stabilizzare il segnale d'ingresso direttamente all'inizio dello sketch al pulseIn dei piedini 7-8 invece che usare Tolerance alla fine.
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
il problema, spero l'ultimo è questa vibrazione ritmica..
i movimenti ampi lo faccio io col radiocomando ma per tutta la corsa proporzionale sono costantemente afflitti dalla vibrazione ritmica..
non so come risolverla, serve un filtro per i PulseIn di entrata perchè usare Tolerance funziona solo per metà oltre a rendere tutto a scatti se esagero col valore..
la parte dello sketch dove viene eseguite la mappa inversamente proporzionale trema che è una bellezza.
ho provato a usare WriteMIcroseconds e anche a cambiare libreria con mobatools ma non cambia niente..
i movimenti ampi lo faccio io col radiocomando ma per tutta la corsa proporzionale sono costantemente afflitti dalla vibrazione ritmica..
non so come risolverla, serve un filtro per i PulseIn di entrata perchè usare Tolerance funziona solo per metà oltre a rendere tutto a scatti se esagero col valore..
la parte dello sketch dove viene eseguite la mappa inversamente proporzionale trema che è una bellezza.
ho provato a usare WriteMIcroseconds e anche a cambiare libreria con mobatools ma non cambia niente..
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
risolto.. sterzo stabilizzato e sketch perfettamente funzionante, serviva creare un filtro che facesse una media tra i valori dei segnali in ingresso.
vi ringrazio per l'aiuto che ha fatto in modo che tutto questo sia stato reso possibile.
vi ringrazio per l'aiuto che ha fatto in modo che tutto questo sia stato reso possibile.
Codice: Seleziona tutto
//----------- signal setup -------------------------------------
#define Neutral 1500 // -- minimum throttle forward signal
#define Maxspeed 2000 // -- maximum throttle forward signal
#define Antsx 1000 // -- in front servo signal sx
#define Antdx 2000 // -- in front servo signal dx
#define Postsx 1000 // out rear servo sx end point (if inverted with postdx it reverse)
#define Postdx 2000 //-- out rear servo dx endpoint (if inverted with postsx it reverse)
#define Center 0 //-- add or subtract your value to center steering (+- 50 or more)
//--------- user driving setup ------------------------------
#define Max_gain 600 //-- gain steering reduction width at max throttle (if reverse add (-) before value)
#define Slowlimit 1700 //-- slow forward percentage without endpoint correction
#define Tolerance 0 //-- if poor quality servo vibrates try 5 (also try (0) before decide)
//------------ here start the program, you don't need to change anything here --------------------------
#include <Servo.h>
Servo myservo;
#define N_STST 7 //-- stabilize vibration steering signal in ( high value =slow servo response)
#define N_STGAS 7 //-- stabilize vibration throttle signal in (high value = slow servo response)
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(){
Rxpulse = pulseIn(8, HIGH);
Gaspulse = pulseIn(7, HIGH);
Rxpulse = meStSt( Rxpulse );
Gaspulse = meStGas( Gaspulse );
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);
}
}
unsigned int meStSt( unsigned int val ) {
if ( ++inSt >= N_STST ) inSt = 0;
toStSt = toStSt - stSt[ inSt ] + val;
stSt[ inSt ] = val;
return( toStSt / N_STST );
}
unsigned int meStGas( unsigned int val ) {
if ( ++inGas >= N_STGAS ) inGas = 0;
toStGas = toStGas - stGas[ inGas ] + val;
stGas[ inGas ] = val;
return ( toStGas / N_STGAS );
}
-
- Utente Registrato
- Messaggi: 78
- Iscritto il: 21/08/2019, 4:04
- Località: Udine
- Grazie Inviati: 1 volta
- Grazie Ricevuti: 4 volte
- Stato: Non connesso
aiuto per uno sketch rc
bene bene!
ma le vibrazioni c'erano anche con tolerance a 4?
perché arduino legge differenze di 4 microsecondi, quindi puoi leggere 1000 o 1004 ma non leggerai mai 1001 1002 1003. Per questo se avevi impostato tolerance a 3 era come non averlo.
E quindi mi chiedo: i valori di pulse che leggevi variavano anche di 3 punti da una lettura all'altra siccome ho visto che l'avevi impostata così?
ma le vibrazioni c'erano anche con tolerance a 4?
perché arduino legge differenze di 4 microsecondi, quindi puoi leggere 1000 o 1004 ma non leggerai mai 1001 1002 1003. Per questo se avevi impostato tolerance a 3 era come non averlo.
E quindi mi chiedo: i valori di pulse che leggevi variavano anche di 3 punti da una lettura all'altra siccome ho visto che l'avevi impostata così?
-
Topic author - Utente Registrato
- Messaggi: 78
- Iscritto il: 03/10/2018, 14:55
- Grazie Inviati: 4 volte
- Grazie Ricevuti: 3 volte
- Stato: Non connesso
aiuto per uno sketch rc
la tolleranza funziona ma non risolve..
guarda questo.. è più semplice e funziona ancora meglio
vedi le stringhe STST STGAS storia sterzo e storia gas
la differenza è questa: vecchio sketch senza filtro dei segnali con solo tolerance
a questo del code che ho messo sopra con i segnali filtrati e semplificati
in entrambi dove la corsa è corta significa che sto dando tutto gas.
guarda questo.. è più semplice e funziona ancora meglio
vedi le stringhe STST STGAS storia sterzo e storia gas
Codice: Seleziona tutto
#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 Guadagno;
unsigned int NewPos, OldPos;
void setup () {
per (int i = 0; i <N_STST; i ++) stSt [i] = 0;
per (int i = 0; i <N_STGAS; i ++) stGas [i] = 0;
myservo.attach (10); // - pin uscita segnale servo posteriore
pinMode (8, INPUT); // - segnale servo anteriore in pin
pinMode (7, INPUT); // - segnale dell'acceleratore nel pin
}
void loop () {
noInterrupts ();
Rxpulse = pulseIn (8, HIGH);
Gaspulse = pulseIn (7, HIGH);
interrupt ();
ritardo (5);
if (Gaspulse> Slowlimit) {
Guadagno = mappa (Gaspulse, Slowlimit, Maxspeed, 0, Max_gain);
NewPos = map (Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain));
}
altro {
NewPos = map (Rxpulse, Antsx, Antdx, Postsx, Postdx);
}
if (abs (NewPos - OldPos)> Tolleranza) {
OldPos = NewPos;
myservo.write (NewPos + Center);
}
}
a questo del code che ho messo sopra con i segnali filtrati e semplificati
in entrambi dove la corsa è corta significa che sto dando tutto gas.