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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 16:18   #1 (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
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 16:45   #2 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Smile

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
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:09   #3 (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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:29   #4 (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;
}


}
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:39   #5 (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);
}
}
in questo modo gli end point non si allargano più anche cambiando i valori di Slowlimit e Max_gain

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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:48   #6 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
ok... questione di principio allora cerco un arduino nano..
a dopo

Sms
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 20:50   #7 (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
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 11:17.


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