es posible conectar 3 sensores fotoelectricos en una placa arduino uno

hola a todos soy nuevo en esto y me gustaría saber si es posible conectar 3 sensores fotoelectricos en una sola placa arduino, se les agradecería su respuesta

Arduino UNO tiene desde 0 a 13 (no uso puerto serie para monitoreo Serie) son 14 pines y desde A0 a A5 otros 6 mas piens que puedes usar para leer sensores fotoelectricos. Podrias leer 20 sensores o bien usar elementos como integrados que amplian sus capacidades casi a un número que no vale la pena considerar. Me dices 100 te respondo si.

perdón no me exprese bien, mas bien lo que quiero es poner 5 sensores fotoelectricos conectados cada uno a un rele ya que el sensor envía una señal de mas de 12v y eso el rele solo me enviara una señal de 5v como si se tratara de un pulsador, ahora lo que quiero hacer es poner tres sensores en una barra vertical que me avise cuando algo pasa por enfrente de ellos y active o desactive los otro dos sensores restantes que estan mas adelante que activaran una electrovalvula que estará enfrente de ellos para separar tres tipos de cajas distintas.

cuando los tres sensores de la barra se activen los otros dos sensores restantes deben dejar de pasar la caja por una cinta transportadora hasta el final.

cuando solo se active dos(el de abajo y el de en medio) debe desactivar el sensor que esta en la primera electrovalvula dejando pasar hasta el segundo sensor que activara la electrovalvula y desviara la caja por otra cinta transportadora.

cuando se active solo el sensor de abajo debe activar el primer sensor de electrovalvula desviándola por otra cinta transportadora.

Hasta el momento solo llevo los sensores que activaran las electrovalvulas ya que los de la barra no se me imagina como tomar sus lecturas para que activen las electrovalvulas en el orden que describo mas arriba ya que en el caso de que pase una caja grande por los tres sensores se activaran todas las funciones que declare.

//SENSORES DE BARRA VERTICAL

//int fotoelectrico1=
//int fotoelectrico2=
//int fotoelectrico3=

//SENSORES QUE ACTIVAN ELECTROVALVULA

int fotoelectrico4=0;               //almacena el estado del fotoelectrico 4
int fotoelectricoAnt4=0;            //almacena el estado anterior del sensor
int fotoelectrico5=0;               //almacena el estado del fotoelectrico 5
int fotoelectricoAnt5=0;            //almacena el estado anterior del sensor
int estado=0;                       //0=electrovalvula 1 y 2 apagada, 1=led electrovalvula 1 y 2 apagada


void setup() {
 pinMode(2, OUTPUT);       //declara el pin 2 como salida hacia electrovalvuña1
 pinMode(4, OUTPUT);       //declara el pin 4 como salida hacia electrovalvula2
 pinMode(6, INPUT);          //declara el pin 6 como entrada
 pinMode(8, INPUT);          //declarA el pin 8 como entrada
}

void loop() {
 //electrovalvula1
 fotoelectrico4 = digitalRead(6); //lee si el fotoelectrico envia señal
 
 if((fotoelectrico4==HIGH)&&(fotoelectricoAnt4==LOW)){         //si el sensor fotoelectrico envia señal y antes no la enviava
   estado=1-estado;
   delay(40);               //pausa de 40 ms
 }
 fotoelectricoAnt4=fotoelectrico4;     //actualiza el nuevo estado del sensor 
 if(estado==1) {                       //si el estado es 1
   digitalWrite(2, HIGH);              //se enciende electrovalvula 1
 }
 else{                                 //si el estado es 0
   digitalWrite(2, LOW);               //se apaga electrovalvula1
 }
 //electrovalvula 2
 fotoelectrico5 = digitalRead(8);       //lee si el fotoelectrico envia señal
 
 if((fotoelectrico5==HIGH)&&(fotoelectricoAnt5==LOW)){         //si el sensor fotoelectrico envia señal y antes no la enviava
   estado=1-estado;
   delay(40);                          //pausa de 40 ms
 }
 fotoelectricoAnt5=fotoelectrico5;     //actualiza el nuevo estado del sensor
 if(estado==1) {                       //si el estado es 1
   digitalWrite(4, HIGH);              //se enciende electrovalvula 2
 }
 else{                                //si el estado es 0
   digitalWrite(4, LOW);              //se apaga electrovalvula2
 }
}

Vamos x el comienzo.
Sensor fotoeléctrico entrega 12V y tu como lo ingresas a la entrada del arduino? Usas un opto, usas un divisor resistivo?
Responde eso y luego vemos tu código.

