
![]() | #61 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
ecco la versione con il debug. Se metti lasci la variabile debug a 1, puoi usare il monitor seriale e vedere cosa fa il sw. Se la metti a 0 funziona normalmente.. Iniziamo a fare seriamente ![]() #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 Course; unsigned int Gain; unsigned int NewPos = 0, OldPos = 0; int Stato; byte debug = 1; 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 if (debug == 1) { Serial.begin(115200); } Stato = 0; } void loop() { if (debug == 1) { Serial.print("*******************"); Serial.print("\n"); Serial.print("Ciclo Stato = "); Serial.print(Stato); Serial.print("\n"); } if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH, 10000); Gaspulse = pulseIn(7, HIGH, 10000); if (debug == 1) { Serial.print("------------ stato 0 "); Serial.print("\n"); Serial.print(Rxpulse); Serial.print("\n"); Serial.print(Gaspulse); Serial.print("\n"); } } if (Stato == 1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed);//riduce valori dal canale gas Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); Course = (Postdx - Postsx) ; //corsa in gradi da dx a sx Course = Course / 2 ; //dimezza la corsa in gradi per ciascun lato Course = Course * Gain / 100 ; //calcola i gradi di escursione in base all'accelleratore NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Course ), (Postdx - Course)); if (debug == 1) { Serial.print("------------ stato 1 "); Serial.print("\n"); Serial.print(Gaspulse); Serial.print("\n"); Serial.print(Gain); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } if (Stato == 2) { //scrittura if (OldPos != NewPos) { if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -maggiore "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } if (abs(OldPos - NewPos ) < Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -minore "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } } if (OldPos == NewPos) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -uguale "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); Serial.print(OldPos); Serial.print("\n"); Serial.print(NewPos); Serial.print("\n"); } } } if (Stato == 3) { // riparte da 0 Stato = 0; Serial.print("stato 3 ------------"); Serial.print("\n"); Serial.print(Stato); Serial.print(" stato\n"); } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; } -------------- Ora cerco una ricevente, la radio dovrebbe essere in qualche ripiano servi ne ho in giro qualcuno... |
![]() | ![]() |
![]() | #62 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
con questo ultimo sketch il servo è inchiodato a sinistra.. non gira in nessuna condizione di sterzo e gas da serial scorrono lettere e quadrati non me li fa copiare ma non sembrano dati comprensibili ![]() io tornerei a questo.. è a un passo da funzionare alla perfezione. Codice: #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); } } ovvero se Slowlimit è a 1600 Max_gain deve stare a 115 per ottenere una corsa uguale identica a Slowlimit 1800 - Max_gain 155 però non si allargano più i fine corsa a gas neutro e funziona tutto bene. Ultima modifica di wrighizilla : 03 maggio 20 alle ore 20:42 |
![]() | ![]() |
![]() | #63 (permalink) Top | |
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 319
| Citazione:
Inviato dal mio PRA-LX1 utilizzando Tapatalk | |
![]() | ![]() |
![]() | #64 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
ad ogni modo considera che dover trovare un compromesso tra la quantità di marcia avanti e la corsa finale del servo è oro che cola rispetto a doverla trovare con i fine corsa che nel frattempo si allargano e cambiano. in questa condizione di adesso sto quasi pensando di montarlo sul camion, è un setup immensamente più facile di prima. ![]() quasi bellissimo insomma.. ![]() |
![]() | ![]() |
![]() | #65 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
Codice: #define Max_gain 85 //-- #define Slowlimit 1800 per vedelo partire devo mettere define Max_gain 15 con 10 non succede niente. per vederlo chiudere del tutto (con Slowlimit a 1800 che è abbastanza in alto sulla scala del grilletto del gas direi un 70% circa con l'occhiometro) devo metterlo a 160 allora è fermo al centro come se lo sterzo posteriore non ci fosse Ultima modifica di wrighizilla : 03 maggio 20 alle ore 21:14 | |
![]() | ![]() |
![]() | #68 (permalink) Top |
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 319
|
Quando calcoli gain, se vuoi che l'escursione dello sterzo sia inversamente proporzionale devi modificare come segue: Gain=map(Gaspulse, Slowlimit, Maxspeed, max_gain, 0) Inviato dal mio PRA-LX1 utilizzando Tapatalk |
![]() | ![]() |
![]() | #69 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
Codice: Gain = map(Gaspulse, Slowlimit, Maxspeed,Max_gain, 0 ); provo ad abbassare 160 e aprire lo sterzo un pochino, magari si comporta diversamente.. ...edit:. no niente, mettendo a 80 ho metà corsa ma scambiando quei 2 valori non cambia niente, il comportamento resta identico... per reversare funziona benissimo se scambio i valori di Postsx Postdx e metto il segno meno davanti alla correzione. così è perfettamente reversato con sterzo completamente chiuso al massimo gas. Codice: #define Postsx 175 // out rear servo sx endpoint if inverted with postdx it reverse #define Postdx 5 //-- 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 -160 //-- gain steering reduction by throttle if reverse add - #define Slowlimit 1800 Ultima modifica di wrighizilla : 03 maggio 20 alle ore 21:39 | |
![]() | ![]() |
![]() | #70 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
funziona perfettamente nello stesso modo se metto questi settaggi al posto di 5-175 e correzione 160 anzi è anche più facile da settare adesso. Codice: #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 1000 //-- gain steering reduction by throttle if reverse add - #define Slowlimit 1800 //-- slow forward without endpoint correction Ultima modifica di wrighizilla : 03 maggio 20 alle ore 21:53 |
![]() | ![]() |
![]() |
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 |