Arduino sullo scooter, alcuni dubbi..

Ciao a tutti, sarà una domanda un po' stupida... ma l'arduino può sbagliare? Cioè, io ho questo codice

String b,c,d,e,code;
boolean update = false;
unsigned long mill_rele = millis();
unsigned long mill_trans = millis();
boolean acc_trans = true;
boolean acc_rele = true;

void setup()
{
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(4, OUTPUT);//Relè
  pinMode(11, OUTPUT);//Transistor
  delay(5);
  Serial.begin(9600);
}

void loop()
{
  int  A = digitalRead(8);
  int  B = digitalRead(7);
  int  D = digitalRead(6);
  int  C = digitalRead(5);

  if (A==1){
    while (digitalRead(8)==1) { 
    }//Debounce
    b = c; 
    c = d;
    d = e;
    e = 'A';
    update = true;
  }
  if (B==1){
    while (digitalRead(7)==1) { 
    }//Debounce
    b = c; 
    c = d;
    d = e;
    e = 'B';
    update = true;
  }
  if (D==1){
    while (digitalRead(6)==1) { 
    }//Debounce
    b = c; 
    c = d;
    d = e;
    e = 'D';
    update = true;
  }
  if (C==1){
    while (digitalRead(5)==1) { 
    }//Debounce
    b = c; 
    c = d;
    d = e;
    e = 'C';
    update = true;
  }
  if (update){
    if (acc_rele){//Se lo scooter e' acceso e premo un tasto spengo
      mill_trans = millis()-1;//Faccio scattare prima lo spegnimento
      mill_rele = mill_trans;
    }

    update = false;
    code = b+c+d+e;
    Serial.println(code);
    if (code=="ABBA"){//Se è stata premuta la sequenza corretta...
      Serial.println("Avvio motore");
      mill_trans = millis()+8000;//8 secondi
      mill_rele = millis()+300000;//5 minuti
            mill_rele = millis()+11000;//5 minuti
      Serial.print("Sono le ");
      Serial.print(millis());
      Serial.print(", valorizzo i timer con ");
      Serial.print(mill_rele);
      Serial.print(" ");
      Serial.println(mill_trans);
      acc_rele = true;
      acc_trans = true;
      digitalWrite(4, HIGH);//Accendo il quadro
      delay(100);//Si attiva il relè
      digitalWrite(11, HIGH);//Avvio motorino
      Serial.println("Avviato motorino e quadro..");
    }
  }
  if (acc_rele){
    if (millis() > mill_rele ){
      acc_rele = false;
      digitalWrite(4, LOW);
      Serial.println("Spengo il rele'");
    }
  }
  if (acc_trans){
    if (millis() > mill_trans){
      acc_trans = false;
      digitalWrite(11, LOW);
      Serial.println("Spengo il motorino'");
    }
  }
}

Che mi gestisce tramite la pressione in sequenza di alcuni tasti su un telecomando alcune funzioni sullo scooter (per ora l'accensione). Se per l'arduino non riesce a portare la variabile "acc_trans" a TRUE mi rimane il motorino d'avviamento acceso e rischio di bruciare questo e distruggere la batteria. Devo quindi inserire dei controlli sullo stato delle porte o mi posso fidare?

arduino non sbaglia, ma il programmatore si :P ti conviene quindi comunque mettere un controllo di qualche tipo anche per la sicurezza ;)

Io penso ci si possa fidare, se il micro non riesce a cambiare stato ad una variabile allora c'è un guasto nel micro e ti deve capitare proprio in quel momento, al limite un circuito esterno a protezione del motore.

Ciao.

ma i millis non si resettavano a un certo valore? :roll_eyes:

Uhm giusto... però per mandare in errore il programma dovrebbero resettarsi proprio poco prima che io prema il tasto d'avvio, e quindi me ne accorgerei subito.. però potrei ovviare facendo un controllo sulla differenza fra millis() e il valore salvato che se supera un tot di secondi ripara al danno.

Come circuito esterno si potrebbe usare ad esempio un condensatore che si satura no? Solo che non ho la minima idea di come fare il conto!

Se l'Arduino è sempre sotto tensione, c'è da considerare l'overflow di millis() che accadrebbe all'incirca dopo circa 50 giorni (49,7 se non ricordo male).

Cmq su funzioni "sensibili" è bene sempre inserire dei controlli ulteriori. Inoltre proprio se pensi di lasciare l'Arduino sempre acceso, forse sarebbe il caso di mettere nel "cassettino" anche un RTC, un chip per il tempo reale, così da avere non solo l'ora e la data nel cruscotto, ma anche di poter basare le funzioni temporali su qualcosa di sicuro. Inoltre, con l'RTC potresti sbizzarrirti a fare un sacco di cose. Ad esempio potresti pensare ad un fuel-saver che, dopo 1 minuto di motore acceso e con lo scooter che non si sposta, spengesse il motore per riaccenderlo ad esempio al tocco del gas, oppure accendere i fari temporizzandoli con la luce solare calcolando la data del sorgere e del tramonto del sole con le librerie pubblicate tempo fa qui ecc...

