progetto cambio elettronico per moto ci siamo quasi...............

Ciao ragazzi, premetto che sono veramente contento perchè anche se è uno skecht veramente corto e molto semplice permette di poter cambiare marcia, nella moto, tenendo il gas aperto e senza usare la frizione......
Il principio è che durante la fase di esercizio del motore viene a crearsi un vuoto (in millisecondi) che taglia la potenza del motore e consente l'inserimento della marcia successiva per poi ridare immediatamente potenza. Si puo' agire direttamente sul positivo della bobina portandolo a massa per i millisecondi necessari all'operazione di cambiata oppure sull'ignettore per staccare l'alimentazione per il tempo necessario. (per ora sto lavorando per funzione nei motori monocilindrici ma per gradi ci arriviamo).........
Cosi' com'è lo sketch funziona senza problemi ma per completarlo vorrei aggiungere una cosa,pero' non sono ancora riuscito a capire come fare....
in questo caso bottone è lo swicth per la cambiata e si trova sul pedale del cambio. Quando il motore è in accelerazione, alla pressione della leva , la stessa fa un po' di corsa e si ferma perchè trovando la rotazione il desmodronico del cambio non è in grado di attuare la cambiata e la sensazione è la stessa di aver finito le marce anche se in realta' magari sei appena in seconda. Trovando "duro" viene azionato lo switch, che attraverso arduino, collegato a un rele', apre e richiude, per i millisecondi impostati, un collegamento tra positivo della bobina e massa della moto, generando lo "stacco" di potenza che serve alla cambiata.
Io per ora ho riesco a impostare il periodo di cambiata e il periodo di buio dello switch durante il quale se rischiacciato non funziona.
Mi manca per completare questa prima (chiamiamola cosi') "versione" una cosa:

vorrei che una volta azionato lo swich, non funzionasse piu' per tutto il tempo che rimane premuto o meglio che una volta premuto funzionasse una sola volta... Se io ora lo tengo premuto mi fa un "attacca-stacca" ogni 510 millisecondi. Durante la guida non crea problemi perchè generalmente una volta eseguita la cambiata si toglie il piede dalla pedalina, ma un errore di manovra o una curva particolare potrebbero causare il verificarsi di tale situazione e cio' sarebbe da evitare.

lo skecth e' questo: (e se qualcuno del forum ha una moto con le marce puo' provarlo con grande goduria senza comprare sensori o pulsanti potete tranquillamente collegare bottone al pulsante del clacson e via di marce senza staccare il gas.)

int rele = 10;
const int bottone = 9;
int lettura;

void setup () {
pinMode (rele, OUTPUT);
pinMode (bottone, INPUT);
}

void loop () {

lettura = digitalRead (bottone);
if( lettura == HIGH)
{digitalWrite(rele,HIGH);
delay(20);
digitalWrite (rele,LOW);
delay(500);
}

delay (10);

}
praticamente ora il tempo di cambiata è 20 millisecondi mentre il buio per il bottone è di 500 millisecondi piu' i 10 di delay alla fine......
chiedo aiuto ai piu' esperti..... magari la soluzione è semplice ma probabilmente ci sono comandi di cui ignoro ancora l'esistenza che possono servire al caso......

a proposito......intanto grazie a chi leggera' e 2 grazie a chi contribuira'.....
ho visto che ci sono tanti tipi di arduino......

  • per questa applicazione ora io uso arduino uno rev3 ma credo ci sia qualcosa di piu' piccolo da poter utilizzare vista la semplicita' dello sketch che consigliate?
    -per il rele' io ne sto usando uno classico singolo da 10a 250v/ac - 10a 30v/dc con sigla srd-05vdc-sl-c ne che è misura in mm 34 x 26 altezza 18. Ne conoscete di piu' compatti che siano altrettanto funzionali(questo sembra essere abbastanza veloce).......
    grazie ancora
int rele = 10;
const int  bottone = 9;
int lettura;
int stato = 0;



void setup () {
  pinMode (rele, OUTPUT);
  pinMode (bottone, INPUT);
}

void loop () {
  
  lettura = digitalRead (bottone); 
   
  if( lettura == HIGH)
  {
    if(stato == 0)
    {
       stato = 1;
       digitalWrite(rele,HIGH);
       delay(20);
       digitalWrite (rele,LOW);
       delay(500);
     }
  }
  else
  {
     stato = 0;
  }  
    
  delay (10);
  
  
}

Ti ho modificato il codice inserendo una variabile "stato".

Il concetto è che devi salvare lo stato del bottone e inibire la cambiata, tranne la prima, fino a quando lo stato non viene resettato.
Quando il bottone è HIGH esegui la cambiata e salvi lo stato (la variabile "stato" passa da 0 a 1).
Fino a che la variabile "stato" rimane a 1 non esegui altre cambiate, quindi se rimani con il piede sulla pedalina del cambio non succede nulla.
Quando alzi il piede e quindi rilasci il bottone che passa a LOW la variabile "stato" passa a zero e si prepara a ricevere una nuova cambiata.

Spero di non aver fatto errori visto che non l'ho testato, ma comunque credo che il concetto sia abbastanza chiaro.

Buon divertimento

Attilio

Grazie mille, provo e ti dico. A livello logico non fa una piega :wink:

testato e funziona alla grande!!!!!!!!! grazie ancora!!!!!!!!!

willy196:
testato e funziona alla grande!!!!!!!!! grazie ancora!!!!!!!!!

Figurati, per così poco :wink:

L'importante è che funzioni.

Ovviamente stiamo parlando di uso in pista, non su strada aperta al pubblico.

Ciao, visto che io lavoro con le centraline da competizione che hanno questo tipo di caratteristica per l'abbinamento con cambi sequenziali, ti posso indicare che il tempo di "buio" necessario per realizzare una cambiata corretta è di almeno 60 ms, se ti funziona con "20 ms" è probabilmente perché visto che usi un relè per realizzare il "taglio" esso non è abbastanza veloce e mantiene un certo ritardo, se il sistema non fosse "affidabile" a lungo termine, lo potresti sostituire con qualche integrato idoneo che faccia da sostituto al relè.

Comunque, complimenti per la riuscita dell' esperimento! :wink:

Niente male