
![]() | #51 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
![]() ------------- provato.. non cambia nulla. Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); if (Gaspulse > Slowlimit); else Gaspulse = constrain (Gaspulse, Neutral, Maxspeed); Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); quando vario Max_gain oppure Slowlimit cambia anche la corsa generale del servo a zero gas. uguale a prima, non ho notato differenze. Ultima modifica di wrighizilla : 03 maggio 20 alle ore 15:37 | |
![]() | ![]() |
![]() | #52 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
| ![]() Avoli che studio. Bene, vediamo un po' di particolari Quale arduino usi? io usavo dei nano che alimentavo con una prolunga servo... La teoria delle ruote sterzanti e' abbastanza variabile, ma più o meno credo direbbe: 1) le ruote posteriori sterzano in opposizione con quelle anteriori 2) in rettilineo restano dritte per evitare consumo gomme e perdita di direzione/velocità. 3) ad alta velocita' riducono l'angolo, andando piano aumentano l'angolo 4) dovresti poter inserire i settaggi senza pc.. magari con una regolazione o due (trimmer). Prendo il tuo sketch e vedo un po'... Sono un pochino arruginito, porta pazienza.. ![]() Sms |
![]() | ![]() |
![]() | #53 (permalink) Top | |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
| Citazione:
si arrugginito te.. ![]() ![]() Ultima modifica di wrighizilla : 03 maggio 20 alle ore 15:39 | |
![]() | ![]() |
![]() | #54 (permalink) Top | |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
| Citazione:
![]() Pensa che io ho iniziato con il 6502 all'asilo.. ![]() allora ora ho inserito la macchina a stati: ------------------------------------------------- #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; byte Stato=0; 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(){ if (Stato==0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato==1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed); Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); } if (Stato==2) { //scrittura if (abs(NewPos - OldPos)> Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); } } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; if (Stato==3) { // riparte da 1 Stato=1; } } | |
![]() | ![]() |
![]() | #55 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Qualche aggiustamento, dimmi se va.. altrimenti debugga con il serial.print ------------------------------------------------- #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 long Rxpulse;//pulsin restituisce un long unsigned long Gaspulse ; unsigned long Gain;//Giusto per.. mettiamo long unsigned long NewPos, OldPos; byte Stato=0; 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(){ if (Stato==0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato==1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed); Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); } if (Stato==2) { //scrittura if (abs(NewPos - OldPos)> Tolerance) { OldPos = NewPos; myservo.write(Center +NewPos);//da rivedere cosi' centri solo in un senso credo.. } } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; if (Stato==3) { // riparte da 1 Stato=0; //qui ci va 0 non 1 } } Ultima modifica di Smsteves : 03 maggio 20 alle ore 16:21 |
![]() | ![]() |
![]() | #56 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
| ![]()
trovato.. tu hai usato questi valori: #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 Max_gain 100 //-- gain steering reduction by throttle if reverse add - e nel calcolo fai questo: Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); // al max speed gain vale 100 quando gain e' 100 succede che questo calcolo : NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); diventa: NewPos = map(Rxpulse, Antsx, Antdx, (5+100), (175 - 100)); NewPos = map(Rxpulse, Antsx, Antdx, (105), (75)); se Gain vale 50 diventa: NewPos = map(Rxpulse, Antsx, Antdx, (5+50), (175 - 50)); NewPos = map(Rxpulse, Antsx, Antdx, (55), (125)); inverti il senso??? Prova con questo: NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain\2), (Postdx - Gain\2)); Il massimo gain deve essere (Postsx - Postdx) \ 2 circa... Sms |
![]() | ![]() |
![]() | #57 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
si proprio lo Z80 a 13 anni sul sinclair z81 in b/n se cerco ho ancora un corposo libro del quale ormai non mi ricordo poco o nulla come del basic col quale giocavo sul BBC tornando alla sketch,non funziona ![]() il code del primo post 54 non ha risultato pratico, il servo è fermo immobile qualunque cosa muova. il code del post 55 si muove ma non sente effetti dal grilletto del gas, non fa più la riduzione della corsa. se cambio Slowlimit e lo alzo a 1800 riduco sempre la corsa risultante dei fine corsa. stessa cosa se cambio max_gain.. in sostanza mantiene lo stesso problema di prima ma senza più avere nessun effetto dal premere il grilletto del gas il terzo post 56 se cambio la stringa con NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain\2), (Postdx - Gain\2)); mi restituisce errore: stray '\' in program al momento questo è ancora il migliore.. fa tutto quello che deve fare con solo il difetto si obbligare a risettare gli endpoint 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 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); } } Ultima modifica di wrighizilla : 03 maggio 20 alle ore 19:12 |
![]() | ![]() |
![]() | #58 (permalink) Top |
User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Brutta cosa non poterlo provare in diretta... Ho rivisto il tutto, ho aggiunto il calcolo automatico dell'escursione in base al gain ti mando un msg. #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, OldPos; byte Stato = 0; 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() { if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } 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 (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); } } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; if (Stato == 3) { // riparte da 0 Stato = 0; } } |
![]() | ![]() |
![]() | #59 (permalink) Top |
Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
aspetta.. discutendone con un altro modellista mi ha dato dei suggerimenti importanti che fanno avanzare di parecchio il risultato 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 4 //-- if poor quality servo vibrates try 5 #define Max_gain 170 //-- 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); } } l'unica cosa che succede adesso è che queste 2 variabili sono in relazione tra loro la prova la faccio sempre cercando di ottenere il servo fermo al massimo del gas ad esempio slowlimit 1600 e Max_gain 115 ho il servo nuovamente fermo al centro a tutto gas. ma aumentando slowlimit a 1800 devo mettere Max_gain a 170 ad ogni modo mi pare certamente il risultato migliore trovato fino ad adesso. ora provo il codice nel tuo ultimo post ![]() ----------edit------------ no, anche il code nel post 58 da come risultante il servo che gira da una parte all'altra ma non sente effetti tirando o spingendo il grilletto del gas. Ultima modifica di wrighizilla : 03 maggio 20 alle ore 19:46 |
![]() | ![]() |
![]() |
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 |