De momento me surge la duda que método de conexión utilizar, tengo dos posibles circuitos y me gustaría saber cual es vuestra opinión sobre el mejor método.
Para entedernos es pin digital, aunque cualquier pin puede ser utilizado como digital (los marcados en la placa como analógicos también).
Depende tu aplicación, a lo mejor necesitas PWM, por lo que tendrás que usar los pines aptos para ésto.
La forma más segura es la primera, ya que usas optoacoplador, y puedes separar la masa de control (arduino) de la masa de potencia (electrovalvula,motor, rele,....).
El diodo en paralelo (freewheel ó flyback) con la carga inductiva (en este caso, electroválvula) es importante para suprimir los picos cuando cortas corriente (habilitas un camino para la corriente que queda en la bobina). Se ha de recordar, que la bobina se "opone" a cambios de corriente.
Desde mi punto de vista, te diré que siempre que utilices tensiones separadas, como indicas en tus esquemas, debes mantener las masas unidas, lo que se llama masa única y el optoacoplador, se encarga de separar los positivos, en la mayoría de los montajes, si utilizas un MOSFET, tampoco es un mal sistema, ya que la propia naturaleza de éste, se encarga de separar las tensiones positivas.
Además, te aconsejo que pongas un diodo en paralelo a la bobina del relé para evitar las corrientes que se generan a la desconexión. Puedes ver muchos ejemplos en la red.
Muchas gracias, por lo que veo me recomendais la primera opción.
Ahora me surge la duda si es mejor usar el pin digital o el analógico.
Según las indicaciones del fabricante la electroválvula actua en 20 ms.
Y lo que quiero es dejar caer una gota pasado esos 20 ms.
He confeccionado este programa (perdonar, pero es mi primer programa) que pretende que el circuito se ponga en marcha al presionar un pulsador y la pregunta es primero si está correcto y
segundo he utilizado el pin 10 ¿Podria utilizar un pin analógico sin problemas? ¿és mal lento el analógico que el digital?
Int valvula=10; //Utilizamos el Pin 10 para conectar la electroválvulas
Int inPin=9; //Utilizamos el Pin 9 para controlar un pulsador
Int value=0; //Valor inicial del pulsador
Int tiempogota=20; //Definimos el tiempo inicial en 20 milisegundos
Void setup(){
pinMode (valvula,OUTPUT); //Inicia el pin 10 como salida digital
pinMode(inPin, INPUT); // Inicializa el pin 9 como entrada digital
}
Void loop(){
For (int i=0; i<=2; i++) //repetir el bucle 2 veces – caen dos gotas
{
value = digitalRead(inPin); // Lee el valor de la entrada digital
digitalWrite (valvula, value); //activa la electroválvula
delay(tiempogota); //espera el tiempo de retardo definido por tiempogota
digitalWirte(valvula,LOW); //cerramos la electroválvulas
delay (5000); //esperamos 5 segundos para iniciar el proceso
}
}
Velon: Siento no estar de acuerdo contigo. Puedes tener dos circuitos con diferentes fuentes de tensión y las masas no estar unidas. Precisamente para eso se usa el aislamiento galvánico, infrarrojo,... Contact Us - NI
AntonioT: Algunos pines de un micro son multifunción. Es decir, depende de la configuración, algunos de los pines pueden hacer de puerto serie, entrada interrupción, pwm, analógica,... Los pines marcados como analógicos, también pueden ser configurados para funcionar "digital" como cualquiera de los otros.
Si tienes una placa Arduino, puedes comprobarlo tu mismo.
Puedes usar el pin 13, que tiene un led en la placa (asi verás cuando la salida esta High ó Low)
Cuando inicias el presente post, personalmente me parece que, tienes alguna duda sobre las posibilidades de los pines (analógicos y digitales). Ahora después de varios intentos, parece ser que no tienes una placa de desarrollo Arduino y esa es la única opción que me queda para entender tu insistencia, de lo contrario, ??. :-[
Después de lo comentado por Igor y mi sugerencia, sólo tienes que ejecutar el ID (gratuito de Arduino) y salir de dudas.
Espero que puedas probarlo y descubras las posibilidades del sistema Arduino+ID, en caso contrario puedes consultar tus dudas e intentaremos dar respuesta a cada una.
Gracias, tengo la placa arduino, pero estás acertado al pensar que estoy comenzando, totalmente novel en este tema.
La duda era la forma de probar circuito y programa sin poner en peligro la placa, nada mas. Y apelando a vuestra experiencia quería evitar estos errores.
La electrónica, se resume en encender y apagar leds de diversas maneras...A veces pasando ordenes por RS485, otras WIFI, CAN, serie, usando PWM,....ja,ja,ja
Como dije antes, puedes probarlo con el led que viene en la propia placa unido al pin 13. De hecho, el ejemplo Blink, es parecido a lo que buscas.
Optoacoplar, es una buena manera para el control de la electroválvula. Le añadiría un diodo en paralelo a la bobina (lo que hay en tu segundo montaje).
Tranquilo, para ésto estamos, pero queda un poco mal preguntar por código, si no se ha trabajado antes...(ya que el ejemplo blink que vienen con la IDE de Arduino es muy parecido). http://arduino.cc/es/Tutoriales/LEDParpadeante
Gracias Igor
Como en tantas cosas se cometen errores por ignorancia, creo que en parte he subsado esa impresión inicial, he verificado el código y como era de esperar habia errores de grámatica, habia dejado algunas órdenes en mayúsculas, al menos el programa en el proceso de verificación dice que está correcto.
Ahora me surge la duda al leer sobre el tema de las electroválvulas, aunque no queda claro si esto se aplica a todos los modelos, pues según parece cuando se aplica corriente a la electroválvula el proceso que realiza es de apertura y cierre, es decir se supone que no es necesario que arduino le dé la orden de activación y posteriormente de cierre, con lo cual el ejercicio del led no sé si responde a un funcionamiento real de la electroválvula.
Dejo el código tras su corrección.
int valvula=10; //Utilizamos el Pin 10 para conectar la electroválvula
int inPin=9; //Utilizamos el Pin 9 para controlar un pulsador
int value=0; //Valor inicial del pulsador
int tiempogota=20; //Definimos el tiempo inicial en 20 milisegundos
void setup(){
pinMode (valvula,OUTPUT); //Inicia el pin 10 como salida digital
pinMode(inPin, INPUT); // Inicializa el pin 9 como entrada digital
}
void loop(){
for (int i=0; i<=2; i++) //repetir el bucle 2 veces – caen dos gotas
{
value = digitalRead(inPin); // Lee el valor de la entrada digital
digitalWrite (valvula, value); //activa la electroválvula
delay(tiempogota); //espera el tiempo de retardo definido por tiempogota
digitalWrite(valvula,LOW); //cerramos la electroválvula
delay (5000); //esperamos 5 segundos para iniciar el proceso
}
}
Me refería que el ejemplo blink tiene el 90% de código similar a lo que estabas preguntando, y se veía claramente cosas mal escritas como digitalWirte, que era claro que ni si quiera lo habías compilado para ver errores....je,je,je