Controllare uno Stepper 28BYJ-48 con ULN2003 mediante Arduino

Il 28BYJ-48 è un motore passo passo unipolare a 5 fili tra i più economici che potete trovare in commercio (poco meno di 3€), è spesso inserito all’interno dei kit Arduino compatibili che troviamo su molti store online.

Si presenta in due versioni, a 5V e a 12V

Generalmente forniscono una buona coppia anche in stato di stop fintanto che viene fornita alimentazione al motore. L’unico aspetto negativo è l’elevato assorbimento anche in stato di stop che risulta di 240 mA.

Specifiche tecniche (derivate dal datasheet del motore)

Dimensioni del motore (derivate dal datasheet del motore)
Di seguito le dimensioni fisiche del motore nel caso in cui dobbiate realizzare parti meccaniche (bracci robot, plotter, ecc…) su cui fissare il motore.

Per quanto riguarda il funzionamento degli Stepper Motor vi rimando ai due articoli:

Questo tipo di motore è spesso venduto con una scheda di controllo.
Ho utilizzato spesso questo stepper per piccoli bracci robot o piccoli plotter, avrei potuto ovviamente utilizzare motori più performanti, ma il basso costo risulta particolarmente compatibile con il portafoglio anche dei miei studenti.

Per questa lezione useremo:

  • motore passo passo 28BYJ-48
  • scheda di controllo con ULN2003A
  • scheda Arduino UNO R3
  • 6 connettori maschio femmina
  • una breadboard

Ma prima di iniziare con la pratica alcuni richiami di teoria.

Sono presenti 5 fili di connessione che fanno riferimento alle bobine e all’alimentazione. All’interno del motore sono presenti due bobine, al centro di ogni bobine abbiamo la connessione alla tensione di alimentazione (5V o 12V) filo di colore rosso, mentre gli altri connettori:

  • arancione;
  • rosa;
  • giallo;
  • blu;

saranno connessi ciclicamente a massa in modo che ci sia passaggio di corrente tra questi e il positivo ed ogni volta vi sarà il passaggio di corrente in queste bobine, l’albero del motore compirà un passo.

All’interno del motore sono presenti due bobine, al centro di ogni bobine abbiamo la connessione alla tensione di alimentazione (5V) filo di colore rosso, mentre gli altri connettori: arancione, rosa, giallo, blu saranno connessi ciclicamente a massa in modo che ci sia passaggio di corrente tra questi e il positivo ed ogni volta vi sarà il passaggio di corrente in queste bobine l’albero del motore compirà un passo (fare riferimento agli articoli indicati all’inizio).

Secondo la scheda tecnica, quando il motore 28BYJ-48 funziona in modalità a full step, ogni passo corrisponderà ad una rotazione di 11,25°. Ciò significa che verranno effettuati 32 passi per giro (360°/11,25° = 32), però il motore possiede al suo interno una riduzione di 1/63,68395 che viene approssimato ad 1/64 ciò implica che ci saranno in realtà 32*63,68395 passi per giro = 2037,8864 all’incirca 2038 passi (attenzione che se si approssima il rapporto la riduzione ad 1/64 il numero di passi per giro risulta 2048).

E’ possibile controllare questo motore in modo più preciso utilizzando i micro stepping, in questa guida ne mostrerò il funzionamento in full step e successivamente utilizzando un’apposita libreria, che ne semplifica l’utilizzo, verrà controllato in half step.

Per i 28BYJ-48 l’intervallo tra ogni passo è di 2 millisecondi, quindi teoricamente potrebbe funzionare ad una velocità massima di 500 passi/s, da ciò si desume che per fare una rotazione completa sono necessari 4 secondi.

La scheda di controllo.

Sulla scheda di controllo trova posto l’integrato ULN2003A che include un array di 7 transistor Darlington, ognuno in grado di gestire una corrente di 500mA con tensioni nell’ordine dei 50V

L’ULN2003A risulta utile per la gestione di carichi di tipo induttivo come: stepper (passo-passo), motori CC, rele’, ecc… E’ presente su ogni Darlington un diodo che consente la soppressione di disturbi, rendendo superflua l’installazione di diodi esterni.

Sulla scheda di controllo troviamo anche 4 diodi LED con in serie le resistenze per limitane la corrente. I 4 LED indicati con le lettere A, B, C, D indicano lo stato di attivazione delle varie bobine.

La scheda può essere utilizzata per stepper 28BYJ-48 a 5V o a 12 V. Inserire il negativo sul pin in cui è presente il e il positivo dove è presente il simbolo +. I pin ON/OFF consentono di attivare o disattivare la scheda di controllo, nella posizione indicata nell’immagine che segue la scheda è in stato ON, togliendo il ponticello passa nello stato OFF.

