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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 22:04   #71 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ecco, così il servo a tutto gas è immobile e la reazione parte a circa a 70-80% di gas
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 950 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1800 //-- slow forward without endpoint correction
anche così è immobile e la correzione parte a circa un 30% di gas

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 650 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1600 //-- slow forward without endpoint correction
sono in relazione tra loro ma visivamente si setta tutto più facilmente..

wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 22:05   #72 (permalink)  Top
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 293
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
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
di fatto in questo modo lavori con tutti valori espressi in microsecondi ma dovresti utilizzare il comando write.microseconds…. ho modificato un po il tuo sketch..vedi se funziona
Citazione:
#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 85 //-- 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, Max_gain, 0);

NewPos = map(Rxpulse, Antsx, Antdx, (90 -Gain), (90 + Gain));

}

else {

NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx);

}

if (abs(NewPos - OldPos)> Tolerance) {

OldPos = NewPos;

myservo.write(NewPos + Center);

}

}
se funziona poi ti spiego cosa ho fatto… per il momento abbandono...ho altri lavori a cui dedicarmi e che non posso trascurare
buon lavoro!!
nicolap non è collegato   Rispondi citando
Vecchio 03 maggio 20, 22:58   #73 (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 : 03 maggio 20 alle ore 23:05
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 23:12   #74 (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 : 03 maggio 20 alle ore 23:15
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 23:44   #75 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da nicolap Visualizza messaggio
di fatto in questo modo lavori con tutti valori espressi in microsecondi ma dovresti utilizzare il comando write.microseconds…. ho modificato un po il tuo sketch..vedi se funziona


se funziona poi ti spiego cosa ho fatto… per il momento abbandono...ho altri lavori a cui dedicarmi e che non posso trascurare
buon lavoro!!
ma ci credo ti ringrazio immensamente per tutto l'aiuto e il tempo che ci hai dedicato

il tuo sketch ha alcuni vantaggi perchè adesso si annulla la corsa del servo mettendo a zero Max_gain
ma impazzisce tutto se sposto il center anche di pochi valori, finisce con influire anche sulla retro.

inoltre vibra molto di più di prima in tutte le posizioni, di fatto ha annullato Tolerance che evitava le vibrazioni ritmiche..
non ho provato a ritoccare tolerance perchè è comunque tutto più instabile.

questo code qui sotto, dalle prove fatte per il momento è il migliore.. e ne ho fatte parecchie perchè ne sto discutendo con altri 4 ardunauti in differenti forums.

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


quindi alla fine questo code per adesso è tipo graal e più che utilizzabile anche adesso, snello, veloce non vibra fa tutto quello che deve fare.
certo se lo setti male scavalchi, fai la camminata a granchio etc.. ma va bene così.

alla fine aggiungendo 2 linee guida scritte si ottiene un buon setup facilmente, poi se qualcuno lo userà imparerà i limiti e le correzioni necessarie.

voglio dire.. bisogna sapersi accontentare, ho visto controller esc che per settarli a mano o via radio erano molto ma molto peggio

io vi ringrazio a tutti. è tutto interessante, compresi gli sbagli, le modifiche, qualsiasi cosa permette di confrontare cosa accade

Ultima modifica di wrighizilla : 03 maggio 20 alle ore 23:49
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 09:14   #76 (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
Vecchio 04 maggio 20, 10:49   #77 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
ti ringrazio, questo ultimo codice funziona abbastanza bene
però provandolo sembra identico all'altro del mio ultimo post.
nel comportamento non vedo nulla di differente.

se li carico entrambi e li setto uguali fanno le stesse cose, compreso allargare la corsa del servo se cambio Slowlimit da 1600 a 1800 oppure se aggiungo qualche valore di Center.

non ho saldato un piedino per il led, quindi al momento non vedo cosa succede aggiungendo un led.
è comunque una caratteristica indubbiamente interessante

mi interessa per pura didattica capire cosa cambia tra i 2 sketch.
è il led la differenza?
vorrei capire meglio cosa significa nella pratica "macchina a stati" leggo il codice che di fatto è più complesso ma non capisco ancora quale sia il beneficio sul campo.

li ho caricati entrambi settati uguali e uno di seguito all'altro e si comportano uguali, se li mescolo non riconosco quale è uno o l'altro senza leggere il codice.


ah.. notavo che entrambi gli sketch hanno perso parte dei vantaggi che dava la tolleranza contro le vibrazioni cicliche.
sono stabili ma a riposo e nella retro
invece durante il movimento proporzionale e in posizione massimo gas insieme a massimo sterzo (dx sx indifferente) vibrano entrambi un pochino e più o meno nel solito modo.
non credo che questa vibrazione si traduca fino alle ruote perchè è poca cosa ma volevo capire meglio se c'è una cura più efficace o diversa rispetto a Tolerance..
ad esempio se fosse possibile filtrare in qualche modo fin da subito l'ingresso del segnale radio invece che la fine del ciclo.

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 10:55
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 11:04   #78 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
ti ringrazio, questo ultimo codice funziona abbastanza bene
però provandolo sembra identico all'altro del mio ultimo post.
nel comportamento non vedo nulla di differente...
Certo e' solo riportato in modalità macchina a stati e aggiunto la gestione led.

Il led sul pin 13 e' quello sulla scheda dell'arduino nano, non devi cambiare nulla.

Il tuo nano è un originale oppure un cina come il mio?

La vibrazione puo' essere risolta rallentando l'invio dell'impulso.
Se cerchi di inviarlo nuovamente prima che un impulso sia completo lo taglia forse basta un piccolo ritardo lo testo e vediamo.

Sms
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 11:19   #79 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Forse ci siamo, Tolerance e' impostata a 5 ma ora sono microsecondi.
Con 30 si tranquillizza.
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 11:20   #80 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
Certo e' solo riportato in modalità macchina a stati e aggiunto la gestione led.

Il led sul pin 13 e' quello sulla scheda dell'arduino nano, non devi cambiare nulla.

Il tuo nano è un originale oppure un cina come il mio?

La vibrazione puo' essere risolta rallentando l'invio dell'impulso.
Se cerchi di inviarlo nuovamente prima che un impulso sia completo lo taglia forse basta un piccolo ritardo lo testo e vediamo.

Sms
ah.. può essere, devo aprire una finestrella nel termoretraibile
cinese.. clonissima

chiedevo lumi sulla vibrazione perchè in certe applicazioni non puoi proprio averne..
magari sono applicazioni dove non è coinvolta una rx da modellismo che manda segnali che oscillano di 4-8 punti.
però appunto mi domandavo se non sia possibile filtrarli subito fin dalle stringhe pulseIn di fatto risparmierebbe anche del calcolo a baglio?

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 11:28
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 00:43.


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