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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 03 maggio 20, 15:31   #1 (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   #2 (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   #3 (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   #4 (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   #5 (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   #6 (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   #7 (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
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 22:30.


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