Shield MODKIT |
|
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 |
Il programma utilizza le librerie:
stepper.h, per il comando del motore stepper
Wire.h e LiquidCrystal_I2C.h, per la gestione della tastiera
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.
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 |