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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 15:27   #51 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da nicolap Visualizza messaggio
Avevi letto questo messaggio? Se hai sostituito Slowlimit con Gaspulse come avevo scritto non dovresti avere variazioni indesiderate.
Se metti 100 su max_gain significa che imposti 100 gradi come correzione massima su un lato e 200 gradi tra dx e sx...

Inviato dal mio PRA-LX1 utilizzando Tapatalk
ti ringrazio, si l'ho letto e adesso provo
-------------
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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 15:31   #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
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 15:35   #53 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio


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
al momento risolvo il reverse invertendo i valori di end point Postsx Postdx e aggiungendo segno meno a Max_Gain

si arrugginito te.. io sono in prima elementare e l'ultima cosa che ho studiato è la programmazione dello Z80

Ultima modifica di wrighizilla : 03 maggio 20 alle ore 15:39
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 15:57   #54 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
si arrugginito te.. io sono in prima elementare e l'ultima cosa che ho studiato è la programmazione dello Z80
Z80 Zilog? non la conti giusta..

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


}
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 16:18   #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
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 16:45   #56 (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   #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
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:29   #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;
}


}
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 19:39   #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);
}
}
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   #60 (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
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

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 03:00.


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