Cada sensor activará un rele al que llegan los 12v de el sensor y la respuesta será de 5v hacia el arduino y enviarán una señal igual a la de un botón pulsador, y cada sensor llevará su propio rele por lo que la información q enviará cada sensor sólo será como si tuviese 5 botones distintos conectado cada uno de ellos a un pin configurado como entrada por sensor . Entonces tendré 5 pines de entrada y dos de salida

Vaya pero estas introduciendo rebotes en cada rele.
Yo de cada sensor fotoelectrico como barato usaría un divisor de tensión y como mas elaborado usaría un opto por cada sensor a la entrada del arduino.
Si quieres te sugiero como hacerlo en ambos casos.

AHora tienes 5 sensores Fotoelectricos que yo llamaré S1 a S5
S1 a S3 estan en la barra vertical. S1 abajo S2 medio S3 Arriba
S4 sensor 1er electroválvula
S5 sensor 2da electroválvula

Si S1 Y S2 Y S3 estan en HIGH => Dejo pasar CAJA.
Si S1 y S2 en HIGH S3 = LOW => S4 dehabilitado S5 habiltado y su activación decide el desvío de la caja
Si S1 = HIGH y S2 y S3 = LOW => S5 deshabilitado y S4 habilitado y desvía por otra cinta.

Mañana sigo.

Si más o menos así, exactamente eso necesito pero no se me ocurre como, lo de los sensores que estarán en la electrovalvula es para avisar q algo pasa por frente de ellas y deben activarse para desviarlo, los de los rebotes fue por si acaso ya q desconozco si los reles también producen rebotes al igual q los pulsadores, mucha gracias por responder si puedo adjuntar un dibujo de como sería más o menos el funcionamiento y de nuevo muchas gracias estare atento a tus comentarios

Mira es mas fácil de lo que imaginas.
Para que algo habilite o deshabilite lo único que debes usar es un flag. La condición X activa el flag o lo pone en true y la condición Y lo pone en false o lo desactiva.
en tu caso

if (S1 && S2 && !S3) // S4  dehabilitado S5 habiltado y su activación decide el desvío de la caja
   // y acá va lo que tu hiciste para S4

del mismo modo el otro caso

1 Like

Pero la condición sólo podría desactivar la electrovalvula ya que no veo como desconectar un sensor q este como entrada y ese sensor es el único q puede mover la electrocalvula, no se si me explico

No desconectas el sensor sino su acción. Si no le permites que accione la Electroválvula no actúa.

Permiteme sugerirte que modifiques la asignación de pines.

const byte valv1 = 2;
const byte valv2 = 4;
//SENSORES QUE ACTIVAN ELECTROVALVULA

byte S4    	= 0;               //almacena el estado del S 4
byte SAnt4 	= 0;            //almacena el estado anterior del sensor
byte S5 	= 0;               //almacena el estado del S 5
byte SAnt5 	= 0;            //almacena el estado anterior del sensor

te sugiero esto

const byte S1 = 2;
const byte S2 = 3;
const byte S3 = 4;
const byte S4 = 5;
const byte S5 = 6;

const byte valv1 = 7;
const byte valv2 = 8;

o algo similar
Ahora observando lo que haces con la variable estado, no me termina de convencer que este bien.
S4 y S5 controlan el cambio de estado pero terminas accionando solo con una electroválvula asi que no esta bien.
S4 debe accionar Valv1 y S5 debe accionar Valv2 y ambas deben permanecer apagadas para que la caja siga cuando S1, S2 y S3 estan todas ON.
Es asi>?
Prueba este código

const byte pinS1 	 = 2;		// Sensor barra vertical bajo
const byte pinS2 	 = 3;		// Sensor barra vertical medio
const byte pinS3 	 = 4;		// Sensor barra vertical alto

const byte pinS4 	 = 5;		// Sensor fotoelectrico Valvula 1
const byte pinS5 	 = 6;		// Sensor fotoelectrico Valvula 2

const byte valv1 = 7;
const byte valv2 = 8;

//SENSORES QUE ACTIVAN ELECTROVALVULA

byte S1    		= 0;             // almacena el estado del S1
byte SAnt1 		= 0;             // almacena el estado anterior del sensor
byte S2    		= 0;             // almacena el estado del S2
byte SAnt2 		= 0;             // almacena el estado anterior del sensor
byte S3    		= 0;             // almacena el estado del S3
byte SAnt3 		= 0;             // almacena el estado anterior del sensor


byte S4    		= 0;             // almacena el estado del S4
byte SAnt4 		= 0;             // almacena el estado anterior del sensor
byte S5 		= 0;             // almacena el estado del S5
byte SAnt5 		= 0;             // almacena el estado anterior del sensor

