A cura di Davide Munaretto
Nella parte precedente abbiamo visto come collegare e gestire un monitor LCD con Arduino, ora cominciamo a vedere come interfacciarlo con un servomotore per visualizzare i parametri di rotazione che abbiamo impostato nel codice di programma.
Cominciamo prendendo in esame il primo esempio proposto in questo corso che trovate qui:
Automazione: Programmare e pilotare i Motori Passo_Passo e i Servomotori (Prima parte)
Il motore compie tre rotazioni differenti coprendo un numero di passi stabilito in fase di programmazione.
Il codice che segue ci consente di inviare e visualizzare sul monitor le fasi dei vari spostamenti.
/* Codice che permette di controllare un Motore Passo_Passo o un ServoMotore
* facendolo ruotare in senso orario/antiorario e con velocità diverse
* con visualizzazione dei parametri su schermo LCD I2C
* ServoMotore da 800 Step/giro con Encoder 1000 linee
*/
// Include le librerie:
// LiquidCrystal_I2C.h
// Wire per comunicare con I2C
// AccelStepper:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
// Connessione del modulo I2C: pin SDA connesso ad A4 e pin SCL ad A5.
// Monitor LCD 20×4 I2C
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); // per monitor LCD 16×2 cambiare con (0x27,16,2).
// Definizione dei pin di connessione del motore e delle interfacce motore nel caso vi fossero più di un motore.
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1
// Crea l’istanza AccelStepper:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Inizializza LCD:
lcd.init();
lcd.backlight();
// Stabilisce la massima velocità in steps per secondi:
stepper.setMaxSpeed(1500);
}
void loop() {
// Setta la posizione corrente a 0:
stepper.setCurrentPosition(0);
lcd.setCursor(0, 0); // posiziona il cursore nella prima colonna della prima riga.
lcd.print(“Partenza: “); lcd.print(stepper.currentPosition());// Stampa la scritta “Partenza” e la posizione
delay(3000);
// Fa ruotare il motore a 1500 steps/secondo fino al raggiungimento di 400 steps (1/2 giro):
while(stepper.currentPosition() != 400)
{
stepper.setSpeed(1500);
stepper.runSpeed();
}
lcd.setCursor(0,0); // posiziona il cursore nella prima colonna della prima riga.
lcd.print(“Step Percorsi: “); lcd.print(stepper.currentPosition());// Stampa la scritta “Step Percorsi” e la posizione
delay(2000);
// Resetta la posizone a 0:
stepper.setCurrentPosition(0);
// Fa ruotare il motore in senso opposto a 400 steps/secondo fino al raggiungimento di -200 steps (1/4 di giro):
while(stepper.currentPosition() != -200)
{
stepper.setSpeed(-400);
stepper.runSpeed();
}
lcd.setCursor(0,0); // posiziona il cursore nella prima colonna della prima riga.
lcd.print(“Step Percorsi: “); lcd.print(abs(stepper.currentPosition())); // Stampa la scritta “Step Percorsi” e la posizione
delay(2000);
// Resetta la posizone a 0:
stepper.setCurrentPosition(0);
// Fa ruotare il motore in senso opposto a 100 steps/secondo fino al raggiungimento di 600 steps (3/4 di giro):
while(stepper.currentPosition() != 600)
{
stepper.setSpeed(100);
stepper.runSpeed();
}
lcd.setCursor(0,0); // Posiziona il cursore nella prima colonna della prima riga.
lcd.print(“Step Percorsi: “); lcd.print(stepper.currentPosition()); // Stampa la scritta “Step Percorsi” e la posizione
delay(3000);
lcd.clear(); // Cancella LCD
}