Poiché l’assorbimento del passo passo può arrivare fino a 240 mA è indispensabile utilizzare un’alimentazione esterna mantenendo comuni le masse tra il microcontrollore e scheda di controllo dello stepper, però in questa lezione per rendere agevole la sperimentazione a titolo dimostrativo utilizzerò l’alimentazione a 5V direttamente ad Arduino, di seguito sono riportati i due circuiti con alimentazione da scheda Arduino ed esterna.


Schema di collegamento
(con alimentazione presa da scheda Arduino)


Schema di collegamento
(con alimentazione esterna)

Collegherò i pin IN1, IN2, IN3, IN4 della scheda di controllo del motore ai pin di Arduino: 8, 9, 10, 11.

Per rendere più semplice la programmazione possiamo utilizzare la libreria stepper presente all’interno dell’IDE di Arduino così come fatto nei due articoli indicati ad inizio di questa lezione. La libreria permette il controllo di stepper unipolari che bipolari.

Come indicato sul reference di Arduino, la libreria è dotata delle seguenti funzioni:

Utilizzerò lo sketch stepper_oneRevolution presente nell’IDE di Arduino.
Lo sketch farà muovere il motore passo-passo in senso orario lentamente e poi rapidamente in senso antiorario.

Come detto nella parte iniziale di questa lezione, l’albero del motore eseguirà 2048 passi per effettuare un’intera rotazione.

In questo esempio, l’albero esegue una rotazione completa in senso orario, eseguendo il numero di 2048 passi utilizzando la libreria Arduino Stepper.
Così come per l’esempio precedente utilizzeremo anche in questo caso i pin digitali di Arduino: 8, 9, 10, 11 così come indicato nello schema precedente.

Come detto nella parte iniziale di questa lezione, l’albero del motore eseguirà 2048 passi per effettuare un’intera rotazione.

In questo esempio, l’albero esegue una rotazione completa in senso orario, eseguendo il numero di 2048 passi utilizzando la libreria Arduino Stepper.
Così come per l’esempio precedente utilizzeremo anche in questo caso i pin digitali di Arduino: 8, 9, 10, 11 così come indicato nello schema precedente.

/*
 * Prof. Michele Maffucci
 * 28.10.2020
 */

// inclusione della libreria Stepper 
#include <Stepper.h>

// definizione del numero di passi per rotazione
const int stepsPerRevolution = 2048;

// creazione dell'istanza della classe stepper

/*
 * IN1 -> 8
 * IN2 -> 9
 * IN3 -> 10
 * IN4 -> 11
 */

Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  /* 
   * non è necessario impostare i pin di Arduino
   * a cui collegare la scheda dello stepper 
   * vengono gestiti dalla libreria
   */

// imposta la velocità a 15 rpm:
  myStepper.setSpeed(15);

// inizializzazione della porta seriale
  Serial.begin(9600);
}

