#1
14-09-2018, 01:00 AM
Pues aquí os dejo el esquema de montaje y el sketch para montar un rellenador de acuario basado en Arduino como prometí a Unay hace algunos meses y más recientemente a Carlos70 en éste post.
La necesidad de hacerlo así, vino tras varios desastres por desborde de agua en mi acuario ya que, las boyas de nivel que suelen traer estos sistemas (en mi caso el de TMC de una sola boya), viene intercalada en la misma linea de alimentación que la bomba de subida de agua, y la boya tiene que soportar más amperaje y voltaje que para el que fué diseñada, y con el tiempo y más tarde o temprano todas acaban quemámdose y quedando sus contactos "pegados" haciendo que no corte la bomba, y esto conlleva a un desborde de agua en nuestro acuario. Un mal diseño que segurmente viene por ahorrar costes y po vender boyas a cascoporro a posteriori.
El diseño está formado por un Arduino Nano que por su tamaño cabe en una caja no mas grande que una cajetilla de tabaco, una resistencia de 10k y un relé de estado sólido (son menos susceptibles a interferencias), todo ésto lo podemos colocar como he dicho en una pequeña cajita. Aparte y ya fuera de la caja, nos haría falta una boya de nivel de líquidos, en este caso y para un montaje de una sola boya ésta tendría que ser NC (normalmente cerrada), una bomba de subida de agua que no necesariamente tendría que ser de 12v como llevan estos sistemas ya que, como vamos a accionarla mediante un relé podría ser perfectamente de 230v, y ya por último un trasformador DC de 9v o 12v para alimentar el Arduino. Aconsejo que fuese de 9v, he podido comprobar que a este voltaje, Arduino trabaja de manera más estable.
Os dejo con el esquema de montaje:
Como podéis ver, es bastante sencillo, los pines digitales utilizados son el pin D2 para la boya y el pin D5 para el relé.
En el caso del pin D2, el de la boya, este va permanentemente conectado a masa (GND) con una resistencia de 10k, con esto forzaremos a "LOW" ese pin y evitaremos que por alguna interferencia hiciera una lectura erronea y se activase en falso nuestro relé activando la bomba de agua.
Nuestra boya tendrá dos contactos, uno de ellos tendrá que ir igualmente al pin D2 y el otro al pin de alimentación de 5v que proporciona Arduino.
Nuestro relé se conectará como otros tantos módulos de Arduino, tendrémos que proporcionarle alimentación a traves de masa y de los 5v que nos proporciona Arduino, y el pin restante iría conectado al pin D5 que es el que hemos seleccionado para este montaje y es el que activaría o desactivaría el relé.
El paso siguiente sería alimentar nuestro Arduino, aconsejo una fuente DC de 9v, y tendríamos que conectar el negativo a masa y el positivo al pin "Vin" de nuestro Arduino Nano.
Ya sólo quedaría conectar nuestra bomba al relé, para ello, uno de los dos cables de alimentación de nuestra bomba tendrémos que seccionarlo y cada extremo seccionado iría conectado a nuestro relé.
Con todo ésto la parte de montaje estaría completada, sólo quedaría cargar nuestro sketch en Arduino.
El skecht completo a cargar es el siguiente:
El sketch es de lo más sencillo, mis conocimientos sobre programación se limitan en el entorno de Arduino y de una forma muy básica, me queda aún mucho que aprender .
Paso a describiros un poco por encima el skecht.
La primera parte...
...como véis no contiene librerías, todo se hace a través de la función "millis()", y en esta seccion declaramos las constantes y variables que vamos a utilizar con los nombres que le he dado y asigno los pins 2 y 5 que son los que vamos a utilizar.
La siguiente parte es la del "setup"...
...es un setup muy sencillo, tan solo establecemos la velocidad del puerto y configuramos el pin D2 que pertenece al de la boya como entrada para que pueda leer el estado de al boya y el pin D5 como salida para que active el relé.
Ahora explicaré el "loop"...
...con esta orden le decimos a Arduino que lea el estado de la boya. Si el circuito está cerrado será un "HIGH" y si está abierto será un "LOW".
Y aquí vienen las condiciones para que que según la lectura del estado de la boya, Arduino actue en consecuencia....
...si la lectura de la boya es "LOW", le decimos a Arduino que guarde los millis() actuales en la variable "tiempo_actual_1 = millis();", como está en LOW, le decimos que no actue y mantenga en LOW (apagado) el relé a través de la orden "digitalWrite(rele_bomba, LOW);".
Gracias a RoFran, la continuación desde aquí del código ha sido simplificada y mejora por él, siendo ahora más comprensible
La continuación del código es para cuando la boya cierre el circuito y haga un "HIGH"...
...en este caso, si la lectura del estado de la boya es "HIGH", le decimos a través de la variable "tiempo_actual_2 = millis();" que vuelva a guardar el estado actual de millis()", y le decimos que la tercera variable "(tiempo resultante)", es el resultado de restar el tiempo_actual_2 menos el tiempo_actua_1 con esta orden "tiempo_resultante = tiempo_actual_2 - tiempo_actual_1;"
Si este resultado es inferior a 1000 milisegundos (1 segundo), no actuará y el relé permancecerá desactivado, pero si por el contrario el tiempo resultante es igual o superior a 1000 milisegundos, en ese momento activará el relé con la orden "digitalWrite(rele_bomba, HIGH);" y mantendrá la bomba encendida durante 10 segundos inyectando agua en el acuario, delay(10000);.
Varias aclaraciones:
1ª.- Dejamos un desfase de 1 segundo para que se active el relé para evitar que por cualquier falso contacto de nuestra boya por el motivo que sea, la bomba se active incecesariamente.
Es más, si observáis los que tengáis un rellenador comercial ya bien sea TMC, BLAU, etc, observaréis que la bomba de agua no se activa o desactiva immediatamente si accionemos la boya manualmente, hay un tiempo de desfase que creo que las marcas lo han diseñado así para evitar estos problemas que os he comentado, y que a través de código he intentado imitar.
2ª.- El tiempo que está inyectando agua la bomba es relativo, yo en mi intento de minizar mis instalaciones y que quede todo lo más invisible posible, tengo hecha una reducción del tubo de subida de agua al acuario, siendo éste de un diámetro similar como a un tubo de silicona de nuestros sistemas de CO2, por lo cual tarda más tiempo en subirme el nivel. Si vosotros utilizáis un tubo de más sección y acorde a la boca de salida de la bomba, es posible que tarde menos en alcanzar el nivel deseado.
Así que recordar que quién se atreva con este brico tendrá que jugar con este parámetro, éste está indicado en el código, solo sería hacer varias pruebas.
Como guía, yo una vez se activa la bomba, el nivel sube 2 mm en una superficie de acuario de 80x40, suficiente para que no vuelva a activarse hasta pasadas unas 4 o 6 horas dependiendo de la evaporación. Como os digo, hacer pruebas y dejarlo a vuestro gusto.
Sé que os acabo de soltar una parrafada enorme para algo muy sencillo .
Pero yo cuando empecé a trastear con Arduino hacía un copia pega de los códigos que veía colgados en distintos sitios y sin entender muy bien que es lo que hacía, así que este post es un intento de quién no entienda sobre el tema pueda entender que hace cada linea del código.
Quién sepa más sobre Arduino se quedará sólo con el esquema de montaje y el código y le sobrarán las explicaciones.
Aún así, la idea principal es que fuera fácil de realizar y sobre todo efectivo, yo llevo casi dos años así y me he olvidado de los desbordes de agua, ahora duermo tranquilo .
Así que está hecho para todos los públicos .
Por supuesto, quién quiera corregir algún error, mejorar el código o aportar alguna idea más, es libre de hacerlo, como os he dicho, sé lo justito, así que si alguien puede aportar está en su derecho.
Un saludo .
La necesidad de hacerlo así, vino tras varios desastres por desborde de agua en mi acuario ya que, las boyas de nivel que suelen traer estos sistemas (en mi caso el de TMC de una sola boya), viene intercalada en la misma linea de alimentación que la bomba de subida de agua, y la boya tiene que soportar más amperaje y voltaje que para el que fué diseñada, y con el tiempo y más tarde o temprano todas acaban quemámdose y quedando sus contactos "pegados" haciendo que no corte la bomba, y esto conlleva a un desborde de agua en nuestro acuario. Un mal diseño que segurmente viene por ahorrar costes y po vender boyas a cascoporro a posteriori.
El diseño está formado por un Arduino Nano que por su tamaño cabe en una caja no mas grande que una cajetilla de tabaco, una resistencia de 10k y un relé de estado sólido (son menos susceptibles a interferencias), todo ésto lo podemos colocar como he dicho en una pequeña cajita. Aparte y ya fuera de la caja, nos haría falta una boya de nivel de líquidos, en este caso y para un montaje de una sola boya ésta tendría que ser NC (normalmente cerrada), una bomba de subida de agua que no necesariamente tendría que ser de 12v como llevan estos sistemas ya que, como vamos a accionarla mediante un relé podría ser perfectamente de 230v, y ya por último un trasformador DC de 9v o 12v para alimentar el Arduino. Aconsejo que fuese de 9v, he podido comprobar que a este voltaje, Arduino trabaja de manera más estable.
Os dejo con el esquema de montaje:
Como podéis ver, es bastante sencillo, los pines digitales utilizados son el pin D2 para la boya y el pin D5 para el relé.
En el caso del pin D2, el de la boya, este va permanentemente conectado a masa (GND) con una resistencia de 10k, con esto forzaremos a "LOW" ese pin y evitaremos que por alguna interferencia hiciera una lectura erronea y se activase en falso nuestro relé activando la bomba de agua.
Nuestra boya tendrá dos contactos, uno de ellos tendrá que ir igualmente al pin D2 y el otro al pin de alimentación de 5v que proporciona Arduino.
Nuestro relé se conectará como otros tantos módulos de Arduino, tendrémos que proporcionarle alimentación a traves de masa y de los 5v que nos proporciona Arduino, y el pin restante iría conectado al pin D5 que es el que hemos seleccionado para este montaje y es el que activaría o desactivaría el relé.
El paso siguiente sería alimentar nuestro Arduino, aconsejo una fuente DC de 9v, y tendríamos que conectar el negativo a masa y el positivo al pin "Vin" de nuestro Arduino Nano.
Ya sólo quedaría conectar nuestra bomba al relé, para ello, uno de los dos cables de alimentación de nuestra bomba tendrémos que seccionarlo y cada extremo seccionado iría conectado a nuestro relé.
Con todo ésto la parte de montaje estaría completada, sólo quedaría cargar nuestro sketch en Arduino.
El skecht completo a cargar es el siguiente:
Código:
const int boya = 2;
int rele_bomba = 5;
int tiempo_actual_1 = 0;
int tiempo_actual_2 = 0;
int tiempo_resultante = 0;
int estado_boya = 0;
void setup() {
Serial.begin(115200);
pinMode(boya, INPUT);
pinMode(rele_bomba, OUTPUT);
}
void loop() {
estado_boya = digitalRead(boya);
if (estado_boya == LOW) {
tiempo_actual_1 = millis();
digitalWrite(rele_bomba, LOW);
}
else {
tiempo_actual_2 = millis();
tiempo_resultante = tiempo_actual_2 - tiempo_actual_1;
if (tiempo_resultante >= 1000) {
digitalWrite(rele_bomba, HIGH);
delay(10000); // Unico parametro a modificar segun necesidades
}
}
}
El sketch es de lo más sencillo, mis conocimientos sobre programación se limitan en el entorno de Arduino y de una forma muy básica, me queda aún mucho que aprender .
Paso a describiros un poco por encima el skecht.
La primera parte...
Código:
const int boya = 2;
int rele_bomba = 5;
int tiempo_actual_1 = 0;
int tiempo_actual_2 = 0;
int tiempo_resultante = 0;
int estado_boya = 0;
...como véis no contiene librerías, todo se hace a través de la función "millis()", y en esta seccion declaramos las constantes y variables que vamos a utilizar con los nombres que le he dado y asigno los pins 2 y 5 que son los que vamos a utilizar.
La siguiente parte es la del "setup"...
Código:
void setup() {
Serial.begin(115200);
pinMode(boya, INPUT);
pinMode(rele_bomba, OUTPUT);
}
...es un setup muy sencillo, tan solo establecemos la velocidad del puerto y configuramos el pin D2 que pertenece al de la boya como entrada para que pueda leer el estado de al boya y el pin D5 como salida para que active el relé.
Ahora explicaré el "loop"...
Código:
estado_boya = digitalRead(boya);
...con esta orden le decimos a Arduino que lea el estado de la boya. Si el circuito está cerrado será un "HIGH" y si está abierto será un "LOW".
Y aquí vienen las condiciones para que que según la lectura del estado de la boya, Arduino actue en consecuencia....
Código:
if (estado_boya == LOW) {
tiempo_actual_1 = millis();
digitalWrite(rele_bomba, LOW);
}
...si la lectura de la boya es "LOW", le decimos a Arduino que guarde los millis() actuales en la variable "tiempo_actual_1 = millis();", como está en LOW, le decimos que no actue y mantenga en LOW (apagado) el relé a través de la orden "digitalWrite(rele_bomba, LOW);".
Gracias a RoFran, la continuación desde aquí del código ha sido simplificada y mejora por él, siendo ahora más comprensible
La continuación del código es para cuando la boya cierre el circuito y haga un "HIGH"...
Código:
else {
tiempo_actual_2 = millis();
tiempo_resultante = tiempo_actual_2 - tiempo_actual_1;
if (tiempo_resultante >= 1000) {
digitalWrite(rele_bomba, HIGH);
delay(10000); // Unico parametro a modificar segun necesidades
}
}
}
...en este caso, si la lectura del estado de la boya es "HIGH", le decimos a través de la variable "tiempo_actual_2 = millis();" que vuelva a guardar el estado actual de millis()", y le decimos que la tercera variable "(tiempo resultante)", es el resultado de restar el tiempo_actual_2 menos el tiempo_actua_1 con esta orden "tiempo_resultante = tiempo_actual_2 - tiempo_actual_1;"
Si este resultado es inferior a 1000 milisegundos (1 segundo), no actuará y el relé permancecerá desactivado, pero si por el contrario el tiempo resultante es igual o superior a 1000 milisegundos, en ese momento activará el relé con la orden "digitalWrite(rele_bomba, HIGH);" y mantendrá la bomba encendida durante 10 segundos inyectando agua en el acuario, delay(10000);.
Varias aclaraciones:
1ª.- Dejamos un desfase de 1 segundo para que se active el relé para evitar que por cualquier falso contacto de nuestra boya por el motivo que sea, la bomba se active incecesariamente.
Es más, si observáis los que tengáis un rellenador comercial ya bien sea TMC, BLAU, etc, observaréis que la bomba de agua no se activa o desactiva immediatamente si accionemos la boya manualmente, hay un tiempo de desfase que creo que las marcas lo han diseñado así para evitar estos problemas que os he comentado, y que a través de código he intentado imitar.
2ª.- El tiempo que está inyectando agua la bomba es relativo, yo en mi intento de minizar mis instalaciones y que quede todo lo más invisible posible, tengo hecha una reducción del tubo de subida de agua al acuario, siendo éste de un diámetro similar como a un tubo de silicona de nuestros sistemas de CO2, por lo cual tarda más tiempo en subirme el nivel. Si vosotros utilizáis un tubo de más sección y acorde a la boca de salida de la bomba, es posible que tarde menos en alcanzar el nivel deseado.
Así que recordar que quién se atreva con este brico tendrá que jugar con este parámetro, éste está indicado en el código, solo sería hacer varias pruebas.
Como guía, yo una vez se activa la bomba, el nivel sube 2 mm en una superficie de acuario de 80x40, suficiente para que no vuelva a activarse hasta pasadas unas 4 o 6 horas dependiendo de la evaporación. Como os digo, hacer pruebas y dejarlo a vuestro gusto.
Sé que os acabo de soltar una parrafada enorme para algo muy sencillo .
Pero yo cuando empecé a trastear con Arduino hacía un copia pega de los códigos que veía colgados en distintos sitios y sin entender muy bien que es lo que hacía, así que este post es un intento de quién no entienda sobre el tema pueda entender que hace cada linea del código.
Quién sepa más sobre Arduino se quedará sólo con el esquema de montaje y el código y le sobrarán las explicaciones.
Aún así, la idea principal es que fuera fácil de realizar y sobre todo efectivo, yo llevo casi dos años así y me he olvidado de los desbordes de agua, ahora duermo tranquilo .
Así que está hecho para todos los públicos .
Por supuesto, quién quiera corregir algún error, mejorar el código o aportar alguna idea más, es libre de hacerlo, como os he dicho, sé lo justito, así que si alguien puede aportar está en su derecho.
Un saludo .