progetto attuatore marce go kart 125

ciao ragazzi, sto realizzando un progetto su un go kart 125, un attuatore marce gestito da arduino. siccome sono un neofita autodidatta sper che in questo forum posso trovare qualcuno che mi può dare una mano

spiego il mio progetto: arduino uno che gestisce una scheda relè, questa scheda relè gestisce l'attuatore magnetico, che sviluppa 12 kg di forza, inoltre un relè gestisce la bobina di accenzione motore-
provo ad allegare uno schets

stò cecando di gestire con due pulsanti up e down i relay che gestiscono l'attuatore, fino ad ora ci sono poi un altro relay gestisce l'alimentazione della bobibna cge fa spegnere il motore 50 ms prima che l'attuatore inizia il suo lavoro. il problema è che devo utilizzare un display per vedere che marcia è attiva. con questo ho pensato di utilizzare un contatore up e down
ma NON RIESCO

I relè sono lenti a commutare e i contatti possono anche restare incollati per T tempo prima che la molla li richiami. Meglio usare un mosfet digitale.

un display per vedere che marcia è attiva. con questo ho pensato di utilizzare un contatore up e down
ma NON RIESCO

Cioè non riesci a fare cosa?
Posta il codice e una bozza dello/degli switch del cambio, come pure una descrizione del cambio, ad esempio sequenziale o meno, tipo motocicletta, ecc.

PS: c'è gente che non ha mai guidato una moto.

Ciao.

Grazie mauro, a breve posto il codice
Help!!!

arduino va in blocco quando metto in moto il go kart !!!!!!!!!!!!!!

gionnypionik:
arduino va in blocco quando metto in moto il go kart !!!!!!!!!!!!!!

Un go kart, come tutti i mezzi mobili, è una fabbrica di disturbi di tutti i generi, Arduino non è un prodotto automotive certificato per poter operare in quell'ambiente.
Come stai alimentando Arduino ?

con una batteria 12 v

come posso elimirare il problema!!!
help!

filo candela schermato, candela con resistore.....

Al posto di un display potresti usare dei semplici LED ad alta luminosità, magari di colore diverso.

Per i disturbi, comincia ad inserire in ingresso al VIN di Arduino un condensatore elettrolitico da 470 μF 16V.

Poi, prova a montare Arduino in un contenitore metallico collegato a massa (GND).

ok provero subito
ringrazio tutti della vostra gentile collaborazione

allego qualche foto del progetto

non riesco ad allegare foto come si fa?

Temo ci sia qualche piccolo problema tecnico con il forum che riguarda la gestione delle immagini, pazienta.

non riesco a postare le immagini, vedrò in un altro tempo.
però volevo richiamare il mio progetto e chidere dei chiarimenti e aiuti a tutti voi per risolvere alcuni problemi riscontrati.

materiale utilizzato:
Arduino uno
scheda relay : Relè Shield per Arduino a quattro relay
due pulsanti con relative resistenze
un attuatore bidirezionale elettromagnetico da 400 w 12 volt con una forza di 12 kg
inoltre ho utilizzato dei relay per auto a 12 volt da 45 amp per gestire a cascata l'attuatore.
il codice è

/*
Codice per aumentare o diminuire una variabile con i pulsanti di up e down go kart
*/


/*
Dichiarazioni variabili
*/


const int buttonUpPin = 11;                      //numero pin a cui è collegato il pulsante di UP
const int buttonDownPin = 12;                   //numero pin a cui è collegato il pulsnte di DOWN
const int RelayMotor =7;                            // relè di attivazione
const int RelayUp =5;
const int RelayDown =6;

int buttonUpState;                              //stato attuale del pulsante di UP
long UpDebounceTime;                            //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di UP
long buttonUpPressedTime;                       //tempo che indica da quanto è stato premuto il pulsante
boolean buttonUpPressed;                        //memoria che indica il passaggio da LOW a HIGH del pulsante di UP
boolean repeatUp;                               //memoria che indica il repeat del pulsante attivo
long repeatUpTime;                              //tempo che indica da quanto è attivo il repeat
long lastRepeatUpTime;                          //variabile di appoggio per calcolare repeatUpTime

// variabili di tempo
    int StartMotor = 150;                      // tempo di accensione motore dopo innesto marcia ( memo tempo piu veloce la cambiata)
    int imputmarcia = 500;                      // tempo di innesco marcia dopo spegnimento motore( da 150 in su in base all'impuntamento della marcia)
    int tempoattuatore =1000;                   // tempo che rimane acceso l'attuatore
