Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 29 aprile 20, 19:56   #31 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
grazie davvero, da provare subito
logica interessante quella che sta dietro alla modifica, di fatto è un'altra mappatura a partire da quella dello sterzo
bellissima questa cosa.
ti ringrazio ancora
wrighizilla non è collegato   Rispondi citando
Vecchio 29 aprile 20, 20:14   #32 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 293
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
grazie davvero, da provare subito

logica interessante quella che sta dietro alla modifica, di fatto è un'altra mappatura a partire da quella dello sterzo

bellissima questa cosa.

ti ringrazio ancora
Fai attenzione ai valori che imposti per la correzione massima. Se metti un valore troppo alto rischi che con il gas al massimo si inverte la direzione dello sterzo. Come ti ho anticipato fai le prove in ogni condizione prima di andare in pista... Buon lavoro

Inviato dal mio PRA-LX1 utilizzando Tapatalk
nicolap non è collegato   Rispondi citando
Vecchio 29 aprile 20, 21:18   #33 (permalink)  Top
Moderatore
 
L'avatar di angelobev
 
Data registr.: 02-10-2014
Residenza: Chieti
Messaggi: 2.580
Bella discussione, merita di essere spostata in sezione "elettronica"

Inviato con scocciofono e ditoni.
Scusate gli errori...
__________________
modelli: un pò di tutto.. dall'aliante alla ventolina e tutto quello che c'è in mezzo...
professione: corruttore di modellisti onesti
angelobev non è collegato   Rispondi citando
Vecchio 29 aprile 20, 22:02   #34 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Grazie Angelo..

ho provato a fondo lo sketch e funziona benissimo.
occorre stare attenti a settare i valori di endpoint del servo posteriore perchè c'è correlazione col gain inversamente proporzionale dello sterzo
ad ogni modo è abbastanza facile trovare il giusto compromesso tra la corsa del servo e la quantità di sterzata che si desidera dare a tutto gas.
l'ho raccolto in un pastebin con 2 note di spiegazione aggiunte.
https://pastebin.com/P7HyCT4x
wrighizilla non è collegato   Rispondi citando
Vecchio 30 aprile 20, 20:07   #35 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
dunque.. facendoci notte ho trovato 1 difetto a alcune possibili migliorie da poter fare.
il difetto è che in retro il servo impazzisce..
ho corretto facendo partire la mappatura inversamente proporzionale da 1400 ma non penso sia la soluzione migliore.. solo una che risolve per adesso..

