Hola buenos días.
Tengo un motor de 220 V que funciona como carro de desplazamiento a lo largo de una carril.
Este carril cuenta con finales de carrera que que mandan señales al arduino para que este se detenga dependiendo de la posición seleccionada en una botonera.
El codigo es el siguiente
int contador= 1;
const int dirIzquierda = 52;
const int dirDerecha = 53;
const int sensorA = 4;
const int sensorB = 5;
const int sensorC = 6;
const int sensorD = 7;
const int sensorE = 8;
const int sensorF = 9;
const int botonA = 17;
const int botonB = 18;
const int botonC = 19;
const int botonD = 20;
const int botonE = 3;
const int botonF = 22;
const int luzA = 30;
const int luzB = 31;
const int luzC = 32;
const int luzD = 33;
const int luzE = 34;
const int luzF = 35;
const int botonder = 48;
const int botonizq = 49;
void setup() {
pinMode(dirIzquierda, OUTPUT);
pinMode(dirDerecha, OUTPUT);
pinMode(luzA, OUTPUT);
pinMode(luzB, OUTPUT);
pinMode(luzC, OUTPUT);
pinMode(luzD, OUTPUT);
pinMode(luzE, OUTPUT);
pinMode(luzF, OUTPUT);
pinMode(sensorA, INPUT);
pinMode(sensorB, INPUT);
pinMode(sensorC, INPUT);
pinMode(sensorD, INPUT);
pinMode(sensorE, INPUT);
pinMode(sensorF, INPUT);
pinMode(botonA, INPUT_PULLUP);
pinMode(botonB, INPUT_PULLUP);
pinMode(botonC, INPUT_PULLUP);
pinMode(botonD, INPUT_PULLUP);
pinMode(botonE, INPUT_PULLUP);
pinMode(botonF, INPUT_PULLUP);
pinMode(botonder, INPUT_PULLUP);
pinMode(botonizq, INPUT_PULLUP);
}
// POSICION A
// Establecer direccion de A
void movAizq (){
while (digitalRead(sensorA)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=1;
return;
}
void movAder (){
while (digitalRead(sensorA)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=1;
return;
}
// POSICION B
void movBizq (){
while (digitalRead(sensorB)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=2;
return;
}
void movBder (){
while (digitalRead(sensorB)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=2;
return;
}
// POSICION C
void movCizq (){
while (digitalRead(sensorC)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=3;
return;
}
void movCder (){
while (digitalRead(sensorC)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=3;
return;
}
// POSICION D
void movDizq (){
while (digitalRead(sensorD)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=4;
return;
}
void movDder (){
while (digitalRead(sensorD)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=4;
return;
}
// POSICION E
void movEizq (){
while (digitalRead(sensorE)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=5;
return;
}
void movEder (){
while (digitalRead(sensorE)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=5;
return;
}
// POSICION F
void movFizq (){
while (digitalRead(sensorF)!=LOW){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=6;
return;
}
void movFder (){
while (digitalRead(sensorF)!=LOW){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=6;
return;
}
void loop () {
digitalWrite (luzA,LOW);
digitalWrite (luzB,LOW);
digitalWrite (luzC,LOW);
digitalWrite (luzD,LOW);
digitalWrite (luzE,LOW);
digitalWrite (luzF,LOW);
digitalWrite (dirDerecha,LOW);
digitalWrite (dirIzquierda,LOW);
// Se pulsa el boton A
while (digitalRead (botonder) == HIGH){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);
}
while (digitalRead (botonizq) == HIGH){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);
}
// Se pulsa el boton A
if (digitalRead (botonA) == HIGH){
digitalWrite (luzA,HIGH);
if (contador>1){
movAizq ();
}
if (contador<1){
movAder ();
}
if (contador==1){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
// Se pulsa el boton B
if (digitalRead (botonB) == HIGH){
digitalWrite (luzB,HIGH);
if (contador>2){
movBizq ();
}
if (contador<2){
movBder ();
}
if (contador==2){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
// Se pulsa el boton C
if (digitalRead (botonC) == HIGH){
digitalWrite (luzC,HIGH);
if (contador>3){
movCizq ();
}
if (contador<3){
movCder ();
}
if (contador==3){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
// Se pulsa el boton D
if (digitalRead (botonD) == HIGH){
digitalWrite (luzD,HIGH);
if (contador>4){
movDizq ();
}
if (contador<4){
movDder ();
}
if (contador==4){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
// Se pulsa el boton E
if (digitalRead (botonE) == HIGH){
digitalWrite (luzE,HIGH);
if (contador>5){
movEizq ();
}
if (contador<5){
movEder ();
}
if (contador==5){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
// Se pulsa el boton F
if (digitalRead (botonF) == HIGH){
digitalWrite (luzF,HIGH);
if (contador>6){
movFizq ();
}
if (contador<6){
movFder ();
}
if (contador==6){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}
}
Funciona muy bien cuando no tengo el motor conectado al modulo relé, pero una vez lo conecto, el Arduino en ocasiones se reinicia o realiza funciones aleatorias.
Tengo alimentación independiente:
Una fuente de 9v para el Arduino
Una fuente de 5v para los sensores, botones y luces
Una fuente de 5v para el modulo relé