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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 22:04   #1 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 388
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, 22:08   #2 (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 22:14
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 22:13   #3 (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, 22:14   #4 (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, 23:58   #5 (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 : 04 maggio 20 alle ore 00:05
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 00:12   #6 (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 : 04 maggio 20 alle ore 00:15
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 10:14   #7 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
con questo sketch che hai postato non esiste più Slowlimit..
Hai ragione, l'avevo eliminato..

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);
}
}
Smsteves 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 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



Tutti gli orari sono GMT +2. Adesso sono le 23:26.


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