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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 14:19   #1 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Smile

Ciao,
Interessante, a mio modesto parere manca un delay nel loop principale..
Prova anche a mettere 10 ms con delay(10).
Ma non comprenso bene come dovrebbe funzionare, riesci a darmi qualche info?

Io convertirei il sw in una macchina a stati.. ci proviamo?

Sms
Smsteves non è collegato   Rispondi citando
Vecchio 03 maggio 20, 15:12   #2 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
Ma non comprenso bene come dovrebbe funzionare, riesci a darmi qualche info?
grazie dell'aiuto

dovrebbe funzionare collegando questa controller al servo posteriore in uscita e al segnale sterzo e gas in entrata.
--------------
l'utente dovrebbe immettere dei dati preliminari che possono essere anche default 1000-2000 per i segnali di entrata sterzo anteriore e gas.. ma volendo anche 1000-2000 per gli endpoint in uscita.

se poi l'utente vuole settare meglio la controller i dati precisi dei segnali in entrata li ricava controllandoli da serial monitor.

gli endpoint li dovrà determinare empiricamente per evitare di sbattere nei limiti meccanici dello sterzo ma se ha fortuna sono gli stessi dell'anteriore 1000-2000.

anche la centratura va trovata in relazione alla meccanica, la squadretta sta su un millerighe e qualche grado di correzione potrebbe essere inevitabile.

questi dati sono una cosa a se stante, sono il setup introduttivo che permettono di passare al setup di guida.
-----------------

i dati che interagiscono con la controller e permettono di settare il tipo di guida sono:

la quantità di gas che puoi dare con tutto lo sterzo aperto 4ws a tutta corsa disponibile, esempio ho tutto lo sterzo posteriore disponibile solo per un 20% di gas avanti.

la riduzione della corsa a tutto gas, posso decidere se avere una macchina senza sterzo posteriore, oppure posso lasciare un margine di sterzo quando il gas è al massimo.. anche tutto volendo ma la feature nasce per evitare di ribaltare per il troppo sterzo quando invece alla fine le 4ws servono solo quando vai piano.
------------------

quindi sarebbero solo Max_gain e Slowspeed le variabili che l'utente potrebbe settare per cambiare stile di guida della macchina.

ora fa tutto questo precisamente come deve funzionare.
eccetto che se tocco quei 2 parametri devo reimpostare la corsa del servo

sembra che la corsa del servo sia rimasta legata, imparentata a variabili che di fatto non la dovrebbero riguardare, non c'è un solo caso nel quale la corsa del servo dovrebbe cambiare in ampiezza allargandosi.

la corsa si deve solo proporzionalmente stringere quando il gas supera una certa soglia e fino ad arrivare al massimo gas (Slowlimit).
si deve solo proporzionalmente ridurre la corsa fino ad un certo grado di ampiezza che può andare da "tutta chiusa" a "niente chiusa" (Max_gain)

Ultima modifica di wrighizilla : 03 maggio 20 alle ore 15:21
wrighizilla non è collegato   Rispondi citando
Vecchio 03 maggio 20, 15:31   #3 (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   #4 (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   #5 (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   #6 (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   #7 (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
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 18:16.


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