Automazione: Divisore Elettronico semplice con schermo LCD

logo

A cura di Davide Munaretto

Cominciamo ad entrare nel merito di come creare un codice che ci permetta di impostare un numero di divisioni e di comunicare al motore di quanti passi si deve muovere per poterle ottenere.

La logica di programma segue gli esempi visti fino a questo momento con l’aggiunta in questo esempio della formula base per il calcolo degli step da percorrere in funzione del numero di divisioni.

Nelle prossime puntate vedremo come abbinare una tastiera e come poterla utilizzare per l’inserimento diretto dei parametri che ci necessitano.

/* Codice che permette di controllare un Motore Passo_Passo o un ServoMotore
* facendolo ruotare in base al numero di divisioni che andiamo ad impostare.
* ServoMotore da 800 Step/giro con Encoder 1000 linee
* con visualizzazione dei parametri su schermo LCD I2C */

// 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

int StepTeorici = 0;
int Div = 2; // Imposta il numero di divisioni desiderate
int Microstep = 800; // Step per giro del Motore

// 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);

StepTeorici = Microstep / Div; //Calcolo numero di passi Teorici per ogni divisione
}

void loop() {
// Setta la posizione corrente a 0:
stepper.setCurrentPosition(0);

lcd.setCursor(0, 2); // posiziona il cursore nella prima colonna della seconda riga.
lcd.print(“Partenza: “); lcd.print(stepper.currentPosition()); // Stampa la scritta “Partenza”  e la posizione.
lcd.setCursor(0, 0); // posiziona il cursore nella prima colonna della prima riga.
lcd.print(“Divisioni totali: “); lcd.print(Div); // Stampa il numero di divisioni impostate
delay(1500);

// Fa ruotare il motore a 1500 steps/secondo fino al raggiungimento dei passi teorici:
while(stepper.currentPosition() != StepTeorici)
{
stepper.setSpeed(1500);
stepper.runSpeed();
}
lcd.setCursor(0,2); // posiziona il cursore nella prima colonna della seconda riga.
lcd.print(“Step Percorsi: “); lcd.print(stepper.currentPosition()); // Stampa la scritta “Step Percorsi” e la posizione
delay(1000);
lcd.clear();
}