Go Down

Topic: [SOLUCIONADO] Sensibilidad de Arduino UNO (Read 2392 times) previous topic - next topic

panasys

Jan 22, 2015, 01:27 am Last Edit: Jan 26, 2015, 06:30 pm by panasys
Hola, es mi primer post.

Estoy armando algo muy simple, pongo en 1 la entrada 1 a traves de un pulsador y hago que la salida 8 se ponga en 1 para activar un rele.

Algo muy simple, lo repito con otras 4 entradas y salidas.

Al pasar el dedo por el controlador se activan las salidas !

Esto me hace pensar que es muy sensible la placa, que pasa entonces si la pongo en un gabinete donde hay otras corrientes altenras y de 220v a unos 20 centimetros.

Es un gran problema porque como hago para que trabaje en un lugar donde hay tensiones superiores y corrientes dando vueltas, alguien tiene experiencia en esto?.

Basicamente quiero que comande electrovalvulas de 24v, pero esos 24 v son el alterna y cerca va a tener un toma de 220v para la fuente de 9vcc.

Estoy algo preocupado por el proyecto si me cuentan de sus experiencias se los agradecere.

Saludos

Javier

max_saeta

Saludos
Como pretendes ayuda si no colocas codigo ni esquemas de conecciones??????

carmeloco

#2
Jan 22, 2015, 10:58 am Last Edit: Jan 22, 2015, 10:59 am by carmeloco
Tiene toda la pinta de que te faltan resistencias pull up, o pull down en las entradas. Puedes activar las pull up internas de arduino por comodidad.

Y como dijo Max, por favor, pon el código (usando el tag de la hoja con los símbolos <>) y el esquema de conexiones.

panasys

Bueno ahora mejoro la consulta:

Este es el codigo:

Code: [Select]
int Estado1 = 0;
int Estado2 = 0;
int Estado3 = 0;
int Estado4 = 0;
int Estado5 = 0;

void setup()
{
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
 
void loop()
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);

Estado1 = digitalRead(3);
Estado2 = digitalRead(4);
Estado3 = digitalRead(5);
Estado4 = digitalRead(6);
Estado5 = digitalRead(7);

if (Estado1 == 0) { digitalWrite(8,LOW); } else { digitalWrite(8,HIGH); }
if (Estado2 == 0) { digitalWrite(9,LOW); } else { digitalWrite(9,HIGH); }
if (Estado3 == 0) { digitalWrite(10,LOW); } else { digitalWrite(10,HIGH); }
if (Estado4 == 0) { digitalWrite(11,LOW); } else { digitalWrite(11,HIGH); }
if (Estado5 == 0) { digitalWrite(12,LOW); } else { digitalWrite(12,HIGH); }

}


No puedo abrir 123dcircuit asi que les envio unas imagenes:

En la primera imagen, los led 4 y 5 en el protoboard estan encendidos y recien conectaba la placa, se supone que deben estar apagados.


Ahora toco el micro y se encienden todos los leds !!! sin activar las salidas.



Me pueden orientar con lo de resistencias pull up / pull down? Soy eletromecanico, trabajo con PLC pero en electronica soy un novato. Gracias por la info.

Javier

panasys

Excelente con lo que me comentaron, con las pull up / down, directamente leo en las entradas 0 y no 1 que vienen con cargas estaticas o parasitas que me ponen en 1 solas.

Ahora tengo todas en HIGH y mando con 0 a las entradas, funciona perfecto y sin fallas.

Muchísimas gracias.

Javier

carmeloco

#5
Jan 22, 2015, 03:40 pm Last Edit: Jan 22, 2015, 03:42 pm by carmeloco
Prueba este código:

Code: [Select]
int Estado1 = 1;
int Estado2 = 1;
int Estado3 = 1;
int Estado4 = 1;
int Estado5 = 1;

void setup()
{
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
pinMode(7,INPUT_PULLUP);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
 
void loop()
{
Estado1 = digitalRead(3);
Estado2 = digitalRead(4);
Estado3 = digitalRead(5);
Estado4 = digitalRead(6);
Estado5 = digitalRead(7);

if (Estado1 == 1) { digitalWrite(8,LOW); } else { digitalWrite(8,HIGH); }
if (Estado2 == 1) { digitalWrite(9,LOW); } else { digitalWrite(9,HIGH); }
if (Estado3 == 1) { digitalWrite(10,LOW); } else { digitalWrite(10,HIGH); }
if (Estado4 == 1) { digitalWrite(11,LOW); } else { digitalWrite(11,HIGH); }
if (Estado5 == 1) { digitalWrite(12,LOW); } else { digitalWrite(12,HIGH); }

}


y el esquema que pongo en el adjunto.

carmeloco

Con el código que yo propongo, te ahorras el conectar resistencias pull físicas, ya que el arduino dispone de unas internas, y están ahí para poderse usar. El único "inconveniente" es que cambia la "lógica", de forma que cuando pulsas el pulsador, tienes un 0 en vez de un 1, pero cambiándolo en los if y en las declaraciones de las variables, problema resuelto.

Otra cosa que he visto, es que sobra esto en el loop:

Code: [Select]
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);


Visualmente no lo ves, pero en cada ciclo, aunque estés presionando el pulsador, hay un pequeño momento en que apagas todos los leds, e incluso el digitalWrite del pin13, todavía tiene menos sentido, al no haber declarado si ese pin es una entrada o una salida.

Estos digitalWrite LOW, solo tendían sentido en la parte del void setup, para "inicializar" a cero las salidas, pero no es necesario.

panasys

Gracias carmeloco por la explicación tan detallada y por tu tiempo. Funciona perfecto, la verdad estaba asustado, le estaba apostando a un proyecto con arduino y por este detalle casi desisto.

Muchas gracias.

carmeloco

Perfecto, me alegro de que te funcione, por favor, edita el título en el primer mensaje del post y añádele al principio:

[SOLUCIONADO]

Go Up