04 maggio 20, 11:24 | #81 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
in sostanza a zero hai una piccola vibrazione "blues" mentre a 50 hai la stessa vibrazione che fa scatti di mezzo millimetro. su entrambi gli sketch è uguale. poi questo con un hitec hs55 che si commenta da solo. sul camion ho un Hitec HSC5998TG magari non vibra neanche Ultima modifica di wrighizilla : 04 maggio 20 alle ore 11:32 | |
04 maggio 20, 11:53 | #84 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Sto provando sul tavolo con esc radio futaba 3vcs 2,4ghz esc toro con 17.5 e lipo.. Il servo e' un cinesone mg996r. Ho provato a bypassare il comando da arduino al servo e credo che l'unica differenza sia dovuta alla libreria di arduino.. con tolleranza = 1 e un ritardo di 20 millessimi credo sia decente, dimmi cosa ne pensi. 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 0 //-- 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 #include <Servo.h> Servo myservo; unsigned int Rxpulse; unsigned int Gaspulse ; unsigned int Gain; signed int NewPos, OldPos; int Stato; int Stato_Led=0; boolean Cmd_Led = false; int Ledpin=13; int Led=0; int Tol_cont=0; void setup() { pinMode(7, INPUT); //-- throttle signal in pin pinMode(8, INPUT); //-- front servo signal in pin pinMode(Cmd_Led, OUTPUT); myservo.attach(10); //-- rear servo signal out pin Stato = 0; } void loop() { if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH); delay(2); Gaspulse = pulseIn(7, HIGH); } if (Stato == 1) { //Calcolo if (Gaspulse > Slowlimit) { Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain ); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); Led=1; } else { NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx); Led=2; } } if (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; delay(20); myservo.write(NewPos + Center); } } // Incrementa stato per il prossimo loop ++Stato; // Incrementa tempo led per il prossimo loop ++Stato_Led; if (Stato == 3) { // riparte da 0 Stato = 0; } //ritardo esecuzione cicli/stati delay(1); if (Led == 1) { //led veloce if (Stato_Led>20) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } if (Led == 2) { //led lento if (Stato_Led>60) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } } Ultima modifica di Smsteves : 04 maggio 20 alle ore 11:57 |
04 maggio 20, 12:10 | #86 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Si nella sezione scrittura, e messo a 0 tolerance forse ci vuole un tolerance in lettura non in scrittura. Basta che uno dei due valori si muova per avere ripercussioni in uscita. provo idea malsana... SI potrebbe registrare quello che arriva dal radiocomando e riproporlo come un registratore.. Sarebbe interessante vedere un camion che si muove da solo? Ultima modifica di Smsteves : 04 maggio 20 alle ore 12:14 |
04 maggio 20, 12:41 | #87 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
faccio già del mio meglio per farlo finire nei burroni senza che lo faccia da solo penso che il segnale in entrata che varia di 5 punti andrebbe filtrato, equalizzato su un valore intermedio prima di fare il ciclo di programma un condensatore software da mettere alle stringhe pulseIn o subito dopo.. mi chiedo se posso usare constrain o detachInterrupt invece della stringa tolerance che alla fine potrei anche togliere una volta equalizzato il segnale. comunque per la cronaca il camion, anzi i camion sono questi due. il mio camion autocostruito - Forum Modellismo.net ci sono entrambi anche su questo forum ma qui i contenuti li trascurano e le foto non ho potuto editarle, nessuno li ripristina e quindi qui restano solo i buchi. | |
04 maggio 20, 13:39 | #88 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Accidenti che belli, Chapeau Comunque per quante prove faccia al banco (anzi al tavolo) non mi riesce di percepire il problema come fai te. Ho provato ad inserire una smorzatura al comando, come si fa di solito sugli inverter industriali... Prova un po' se la cosa migliora... 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 950 //-- 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; signed int NewPos, OldPos; int Stato; int Stato_Led=0; boolean Cmd_Led = false; int Ledpin=13; int Led=0; int Tol_cont=0; int Media_GAS=0; int Media_RX=0; void setup() { pinMode(7, INPUT); //-- throttle signal in pin pinMode(8, INPUT); //-- front servo signal in pin pinMode(Cmd_Led, OUTPUT); myservo.attach(10); //-- rear servo signal out pin Stato = 0; } void loop() { if (Stato == 0) { //lettura Media_RX=0; Media_GAS =0; Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato == 1) { //Calcolo if (Gaspulse > Slowlimit) { Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain ); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); Led=1; } else { NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx); Led=2; } } if (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { if (abs(NewPos - OldPos) > Tolerance/2){ } if (NewPos > OldPos){ NewPos=OldPos + 15; } if (NewPos < OldPos){ NewPos=OldPos - 15; } if (abs(NewPos - OldPos) < Tolerance/2){ if (NewPos > OldPos){ NewPos=OldPos + 2; } if (NewPos < OldPos){ NewPos=OldPos - 2; } } myservo.write(NewPos + Center); OldPos=NewPos; } } // Incrementa stato per il prossimo loop ++Stato; // Incrementa tempo led per il prossimo loop ++Stato_Led; if (Stato == 3) { // riparte da 0 Stato = 0; } //ritardo esecuzione cicli/stati delay(1); if (Led == 1) { //led veloce if (Stato_Led>20) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } if (Led == 2) { //led lento if (Stato_Led>60) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } } |
04 maggio 20, 16:17 | #90 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Ho constatato che e' un problema della libreria di arduino. Caricandone una diversa da gestore librerie le cose cambiano. Prova questo codice 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 1 //-- 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 #include <MobaTools.h> MoToServo myservo; unsigned int Rxpulse; unsigned int Gaspulse ; unsigned int Gain; signed int NewPos, OldPos; int Stato; int Stato_Led=0; boolean Cmd_Led = false; int Ledpin=13; int Led=0; int Tol_cont=0; int Media_GAS=0; int Media_RX=0; void setup() { pinMode(7, INPUT); //-- throttle signal in pin pinMode(8, INPUT); //-- front servo signal in pin pinMode(Cmd_Led, OUTPUT); myservo.attach(10); //-- rear servo signal out pin myservo.setSpeed( 48 ); Stato = 0; } void loop() { if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato == 1) { //Calcolo if (Gaspulse > Slowlimit) { Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain ); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); Led=1; } else { NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx); Led=2; } } if (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { myservo.write(NewPos + Center); OldPos=NewPos; } } // Incrementa stato per il prossimo loop ++Stato; // Incrementa tempo led per il prossimo loop ++Stato_Led; if (Stato == 3) { // riparte da 0 Stato = 0; } //ritardo esecuzione cicli/stati delay(1); if (Led == 1) { //led veloce if (Stato_Led>20) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } if (Led == 2) { //led lento if (Stato_Led>60) { Cmd_Led= !Cmd_Led; Stato_Led=0; } digitalWrite(Ledpin, Cmd_Led); } } myservo.setSpeed( 48 ); variando il numero 48 tra 1 e 256 La libreria si chiama MobaTools e credo che sia questa la soluzione Ultima modifica di Smsteves : 04 maggio 20 alle ore 16:25 |
Bookmarks |
| |
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 |