#1
04-09-2015, 12:39 PM
Este es un proyecto que llevo bastante tiempo dándole vueltas. Desde el punto de vista de la programación parece simple y tengo bastantes ideas al respecto que luego comentaré.
Idea general del sistema
Mi idea sería la de usar un Arduino Pro Mini y me decanto por reutilizar la idea de CaoBT.
El sistema que quiero construir permitiría programar cambios parciales con regularidad y de forma independiente forzar con un pulsador un cambio parcial inmediato.
No tengo intención de usar ningún reloj. Me basta usar la función millis() para eso.
Ya sé que no es totalmente preciso. Tiene tres problemas que afectan a la precisión:
1) Los 16Mhz no son exactos.
2) Si fueran 16Mhz exactos, lo que se contabiliza como 1 milisegundo serían en realidad 1.024 milisegundos.
3) Hay problema de overflow. Por usar un unsigned long, admite contar hasta 255⁴= 4228250625 milisegundos.
A los 49 días desbordará y empezará a contar nuevamente desde cero.
Ese tercer problema parece el más grave pero hay soluciones para eso. Bastaría usar la función millis() en un bucle para contar los segundos, y si queremos también los minutos y las hora
No voy a usar nada relativo a este enfoque, porque aprovechando el hecho de que no parece interesante programar para un mismo día dos cambios parciales automáticos existe otra opción que me parece mejor.
Para hacer un cambio diario bastaría conectar el Arduino a la iluminación para que se encienda todos los días a la misma hora y pasado un tiempo establecido proceda con el cambio de agua.
Para hacer que el cambio de agua no sea necesariamente diario, basta incrementar diariamente un contador de días en la EEPROM. Si bien la EEPROM se va gastando con las escrituras, unos pocos cálculos bastan para ver que no debemos preocuparnos por ello. 100.000 ciclos de escritura y como el contador se incrementaría una vez al día tendriamos EEPROM en esa posición unos pocos siglos y gastada una posición las demás continuarían sanas. En otras palabras, no hay problema.
Esta es la idea básica . Podríamos programar cambios parciales cada x días o forzar un cambio parcial manual. No la veo pega alguna.
Sensores de nivel
Desde el punto de vista del hardware necesitaremos electro válvulas, y sensores de nivel.
El tema que menos decidido tengo, es el tema de los sensores y su instalación. Estos pueden ser de muchos tipos.
1) Mi primera opción por su fiabilidad son los sensores de nivel con flotador magnético. Estoy usando uno en el gambario que es parte del kit Auto Top Off y tengo algunos más de este tipo comprados en dealextreme.
http://www.dx.com/p/nut-shape-pp-floatin...elgot-v7aU
Este tipo de sensores tienen el inconveniente de que abultan un poco más y todavía estoy pensando en formas para fijarlos al acuario en las posiciones que necesito.
2) Por conductividad. Pienso que se podrían usar electrodos de grafito pero es un material que no es fácil hacer una conexión buena con un cable. Quizás algún pegamento conductor pero no conozco ninguno
Hay otros muchos tipos de sensores que se podrían usar, pero dudo de que sean idóneos.
Yo creo que bastaría controlar dos niveles diferentes.
El nivel 1 o nivel superior óptimo.
El nivel 2 sería el nivel establecido para un cambio parcial.
Se podría añadir un nivel 3 para un cambio parcial mayor. Hacer los cambios a poquitos y con más frecuencia sería menos agresivo para los peces aunque gaste algo más de agua.
Al conjunto se le podrían añadir dos niveles más de alarma. Uno situado ligeramente más alto que el 1, y otro ligeramente por debajo del último. Los niveles de alarma si van a ser detectados con este tipo de sensores, ni siquiera tienen sentido controlarlos con Arduino. Podrían activar incondicionalmente una alarma sonora.
Primera pregunta: ¿Cuantos niveles pensáis que sería recomendable controlar?
Segunda pregunta: ¿Pondríais una bomba peristáltica para añadir acondicionador? Yo suelo hacer cambios pequeños y no tengo problemas.
Tercera pregunta: Alguno ha trabajado con tipos de sensores de niveles diferentes.
Idea general del sistema
Mi idea sería la de usar un Arduino Pro Mini y me decanto por reutilizar la idea de CaoBT.
El sistema que quiero construir permitiría programar cambios parciales con regularidad y de forma independiente forzar con un pulsador un cambio parcial inmediato.
No tengo intención de usar ningún reloj. Me basta usar la función millis() para eso.
Ya sé que no es totalmente preciso. Tiene tres problemas que afectan a la precisión:
1) Los 16Mhz no son exactos.
2) Si fueran 16Mhz exactos, lo que se contabiliza como 1 milisegundo serían en realidad 1.024 milisegundos.
3) Hay problema de overflow. Por usar un unsigned long, admite contar hasta 255⁴= 4228250625 milisegundos.
A los 49 días desbordará y empezará a contar nuevamente desde cero.
Ese tercer problema parece el más grave pero hay soluciones para eso. Bastaría usar la función millis() en un bucle para contar los segundos, y si queremos también los minutos y las hora
Código:
currentMillis = millis();
if ( (currentMillis - previousMillis) >= 1000){
previousMillis = previousMillis + 1000;
seconds = seconds +1;
if (seconds == 60){
seconds = 0;
minutes = minutes +1;
if(minutes == 60){
minutes = 0;
hours = hours +1;
if (hours == 24){
hours = 0;
} // end hrs check
} // end minutes check
} // end seconds check
} // end time check
No voy a usar nada relativo a este enfoque, porque aprovechando el hecho de que no parece interesante programar para un mismo día dos cambios parciales automáticos existe otra opción que me parece mejor.
Para hacer un cambio diario bastaría conectar el Arduino a la iluminación para que se encienda todos los días a la misma hora y pasado un tiempo establecido proceda con el cambio de agua.
Para hacer que el cambio de agua no sea necesariamente diario, basta incrementar diariamente un contador de días en la EEPROM. Si bien la EEPROM se va gastando con las escrituras, unos pocos cálculos bastan para ver que no debemos preocuparnos por ello. 100.000 ciclos de escritura y como el contador se incrementaría una vez al día tendriamos EEPROM en esa posición unos pocos siglos y gastada una posición las demás continuarían sanas. En otras palabras, no hay problema.
Esta es la idea básica . Podríamos programar cambios parciales cada x días o forzar un cambio parcial manual. No la veo pega alguna.
Sensores de nivel
Desde el punto de vista del hardware necesitaremos electro válvulas, y sensores de nivel.
El tema que menos decidido tengo, es el tema de los sensores y su instalación. Estos pueden ser de muchos tipos.
1) Mi primera opción por su fiabilidad son los sensores de nivel con flotador magnético. Estoy usando uno en el gambario que es parte del kit Auto Top Off y tengo algunos más de este tipo comprados en dealextreme.
http://www.dx.com/p/nut-shape-pp-floatin...elgot-v7aU
Este tipo de sensores tienen el inconveniente de que abultan un poco más y todavía estoy pensando en formas para fijarlos al acuario en las posiciones que necesito.
2) Por conductividad. Pienso que se podrían usar electrodos de grafito pero es un material que no es fácil hacer una conexión buena con un cable. Quizás algún pegamento conductor pero no conozco ninguno
Hay otros muchos tipos de sensores que se podrían usar, pero dudo de que sean idóneos.
Yo creo que bastaría controlar dos niveles diferentes.
El nivel 1 o nivel superior óptimo.
El nivel 2 sería el nivel establecido para un cambio parcial.
Se podría añadir un nivel 3 para un cambio parcial mayor. Hacer los cambios a poquitos y con más frecuencia sería menos agresivo para los peces aunque gaste algo más de agua.
Al conjunto se le podrían añadir dos niveles más de alarma. Uno situado ligeramente más alto que el 1, y otro ligeramente por debajo del último. Los niveles de alarma si van a ser detectados con este tipo de sensores, ni siquiera tienen sentido controlarlos con Arduino. Podrían activar incondicionalmente una alarma sonora.
Primera pregunta: ¿Cuantos niveles pensáis que sería recomendable controlar?
Segunda pregunta: ¿Pondríais una bomba peristáltica para añadir acondicionador? Yo suelo hacer cambios pequeños y no tengo problemas.
Tercera pregunta: Alguno ha trabajado con tipos de sensores de niveles diferentes.