Hola amigos foreros, auqnue tengo nociones de electricidad/electronica, el tema de la programación me cuesta sobre todo cuando nos vamos pidiendo exigencias.
la cuestión es que necesito controlar un motor paso a paso, para que haga la siguiente función/s:
Al encender Arduino, necesito que el motor se ponga el marcha y regrese a una posición ("TO HOME"), parándose cuando detecta la presencia un SENSOR inductivo.
(esta parte, aunque con la libreria Accelstepper voy haciendo prueba/error, parece que lo hace correcto), al menos que me digais lo contrario, o que puedo enfocarlo de otra manera, mejor y mas optimizada.
en el void loop, lo que pretendo es que, una vez finalizado el bucle del While del setup, necesito, que al accionar el pulsador (el cual en su estado inicial está en alto), el motor se vuelva a poner en marcha, y se pare cuando el sensor IR, estan enfrentados (fotodiodo/fototransistor).
No hagais mucho caso de la programación del void loop, porque voy trastocando continuamente, y al momento de insertarlo así lo tenia, pero evidentemente no me funcionaba.
la cuestión es que necesito controlar un motor paso a paso, para que haga la siguiente función/s:
Al encender Arduino, necesito que el motor se ponga el marcha y regrese a una posición ("TO HOME"), parándose cuando detecta la presencia un SENSOR inductivo.
(esta parte, aunque con la libreria Accelstepper voy haciendo prueba/error, parece que lo hace correcto), al menos que me digais lo contrario, o que puedo enfocarlo de otra manera, mejor y mas optimizada.
en el void loop, lo que pretendo es que, una vez finalizado el bucle del While del setup, necesito, que al accionar el pulsador (el cual en su estado inicial está en alto), el motor se vuelva a poner en marcha, y se pare cuando el sensor IR, estan enfrentados (fotodiodo/fototransistor).
No hagais mucho caso de la programación del void loop, porque voy trastocando continuamente, y al momento de insertarlo así lo tenia, pero evidentemente no me funcionaba.
Código:
/*Version 1.0 primera prueba 12-06-2020
* sensor infrarrojos y posicionamiento del motor paso a paso por Enrique Villasur.
*/
#include <LiquidCrystal.h>
#include <AccelStepper.h>
AccelStepper motorcabezal(1,13,12); // 1 = interfaz Easy Driver
// UNO Pin 13 conectado al pin STEP del Easy Driver (pasos).
// UNO Pin 12 conectado al pin DIR del Easy Driver (dirección).
const int pasos = 13;
const int direccion = 12;
int infrarrojos = 32;
//int voltaje = 36;
int selec =0;
int lectura = 0;
int lectura2 = 0;
int estado = 0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //(Rs,En,D4,D5,D6,D7).
const int enable = 11;
int pulsador = 10;
#define SENSORA 30 //Sensor Inductivo.
void setup() {
//pinMode(pasos, INPUT);
//pinMode(direccion, INPUT);
Serial.begin(9600);
pinMode(enable, OUTPUT);
digitalWrite(enable, LOW);
pinMode (pulsador, INPUT);
pinMode(infrarrojos, INPUT);
// pinMode(voltaje, OUTPUT);
lcd.begin(16,2); // Inicializar el LCD
lcd.setCursor(0,0);
lcd.print(" infrarrojos_1");
lcd.setCursor(0,1); // Cursor a linea 2, posicion 1
lcd.print("PRUEBA IRD");
delay (3000);
//motorcabezal.setSpeed(200.0); //velocidad queremos que permanezca constante.
motorcabezal.setMaxSpeed(600.0); // velocidad maxima permitida
motorcabezal.setAcceleration(200.0); //relación entre aceleración/desaceleración.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("POS_TO_HOME");
pinMode(SENSORA, INPUT); //determino la CONSTANTE "SENSOR1", como entrada.
//pinMode(SENSORB, INPUT); //determino la CONSTANTE "SENSOR2", como entrada.
while(digitalRead(SENSORA)==0)
{
motorcabezal.distanceToGo()== 0;
motorcabezal.moveTo(motorcabezal.currentPosition());
motorcabezal.setSpeed (600);
motorcabezal.run();
digitalWrite(enable, HIGH);
}
while(digitalRead(SENSORA)==1)
{
motorcabezal.distanceToGo()==0;
motorcabezal.moveTo(-motorcabezal.currentPosition());
motorcabezal.setSpeed (-650);
motorcabezal.run();
digitalWrite(enable, LOW);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HOME");
//motorcabezal.stop();
delay(1000);
}
// }
void loop() {
estado = digitalRead (pulsador);
//lectura = digitalRead (voltaje);
/*if (estado==HIGH) {
lcd.clear();
lcd.setCursor (0,0);
lcd.print ("AJUSTAR POSICION");
// motorcabezal.move(2000);
// motorcabezal.setSpeed(400);
delay (1000);
}
*/
if (lectura==0){
lectura=digitalRead (infrarrojos);
lcd.clear();
lcd.setCursor (0,0);
motorcabezal.move(2000);
motorcabezal.setSpeed(600);
lcd.print ("AJUSTANDO");
delay (1000);
if (lectura2==1){
lcd.clear();
lcd.setCursor (0,0);
motorcabezal.stop();
lcd.print ("AJUSTADO");
delay (1000);
/*
if ((estado == HIGH)&&(lectura==0)){
lcd.clear();
lcd.setCursor (0,0);
lcd.print ("AJUSTANDO");
//motorcabezal.stop();
motorcabezal.setSpeed(400);
motorcabezal.runSpeed();
delay (1000);
if ((estado==HIGH)&&(lectura==1)){
motorcabezal.stop();
lcd.clear();
lcd.setCursor (0,1);
lcd.print ("AJUSTADO");
//digitalWrite (voltaje, LOW);
*/
}
}
motorcabezal.runSpeed();
}