void loop() {
rxpulse = pulseIn(8, HIGH);
gaspulse = pulseIn(7, HIGH);
if (gaspulse >1400)
correction = map(gaspulse, antsx, antdx, 0,max_correction);

di fatto sarebbe meglio che gaspulse fosse all'origine preso in considerazione solo dopo 1400-1500

per quanto riguarda le migliorie ci sto lavorando perchè la mappa vede l'intera corsa del gas come un unica scala che parte da 1000 e arriva a 2000
quindi appena si inizia a dare gas si inizia anche a perdere sterzo e in retro si allargava ancora fino a impazzire, almeno fino alla correzione che ho fatto.

magari sarebbe migliore se nella prima porzione di gas si avessero tutta la corsa degli end points e solo da 1/3 di gas la mappa iniziasse progressivamente a stringere la corsa fino ad avere 2ws ma per adesso non sono riuscito a farlo.
ho provato a usare if gaspulse > di 1600 else .. vai alla mappa.. ma non funziona.

infine, probabilmente per lo stesso motivo per il quale la scala parte da 1000-2000 e non dal neutro, se aumento il valore della max_correction stringo gli endpoints anche col gas fermo a neutro.

vediamo dove arrivo perchè di fatto tutto questo ha senso che riguardi solo la marcia avanti, gaspulse in questo sketch dovrebbe partire in ogni caso da 1400-1500 per qualsiasi operazione possa poi fare il resto del programma.

torno nell'ide

Ultima modifica di wrighizilla : 30 aprile 20 alle ore 20:11
wrighizilla non è collegato   Rispondi citando
Vecchio 01 maggio 20, 11:07   #36 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
la stringa in rosso non funziona o almeno non come dovrebbe..
nelle prove dove funziona bene non avevo mai usato la retro.
di fatto rxpulse pin 7 ha una banda da 1000 a 2000 dove il neutro del gas è a 1500 (valori approssimati, quelli veri si leggono col signal void da serial monitor)

adesso in retro gli endpoint dello sterzo posteriore si allargano, mentre tutto dovrebbe solo partire da zero gas o ancora meglio da un 15-20% di gas avanti.
solo allora la corsa dello sterzo dovrebbe iniziare a ridursi fino diventare a tutto gas una comune macchina 2 ruote anteriori sterzanti.
in retro gli endpoint devono rimanere settati come nelle stringhe di define postsx postdx
altrimenti si sforza solo il servo sulla corsa meccanica dei biccherini.

voglio provare con "switch case" e "constrain" ma ieri avevo iniziato e sono finito con avere le paperine che mi giravano sopra.. oggi ci riprovo.

Ultima modifica di wrighizilla : 01 maggio 20 alle ore 11:14
wrighizilla non è collegato   Rispondi citando
Vecchio 01 maggio 20, 11:46   #37 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ho provato ad usare constrain e ha funzionato.
aspetto a cantare vittoria
in questo modo il gas sulla retro non allarga più gli endpoints

gaspulse = pulseIn(7, HIGH);
gaspulse = constrain (gaspulse,1500, 2000);
correction = map(gaspulse, antsx, antdx, 0,max_correction);

al momento lo sketch è così:
------------------------------

#define antsx 1000 //-- in front servo endpoint sx
#define antdx 2000 //-- in front servo endpoint dx
#define postsx 5// out rear servo sx if inverted with postdx it reverse
#define postdx 175 //-- out rear servo dx if inverted with postsx it reverse
#define center 0// add or subtract xx value to center steering
#define tolerance 3//-- if your poor quality servo vibrates try 5
#define max_correction 100 //--amount steering by throttle
#define gaslimit 0
#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int gaspulse ;

unsigned int correction;
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);
gaspulse = constrain (gaspulse,1500, 2000);
correction = map(gaspulse, antsx, antdx, 0,max_correction);

newPos = map(rxpulse, antsx, antdx, (postsx+correction), (postdx-correction));


if (abs(newPos - oldPos)> tolerance) {
oldPos = newPos;

myservo.write(newPos + center);

}
}

---------------------------------

ho aggiunto define gaslimit che vorrei fosse un valore da poter impostare per decidere la velocità da raggiungere prima di far partire la riduzione della corsa del servo posteriore.
vediamo se riesco a capire come proseguire.

Ultima modifica di wrighizilla : 01 maggio 20 alle ore 11:51
wrighizilla non è collegato   Rispondi citando
Vecchio 01 maggio 20, 12:41   #38 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ho aggiunto queste stringhe

#define minffw 1500 //-- minimum forward signal
#define maxffw 2000 //-- maximum forward signal

#define antsx 1000 //-- in front servo endpoint sx
#define antdx 2000 //-- in front servo endpoint dx
#define postsx 5// out rear servo sx if inverted with postdx it reverse
#define postdx 175 //-- out rear servo dx if inverted with postsx it reverse
#define center 0// add or subtract xx value to center steering
#define tolerance 3//-- if your poor quality servo vibrates try 5
#define max_correction 100 //-- gain steering reduction by throttle
#define gaslimit 0 //-- percentage forward without correction
#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int gaspulse ;
unsigned int correction;
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);
gaspulse = constrain (gaspulse, minffw, maxffw);
correction = map(gaspulse, antsx, antdx, 0,max_correction);
newPos = map(rxpulse, antsx, antdx, (postsx+correction), (postdx-correction));
if (abs(newPos - oldPos)> tolerance) {
oldPos = newPos;
myservo.write(newPos + center);
}
}

