
|
![]() | #1 (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 |
![]() | ![]() |
![]() | #2 (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 |
![]() | ![]() |
![]() | #3 (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 ![]() |
![]() | ![]() |
![]() | #4 (permalink) Top | |
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 321
|
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:
| |
![]() | ![]() |
![]() | #5 (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); } } |
![]() | ![]() |
![]() | #6 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
niente via.. arrivo fino qui. ho provato una marea di cose ma nessuna ha funzionato. ho messo un pochino di ordine nel testo e ho cambiato alcuni nomi per rendere più chiaro lo sketch. funziona tutto come dovrebbe, compresa la possibilità di dare un pochino di gas a bassa velocità mantenendo tutto lo sterzo (cambiando valore a Slowlimit) anche la correzione funziona perfettamente adesso, inversamente proporzionale e fino a chiudere completamente la corsa del servo posteriore (cambiando valore a Max_gain) ma se cambio i valori di Slowlimit e Max_gain si spostano anche i finecorsa Postdx e Postsx obbligandomi a reimpostarli da capo di conseguenza alle modifiche. rompe un pò perchè sarebbero valori che dovrebbero restare fissi visto che dipendono dalla effettiva corsa di sterzo a disposizione, anche solo cambiando i parametri si rischia di allargare la corsa molto oltre quella che lo sterzo meccanicamente permette. sarebbe uno dei parametri da impostare per primo e poi dimenticare.. non so.. manca qualche parentesi oppure va scritto meglio qualcosa ma non trovo l'inghippo riporto lo sketch rivisto e corretto al meglio delle sue attuali possibilità #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 100 //-- gain steering reduction by throttle if reverse add - #define Slowlimit 1700 //-- 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); else Gaspulse = constrain (Slowlimit, Neutral, Maxspeed); Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); 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 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 |