Problema al programar urgente

Hola buenas , tengo problemas para progamar mi codigo , es una banta transportadora con 3 sentores infrarojos, el probla que tengo es que no puedo sulucionar que cuando un objeto pase por el sensor se detengo un momentoy luego vuelva a moverse la banda , asi pasando otravez mas y al final se detenga por completo.

`int SOLENOIDE1 = 8;
int SOLENOIDE2 = 9;
int SOLENOIDE3 = 10;
int PARARBANDA = 11; 

int sensorposicion1 = 2;
int sensorposicion2 = 3;
int sensorposicion3 = 4;
int selectorposicion1 = 5;
int selectorposicion2 = 6;

int valor1 = 0;
int valor2 = 0;
int valor3 = 0;
int valor4 = 0;
int valor5 = 0;

void setup() {
 pinMode(SOLENOIDE1 , OUTPUT);
 pinMode(SOLENOIDE2 , OUTPUT);
 pinMode(SOLENOIDE3 , OUTPUT);
 pinMode(PARARBANDA , OUTPUT);

pinMode(sensorposicion1, INPUT);
pinMode(sensorposicion2, INPUT);
pinMode(sensorposicion3, INPUT);
pinMode(selectorposicion1, INPUT);
pinMode(selectorposicion2, INPUT);


}

void loop() {
 valor1 = digitalRead( sensorposicion1 );
 valor2  = digitalRead(sensorposicion2);
 valor3 = digitalRead( sensorposicion3 );
 valor4 = digitalRead ( sensorposicion1 );
 valor5 = digitalRead  (sensorposicion2 );

if
  (valor1 == LOW ) {
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE1, HIGH);
  delay (1000);
  digitalWrite(PARARBANDA, HIGH);
  digitalWrite(SOLENOIDE2, LOW);
  
  
  }

  else
  {
    digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE1, HIGH);
  }

  if
   (valor2 == LOW ){
    digitalWrite(PARARBANDA, HIGH);
  digitalWrite(SOLENOIDE2, LOW);
  delay (1000);
    
    
  }
  

}``

Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.


Como tu código no tiene un solo comentario, no entiendo esto

if (valor1 == LOW ) {
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE1, HIGH);
  ...

pero si valor1 == HIGH

else {
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE1, HIGH);
}

O sea, sacando lo del delay y etc. en el primer caso, hace la misma maniobra tanto por LOW como por HIGH.
¿No debería ser la maniobra inversa?
O sea, en un caso para la cinta y en el otro arranca (o mantiene en marcha).

Se ve raro...

1 Like

es una banda transportadora que contara con 3 sensores de presencia y en cada uno de ellos se debe parar la banda 1 segundo y al mismo tiempo que se para la banda debe activar una electro válvula de dosificación de producto durante 1 segundo y después de ese segundo de activación de la electro válvula debe volver a prender la banda transportadora hasta que llegue al próximo sensor y cuando llege al tercer sensor , se tiene que parar la banda por completo.

perdon si no lo puedo explicar mejor

El código es lo que deberías explicar, lo que quieres hacer ya lo entendí.

No sabemos si tus sensores se ponen en LOW o HIGH cuando detectan algo, no sabemos si las solenoides se activan con HIGH o con LOW, no sabemos qué es PARARBANDA...
¿Me explico?

Justamente porque entendí lo que quieres hacer es que no entiendo esa parte del código que señalé.

Si por LOW debe detener la banda no puede ser que por HIGH los pines se pongan en el mismo estado. Una secuencia está invertida pero, al desconocer cuales deben ser los estados correctos, no puedo decirte más que eso.

1 Like

mis 3 sensores (sensor posiscion 1 2 y 3) son normalmente cerrados por lo cual el estado LOW es que esta sensando presencia y las otras 2 entradas (selectorposicion 1 y 2) LOW sera ausencia.

//  DECLARACION DE SALIDAS DIGITALES PARA ELECTROVALVULAS DE INYECCION DE PRODUCTO.

int SOLENOIDE1 = 8;
int SOLENOIDE2 = 9;
int SOLENOIDE3 = 10;
int PARARBANDA = 11;


// DECLARACION DE ENTRADAS DIGITALES DE SENSORES DE POSICION Y DE SELECTOR DE 2 POSICIONES.

int sensorposicion1 = 2;
int sensorposicion2 = 3;
int sensorposicion3 = 4;
int selectorposicion1 = 5;
int selectorposicion2 = 6;


// ASIGNACION INICIAL DE VALORES PARA ENTRADAS DIGITALES ANTES DE LEERLOS.


int valor1 = 0;
int valor2 = 0;
int valor3 = 0;
int valor4 = 0;
int valor5 = 0;


void setup()
{

  
  // ASIGNACION DE SALIDAS DIGITALES.
  
  pinMode(SOLENOIDE1, OUTPUT);  //definir pin como salida
  pinMode(SOLENOIDE2, OUTPUT);  //definir pin como salida
  pinMode(SOLENOIDE3, OUTPUT);  //definir pin como salida
  pinMode(PARARBANDA, OUTPUT);  //definir pin como salida
 

  // ASIGNACION DE ENTRADAS DIGITALES.
 
  pinMode(sensorposicion1, INPUT);  //definir pin como entrada
  pinMode(sensorposicion2, INPUT);  //definir pin como entrada
  pinMode(sensorposicion3, INPUT);  //definir pin como entrada
  pinMode(selectorposicion1, INPUT);  //definir pin como entrada
  pinMode(selectorposicion2, INPUT);  //definir pin como entrada

}


void loop()
{
  
  
  // LECTURA DE ENTRADAS DIGITALES: SENSORES DE POSICION Y SELECTOR.
  
  valor1 = digitalRead( sensorposicion1 );
  valor2 = digitalRead(sensorposicion2 );
  valor3 = digitalRead( sensorposicion3 );
  valor4 = digitalRead( selectorposicion1 );
  valor5 = digitalRead( selectorposicion2 );
 

  
  //SI NO ESTA PRESENTE LA SEÑAL DEL SENSOR 1 MANDA PRENDER LA ELECTROVALVULA 1 POR 1 SEGUNDO Y MANDA PARAR LA BANDA. 

  if 
    (valor1 == LOW) {
    digitalWrite(PARARBANDA, LOW);
    digitalWrite(SOLENOIDE1, HIGH);
    delay (1000);
    }
    
    else 
    {
    digitalWrite(PARARBANDA, HIGH);
    digitalWrite(SOLENOIDE1, LOW);
    }
   
    
 //SI NO ESTA PRESENTE LA SEÑAL DEL SENSOR 2 MANDA PRENDER LA ELECTROVALVULA 2 POR 1 SEGUNDO Y MANDA PARAR LA BANDA. 

 if   
  (valor2 == LOW ){
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE2, HIGH);
  delay (1000);
  digitalWrite(PARARBANDA, HIGH);
  digitalWrite(SOLENOIDE2, LOW); 
 
}


}

no se como esclicartelo mejor

@cjrh_01 Hola buenas,
Puedes dejar el codigo en total? Es qué ahora solamente puedo encontrar eso:

(valor1 == LOW ) {
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE1, HIGH);
  delay (1000);
  digitalWrite(PARARBANDA, HIGH);
  digitalWrite(SOLENOIDE2, LOW);

Cuando el valor1 (sensor 1 ve un objeto) va a parar 1 segundo (delay(1000)) y va al siguiente funcion pararbanda, high, que significa? Va a empezar la banda otra vez, o qué?
Un saludo, dingsken.

Qué está conectado a PARARBANDA?

Veo que ya corregiste lo que te comenté, te faltó hacer arrancar la banda cuando termina el delay.

1 Like

@MaximoEsfuerzo Si, con el código tenemos ahora no arranca la banda, para solamente durante 1 segundo.

si ese es el funcionamiento

si es que no lo codifique mal , parar banda esta conectado a los sensor y al motor
, el codigo lo hice yo y un colega pero esa parte la hiso el

Están trabajando juntos?

Para el 3er. sensor pueden usar while() en lugar del delay()

if (valor3 == LOW ) {
  digitalWrite(PARARBANDA, LOW);
  digitalWrite(SOLENOIDE3, HIGH);
  while (valor3 == LOW) {  // se detiene hasta retirar la pieza
    valor3 = digitalRead( sensorposicion3 );
  }
  digitalWrite(PARARBANDA, HIGH);
  digitalWrite(SOLENOIDE3, LOW);
}

@cjrh_01 Puedes dejar su código aquí, entonces podemos ver lo que falta.

El código está en #1 y #7

1 Like

por lo que me comento mi compañero , al parecer si , estan trabajando juntos

int PARARBANDA = 11;
Cuando puesta
digitalwrite(PARARBANDA,HIGH);
después el delay como @MaximoEsfuerzo ha dicho va a empezar otra vez la banda.

oh okey , entonces con eso cren que ya este todo listo o le falte algun detalle

Lo que pregunté es si @cjrh_01 y @dingsken trabajaban juntos porque me pareció que uno respondía en lugar del otro.

Saludos