Bhe sicuramente in una prima versione mi fermo all'accensione! Comunque non è una brutta idea... però ci sono già dei problemi che mi vengono in mente riguardo alla luce: lo scooter mi sembra spedisca tutto il surplus energetico dell'alternatore direttamente ai fari, risultato: almeno un faro rimane sempre acceso altrimenti mi sembra si rischi addirittura di bruciare lo statore! Ma quella del fuel saver non è male! Anche perché non è difficile da realizzare!

A parte il fatto che per il "fuel saver" devi trovare un modo per verificare che il motorino non si sia spostando, e poi... quando non si sposta? Qui a Milano anche al semaforo c'e' un movimento di auto/motorini che guadagnano cm su cm sempre! :-)

3 considerazioni: * L' alternatore é regolato percui non sovvracarica la batteria e non serve un consumo per non sovvracaricare. Le luci sono accese per disposizione del codioce dalla strada per farsi notare meglio. * Se fai delle modifiche sul motorino pregiudichi la Tua sicurezza e quello degli altri. Un circuito fatto in modo amatoriale, non testato in tutte le suituazioni immaginabili e non immagianbili non puó essere cionsiderato funzionante al 100% anche se dovesse funzionare sempre. L' accensione e i fari di una moto sono vitali. immagianti quando le luci si spengono in notte fonda tra le macchine o il motore si spegne e blocca la ruota in piena curva.... * Il seguente codice non fa un debounce:

while (digitalRead(6)==1) { 
    }//Debounce

Ciao Uwe

A dirla tutta, quasi nessuna modifica ad un mezzo a motore è legale, non solo la gestione dall'accensione o quella delle luci. Questo vale per le macchine come per le moto e gli scooter. In teoria tu di un veicolo non puoi toccare nessuna parte, pena la decadenza della garanzia, il sequestro con successiva revisione se la modifica è palese e la rivalsa dell'assicurazione in caso di incidenti. Se il nostro amico sta facendo tutto questo immagino che abbia anche un minimo di conoscenza del rischio a cui sta andando incontro.

Questo lo dico per esperienza, avendo avuto in passato diverse auto "truccate". :sweat_smile:

Pero'... le modifiche elettriche non sono contemplate dall'assicurazione ne' dalla motorizzazione, quindi una volta che tu hai i fari che si accendono, lo scarico che scarica il giusto a loro che tu alzi il tuo vetro con la manopola, col sistema di serie o con un sistema di catapulte, non gli frega... Anche le modifiche agli interni puoi farci quello che vuoi, fin tanto che hai il volante e il sedile omologato. Se poi hai il cruscotto in vetroresina o le porte piombate... Tant'e' che moltissime auto che gareggiano in circuiti audio (e quindi impianti elettrici rifatti e interni stravolti) IASCA e EMMA revisione assicurazione e controllo della polizia non hanno problemi.

Un altro conto e' se hai i cerchi da 18 su una UNO, se non hai il catalizzatore e tiri fiammate dallo scarico, filtri a cono barre duomi e chi + ne ha + ne metta...

In teoria è come dici tu, in pratica tutto dipende dai casi. Ad esempio, il cruscotto in vetroresina non credo proprio che te lo passino. I "vetri" devono essere di "vetro". Anche la carrozzeria non puoi toccarla più di tanto: il cofano, ad esempio, deve essere sempre di metallo. I passaruota non puoi toccarli perché lì viene misurata la larghezza dell'auto e quindi altereresti delle misure riportate sul libretto.

Lo scarico lo puoi cambiare ma non puoi certo metterci un tubo in ferro fatto dal fabbro all'angolo perché deve essere omologato CE. Ed anche con l'omologazione corri sempre il rischio della mia premessa: dipende dai casi. Cioè puoi beccare il poliziotto/carabiniere intransigente che se ne frega del certificato che hai dietro e ti manda l'auto al collaudo. Lo può fare, è nella sua autorità. Magari poi il collaudo lo passi senza problemi però ti sei dovuto sbattere stando con l'auto ferma ad aspettare la visita dalla Motorizzazione.

Anche le molle, ad esempio, sono sempre state un po' un motivo di contendere: ufficialmente l'altezza da terra di un veicolo non è registrata sul libretto, però esiste sempre la prova della rampa per cui se ti batte il musetto o lo spoiler posteriore su questa benedetta rampa, ti fanno il "posteriore"