void loop() {
  // imposta una rotazione in senso orario
  Serial.println("orario");
  myStepper.step(stepsPerRevolution);
  delay(500);

// imposta una rotazione in senso antiorario
  Serial.println("antiorario");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Spiegazione del codice

Lo sketch inizia con l’inclusione della libreria Stepper.

#include <Stepper.h>

Successivamente, definiamo una costante stepsPerRevolution che contiene il numero di “passi” che il motore eseguirà per completare un giro. Nel nostro caso, è il 2048

const int stepsPerRevolution = 2048;

Il motore passo-passo unipolare 28BYJ-48 viene azionato agendo sui pin IN1-IN3-IN2-IN4 per fare ciò deve essere create un’istanza della libreria stepper chiamata myStepper in cui inseriamo la sequenza di pin 8, 10, 9, 11.
Assicuratevi di effettuare questa operazione correttamente altrimenti il motore non funzionerà correttamente.

Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

Nel setup definiamo la velocità di rotazione e inizializziamo la Serial Monitor in quanto invieremo su questa il senso di rotazione del motore.

void setup() {
  /* 
   * non è necessario impostare i pin di Arduino
   * a cui collegare la scheda dello stepper 
   * vengono gestiti dalla libreria
   */

// imposta la velocità a 15 rpm:
  myStepper.setSpeed(15);

// inizializzazione della porta seriale
  Serial.begin(9600);
}

Nella funzione loop, nella prima parte del codice, stampiamo sulla Serial Monitor la stringa “orario” e successivamente usiamo la funzione step() per impostare il numero di passi che deve effettuare, nella seconda parte del codice stampiamo sulla Serial Monitor la stringa “antiorario” e successivamente usiamo la funzione step() impostando un valore negativo che farà ruotare il motore in senso antiorario.

void loop() {
  // imposta una rotazione in senso orario
  Serial.println("orario");
  myStepper.step(stepsPerRevolution);
  delay(500);

// imposta una rotazione in senso antiorario
  Serial.println("antiorario");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Il primo frammento di codice farà ruotare il motore in senso orario molto lentamente. E il secondo farà girare il motore in senso antiorario a una velocità molto più veloce.

Esercizi per i miei studenti

Esercizio 1
Fare ruotare in modo continuo l’albero dello stepper, ad ogni rivoluzione accendere un LED per 200 ms. Visualizzare sulla serial monitor il contatore di rivoluzioni.

Esercizio 2
Aggiungere due pulsanti di controllo per lo start e per lo stop del motore. Indicare lo stato del pulsante sulla Serial Monitor.

Esercizio 3
Alla pressione del pulsante P1 il motore avanza di 512 passi alla pressione del pulsante P2 il motore torna indietro di 512 passi.

Esercizio 4
All’avvio del programma sulla Serial Monitor inserire un numero che identifica il numero di passi utilizzati per incrementare e decrementare il numero di passi mediante due pulsanti P1 e P2. Il numero di passi per l’incremento e il decremento è lo stesso.
Stampare sulla Serial Monitor il valore totale dei passi compiuti dallo stepper.

Esercizio 5
All’avvio del programma sulla Serial Monitor inserire due valori che identificano: il numero di passi utilizzati per incrementare e il numero di passi per decrementare. In questo esercizio si desidera impostare due valori che possono essere anche diversi per l’incremento e il decremento dei passi del motore.
Stampare sulla Serial Monitor il valore totale dei passi compiuti dallo stepper.

Esercizio 6
Mediante un sensore ad ultrasuoni realizzare un programma che nell’intervallo tra 3 cm e 19 cm avvicinando un ostacolo, per ogni centimetro il sensore incrementa di 128 passi e allontanandosi dall’ostacolo per ogni centimetro il numero di passi decremento di 128 passi.

Controllare un motore passo passo unipolari con Arduino

In queste settimane i miei studenti stanno svolgendo una serie di esercitazioni in cui è necessario controllare la rotazione di un motore passo passo (stepper). L’obiettivo delle esercitazioni è quello di simulare il sistema di controllo di un forno a microonde e lo stepper viene utilizzato per la rotazione del piatto.

In un precedente articolo ho dettagliato il principio di funzionamento di questa tipologia di motori, in questo post ne riassumo le principali caratteristiche e condivido alcuni esempi che sono di base per la realizzazione delle sperimentazioni svolte per il laboratorio di TPSEE e Sistemi.

Richiami

Il vantaggio principale rispetto ad un motore brushed (a spazzola) in corrente continua e di un servomotore e che l’albero di rotazione di uno stepper può essere posizionati con precisione, spostandolo in avanti o all’indietro di un “passo” alla volta, ma possono anche ruotare continuamente.
In questa lezione verrà mostrato come controllare un motore passo-passo utilizzando Arduino ed un ponte H L293D, lo stesso utilizzato per controllare un motore a spazzola come quelli utilizzati in molti dei kit robotici che trovate sia questo sito.

Caratteristiche principali di uno stepper

  • La differenza sostanziale da un motore brushed in corrente continua risiede nel fatto che un motore passo passo mantiene la velocità di rotazione costante anche con un carico applicato, ovvero se sottoposti a sforzo mantengono velocità costante. Questa caratteristica consente di evitare sistemi di controreazione, utilizzando ad esempio degli encoder, per il mantenimento costante della velocità.
  • i motori passo passo erogano coppie elevate anche a basso numero di giri.
  • accelerazioni e frenate repentine
  • mantenimento del carico fermo e senza vibrazioni

Difetti

  • E’ necessario utilizzare un circuito elettrico di pilotaggio
  • rendimento energetico basso
  • velocità di rotazione ridotta
  • costo di acquisto elevato

Per le caratteristiche tecniche, il principio di funzionamento e le modalità di connessione vi rimando all’articolo: Controllo di un motore passo-passo bipolare NEMA17 con Driver L298N

Negli sketch di esempio che troverete in questo articolo prendo in considerazione 3 tipologie di stepper: i piccoli stepper dei CD-ROM e dei DVD dei computer, 28BYJ-48 comuni in molti kit Arduino, e i NEMA 17.

Negli sketch di esempio che troverete in questo articolo prendo in considerazione 3 tipologie di stepper: i micro stepper dei CD-ROM e dei DVD dei computer, i 28BYJ-48 comuni in molti kit Arduino, e i nema 17.

Negli sketch troverete alcune parti commentate, togliendo il commento ad alcune linee di codice, potrete impostare il funzionamento per una delle tre tipologie di stepper.

Una delle attività svolte nello scorso anno scolastico dai miei allievi è stato il recupero di tutti gli stepper dei vecchi pc alienati della scuola, ciò mi ha permesso di realizzare velocemente tutta una serie di esercitazioni sull’uso dei motori passo passo.

Gli tutti gli stepper recuperati sono stati posti su supporti stampati in 3D e fissati su basette di compensato. L’utilizzo degli stepper dei CD-ROM consente inoltre di realizzare attività di progetto interessanti, come ad esempio piccoli plotter oppure dei laser engraver.

Raccomandazioni per i miei studenti

Punto 1

Ricordate di individuare le bobine di un motore passo passo, l’operazione è un po’ difficoltosa per i passo passo dei CD-ROM che in genere non sono identificati da colori o dalla posizione.
Prima di collegare il motore alla scheda motori è necessario individuare i cavi A+, A-, B+ e B- sul motore. La maniera migliore è quella di consultare la scheda tecnica del motore in cui vi è una corrispondenza tra colore filo e cavo. In alternativa potete utilizzare un multimetro in modalità ohmmetro e misurare la resistenza tra le coppie dei cavi, quando misurerete un valore tra i 2 e i 4 ohm tra due terminali avrete individuato una delle bobine.

Punto 2

Sempre per i passo passo dei CD-ROM i fili di collegamento sono saldati al motore ed il punto di saldatura è molto piccolo, inoltre i fili di collegamento sono sottili è molto alto il rischio di romperli. Per evitare ciò ho utilizzato una strategia semplice ed economica, un ponte con un mammut su cui collego poi i fili che vanno ad essere collegati alla breadboard, così come rappresentato nell’immagine.

Punto 3

La spiegazione del funzionamento di ogni sketch è dettagliata con commenti nello sketch e tutti gli esempi sono da considerare come base di partenza per le esercitazioni svolte in presenza.

Esempio 1

Controllo rotazione stepper da Serial Monitor mediante tastiera. Valori positivi rotazione oraria, valori negativi rotazione antioraria

// Prof. Michele Maffucci
// 20.10.2020

// Controllo rotazione stepper mediante tastiera
// valori positi rotazione oraria
// valori negativi rotazione antioraria

#include <Stepper.h>

int in1Pin = 12;
int in2Pin = 11;
int in3Pin = 10;
int in4Pin = 9;

/*
in1 L293D - pin 12 Arduino
in1 L293D - pin 11 Arduino
in1 L293D - pin 10 Arduino
in1 L293D - pin 9 Arduino
*/

// 200 per stepper 17PM-M041-P1 - 12 V - 1,8 gradi per step

// 200 per microstepper CDROM - 5 V - 1,8 gradi per step
// per evitare che slitti sul supporto impostare 170 come limite massimo

// 512 per stepper 28BY J-48 - 5 V - 5,525 gradi per step
// per questo stepper il valore passato non e' step/giro 
// per un giro completo 2048 step. 512 equivale ad 1/4 di giro 

// inizializzazione della libreria Stepper

const int stepPerGiro = 200;  // adattare al passo di rotazione del vostro stepper

Stepper myStepper(stepPerGiro, in1Pin, in2Pin, in3Pin, in4Pin);  
 
void setup()
{
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
  
  Serial.begin(9600);
  
  // rotazioni per minuto, funzione dello stepper a disposizione
  // e' un valore positivo.
  // la funzione setSpeed non fa ruotare il stepper, imposta solamente la velocita'
  myStepper.setSpeed(70);    // imposta la velocita' di rotazione a 20 rpm:
}

void loop()
{
  if (Serial.available())
  {
    int steps = Serial.parseInt();
    
    // valori positivi fanno girare il mySteppere in senso orario
    // valori negativi fanno girare il mySteppere in senso antioraio
    myStepper.step(steps);
  }
}

Esercizio 2

Realizzare uno sketch che permetta di contare il numero di passi di rotazione fissato il numero di step per passo. Si evidenzi il raggiungimento di un passo con l’accensione di un LED.

Si visualizzi sulla serial monitor il messaggio:

“PASSO” – passo rotazione modulo “MODULO” passo: “CONTATORE STEP”

sono variabili:

“PASSO”,
“MODULO”
“CONTATORE STEP”

Nell’esempio:

PASSO: numero sequenziale
MODUOLO: step per passo
CONTATORE STEP: modulo del passo

// Prof. Michele Maffucci
// 20.10.2020

// contatore passi
// il programma puo' pilotare stepper unipolari o bipolari
// il numero di passi fissato nella variabile moduloStep
// ad ogni passo viene rilevato anche da un LED

// 200 per stepper 17PM-M041-P1 - 12 V - 1,8 gradi per step

// 200 per microstepper CDROM - 5 V - 1,8 gradi per step
// per evitare che slitti sul supporto impostare 170 come limite massimo

// 512 per stepper 28BY J-48 - 5 V - 5,525 gradi per step
// per questo stepper il valore passato non e' step/giro 
// per un giro completo 2048 step. 512 equivale ad 1/4 di giro 


#include <Stepper.h>

const int stepPerGiro = 170;  // adattare al passo di rotazione del vostro stepper

// inizializzazione della libreria Stepper
Stepper myStepper(stepPerGiro, 12, 11, 10, 9);

int contatorePassi = 0;         // numero di step raggiunto
int moduloStep = 20;            // modulo rotazione stepper da 1 a numero massimo di passi
                                // se moduloStep = 1 diventa un contatore di step
int conta = 0;                  // conteggio fase

int ledPin = 7;                 // led rilevamento fase

void setup() {
  // inizializzazione porta seriale
  Serial.begin(9600);
  // imposta la velocita' di rotazione a 20 rpm
  myStepper.setSpeed(20);
  
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // passi di rotazione
  myStepper.step(moduloStep);
  Serial.print(conta);
  Serial.print(" - ");
  Serial.print("passo rotazione modulo ");
  Serial.print(moduloStep);
  Serial.print(" ");
  Serial.print("passo: ");
  Serial.println(contatorePassi);
  digitalWrite(ledPin, HIGH);
  conta++;
  contatorePassi=contatorePassi+moduloStep;
  if (contatorePassi &amp;gt; stepPerGiro){
    contatorePassi = 0;
    conta = 0;
  }
  delay(500);
  digitalWrite(ledPin, LOW);
}

Variante per stepper 28BY J 48

// Prof. Michele Maffucci
// 20.10.2020

// contatore passi
// il programma puo' pilotare stepper unipolari o bipolari
// il numero di passi fissato nella variabile moduloStep
// ad ogni passo viene rilevato anche da un LED

// in questo sketch si puo' effettuare le dovute correzioni per lo stepper
// 28BY J-48

// 200 per stepper 17PM-M041-P1 - 12 V - 1,8 gradi per step

// 200 per microstepper CDROM - 5 V - 1,8 gradi per step
// per evitare che slitti sul supporto impostare 170 come limite massimo

// 512 per stepper 28BY J-48 - 5 V - 5,525 gradi per step
// per questo stepper il valore passato non e' step/giro
// per un giro completo 2048 step. 512 equivale ad 1/4 di giro


#include <Stepper.h>

const int stepPerGiro = 512;  // adattare al passo di rotazione del vostro stepper

const int BY = 1;             // 1 uso di BY - 0 uso di altro motore passo passo

// inizializzazione della libreria Stepper
Stepper myStepper(stepPerGiro, 11, 9, 10, 8);

int contatorePassi = 0;         // numero di step raggiunto
int moduloStep = 512;           // modulo rotazione stepper da 1 a numero massimo di passi
// se moduloStep = 1 diventa un contatore di step
int conta = 0;                  // conteggio fase

int ledPin = 13;                 // led rilevamento fase

void setup() {
  // inizializzazione porta seriale
  Serial.begin(9600);
  // imposta la velocita' di rotazione a 20 rpm
  myStepper.setSpeed(70);

  pinMode(ledPin, OUTPUT);
}

void loop() {
  // passi di rotazione
  myStepper.step(moduloStep);
  Serial.print(conta);
  Serial.print(" - ");
  Serial.print("passo rotazione ");
  Serial.print("modulo ");
  Serial.print(moduloStep);
  Serial.print(" ");
  Serial.print("passo: ");
  Serial.println(contatorePassi);
  digitalWrite(ledPin, HIGH);
  contatore();
  delay(500);
  digitalWrite(ledPin, LOW);
}

// funzione che conta i passi in funzione dello stepper utilizzato
void contatore() {
  conta++;
  contatorePassi = contatorePassi + moduloStep;
  switch (BY) {
    case 0:
      if (contatorePassi &amp;gt; stepPerGiro) {
        contatorePassi = 0;
        conta = 0;
      }
      break;
    case 1:
      if (contatorePassi &amp;gt; stepPerGiro * 4) {
        contatorePassi = 0;
        conta = 0;
      }
      break;
  }
}

Esempio 3

Realizzare uno sketch che permetta di far compiere in modo continuo un giro completo in senso orario ed uno in senso antiorario.

Svolgere l’esercizio sia con lo stepper 28BY J-48 che con il microstepper del CDROM

Noterete che per il microstepper del CDROM il carrello giunto alla fine slitta, in quanto 200 step per rotazione sono troppi. Valutare (in modo empirico) quanti stemp sono necessari affinche il carrello non slitti e modificare lo sketch di conseguenza.

Variante 1

Fare in modo che al completamento di un giro venga acceso un diodo LED

Variante 2

Utilizzando il microstepper fare in modo che il verso di spostamento della slitta sia segnalato da due LED ed i LED siano accesi in modo alternato in funzione del verso di scorrimento della slitta

    • Direzione 1 – LED rosso acceso, LED verde spendo
    • Direzione 2 – LED rosso spento, LED verde acceso
// Prof. Michele Maffucci
// 20.10.2020

// rotazione oraria e antioraria sequenziale

/*
in1 L293D - pin 12 Arduino
in1 L293D - pin 11 Arduino
in1 L293D - pin 10 Arduino
in1 L293D - pin 9 Arduino
*/

// 200 per stepper 17PM-M041-P1 - 12 V - 1,8 gradi per step

// 200 per microstepper CDROM - 5 V - 1,8 gradi per step
// per evitare che slitti sul supporto impostare 170 come limite massimo

// 512 per stepper 28BY J-48 - 5 V - 5,525 gradi per step
// per questo stepper il valore passato non e' step/giro 
// per un giro completo 2048 step. 512 equivale ad 1/4 di giro

#include <Stepper.h>

const int stepPerGiro = 170;  // adattare al passo di rotazione del vostro stepper

// inizializzazione della libreria Stepper
Stepper myStepper(stepPerGiro, 12, 11, 10, 9);

void setup() {
  // inizializzazione porta seriale
  Serial.begin(9600);
  // imposta la velocita' di rotazione a 60 rpm:
  myStepper.setSpeed(60);
}

void loop() {
  // un giro completo in senso orario
  Serial.println("antiorario");
  myStepper.step(stepPerGiro);
  delay(500);
  
  // un giro completo in senso antiorario
  Serial.println("orario");
  myStepper.step(-stepPerGiro);
  delay(500);
}

Esempio 4

Realizzare uno sketch che permetta di far cambiare il senso di rotazione alla pressione di un pulsante.
Rilevare la pressione del pulsante con l’accensione del LED collegato al pin 13.
Si colleghi il pulsante al pin 2 di Arduino, secondo quanto specificato nello schema di seguito. Utilizzare per questo esercizio il microstepper.

// Prof. Michele Maffucci
// 20.10.2020

// Cambio direzione rotazione alla pressione di un pulsante

// il programma puo' pilotare stepper unipolari o bipolari
// il numero di passi  fissato nella variabile moduloStep
// ad ogni passo viene rilevato anche da un LED

// 200 per stepper 17PM-M041-P1 - 12 V - 1,8 gradi per step

// 200 per microstepper CDROM - 5 V - 1,8 gradi per step
// per evitare che slitti sul supporto impostare 170 come limite massimo

// 512 per stepper 28BY J-48 - 5 V - 5,525 gradi per step
// per questo stepper il valore passato non e' step/giro
// per un giro completo 2048 step. 512 equivale ad 1/4 di giro


#include <Stepper.h>

const int stepPerGiro = 200;  // adattare al passo di rotazione del vostro stepper

// inizializzazione della libreria Stepper
Stepper myStepper(stepPerGiro, 12, 11, 10, 9);

int contatorePassi = 0;         // numero di step raggiunto
int moduloStep = 10;            // modulo rotazione stepper da 1 a numero massimo di passi
                                // se moduloStep = 1 diventa un contatore di step

int moduloStepCorrente;         // variabile in cui memorizzare la direzione di rotazione corrente
                                // alla pressione del pulsante


const int pinPulsante = 2;      // pin a cui e' collegato il pulsante
const int ledPin = 13;          // pin a cui e' collegato il LED

int statoPulsante = 0;           // stato corrente del pulsante


void setup() {
  
  // inizializzazione pin a cui e' collegato il pulsante
  pinMode(pinPulsante, INPUT);
  
  // inizializzazione pin a cui e' collegato il LED
  pinMode(ledPin, OUTPUT);

  // imposta la velocita' di rotazione a 20 rpm
  myStepper.setSpeed(20);
}

void loop() {

  statoPulsante = digitalRead(pinPulsante);
  if (statoPulsante == HIGH) {
    digitalWrite(ledPin, HIGH);
    moduloStepCorrente = -moduloStep;
    myStepper.step(moduloStepCorrente);
  }
  else {
    digitalWrite(ledPin, LOW);
    myStepper.step(moduloStep);
  }
}

Progettare una nuova scuola – Corso gratuito on-line – Corso n. 1 – Potenziare la didattica digitale a distanza e integrata: tecnologie per la progettazione


Ho il piacere di annunciarvi che in questi mesi ho avuto l’onore di far parte del team di professionisti della formazione che la casa editrice La Tecnica della Scuola ha messo insieme per realizzare il progetto: Progettare una nuova scuola, la piattaforma dedicata ai corsi gratuiti per docenti e dirigenti in applicazione delle Linee guida anti Covid-19 del Ministero dell’Istruzione e del Ministero della Salute, per i nuovi bisogni formativi e per la nuova organizzazione della scuola.

Il Progetto formativo nasce dall’esigenza di rispondere ai nuovi bisogni nati in seguito all’emergenza da Covid-19 e al crollo delle certezze, dei punti fermi che avevano caratterizzato per decenni la struttura, i tempi e le modalità didattiche del sistema scolastico italiano. Il nuovo anno scolastico 2020/2021 si apre nell’incertezza sul futuro, ma poiché è necessario mantenere il valore formativo della scuola occorre avviare una progettazione sistematica e innovativa in collaborazione con il territorio, gli enti locali, le organizzazioni pubbliche e private nell’ottica della sussidiarietà.

Il progetto propone:

  • Dodici corsi on line
  • Oltre 60 ore di videolezioni
  • Risorse e materiali
  • Iscrizione gratuita
  • Con rilascio di attestato
  • Accessibile 24 ore su 24

Il mio contributo è stato nel realizzare tre corsi video:

  1. Potenziare la didattica digitale a distanza e integrata: tecnologie per la progettazione
  2. Potenziare la didattica digitale a distanza e integrata: videolezione e ambienti di apprendimento
  3. Potenziare la didattica digitale a distanza e integrata: produrre e gestire contenuti online

Attualmente è disponibile il primo corso, nel breve saranno pubblicati i restanti.

Una nuova avventura formativa che mi vede alle prese con una modalità di fare formazione online, che mi consentirà di sviluppare per i miei studenti nuove modalità di insegnamento. Molte le cose che ritengo si possano migliorare nella modalità in cui svolgo video lezioni in asincrono e per fare ciò come sempre tanta pazienza ed un passo al giorno.

Presentazione del primo corso:

Potenziare la didattica digitale a distanza e integrata: tecnologie per la progettazione

Presentazione

Come organizzare e progettare l’attività didattica? Passo fondamentale è acquisire capacità nel saper pianificare e organizzare attività.
Questa sezione raccoglie lezioni che illustrano come effettuare il “primo passo da compiere” per strutturare strategie e usare software di organizzazione e progettazione di facile utilizzo, gratuiti, utili nella progettazione didattica. Ogni attività lavorativa viene inserita in un sistema organizzato, che il docente costruisce, in grado di scindere ogni lavoro in unità elementari che possono essere affrontate una alla volta seguendo scansioni temporali precise adattabili in funzione delle proprie necessità. Strategie e software consigliati, possono condurre nel medio termine, all’acquisizione di abilità nella stima di sforzi e tempi per svolgere ogni singolo lavoro.

Punti tematici

Metodologie di organizzazione e gestione del tempo

  • Costruzione di liste attività
  • Gestire il tempo lavoro con la Tecnica del Pomodoro
  • GTD (Getting Things Done) – per organizzare ed eseguire con efficienza le attività da svolgere

Gestione appunti

  • Google Keep
  • Evernote
  • Strutturare il flusso di lavoro
  • Google Gmail
  • Google Calendar
  • Google Tasks
  • Trello

Formarsi e informarsi

  • Le basi della costruzione della propria rete di Mentor
  • Siti web di riferimento: tecnologie e metodologie
  • Tecniche efficaci di ricerca on-line con Google Search
  • Gruppi Facebook di insegnanti
  • Bacheche online con Pinterest
  • Feedly per costruire una collezione sempre aggiornata di fonti online

Obiettivi

Il corso si articola in lezioni in cui vengono presi in analisi diversi software con livelli diversi di complessità e di funzionalità in grado di coprire ogni tipologia di esigenza scolastica in cui è prevista una progettualità compresa anche la quantità di risorse necessarie: denaro, tempo e persone coinvolte. Gli strumenti software illustrati consentono di pianificare le fasi di un’attività didattica o più in generale di un progetto e decidere gli obiettivi con le parti interessate (docenti, studenti, personale Ata, ecc…), eseguire il piano di lavoro, gestire le risorse e i vincoli (ambito, tempi e costi) lungo il percorso.

Mappatura competenze

Attraverso questo percorso vengono acquisite

  • competenze di base per la gestione di un progetto didattico mediante l’uso di software specifico.
  • competenze nello sviluppo di soluzioni tecnologiche diverse per l’organizzazione del lavoro in ambito scolastico, condivisione delle fasi di progetto on line e gestione di contenuti didattici volte all’ottimizzazione dei tempi di lavoro e delle risorse con modalità di lavoro individuale e/o collaborativo e di comunicazione in sincrono e asincrono

Fare didattica laboratoriale con EduRobot Home


Sarà un anno scolastico complicato per realizzare attività di laboratorio… distanziamento fisico, uso delle attrezzature che dovranno essere continuamente sanificate, didattica digitale integrata e mille altre cose che limitano le attività nei laboratori degli ITIS e dei Professionali.
Per i ragazzi di terza superiore, per le esercitazioni di TPSEE e Sistemi, in questi giorni pensavo ai miei soliti kit, soluzioni trasportabili che mi permettono di far svolgere le esperienze di laboratorio in qualsiasi luogo della scuola. Una parte delle esercitazioni vorrei declinarle ad aspetti di automazione civile (un primo passo verso la domotica) da svolgere in modo divertente e che appassioni.

Utilizzerò prima Arduino che tutti gli allievi di tutte le mie classi posseggono in kit, aggiungeremo poi un controllo remoto via smartphone e poi si passerà al controllo con PLC, probabilmente Siemens Logo8. L’intera attività è ancora nella mia testa ma sicuramente si farà insieme alle altre parti del programma.
Le specifiche del kit sempre le solite: che stia sul banco di lavoro (480mm x 277mm), facilmente trasportabile, economico, di facile realizzazione (assemblaggio con colla vinilica o viti), da assegnare ad ogni singolo studente (importante!) e di compensato, in modo che possa essere prodotto rapidamente con il taglio laser che abbiamo a scuola. Ho realizzato una bozza del progetto a cui ho aggiunto una maniglia in modo che il kit possa essere traportato da un laboratorio all’altro come una valigetta.

Nei prossimi giorni proverò a realizzare il primo prototipo pensando anche ad alcune esercitazioni di base che possano in qualche modo far appassionare ancor di più i ragazzi. Ovviamente se il progetto risulta presentabile condivido con voi.
Aggiungo quindi alla famiglia EduRobot il piccolo progetto: EduRobot Home.

La seconda stagione di Rob-o-Cod da lunedì 5 ottobre su Rai Gulp (canale 42) e RaiPlay


Da lunedì 5 ottobre su Rai Gulp arriva la seconda edizione di “Rob-o-Cod”, il game show dedicato al coding e la robotica. Il programma, che sarà proposto dal lunedì al sabato, alle 18.30 su Rai Gulp, canale 42, sarà inoltre disponibile anche su RaiPlay. In scena vere e proprie sfide tra robot programmati da giovani studenti, scelti tra alcune delle scuole secondarie di primo grado italiane in cui il Coding è già inserito nei piani di studio.

Anche per questa edizione ho partecipato, insieme ad altre fantastiche persone, alla progettazione dei campi gara resi poi stupendi, come vedrete in TV, dal personale di Rai. Questo lavoro estremamente creativo fatto di: invenzioni, progettazione, gioco e Coding, mi ha permesso di immaginare una didattica assolutamente diversa che cercherò di sviluppare il più possibile con i miei studenti.

Le riprese delle gare, sono state completate a gennaio 2020, prima del lockdown. Adesso, con la ripresa delle scuole, il campionato di Rob-o-cod può finalmente andare in onda. Speriamo che questa nuova edizione sia di buon auspicio per un inizio di anno scolastico sereno, positivo e costruttivo.

“Rob-O-Cod” è un programma realizzato da Rai Ragazi in collaborazione con il Centro Ricerche Innovazione Tecnologica e Sperimentazione della RAI, scritto da Armando Traverso e Mario Bellina, con la collaborazione di Luca Vignaroli (Crits Rai) e la consulenza di Michele Maffucci. La regia è firmata da Andrea Apuzzo.

Per maggiori informazioni consultare la rassegna stampa sul sito Rai.

Curiosi di saperne di più? Qui qualche anticipazione:

Se lo desiderate potete condividere i vostri pensieri sul programma su Instagram con #rob_o_cod e taggando @rai_gulp, potete inviare video e foto dei vostri robot per entrate a far parte della comunità di robocoder!!

Ricordate:
#rob_o_cod  è tutto un programma!