//...
               

    
int buttonDownState;                            //stato attuale del pulsante di Down
long DownDebounceTime;                          //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di Down
long buttonDownPressedTime;                     //tempo che indica da quanto è stato premuto il pulsante
boolean buttonDownPressed;                      //memoria che indica il passaggio da LOW a HIGH del pulsante di Down
boolean repeatDown;                             //memoria che indica il repeat del pulsante attivo
long repeatDownTime;                            //tempo che indica da quanto è attivo il repeat
long lastRepeatDownTime;                        //variabile di appoggio per calcolare repeatDownTime
                               

long debounceDelay = 50;                       //Tempo di debounce per i pulsanti UP e DOWN
long pressedDelay;                              //variabile per determinare l' attivazione del repeat e il tempo di repeat quando è attivo
long timeRepeatEnable = 10;                    //costante che determina il tempo minimo per cui deve rimanere premuto il pulsante prima di ripetere l'operazione
long timeRepeat = 10;                          //costante che determina il tempo di ripetizione di UP e di DOWN

//...

void setup () {
  
 
  
pinMode (buttonUpPin, INPUT);                  //impostazione buttonUpPin come ingresso
pinMode (buttonDownPin, INPUT);                //impostazione buttonDownPin come ingresso
pinMode(RelayMotor, OUTPUT);
pinMode(RelayUp,OUTPUT);
pinMode(RelayDown,OUTPUT);
    
  
}

/*
LOOP
*/

void loop() {
  
  int readingUp = digitalRead(buttonUpPin);                           //Lettura ingresso digitale del pulsante di UP
  int readingDown = digitalRead(buttonDownPin);                       //Lettura ingresso digitale del pulsante di Down
  
 
  if (readingUp == HIGH) {                                            //Se l' ingresso buttonUpPin è HIGH per un tempo maggiore di debounceDelay lo stato logico di buttonUpState è HIGH altrimenti è LOW 
    if((millis() - UpDebounceTime) > debounceDelay) {
      buttonUpState = HIGH;                                
    } 
  }else{
      buttonUpState = LOW;
      UpDebounceTime = millis();  
  }
  
  if (readingDown == HIGH) {                                            //Se l' ingresso buttonDownPin è HIGH per un tempo maggiore di debounceDelay lo stato logico di buttonDownState è HIGH altrimenti è LOW 
    if((millis() - DownDebounceTime) > debounceDelay) {
      buttonDownState = HIGH;                                
    }
  }else{
      buttonDownState = LOW;
      DownDebounceTime = millis();  
  }


 
  switch (buttonUpState) {
    
    case HIGH:
    
 
               
    digitalWrite(RelayMotor, HIGH );       // input relè spegnimeto motore
    delay (imputmarcia);                   // aspetta un tempo per iniziare l'innesto marcia
    digitalWrite (RelayUp, HIGH);          //inizio innesto marcia
    delay (StartMotor);                     // tempo di accensione motore dopo innesto marcia                                             
    digitalWrite(RelayMotor, LOW);         // start motore
    delay(tempoattuatore);                 // attuatore attivo
    digitalWrite(RelayUp,LOW);             // attuatore stato di riposo
     
               
      break;
    
         
  }

switch (buttonDownState) {
    
    case HIGH:
      
 
      
    digitalWrite(RelayDown, HIGH );            
    delay (tempoattuatore);                                                                
    digitalWrite(RelayDown, LOW);  
            

      break;
   
      
  }

}

funziona tutto ma quando accendo il motore, arduino va in blocco................
poi il codice l'ho scritto io che non ho esperienza e come già detto sono un neofita autodidatta, vorrei implementarlo con un contatore che conta da 1 a 6 e lo manda a un display a segmenti.

vorrei cambiare la scheda relay con dei mosfet, o dei relay solidi, per eliminare i doppi relay a cascata per gestire l'attuatore. qualcuno sa darmi una dritta. l'attuatore funziona a 12 volt e 400 w di potenza. LA SCHEDA che uso ora nel progetto ha dei relay da 10 ampere che comandano altri relay da 45 amper. tutto cio mi fa perdere tempo di attuazione perche sono due relay che devono attivarsi prima di dare potenza all'aTTUATORE. perdo teoricamente 120 ms x 2
cerco deri relai solidi da 40 amp a 12 volt ma non riesco a trovarli^^^^^^

Essendo l'attuatore bidirezionale, hai bisogno di un ponte H.

Se usi quattro MOSFET logic level IRLZ44 (max 50A @ 25°C e 36A @ 100°C) in configurazione a drain source comune, puoi pilotarlo direttamente da Arduino.

Considerato che il carico è di 33A, è indispensabile inserire un dissipatore.

l'attuatore funziona con due alimentazioni + separate e la massa in comune, non devo invertire la polarità.

http://www.cei-italy.it/pdf/b221-b211-kart.pdf