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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 04 maggio 20, 12:24   #81 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
Forse ci siamo, Tolerance e' impostata a 5 ma ora sono microsecondi.
Con 30 si tranquillizza.
non proprio.. ho messo 50 ma il ritmo ciclico c'è uguale, se lo provi col radiocomando ti accorgi che è forse peggio a 50 che senza.. anzi più lo alzi e più il movimento diventa a scatti con la vibrazione.

in sostanza a zero hai una piccola vibrazione "blues" mentre a 50 hai la stessa vibrazione che fa scatti di mezzo millimetro.

su entrambi gli sketch è uguale.

poi questo con un hitec hs55 che si commenta da solo.

sul camion ho un Hitec HSC5998TG magari non vibra neanche

Ultima modifica di wrighizilla : 04 maggio 20 alle ore 12:32
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 12:31   #82 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
controllo..
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 12:40   #83 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
detach potrebbe servire?
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 12:53   #84 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Sto provando sul tavolo con esc radio futaba 3vcs 2,4ghz esc toro con 17.5 e lipo..
Il servo e' un cinesone mg996r.

Ho provato a bypassare il comando da arduino al servo e credo che l'unica differenza sia dovuta alla libreria di arduino..

con tolleranza = 1 e un ritardo di 20 millessimi credo sia decente, dimmi cosa ne pensi.

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 0 //-- 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;
int Tol_cont=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;
      delay(20);
      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);
  } 
}
Non posto foto per evitare sghignazzamenti..

Ultima modifica di Smsteves : 04 maggio 20 alle ore 12:57
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 13:06   #85 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
no no.. peggissimo il parkinson proprio
molto meglio le vibrazioni dello sketch precedente.
questo a tutto gas ti saluta con la squadretta
stavo cercando di capire cosa hai fatto.. hai aggiunto delay 20?
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 13:10   #86 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Si nella sezione scrittura, e messo a 0 tolerance

forse ci vuole un tolerance in lettura non in scrittura.

Basta che uno dei due valori si muova per avere ripercussioni in uscita.

provo


idea malsana...
SI potrebbe registrare quello che arriva dal radiocomando e riproporlo come un registratore..

Sarebbe interessante vedere un camion che si muove da solo?

Ultima modifica di Smsteves : 04 maggio 20 alle ore 13:14
Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 13:41   #87 (permalink)  Top
Guest
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da Smsteves Visualizza messaggio
Si nella sezione scrittura, e messo a 0 tolerance

forse ci vuole un tolerance in lettura non in scrittura.

Basta che uno dei due valori si muova per avere ripercussioni in uscita.

provo


idea malsana...
SI potrebbe registrare quello che arriva dal radiocomando e riproporlo come un registratore..

Sarebbe interessante vedere un camion che si muove da solo?


faccio già del mio meglio per farlo finire nei burroni senza che lo faccia da solo

penso che il segnale in entrata che varia di 5 punti andrebbe filtrato, equalizzato su un valore intermedio prima di fare il ciclo di programma
un condensatore software da mettere alle stringhe pulseIn o subito dopo..
mi chiedo se posso usare constrain o detachInterrupt invece della stringa tolerance che alla fine potrei anche togliere una volta equalizzato il segnale.

comunque per la cronaca il camion, anzi i camion sono questi due.

il mio camion autocostruito - Forum Modellismo.net

ci sono entrambi anche su questo forum ma qui i contenuti li trascurano e le foto non ho potuto editarle, nessuno li ripristina e quindi qui restano solo i buchi.
wrighizilla non è collegato   Rispondi citando
Vecchio 04 maggio 20, 14:39   #88 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Accidenti che belli, Chapeau

Comunque per quante prove faccia al banco (anzi al tavolo) non mi riesce di percepire il problema come fai te.

Ho provato ad inserire una smorzatura al comando, come si fa di solito sugli inverter industriali...

Prova un po' se la cosa migliora...
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;
signed int NewPos, OldPos;
int  Stato;
int Stato_Led=0;
boolean Cmd_Led = false;
int Ledpin=13;
int Led=0;
int Tol_cont=0;
int Media_GAS=0;
int Media_RX=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
    Media_RX=0;
    Media_GAS =0;
    Rxpulse = pulseIn(8, HIGH);   
    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) {
      if (abs(NewPos - OldPos) > Tolerance/2){
        
      }
      if (NewPos > OldPos){
         NewPos=OldPos + 15;
      }
     if (NewPos < OldPos){
         NewPos=OldPos - 15;
      }
      if (abs(NewPos - OldPos) < Tolerance/2){
        
 
      if (NewPos > OldPos){
         NewPos=OldPos + 2;
      }
     if (NewPos < OldPos){
         NewPos=OldPos - 2;
      }


      
      }
      myservo.write(NewPos + Center);
         OldPos=NewPos;
    }
  }
  // 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, 15:04   #89 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Smile

ecco il mio banco prova...

https://ibb.co/ZLvghgr


Smsteves non è collegato   Rispondi citando
Vecchio 04 maggio 20, 17:17   #90 (permalink)  Top
User
 
Data registr.: 03-05-2020
Residenza: milano
Messaggi: 47
Ho constatato che e' un problema della libreria di arduino.
Caricandone una diversa da gestore librerie le cose cambiano.

Prova questo codice

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 1 //-- 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 <MobaTools.h>
MoToServo 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;
int Tol_cont=0;
int Media_GAS=0;
int Media_RX=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
   myservo.setSpeed( 48 );
  Stato = 0;
 }

void loop() {
  if (Stato == 0) {
    //lettura
    Rxpulse = pulseIn(8, HIGH);   
    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) {
      myservo.write(NewPos + Center);
         OldPos=NewPos;
    }
  }
  // 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);
  } 
}
Tolerance e' a 1, prova solo a modificare la linea

myservo.setSpeed( 48 );

variando il numero 48 tra 1 e 256

La libreria si chiama MobaTools e credo che sia questa la soluzione

Ultima modifica di Smsteves : 04 maggio 20 alle ore 17:25
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 00:09.


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