In caso di incidenti, sai quanto le assicurazioni sono rognose. Se il perito, in fase di visita, si accorge che qualcosa è stato manomesso, può sempre appellarsi al fatto che l'auto è stata modificata e rifiutare il rimborso. Quindi le cose vanno sempre fatte in modo che si vedano il giusto. Un filtro conico o la barra duomi sono abbastanza "discrete" come modifiche perché a meno che tu non dia proprio nell'occhio con qualcos'altro (tipo uno scarico da Turbojet) difficilmente qualcuno verrà a chiederti di aprire il cofano.

Un impianto radio è differente da un impianto luci. La radio è un accessorio, l'impianto di illuminazione riguarda invece uno degli elementi legati alla sicurezza e le luci devono essere di tipo omologato. Toccare i comandi delle luci equivale, secondo me, ad una alterazione del loro funzionamento quindi ad una modifica illegale.

Cmq non continuo perché stiamo andando OT.

Bhe ma io devo controllare l'accensione, come viene inserita la chiave il circuito viene escluso e questo non ha più fisicamente il modo di spegnere lo scooter, quindi teoricamente quando sono in marcia non può interferire... Poi le luci non le tocco così sono a posto u.u

  • Il seguente codice non fa un debounce:

Già, non lo è, è una trappola e va bene se il micro non deve fare altro infatti se per caso un pulsante viene tenuto premuto per 20 s, per questo tempo il micro non farà altro che ciclare in loop. Non considerando il caso in cui un pulsante si guasta rimanendo premuto.

Se il micro non deve fare altro di vitale è una soluzione migliore del debounce perchè più semplice, se il micro deve fare altro conviene usare un debounce elettronico. Oppure sommare un contatore al posto del while e quando raggiunto es. 2000 si esegue il codice.

Ciao.

Un semplice codice di debounce è il seguente:

byte val1=0;
byte val2=0;
byte change=0;

void loop() {
    val1=digitalRead(interruttore);
    delay(10);
    val2=digitalRead(interruttore);
    if (val1==val2) {
        if (val1!=change) {  
            if (val1==LOW) {  //pulsante attivo su LOW - puoi mettere ad HIGH
                // CODICE DA ESEGUIRE
            }
        }
    }
    change=val1;

Questo codice non blocca l'esecuzione dello sketch. Puoi mettere HIGH al posto di LOW, a seconda di come hai collegato il pulsantino.

leo72: A dirla tutta, quasi nessuna modifica ad un mezzo a motore è legale, non solo la gestione dall'accensione o quella delle luci. Questo vale per le macchine come per le moto e gli scooter. In teoria tu di un veicolo non puoi toccare nessuna parte, pena la decadenza della garanzia, il sequestro con successiva revisione se la modifica è palese e la rivalsa dell'assicurazione in caso di incidenti. Se il nostro amico sta facendo tutto questo immagino che abbia anche un minimo di conoscenza del rischio a cui sta andando incontro.

Questo lo dico per esperienza, avendo avuto in passato diverse auto "truccate". :sweat_smile:

negli scooterini soprattutto i 50ini che sono presi di mira lo dico per esperienza.... da quando sono stato pizzicato tutto regolare .... non togliete neanche gli specchietti.... comunque quell del fuel sever è una bella gatta de palare... se lo scoot è recente per vedere se è acceso puoi collegarti all'ampolla reed o i fotodiodi che controllano la velocità sulla ruota oppure accellerometro...

Non so come siano messi i cinquantini in quanto a spazio fra le forche, ma in teoria basterebbe un semplice sensorino magnetico con contatto dry-reed normalmente aperto che viene chiuso al passaggio di una calamitina, lo stesso sistema usato nei contachilometri per bici, da cui si potrebbe benissimo prelevare. Basta leggere la velocità del mezzo: se non c'è movimento (ossia chiusura del sensore) per 30/60 secondi ecc... il mezzo è fermo.

Opps! mi ero perso il commento di Uwe! Come accendo l'altro pc provvedo subito! Anche perché se, come dice Mauro, il tasto rimane premuto si blocca tutto!

@Leo: c'è uno spazio minuscolo, ma non è un problema visto che per ora non ci proverei neanche xD Non sono ancora abbastanza arduinopratico!!

OT: @Ratto: il mio è "solo" senza strozzo :grin: e senza lo specchietto di dx, mi toccherà mica comperarlo? (Edit: nei ciclomotori ci vuole almeno il sx)

[OT] Se non è cambiata la legge, nei veicoli a motore è d'obbligo solo lo specchietto di SX, quello di DX no (tant'è che le auto di 15/20 anni fa venivano vendute solo con lo specchietto di SX).