Automazione: Gestione e connessione schermo LCD (Seconda parte)

logo

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
}