/*
Manconi
Autore: Alessandro Perego
HW: Arduino Mega 2560
*/
//////////////////////////////////////////////////////////////////////////////
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include "AccelStepper.h" // Library created by Mike McCauley at http://www.airspayce.com/mikem/arduino/AccelStepper/
// AccelStepper Setup
AccelStepper stepperX(1, 2, 3); // 1 = Interfaccia Driver // 2= STEP Pin // 3= DIR Pin
// Define Pin Finecorsa home
#define home_switch 22 // Finecorsa connesso al Pin 22
#define start 23 // Start connesso al Pin 7
// Variabili Stepper
long initial_homing=-1; // Usato per impostare home in avvio
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// Initalise the LCD
lcd.init();
// Turn on the LCD backlight
lcd.backlight();
Serial.begin(9600); // Apre la monitor seriale a 9600
pinMode(home_switch, INPUT_PULLUP); // PULLUP per usare resistenza interna arduino: Switch mette a massa 5V di Arduino
pinMode(start, INPUT_PULLUP); // PULLUP per usare resistenza interna arduino: Switch mette a massa 5V di Arduino
delay(5);
// Imposta velocità massima e accellerazione di home
stepperX.setMaxSpeed(100.0); // Imposta velocità massima di home (più è bassa e piu è preciso)
stepperX.setAcceleration(100.0); // Imposta accellerazione
// Inizia procedura di home all'avvio
lcd.print("Homing...");
while (digitalRead(home_switch)) {
stepperX.moveTo(initial_homing);
initial_homing--;
stepperX.run();
}
lcd.setCursor(0, 3);
lcd.println("Homing Completed");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sto impostando setCurrentPosition a Zero...");
stepperX.setCurrentPosition(0);
delay(3000);
lcd.clear();
lcd.print("La posizione di home attuale e:.....");
lcd.print(stepperX.currentPosition());
}
void loop() {
/*Una volta eseguito l'homing il motore si ferma in attesa di un ingresso digitale di "Start";
Quando Start=1 il motore parte in senso opporsto all'home con accelerazione e velocità massima per un numero definito di step (nella realtà il braccio compie massimo 30gradi)
raggiunto il valore di step predefinito il motore si ferma e inverte la rotazione. LA rotazione si fermerà quando sarà tornato alla posizione 0 o quando incontrerà il finecorsa)
*/
while (digitalRead(start)==LOW) {
stepperX.setMaxSpeed(40000.0); // Imposta velocità massima di home (più è bassa e piu è preciso)
stepperX.setAcceleration(40000.0); // Imposta accellerazione
stepperX.runToNewPosition(50);
lcd.print("La mia posizione attuale è:.....");
lcd.print(stepperX.currentPosition());
delay(50);
stepperX.setMaxSpeed(1000.0); // Imposta velocità massima di home (più è bassa e piu è preciso)
stepperX.setAcceleration(1000.0); // Imposta accellerazione
stepperX.runToNewPosition(0);
lcd.print("La mia posizione attuale è:.....");
lcd.println(stepperX.currentPosition());
}
}
Motore Staccafetta
Motore Catene
Motore Carro
Avanzamento
Pressamerce
Motore Piatto