
![]() | #32 (permalink) Top | |
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 309
| Citazione:
![]() Inviato dal mio PRA-LX1 utilizzando Tapatalk | |
![]() | ![]() |
![]() | #33 (permalink) Top |
Moderatore Data registr.: 02-10-2014 Residenza: Chieti
Messaggi: 2.665
|
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 |
![]() | ![]() |
![]() | #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 |
![]() | ![]() |
![]() | #35 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
dunque.. facendoci notte ![]() 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 21:11 |
![]() | ![]() |
![]() | #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 12:14 |
![]() | ![]() |
![]() | #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 12:51 |
![]() | ![]() |
![]() | #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 ![]() |
![]() | ![]() |
![]() | #39 (permalink) Top | |
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 309
|
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:
| |
![]() | ![]() |
![]() | #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); } } |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
buggy da completare | BoBoPoP | Automodellismo Mot. Scoppio Off-Road | 41 | 18 maggio 16 17:56 |
monster da completare...! | bronto_19 | Automodellismo Mot. Elettrico Off-Road | 2 | 22 giugno 10 17:35 |
Sto costruendo uno schiumino (o tzagi), mi aiutate??? | crido96 | Aeromodellismo Principianti | 72 | 07 febbraio 10 02:26 |
Come completare una associated B4? | ryan-j | Automodellismo Mot. Elettrico On-Road | 9 | 04 maggio 08 11:55 |