in questo modo l'unico problema rimasto sembrerebbe quello di dare un senso a gaslimit che dovrà evitare di far partire la riduzione degli endpoint solo dopo un certo valore di gas avanti

di fatto posso anche adesso far partire la riduzione della corsa da un certo valore di gas avanti, ad esempio dando un valore di 1600 a minffw invece di 1500 (gas neutro) ma se faccio in questo modo riduco drasticamente anche gli endpoint settati sul neutro e tocca ricominciare il settaggio per trovare un compromesso accettabile tra endpoint e correzione.



scendo di nuovo nell'ide
wrighizilla non è collegato   Rispondi citando
Vecchio 01 maggio 20, 19:09   #39 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 293
Ciao,
direi che fai passi avanti...l'utilizzo di constrain() è sicuramente utile ma per evitare di perdere la linearità della risposta prova a inserire i valori di "minffw" e "maxffw" anche sulla riga dove calcoli "correction" come nell'esempio che quoto

Citazione:
gaspulse = constrain (gaspulse, minffw, maxffw);
correction = map(gaspulse, minffw, maxffw, 0,max_correction);
in questo modo calcoli "correction" solo in base ai valori di gaspulse che ti interessano.
nicolap non è collegato   Rispondi citando
Vecchio 01 maggio 20, 21:02   #40 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
così sembra fare tutto.. rimane da vedere la corsa del servo che muta di conseguenza ai settaggi di altri parametri..

la corsa dovrebbe essere più o meno fissa, ovvero quella definita con define postsx e postdx
ma se cambio valore di max_correction aumento la corsa degli endpoint

uguale anche se diminuisco gaslimit che ho inserito per cercare di avere una stringa dove decidere quanto gas a bassa velocità poter dare.. se lo abbasso allargo la corsa e viceversa.
non so manco se gaslimit possa servire in questo modo perchè se lo cambio sballo i finecorsa comunque.. ma visto che sta facendo e mi girano le paperelle sulla testa per adesso lascio così.

insomma così come è adesso non funziona malissimo, la correzione non attacca subito, lascia un pò di margine per dare gas.
diciamo che l'unico difetto avviene se uno modifica qualcosa, avrà da rifare gli endpoint per adattarsi alla nuova situazione.

spero sia la via giusta, ad ogni modo ora funziona come dovrebbe, instabile e un pò complicato da settare ma utilizzabile.


#define minffw 1500 // -- minimum forward signal
#define maxffw 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 your poor quality servo vibrates try 5
#define maxcorr 100 //-- in gain steering reduction by throttle if reverse add -
#define gaslimit 1700 //-- slow forward without correction

#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int gaspulse ;
unsigned int correction;
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 > gaslimit);
else
gaspulse = constrain (gaslimit, minffw,maxffw);
correction = map(gaspulse, minffw, maxffw, 0, maxcorr);
newPos = map(rxpulse, antsx, antdx, (postsx+correction), (postdx-correction));
}
if (abs(newPos - oldPos)> tolerance) {
oldPos = newPos;
myservo.write(newPos + center);
}
}
wrighizilla non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
buggy da completare BoBoPoP Automodellismo Mot. Scoppio Off-Road 41 18 maggio 16 16:56
monster da completare...! bronto_19 Automodellismo Mot. Elettrico Off-Road 2 22 giugno 10 16:35
Sto costruendo uno schiumino (o tzagi), mi aiutate??? crido96 Aeromodellismo Principianti 72 07 febbraio 10 01:26
Come completare una associated B4? ryan-j Automodellismo Mot. Elettrico On-Road 9 04 maggio 08 10:55



Tutti gli orari sono GMT +2. Adesso sono le 16:26.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002