byte estado1 	= 0;             // 0=electrovalvula 1 y 2 apagada, 1=led electrovalvula 1 y 2 apagada
byte estado2	= 0;             // 0=electrovalvula 1 y 2 apagada, 1=led electrovalvula 1 y 2 apagada
byte HabilitoS4 = false;
byte HabilitoS5 = false;

void setup() {
 	pinMode(valv1, OUTPUT);       //declara el pin 2 como salida hacia electrovalvuña1
 	pinMode(valv2, OUTPUT);       //declara el pin 4 como salida hacia electrovalvula2

 	pinMode(pinS1, INPUT);          //declara el pin del sensor S1
 	pinMode(pinS2, INPUT);          //declara el pin del sensor S2
 	pinMode(pinS3, INPUT);          //declara el pin del sensor S3
 	pinMode(pinS4, INPUT);          //declara el pin del sensor S4
 	pinMode(pinS5, INPUT);          //declara el pin del sensor S5 	 	 	
}

void loop() {
 
	leo_sensores();
	 
	if (estado1) {                       	// si el estado es 1
	   digitalWrite(valv1, HIGH);           // se enciende electrovalvula 1
	}
	else{                                 	// si el estado es 0
	   digitalWrite(valv1, LOW);               	// se apaga electrovalvula1
	}	
	 
	if (estado2) {                       	// si el estado es 1
	   digitalWrite(valv2, HIGH);           // se enciende electrovalvula 2
	}
	else{                                	// si el estado es 0
	   digitalWrite(valv2, LOW);            // se apaga electrovalvula2
	}
}

void leo_sensores() {
	S1 = digitalRead(pinS1);		// lee si el S1 envia señal
	S2 = digitalRead(pinS2);		// lee si el S2 envia señal
	S3 = digitalRead(pinS3);		// lee si el S3 envia señal
	S4 = digitalRead(pinS4); 		// lee si el S4 envia señal
	S5 = digitalRead(pinS5);       	// lee si el S5 envia señal

	// tal vez haga falta un antirebote para cada sensor.
	 
	if (S1 && S2 && S3) {   
	 	// dejo pasar la caja
	 	HabilitoS4 = false;
	 	HabilitoS5 = false;
	}

	if (S1 && S2 && !S3) {   
	 	HabilitoS4 = true;
	 	HabilitoS5 = false;
	}

	if (S1 && !S2 && !S3) {   
	 	HabilitoS4 = false;
	 	HabilitoS5 = true;
	}	

	if (HabiitoS4 && S4 == HIGH && SAnt4 == LOW) {   // si el sensor S envia señal y antes no la enviava
	   estado1 = !estado1;
	   delay(40);               			// pausa de 40 ms
	}
	 
	SAnt4 = S4;     						// actualiza el nuevo estado del sensor 
	 
	if (estado1) {                       	// si el estado es 1
	   digitalWrite(valv1, HIGH);           // se enciende electrovalvula 1
	}
	else{                                 	// si el estado es 0
	   digitalWrite(valv1, LOW);               	// se apaga electrovalvula1
	}
	 
	if (HabiitoS5 && S5==HIGH && SAnt5 == LOW){         	// si el sensor S envia señal y antes no la enviava
	    estado2 = !estado2;
	    delay(40);                          // pausa de 40 ms
	}

	SAnt5 = S5;     						// actualiza el nuevo estado del sensor
}

algo así estaba pensadndo pero no se me ocurría como hacerlo, ya que no vi nada parecido en los tutoriales y manuales en google, muchas gracias probare y vere como va, también vere si los reales generan rebotes para incluir algun código para el debounce, gracias por la respuesta

Me preocupa que como tu pones cada sensor a un relé, éste (el relé) rebote. Por eso puse por ahi una leyenda.. cuidado con los rebotes de S1 S2 y S3.
Si ocurren podemos usar una librería que yo uso que simplifica el código garantizando que cada cambio ocurre con seguridad. Lo mismo que has hecho tu con S4 y S5.

el problema es que el proyecto no es mío es de un amigo de mi hermano que vive en otra ciudad y estudia ing. en electricidad y el decidido poner los reles que se alimentan de los 5v de la placa arduino por que le pregunte cuanto voltage generaban los sensores y me dijo que 12v. a lo que respondí que con eso quemaría el arduino y esa fue una solución que no se si fue apropiada para lo que necesitaba. ahora veré si los reles le generan alguna rebote y probare lo que me a dicho, muchas gracias