Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 19:50   #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...
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 20:32   #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);
}
}
adesso ha l'unico difetto di dover trovare il compromesso tra Slowlimit e Max_gain
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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:04   #63 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 293
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
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);

}

}


adesso ha l'unico difetto di dover trovare il compromesso tra Slowlimit e Max_gain

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.
Prova con un valore di max_gain non superiore a 85. In questo modo i valori di (postsx+gain) non superano i 90 gradi (posizione di centro) e il calcolo di newpos non esce dai valori necessari.

Inviato dal mio PRA-LX1 utilizzando Tapatalk
nicolap non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:05   #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..
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:08   #65 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da nicolap Visualizza messaggio
Prova con un valore di max_gain non superiore a 85. In questo modo i valori di (postsx+gain) non superano i 90 gradi (posizione di centro) e il calcolo di newpos non esce dai valori necessari.

Inviato dal mio PRA-LX1 utilizzando Tapatalk
se metto
Codice:
#define Max_gain 85 //-- 
#define Slowlimit 1800
ho circa metà corsa a tutto gas

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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:13   #66 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
ho montato il tutto, con un esc lipo e un servo..

Ora sto debaggando io, quando funziona te lo posto..
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:14   #67 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
ho montato il tutto, con un esc lipo e un servo..

Ora sto debaggando io, quando funziona te lo posto..
ecco t'ho fatto impazzire pure a te
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:18   #68 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 293
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
nicolap non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:32   #69 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da nicolap Visualizza messaggio
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
se li scambio col servo che gira come ho sempre provato adesso
Codice:
Gain = map(Gaspulse, Slowlimit, Maxspeed,Max_gain, 0 );
non cambia nulla a invertirli.. nulla che si possa vedere muovendo il servo, non so dirti il motivo ma non ha effetti visibili.
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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 21:49   #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
solo center adesso vuole valori intorno a 100 -100 per spostarsi

Ultima modifica di wrighizilla : 03 maggio 20 alle ore 21:53
wrighizilla non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


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



Tutti gli orari sono GMT +2. Adesso sono le 15:02.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002