Hola, soy nuevo en esto de Arduino y me gustaría que me ayudasen en el código para acabar de montar un ascensor de 3 pisos (de maqueta)
Tiene 1 motor nema 23 va alimentado con 12v
1 Arduino mega 2560
1 placa l293d
3 módulos pulsadores en exterior
3 sensores imantados
Hola,
Muestra lo que has hecho.
recuerde que cuando publique el código, colóquelo entre las etiquetas </>.
#include <Stepper.h> //Importamos la librería para controlar motores paso a paso
#define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso
// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, 9, 10, 11, 12); //Stepper nombre motor (número de pasos por vuelta, pins de control)
int voc = 2;
//Definicion sensores
int sensor0=6;
int sensor1=7;
int sensor2=8;
//Definicion botones de llamada
int boton0=3;
int boton1=4;
int boton2=5;
int b2 = 0;
int b1 = 0;
int b0 = 0;
void setup () {
Serial.begin(9600);
stepper.setSpeed(30);
pinMode(sensor0,INPUT);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
pinMode(boton0,INPUT);
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(voc,OUTPUT);
}
void loop () {
digitalWrite(voc,LOW);
int s0, s1, s2;
lecturasensores (&s0, &s1, &s2);
if (s0 == 1) {
b1 = digitalRead(boton1);
b2 = digitalRead(boton2);
if (b1 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s1 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(35);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
if (b2 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s2 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(30);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}
if (s1 == 1) {
b0 = digitalRead(boton0);
b2 = digitalRead(boton2);
if (b0 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s0 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
if (b2 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s2 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(30);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}
if (s2 == 1) {
b0 = digitalRead(boton0);
b1 = digitalRead(boton1);
if (b0 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s0 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
if (b1 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s1 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(-20);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}
}
void lecturasensores (int *s0,int *s1,int *s2) {
int e0, e1, e2;
//lectura y muestra de datos de los sensores
e0=digitalRead(sensor0);
delay(5);
e1=digitalRead(sensor1);
delay(5);
e2=digitalRead(sensor2);
delay(5);
//Filtrado de datos analogicos a digitales
if (e0==HIGH)
*s0=1;
else
*s0=0;
if (e1==HIGH)
*s1=1;
else
*s1=0;
if (e2==HIGH)
*s2=1;
else
*s2=0;
}
Lo que me ocurre también es cuando lo enciendo se traba el motor y no baja/sube ligeramente
Hola,
Este proyecto me parece un proyecto escolar.
Le recomiendo que comente lo que hace cada línea, para que cualquier persona que quiera ayudarlo con su código entienda lo que hace cada línea.
mineirina RV
Sii, ya lo pone
Hola,
Sigue este diagrama de flujo
En setup()
Leer sensores para saber dónde está el ascensor.
leer botones
En loop()
Si se activó un botón que no sea el sensor;
Reactivación del botón de bloques del piso llamado;
Arranca el motor en la dirección calculada + o -;
Nuevos bloqueos de accionamiento del motor;
Al llegar al suelo;
Puerta abierta;
Apague el indicador de movimiento;
Se detiene con el cálculo de millis() (sin demora());
Después de milis(); lanza nuevo movimiento;
mineirina RV
Moderador:
Por favor, lee las Normas del foro y edita tu Título usando uno que no contenga "Necesito Ayuda Arduino"
Tu título debe indicar la naturaleza de tu problema.