03 maggio 20, 22:04 | #71 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
ecco, così il servo a tutto gas è immobile e la reazione parte a circa a 70-80% di gas 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 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 650 //-- gain steering reduction by throttle if reverse add - #define Slowlimit 1600 //-- slow forward without endpoint correction |
03 maggio 20, 22:05 | #72 (permalink) Top | ||
User Data registr.: 02-10-2019 Residenza: Orvieto
Messaggi: 293
| Citazione:
Citazione:
buon lavoro!! | ||
03 maggio 20, 22:58 | #73 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
eccolo ripulito... Prooooova #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 5 //-- 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 long Rxpulse;//pulsin restituisce un long unsigned long Gaspulse ; unsigned long Gain;//Giusto per.. mettiamo long signed long NewPos, OldPos; int Stato; byte debug = 1; unsigned int Course; void setup() { pinMode(7, INPUT); //-- throttle signal in pin pinMode(8, INPUT); //-- front servo signal in pin 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 Gaspulse = constrain (Gaspulse, 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 * Gain / 100 ; //calcola i gradi di escursione in base all'accelleratore NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + (Course / 2) ), (Postdx - (Course / 2))); } if (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); } } // Incrementa stato per il prossimo loop ++Stato; if (Stato == 3) { // riparte da 0 Stato = 0; } //ritardo esecuzione cicli/stati delay(1); } Ultima modifica di Smsteves : 03 maggio 20 alle ore 23:05 |
03 maggio 20, 23:12 | #74 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
con questo sketch che hai postato non esiste più Slowlimit.. lo sterzo inizia a chiudersi subito appena si da il gas. il punto massimo di chiusura è con Max_gain a 125 e resta quello anche cambiando valori a Slowlimit che di fatto non esiste più o non dimostra di fare nulla di preciso. Ultima modifica di wrighizilla : 03 maggio 20 alle ore 23:15 |
03 maggio 20, 23:44 | #75 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
il tuo sketch ha alcuni vantaggi perchè adesso si annulla la corsa del servo mettendo a zero Max_gain ma impazzisce tutto se sposto il center anche di pochi valori, finisce con influire anche sulla retro. inoltre vibra molto di più di prima in tutte le posizioni, di fatto ha annullato Tolerance che evitava le vibrazioni ritmiche.. non ho provato a ritoccare tolerance perchè è comunque tutto più instabile. questo code qui sotto, dalle prove fatte per il momento è il migliore.. e ne ho fatte parecchie perchè ne sto discutendo con altri 4 ardunauti in differenti forums. 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; 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); } } quindi alla fine questo code per adesso è tipo graal e più che utilizzabile anche adesso, snello, veloce non vibra fa tutto quello che deve fare. certo se lo setti male scavalchi, fai la camminata a granchio etc.. ma va bene così. alla fine aggiungendo 2 linee guida scritte si ottiene un buon setup facilmente, poi se qualcuno lo userà imparerà i limiti e le correzioni necessarie. voglio dire.. bisogna sapersi accontentare, ho visto controller esc che per settarli a mano o via radio erano molto ma molto peggio io vi ringrazio a tutti. è tutto interessante, compresi gli sbagli, le modifiche, qualsiasi cosa permette di confrontare cosa accade Ultima modifica di wrighizilla : 03 maggio 20 alle ore 23:49 | |
04 maggio 20, 09:14 | #76 (permalink) Top | |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
| Citazione:
Bene, ho preso l'ultimo codice e l'ho inserito nella macchina a stati. In aggiunta, ho inserito i lampeggi del led lento o veloce, a seconda di dove ci si trova con il Gas sopra o sotto il SlowLimit. Se mettiamo anche uno o due pulsanti potremmo fare la taratura... Smsteves ------------------------ #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; 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; 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); } } | |
04 maggio 20, 10:49 | #77 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
ti ringrazio, questo ultimo codice funziona abbastanza bene però provandolo sembra identico all'altro del mio ultimo post. nel comportamento non vedo nulla di differente. se li carico entrambi e li setto uguali fanno le stesse cose, compreso allargare la corsa del servo se cambio Slowlimit da 1600 a 1800 oppure se aggiungo qualche valore di Center. non ho saldato un piedino per il led, quindi al momento non vedo cosa succede aggiungendo un led. è comunque una caratteristica indubbiamente interessante mi interessa per pura didattica capire cosa cambia tra i 2 sketch. è il led la differenza? vorrei capire meglio cosa significa nella pratica "macchina a stati" leggo il codice che di fatto è più complesso ma non capisco ancora quale sia il beneficio sul campo. li ho caricati entrambi settati uguali e uno di seguito all'altro e si comportano uguali, se li mescolo non riconosco quale è uno o l'altro senza leggere il codice. ah.. notavo che entrambi gli sketch hanno perso parte dei vantaggi che dava la tolleranza contro le vibrazioni cicliche. sono stabili ma a riposo e nella retro invece durante il movimento proporzionale e in posizione massimo gas insieme a massimo sterzo (dx sx indifferente) vibrano entrambi un pochino e più o meno nel solito modo. non credo che questa vibrazione si traduca fino alle ruote perchè è poca cosa ma volevo capire meglio se c'è una cura più efficace o diversa rispetto a Tolerance.. ad esempio se fosse possibile filtrare in qualche modo fin da subito l'ingresso del segnale radio invece che la fine del ciclo. Ultima modifica di wrighizilla : 04 maggio 20 alle ore 10:55 |
04 maggio 20, 11:04 | #78 (permalink) Top | |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
| Citazione:
Il led sul pin 13 e' quello sulla scheda dell'arduino nano, non devi cambiare nulla. Il tuo nano è un originale oppure un cina come il mio? La vibrazione puo' essere risolta rallentando l'invio dell'impulso. Se cerchi di inviarlo nuovamente prima che un impulso sia completo lo taglia forse basta un piccolo ritardo lo testo e vediamo. Sms | |
04 maggio 20, 11:20 | #80 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
cinese.. clonissima chiedevo lumi sulla vibrazione perchè in certe applicazioni non puoi proprio averne.. magari sono applicazioni dove non è coinvolta una rx da modellismo che manda segnali che oscillano di 4-8 punti. però appunto mi domandavo se non sia possibile filtrarli subito fin dalle stringhe pulseIn di fatto risparmierebbe anche del calcolo a baglio? Ultima modifica di wrighizilla : 04 maggio 20 alle ore 11:28 | |
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 |