Hola, tengo un proyecto de una banda transportadora. Cuento con 6 sensores de reflectancia infrarroja E18-D80NK para las determinadas paradas de la banda, un modulo rele de estado solido de dos canales que cumple la función de alimentar un contactor a 24VAC, un arduino mega alimentado por una fuente de 9VDC, y dos botones para el reset y puesta en marcha de los motores.
Cuando no tengo conectado el motor al contactor, y realizo las respectivas pruebas, se ve como el contactor se activa y desactiva acorde a la programación, Cuando el motor es conectado al contactor, solo se para el motor cuando llega al ultimo sensor, presentando un fallo en la logica.
He tratado alimentar de manera independiente tanto los sensores como el modulo rele con fuentes de 9 VDC o de 5VDC y de ninguna de las dos maneras me ha funcionado, dejando las tierra tanto independietes como comunes.
int contador= 0;
const int luzmarcha=3;
const int luzreinicio=2;
const int luzmotor=4;
const int reset = 5;
const int marcha =6;
const int foto1 = 7;
const int foto2 = 8;
const int foto3 = 9;
const int foto4 = 10;
const int foto5 = 11;
const int motor1 = 28;
const int motor2 = 29;
void setup() {
pinMode(marcha, INPUT_PULLUP);
pinMode(foto1, INPUT);
pinMode(foto2, INPUT);
pinMode(foto3, INPUT);
pinMode(foto4, INPUT);
pinMode(foto5, INPUT);
pinMode(reset, INPUT_PULLUP);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
pinMode(luzmarcha, OUTPUT);
pinMode(luzreinicio, OUTPUT);
pinMode(luzmotor, OUTPUT);
}
void primeraestacion (){
digitalWrite (luzmarcha,HIGH);
while (digitalRead(foto1)!=HIGH){
digitalWrite (motor1,LOW);
digitalWrite (motor2,LOW);
}
contador=1;
return;
}
void segundaestacion (){
digitalWrite (luzmarcha,HIGH);
while (digitalRead(foto2)!=HIGH){
digitalWrite (motor1,LOW);
digitalWrite (motor2,LOW);
}
contador=2;
return;
}
void terceraestacion (){
digitalWrite (luzmarcha,HIGH);
while (digitalRead(foto3)!=HIGH){
digitalWrite (motor1,LOW);
digitalWrite (motor2,LOW);
}
contador=3;
return;
}
void cuartaestacion (){
digitalWrite (luzmarcha,HIGH);
while (digitalRead(foto4)!=HIGH){
digitalWrite (motor1,LOW);
digitalWrite (motor2,LOW);
}
contador=4;
return;
}
void final (){
digitalWrite (luzmarcha,HIGH);
while (digitalRead(foto5)!=HIGH){
digitalWrite (motor1,LOW);
digitalWrite (motor2,LOW);
}
contador=4; //SI SE QUIERE REINICIAR PONER CONTADOR EN 0
return;
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite (marcha,LOW);
digitalWrite (foto1,LOW);
digitalWrite (foto2,LOW);
digitalWrite (foto3,LOW);
digitalWrite (foto4,LOW);
digitalWrite (foto5,LOW);
digitalWrite (reset,LOW);
digitalWrite (motor1,HIGH);
digitalWrite (motor2,HIGH);
digitalWrite (luzmarcha,LOW);
digitalWrite (luzmotor,LOW);
digitalWrite (luzreinicio,LOW);
if (digitalRead (reset)== HIGH){
digitalWrite (luzreinicio,HIGH);
contador=0;
}
if (digitalRead (marcha)== HIGH){
if (contador ==0){
primeraestacion ();
}
if (digitalRead (marcha)== HIGH){
if (contador ==1){
segundaestacion ();
}
}
if (digitalRead (marcha)== HIGH){
if (contador ==2){
terceraestacion ();
}
}
if (digitalRead (marcha)== HIGH){
if (contador ==3){
cuartaestacion ();
}
}
if (digitalRead (marcha)== HIGH){
if (contador ==4){
final ();
}
}
}
}