Huerto e Invernadero automatizados con web de control remota

Buenas,

Después de unos dias sin actualizar estoy centrado en la parte del motor paso a paso.
Para ello he comprado un EasyDriver, que conecto de la siguiente forma:

Lo alimento con un transformador de 12v y 1 amperio.

El código que utilizo de momento es muy sencillo, un ejemplo encontrado en la web

#define STEPS 200
#define NUNVUELTAS 100
const int openDirection = STEPS * NUNVUELTAS;
const int closeDirection = STEPS * NUNVUELTAS * -1;

int DIR_PIN = 6; //Direction pin
int STEP_PIN = 7; //Stepper pin

void setup() {
  Serial.begin(9600);

  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
}

void loop() {
   rotate(openDirection, getVelocity());
   delay(2000);

   rotate(closeDirection, getVelocity());
   delay(4000);
}

void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) – (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest – Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);

digitalWrite(DIR_PIN,dir);

float usDelay = (1/speed) * 70;

for(int i=0; i < steps; i++){ 
  digitalWrite(STEP_PIN, HIGH); 
  delayMicroseconds(usDelay); 
  digitalWrite(STEP_PIN, LOW); 
  delayMicroseconds(usDelay); 
  }
}

He detectado los siguientes problemas:

  • El Easydriver se calienta muchísimo, es normal?, creéis que seria mejor poner un rele para cortar la alimentación al EasyDriver cuando no se esta utilizando?

  • No puedo modificar la velocidad, Os adjunto 2 videos, uno a velocidad 1 (Se supone que el máximo) donde el motor funciona correctamente. Luego bajo la velocidad a 0.50 y el motor se comporta erróneamente

Video 1

Video2

Otras dudas que tengo:

  • Quiero poner 6 switch de 3 posiciones con 2 led cada uno, de esta forma puedo abrir/automático/cerrar la válvula del riego de cada sección de forma manual. Como puedo hacer la conexión?, necesito 2 puertos analógicos por switch o 4 sumándo los leds?

  • He comprado un teclado 4x4, quiero utilizarlo para modificar variables insitu sin necesidad de desmontarlo y conectarlo al ordenador. Me gustaría hacerlo con interrupciones, para tener el código mucho mas legible y he visto que puedo hacerlo conviertiendolo para usar el bus I2C con esto:

PCF8574, es viable?

Un saludo y gracias