Sistema automatico per Step-motor

PROGETTO 019 – Sistema automatico per finestrini o tapparelle

Dopo diverse richieste arrivatemi via mail, ho deciso di accontentarvi!

Il diciannovesimo progetto della serie 100 Progetti con Arduino Uno è un controllo per step-motor con automazione, ovvero sistema capace di far muovere un piccolo motore passo passo modello 28BYJ-48 tramite due pulsanti direzionali, ottenendo delle automazioni in base al tempo di pressione degli stessi.

Il sistema ricorda molto quello utilizzato per gestire i finestrini delle auto. Quando premiamo il pulsante per far abbassare il finestrino, se lo teniamo premuto per più di un secondo al rilascio il finestrino continuerà a scendere fino a quando non attiverà un finecorsa.

Io non avendo a disposizione due interruttori di finecorsa, uno per la corsa superiore e uno per quella inferiore, ne ho realizzati due utilizzando i contatti normalmente chiusi di due vecchi relè. Voi, se volete, potete acquistare quello che vi metterò nella lista materiali.

Quindi, quando il mio ipotetico finestrino in movimento raggiunge uno dei due finecorsa, apre uno dei due contatti e il motore smette di girare.

Se il contatto del finecorsa superiore è aperto non sarà possibile azionare il motore dal pulsate Up (quello che fa salire il finestrino). La stessa cosa accade per il finecorsa inferiore, ma per il pulsante Down (quello che lo fa scendere).

Se entrambi i pulsati vengono premuti (impossibile in un sistema montato in auto) per ragioni di sicurezza nessuno dei due riesce ad azionare il motore.

Per fermare il movimento automatizzato del finestrino prima che raggiunga uno dei due finecorsa, basterà premere nuovamente uno dei due pulsanti.

Come in tutti i miei ultimi progetti, sia i pulsanti che i finecorsa sono collegati ad Arduino come ingressi che da codice vengono impostati come INPUT_PULLUP. Non necessitano di nessuna resistenza esterna e se premuti restituiscono un livello logico LOW, in quanto collegati a al pin GND.

Lista dei componenti utilizzati e altro:

Schema di collegamento

Il codice

Il programma è strutturato su due pagine o Tab. Nella cartella presente nel file zip di download, troverete due file .ino, voi dovete aprire quello nominato “_019_Controllo_Step“. Nell’IDE si apriranno automaticamente entrambi.

Perché ho diviso il codice in due Tab? Lo step-motor per funzionare richiede diverse abilitazioni che normalmente vengo gestite da una libreria, io per complicarmi la vita ho volutamente evitato l’utilizzo di una libreria terzi e scritto la funzione che mi permette di far muovere lo stesso il motore.

Una novità presente nel codice è la possibilità di capire come gestire il conteggio di una qualsiasi variabile con la funzione millis().

Nel codice faccio partire un conteggio memorizzando il valore di millis() su una variabile tempo zero, per poi terminare con la sottrazione di tale valore su quello di fine conteggio; cosi facendo memorizziamo su una variabile un valore in millisecondi, che nel nostro caso è il tempo di pressione del pulsante.

//Esempio del conteggio del tempo di pressione di Up

  if ((Cont_Bt_Up == 0) && (Stato_Bt_Up == LOW)) {
    Cont_Bt_Up = 1;
    T_Dw = 0;
    T_Up_0 = millis();
    Serial.println("Premuto tasto Up");
  }
  
  if ((Cont_Bt_Up == 1) && (Stato_Bt_Up == HIGH)) {
    Cont_Bt_Up = 0;
    T_Up = millis() - T_Up_0;
    Serial.print("Tempo di pressione = ");
    Serial.print(T_Up);
    Serial.println(" ms");
  }

Scarica lo sketch da questo link:
Progetto_019

Tutti i file compressi disponibili per il download, sono stati realizzati utilizzando il software IZArc. Il software è totalmente gratuito e scaricabile da qui. Per una corretta estrazione dei file, Vi consiglio di scaricarlo.

Nella sezione 100 Progetti con Arduino Uno puoi trovare articoli simili con file sorgenti liberamente scaricabili.

Per qualsiasi info, per un aiuto nella realizzazione dei vostri progetti, o più semplicemente per segnalarci degli errori o link corrotti, utilizzate la pagina Contattaci.

Grazie per aver letto questo articolo, se puoi leggine degli altri, commenta per sostenere il blog e iscriviti al mio canale Youtube. Seguimi anche su Instagram e Facebook dove puoi anche pubblicare i tuoi progetti sul gruppo Arduino For Peoplem.

You may also like...

14 Responses

  1. claudio ferro ha detto:

    ciao con arduino il motore step con pulsanti e fine corsa progetto 019m mi da quest’errore potete aiutarrmi.
    grazie cordiali saluti claudio
    file:///C:/Users/claudio/Desktop/appunti%20da%20cattura%20video/Immagine%202020-12-30%20224634.png

    • peoplem ha detto:

      Ciao purtroppo non riesco vedere l’immagine cosi. Non devi collegare il link, prova ad inviarmelo come allegato mail. Nella sezione contatti trovi tutti i link.

  2. claudio ferro ha detto:

    buona sera
    grazie ho risolto il mio mess diu ieri 22.51
    grazie e Buon ANno a tutti

  3. claudio ferro ha detto:

    Ciao il progetto 19 con 2 pulsanti motore step e 2 fine corsa funziona ma i fine funzionano al contrario cioè invece di fermare il motore se lo chiudo parte solo se lo chiudo.
    grazie come sempre per il vostro prezioso aiuto
    claudio

  4. Davide ha detto:

    Ciao, sono nuovo dell’ambiente Arduino.
    Come collego il tuo sistema ad un TB6600?
    Eventualmente sarebbe possibile usare anche un joystick?

    Grazie
    Davide

  5. Giovanni ha detto:

    Ciao,
    vorrei pilotare uno step con un solo pulsante. Se premo il pulsante il motore gira in una direzione e si ferma con il finecorsa, se lo ripremo deve girare dalla parte opposta fermandosi con l’atro finecorsa.
    Naturalmente i finecorsa interessati non devono influire con la partenza del motore in entrambi i casi.
    Si può fare?
    Mi potresti aiutare?
    Grazie
    Giovanni

    • peoplem ha detto:

      Ciao Giovanni innanzitutto quando lasci un commento ti prego d iscrivere in piccolo, visto che ho dovuto riscriverlo per postarlo. Poi per quanto riguarda il progetto che intendi realizzare, posso dirti che la cosa è fattibile ed è anche semplice. Se vuoi puoi cercare su questo blog l’articolo riguardante la programmazione con SFC, ti risulterà semplice stilare il codice per controllare il suo sistema. In alternativa se non riesci proprio a farlo puoi scrivermi tramite WhatsApp e commissionarmelo.
      Grazie per il tuo commento

  6. Gianpiero ha detto:

    Ciao,
    e possibile fare la stessa cosa senza inserire i fine corsa?
    A me servirebbe per fa ruotare un ruota dentata ma fino ad un certo punto altrimenti distrugge tutto.
    Il pulsante quindi, se pur premuto, la rotazione dovrebbe fermarsi a prescindere
    Magari da programma.
    Grazie
    Gianpiero

    • peoplem ha detto:

      Ovviamente é possibile escludere i finecorsa, ma poi mi domando come hai in mente di bloccare lo stepper se non gli dai un sensore di posizione?

  7. Alessandro ha detto:

    molto utile e ben fatto bravo !

    Alessandro

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *