Shield MODKIT
MotoProto
Comando motore stepper
ultimo aggiornamento 29 marzo 2015


JLCPCB - 10 PCB per $ 2 (100 * 100 mm, 2-layer)
Il più grande produttore di PCB in Cina, oltre 600.000 clienti e oltre 10.000 ordini online al giorno
Produzione veloce in sole 24 ore e preventivo online gratuito: https://jlcpcb.com/quote


Nel progetto è visibile il comando di un piccolo motore stepper bipolare recuperato da un vecchio floppy disk effettuato mediante lo Shield modkit motoproto
Il comando del motore è effettuato tramite una piccola tastiera con 4 tasti auto costruita, per un ulteriore comando viene utilizzato il pulsante già presente sullo Shield Modkit MotoProto. Nel programma sono implementati i seguenti comandi: Start, Stop, Rotazione destra, Rotazione sinistra, Rotazione veloce.
Allo shield è anche collegato un display LCD 16x2 retroilluminato comandato tramite il bis I2C, che mostra la funzione in uso sulla scheda.

Arduino UNO R3 smd

modkit MotoProto

Modulo tastiera Modulo Display I2c Stepper bipolare

OurPCB, your most reliable PCB and PCBA supplier.

Il programma utilizza le librerie:

Occorre definire all'inizio del programma la variabile #define motorSteps, nel nostro caso impostata a 200.  Per calcolare il valore, occorre sapere l'angolo di rotazione del motore per ogni passo, se fosse per esempio di 1.8°, occorre dividere 360° (una rotazione completa) per 1.8° uguale appunto a 200 passi.
Per variare la velocità di rotazione, occorre agire sul valore associato a
myStepper.setSpeed.
Oltre ai 4 tasti della piccola tastiera è stato utilizzato quello presente sulla scheda, già connesso internamente al pin 12.


Programma
Prova_stepper_1

 

 

 

Schema della sezione driver dei motori

Il circuito pilota del motore è basato sull'integrato  H-bridge L298  che può pilotare motori con assorbimento sino a 2A per canale. La scheda è alimentata dalla stessa linea Vin proveniente dalla scheda Arduino, include dei LED blu e gialli per indicare la direzione attiva, e tutte le linee in uscita sono protette da diodi Schottky tipo MBRA140

 

/*####################################################################
 FILE: procva_stepper_1.ino
 VERSION: 1.0
 Descrizione: Programma prova motore stepper con utilizzo di
 tastiera e visione dei messaggii su un display LCD collegato
 tramite I2c 
 
 Ultima modifica il 29/3/2015
 Applicazione realizzata da Adriano Gandolfo
 Sito https://www.adrirobot.it 
 Blog http://it.emcelettronica.com/author/adrirobot
 
 This example code is in the public domain.
 
 Pin per shield MotoProto
 Pin 2  -> Direzione Motore A
 Pin 4  -> Direzione Motore B
 Pin *3 -> Abilita Motore A
 Pin *5 -> Abilita Motore B
 Pin 8 -> Collegamento pulsante Start
 Pin 9 -> Collegamento pulsante Stop
 Pin 10 -> Collegamento pulsante rotazione ORARIA
 Pin 11 -> Collegamento pulsante rotazione ANTIORARIA
 Pin 12 -> Collegamento pulsante alta velocità
 Pin 13 -> Collegamento led su scheda  
 
 ####################################################################*/

#include <Stepper.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Imposta l'indirizzo del display a 0x27 per 16 caratteri per 2 linee
LiquidCrystal_I2C lcd(0x27,16,2);  

#define motorSteps 200
// Da cambiare in funzione del tipo di motore
// rappresenta il numero di passi per fare un giro

//Definizione pin
#define motorPin1 2
#define motorPin2 4
#define pwmA 3
#define pwmB 5

#define P_Start 8 // Collegamento pulsante Start - Tastiera
#define P_Stop 9  // Collegamento pulsante Stop - Tastiera
#define P_DX 10   // Collegamento pulsante rotazione ORARIA - Tastiera
#define P_SX 11   // Collegamento pulsante rotazione ANTIORARIA - Tastiera
#define vel 12    // Collegamento pulsante alta velocità - Su scheda
#define ledPin 13 // Numero della porta a cui è collegato il LED

int buttonState = 0;       // Variable per la lettura dello stato del pulsante
int dir=1;

// initializza la libreria stepper
Stepper myStepper(motorSteps, motorPin1,motorPin2); 

void setup() {
  lcd.init();// inizializza il display
  lcd.backlight();//accende la retroilluminazione
  pinMode(ledPin, OUTPUT); // Inizializza il pin del LED come uscita     
  pinMode(P_Start, INPUT); // Impostazione PIN ingresso
  pinMode(P_Stop, INPUT);  // Impostazione PIN ingresso
  pinMode(P_DX, INPUT);    // Impostazione PIN ingresso
  pinMode(P_SX, INPUT);    // Impostazione PIN ingresso
  pinMode(vel, INPUT);     // Impostazione PIN ingresso
  digitalWrite(vel, HIGH);// Attiva resistenza di pull-up 

  myStepper.setSpeed(10); // Imposta la velocità di rotazione

  lcd.setCursor(0, 0);
  lcd.print("Gestione stepper");
  lcd.setCursor(0, 1);
  lcd.print("adrirobot");
  delay (1000);
  lcd.setCursor(0, 0);
  lcd.print("STOP            ");
  lcd.setCursor(0, 1);
  lcd.print("                "); 
}

void loop() {
  if (digitalRead(P_Start) == HIGH)
  {
    lcd.setCursor(0, 0);
    lcd.print("RUN             ");
    digitalWrite(pwmA, HIGH);
    digitalWrite(pwmB, HIGH);
    delay(100);

  }
  if (digitalRead(P_Stop) == HIGH)
  {
    lcd.setCursor(0, 0);
    lcd.print("STOP            ");
    digitalWrite(pwmA, LOW);
    digitalWrite(pwmB, LOW);
    delay(100);
  }
  if (digitalRead(P_DX) == HIGH) 
  {     
    lcd.setCursor(0, 1);
    lcd.print("R Oraria        ");
    dir= 1; // Rotazione oraria
  }
  if (digitalRead(P_SX) == HIGH)
  {     
    lcd.setCursor(0, 1);
    lcd.print("R Antioraria    ");
    dir= -1; // Rotazione antioraria
  }

  if (digitalRead (vel) == LOW) {     
    // Alta velocità:    
    digitalWrite(ledPin, HIGH);  
    myStepper.setSpeed(50); // Imposta la velocità di rotazione
  } 
  else {
    // Bassa velocità:
    digitalWrite(ledPin, LOW); 
    myStepper.setSpeed(10); // Imposta la velocità di rotazione
  } 
  myStepper.step(dir); // Rotazione oraria
}

 

Elenco revisioni

28/03/2015

Emissione preliminare