Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Diseño de un programador básico de acuario con arduino
Respuestas: 434    Visitas: 102053
#421
Pues he estado mirando un poco más y he visto que hay cuadalímetros de 3/4 de pulgada, lo que representan 8 mm más de diámetro interno:

Caudalímetro Aliexpress

Pienso que este debe ofrecer menos resistencia aún.
Por otra parte no sería para activarlo de manera contínua (¿o sí?), sino solo cada tanto para consultar el caudal de salida del filtro.

Tal vez buscando debe haber caudalímetros de una pulgada también, jeje
#422
Lo que me mosquea un poco es que por la forma de la caja parece que sea mas de paletas que electromagnetico.
#423
Pues si, por lo que he estado mirando por ahí funciona con un "molinete" interno que gira, parecido a las aspas del motorcillo de los filtros.
#424
Estaba confundido, es de paletas, lo pone en la descripcion del de 3/4. Y usa el efecto hall para medir las revoluciones de la turbina en vez de la velocidad de paso del agua como pensé al principio

Algo de perdida de carga si que tiene
#425
Yo compré alguno. Es de paletas y creo que como la mayoría de estos sensores baratos, tienen una turbina de paletas que en alguna parte incluye un pequeño imán. Por eso el sensor hall detectará la proximidad del imán a cada revolución enviando un pulso a Arduino.

Puede que el mecanismo no sea exactamente así en la práctica, pero desde un punto de vista didáctico se entiende mejor explicándolo de esa forma. Puede que en lugar de un pulso por vuelta sean por ejemplo dos, pero en cualquier caso siempre será un múltiplo entero del número de revoluciones y Anduino deberá usar un servicio de Interrupciones solo para poder leer ese sensor, y hay muy pocos y se necesitan también para otro tipo de funciones. Yo suelo usar la interrupción que en esa placa Arduino esté reservada para servo motores porque por el momento no los he necesitado para controlar un acuario.

No recuerdo ahora donde puse ese sensor de flujo, lo compré hace bastante y nunca lo usé. El caso es que soplando se escucha la bobina girar y lo hace como si el número de revoluciones hiciera vibrar un eje sin lubricación sin rodamiento y quizás con una holgura excesiva en los cojinetes. Era un sonido que me transmitió una sensación de calidad penosa y quizás para flujos débiles sirva pero a mí no me gustó mucho y no me entretuve en probarlo.
#426
Pues en principio lo probaré con la entrada de agua desde los filtros externos (cambio automático de agua cada 6 horas). Me interesa conocer los litros que entran cada vez (ahora lo calculo simplemente por tiempo de apertura de la electroválvula de agua).
He comprado uno que calaramente tiene una apariencia endeble, con entrada y salida del agua de pequeño calibre, pero como circulará agua filtrada y tampoco es algo vital, espero que cumpla su función, ya les contaré los resultados por si a alguien le sirven.
Por otra parte he visto que los chinos también venden unos caudalímetros con aspecto más robusto, con calibre de entrada/salida de 3/4 de pulgada:

Caudalímetro 3/4 pulgada

Lo he comprado, el precio es asequible, así que haré alguna prueba con la salida de la filtración biológica, como manera de controlar el caudal de filtración, aunque este tema se me ocurre que es controvertido, porque el agua que circulará no está filtrada y probablemente ensucie en poco tiempo el interior del chisme y falsee los resultados.
#427
(17-03-2017, 01:47 PM)albertoG1 escribió: Pues en principio lo probaré con la entrada de agua desde los filtros externos (cambio automático de agua cada 6 horas). Me interesa conocer los litros que entran cada vez (ahora lo calculo simplemente por tiempo de apertura de la electroválvula de agua).
He comprado uno que calaramente tiene una apariencia endeble, con entrada y salida del agua de pequeño calibre, pero como circulará agua filtrada y tampoco es algo vital, espero que cumpla su función, ya les contaré los resultados por si a alguien le sirven.
Por otra parte he visto que los chinos también venden unos caudalímetros con aspecto más robusto, con calibre de entrada/salida de 3/4 de pulgada:

Caudalímetro 3/4 pulgada

Lo he comprado, el precio es asequible, así que haré alguna prueba con la salida de la filtración biológica, como manera de controlar el caudal de filtración, aunque este tema se me ocurre que es controvertido, porque el agua que circulará no está filtrada y probablemente ensucie en poco tiempo el interior del chisme y falsee los resultados.

A mi me parece que tiene que ser muy robusto y tampoco es caro, nada que ver con el que yo conozco que parece de juguete.
No sé si te has percatado de que 60L por minuto es un caudal muy fuerte. Una buena ducha son solo unos 20L por minutos.

Estos cacharos no están pensados para funcionar con agua sucia.
#428
Pues estoy de acuerdo en que hacerle pasar agua no filtrada (no hablamos de filtración biológica) puede ser un problema, lo de los 60 litros es el máximo, entiendo que mide caudales de 1 a 60 litros.
Por otro lado el diámetro interior parece que puede ser como mínimo de 3/4 de pulgada, lo cual quizá facilitaría su limpieza junto con la del filtro exterior.
En mi caso tengo un filtro de 2000 litros/ hora, lo cual sabemos que es muy teórico
(muy pero que muy teórico) pues la carga filtrante aunque nueva ya disminuye ese caudal de salida (los fabricantes deberían especificar los caudales reales) y ya no digamos después de un tiempo de uso, por lo que sería útil medir el caudal de salida en dos sentidos, por un lado para conocer el caudal real que tenemos en nuestros filtros y por otro para saber cuándo va disminuyendo, como índice de necesidad de limpieza, en mi caso utilizo dos prefiltros (uno dentro del acuario y otro mayor fuera, antes del filtro exterior) y aunque el filtro exterior permanece más tiempo limpio son los prefiltros los que oponen resistencia a medida que se van ensuciando.
Un último factor que hay que considerar es el de una nueva enfermedad, la ARDUINITIS AGUDA que consiste en utilizar el Arduino para todo todo todo todo-yahoo.gif-yahoo.gif
#429
(17-03-2017, 08:37 PM)albertoG1 escribió: Pues estoy de acuerdo en que hacerle pasar agua no filtrada (no hablamos de filtración biológica) puede ser un problema, lo de los 60 litros es el máximo, entiendo que mide caudales de 1 a 60 litros.
Por otro lado el diámetro interior parece que puede ser como mínimo de 3/4 de pulgada, lo cual quizá facilitaría su limpieza junto con la del filtro exterior.
En mi caso tengo un filtro de 2000 litros/ hora, lo cual sabemos que es muy teórico
(muy pero que muy teórico) pues la carga filtrante aunque nueva ya disminuye ese caudal de salida (los fabricantes deberían especificar los caudales reales) y ya no digamos después de un tiempo de uso, por lo que sería útil medir el caudal de salida en dos sentidos, por un lado para conocer el caudal real que tenemos en nuestros filtros y por otro para saber cuándo va disminuyendo, como índice de necesidad de limpieza, en mi caso utilizo dos prefiltros (uno dentro del acuario y otro mayor fuera, antes del filtro exterior) y aunque el filtro exterior permanece más tiempo limpio son los prefiltros los que oponen resistencia a medida que se van ensuciando.
Un último factor que hay que considerar es el de una nueva enfermedad, la ARDUINITIS AGUDA que consiste en utilizar el Arduino para todo todo todo todo-yahoo.gif-yahoo.gif

Los más lógico es que este sensor tenga una rejilla tipo filtro como la que traen las válvulas hidráulicas para evitar su deterioro por suciedad y si no la trae no sería ninguna tontería comprar una y poner alguna.
[Imagen: Rubber-gasket-with-mesh-filter-Washer-Garden.png]

El riesgo es que se obstruya, pero el agua que llegue a ese sensor debería estar limpia o no creo que dure mucho. Es un elemento más que puede estropearse, hay que pensarlo muy bien antes de instalarlo.
#430
Hola Antonio y participantes del foro, después de casi 1 año de receso por falta de tiempo he retomado mi proyecto de control del acuario con arduino mostrado en la pagina 25; he cargado el CaoSeta V1.0 y lo he adaptado adicionándole el control de un lcd 16x2 I2c y dos sondas de temperatura sumergibles 18b20 conectadas en modo parásito (que hasta ahora no han dado problemas en las pruebas) a las cuales falta hacerles el modding de impermeabilizado (me parece increible que tengamos que hacer esto, ya compré tres chips 18b20 y si se dañan los sensores "profesionales" haré unos caseros con estos que parece es casi el mismo trabajo), monté en prueba circuitos para control de bombas y calentadores y funcionan correctamente. Para efecto amanecer-anochecer con IRFZ44V ó TIP42C hice pruebas que hasta ahora son buenas y solo falta implementarlo en el código.

El detalle es que no he podido pintar la fecha y la hora en la pantalla lcd 16x2 I2c y, aunque no es estrictamente necesario, me gustaría hacerlo para que la pantalla me muestre las temperaturas de las sondas y la fecha y hora.

Para ello, he realizado pruebas y modificado códigos que me han permitido ver los datos en la pantalla, pero no he podido incluírlos en el código del caoseta.

Por lo anterior, agradecería mucho si me pudieran ayudar para solucionar este detalle.

Con este codigo modificado puedo ver los datos en mi pantalla:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MD_DS3231.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // configura LCD address a 0x27, 16 caracteres por 2 lineas


#define BUZZER_PIN 11 // digital pin for tone buzzer



void p2dig(uint8_t v)
// Print 2 digits with leading zero
{
if (v < 10) lcd.print("0");
lcd.print(v);
}

char *dow2String(uint8_t code)
// Day of week to string. DOW 1=Sunday, 0 is undefined
{
static char *str[] = {"---", "Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
return(str[code]);
}

void printTime(void)
// Display the current time on the display
{
// display the date and day
lcd.clear();
lcd.setCursor(0,0);
lcd.print(dow2String(RTC.dow));
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(RTC.yyyy);
lcd.print("-");
p2dig(RTC.mm);
lcd.print("-");
p2dig(RTC.dd);

// display the current time
lcd.setCursor(2,1);
p2dig(RTC.h);
lcd.print(":");
p2dig(RTC.m);
lcd.print(":");
p2dig(RTC.s);
if (RTC.status(DS3231_12H) == DS3231_ON)
lcd.print(RTC.pm ? " pm" : " am");
lcd.setCursor(13,1);
lcd.print("MGR");
}


void setup()
{
uint8_t c[8];

// initialise 16x2 LCD display shield
lcd.begin(16,2);
lcd.clear();
lcd.noCursor();
lcd.backlight();


// Buzzer
pinMode(BUZZER_PIN, OUTPUT);

// RTC global initialisation
RTC.control(DS3231_12H, DS3231_OFF); // 24 hour clock


}

void loop()
{
RTC.readTime();
printTime();
delay(500);
}


Estoy compilando con windows 10 x64 y el IDE Arduino 1.8.1 y no he tenido problemas con el código del caoseta.
#431
[quote='laserdisko' pid='315829' dateline='1490628632']
Hola Antonio y participantes del foro, después de casi 1 año de receso por falta de tiempo he retomado mi proyecto de control del acuario con arduino mostrado en la pagina 25; he cargado el CaoSeta V1.0 y lo he adaptado adicionándole el control de un lcd 16x2 I2c y dos sondas de temperatura sumergibles 18b20 conectadas en modo parásito (que hasta ahora no han dado problemas en las pruebas) a las cuales falta hacerles el modding de impermeabilizado (me parece increible que tengamos que hacer esto, ya compré tres chips 18b20 y si se dañan los sensores "profesionales" haré unos caseros con estos que parece es casi el mismo trabajo), monté en prueba circuitos para control de bombas y calentadores y funcionan correctamente. Para efecto amanecer-anochecer con IRFZ44V ó TIP42C hice pruebas que hasta ahora son buenas y solo falta implementarlo en el código.

El detalle es que no he podido pintar la fecha y la hora en la pantalla lcd 16x2 I2c y, aunque no es estrictamente necesario, me gustaría hacerlo para que la pantalla me muestre las temperaturas de las sondas y la fecha y hora.

Para ello, he realizado pruebas y modificado códigos que me han permitido ver los datos en la pantalla, pero no he podido incluírlos en el código del caoseta.

Por lo anterior, agradecería mucho si me pudieran ayudar para solucionar este detalle.

Con este codigo modificado puedo ver los datos en mi pantalla:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MD_DS3231.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // configura LCD address a 0x27, 16 caracteres por 2 lineas


#define BUZZER_PIN 11 // digital pin for tone buzzer



void p2dig(uint8_t v)
// Print 2 digits with leading zero
{
if (v < 10) lcd.print("0");
lcd.print(v);
}

char *dow2String(uint8_t code)
// Day of week to string. DOW 1=Sunday, 0 is undefined
{
static char *str[] = {"---", "Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
return(str
Código:
);
}

void printTime(void)
// Display the current time on the display
{
  // display the date and day
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(dow2String(RTC.dow));
  lcd.print(" ");
  lcd.setCursor(5,0);
  lcd.print(RTC.yyyy);
  lcd.print("-");
  p2dig(RTC.mm);
  lcd.print("-");
  p2dig(RTC.dd);
  
  // display the current time  
  lcd.setCursor(2,1);
  p2dig(RTC.h);
  lcd.print(":");
  p2dig(RTC.m);
  lcd.print(":");
  p2dig(RTC.s);
  if (RTC.status(DS3231_12H) == DS3231_ON)
    lcd.print(RTC.pm ? " pm" : " am");
    lcd.setCursor(13,1);
    lcd.print("MGR");
}


void setup()
{
  uint8_t  c[8];
  
  // initialise 16x2 LCD display shield
  lcd.begin(16,2);
  lcd.clear();
  lcd.noCursor();
  lcd.backlight();


  // Buzzer
  pinMode(BUZZER_PIN, OUTPUT);

  // RTC global initialisation
  RTC.control(DS3231_12H, DS3231_OFF);  // 24 hour clock


}

void loop()
{
  RTC.readTime();
  printTime();
delay(500);
}


Estoy compilando con windows 10 x64 y el IDE Arduino 1.8.1 y no he tenido problemas con el código del caoseta.
[/quote]

En el codigo de CAO_SETAv1_0 tienes


[code]#include <Arduino.h>
#include <Wire.h> // I2C
// #include "ProgChar.h"
#include "CaoSeta_RTC_DS3231.h"
#include "CaoSeta_ProgPins.h"
#include "CaoSeta_Turn.h"

Y más abajo se usa en las funciones setup() y en la función loop()

Código:
// *****************************************************************************************
// **** SETUP ****
// *****************************************************************************************
void setup() {
    Wire.begin();
    Serial.begin(9600);
    while (!Serial) ; // Necesario esperar para Arduino leonardo y Arduino Pro Micro.
    // Verificamos el RTC y si no viene con fecha y hora válidas, forzaremos su inicio
    // con una fecha y hora válidas.
    while (! VerificarRTC()){
        delay(5000);
    }
    SetPinsProgram();
    Turn.EveryMillis(1000);
    HelpIntro();
}

// *****************************************************************************************
// **** MAIN LOOP ****
// *****************************************************************************************
void loop(){
    GetMonitorSerial(); // Si hay conexion serial permite ajuste
    if (Turn.Shoot(1)){ // Si ya le toca el turno (cada segundo)...
        // ... actualizar estado de las salidas
        RTC.readDateTime(&verano, &year, &month, &dayOfMonth, &dayOfWeek, &hour, &minute, &second);
        ProgPins.ActualizarEstadoPins(dayOfWeek, hour, minute, second);
        if (Turn.Shoot(15)){ // Si ya le toca el turno (cada 15 seg)...
            // ... mostrar Fecha Hora y estado salidas.
            Serial_DDMMYYhhmmss(dayOfMonth, month, year, hour, minute, second);
            ProgPins.Serial_OutputStatus();
            Serial.println();
        }
    }
}

Al usar unas librerías distintas lo más fácil es respetar las librerías de CAO_SETAv1_0 y añadir solo las librerías y las funcionalidades que necesites para no obligarte a hacer cambios masivos en la aplicacion.

En otras palabras puedes usar la librería LiquidCrystal_I2C.h, pero si usas
la libreria MD_DS3231.h entrará en conflicto con CaoSeta_RTC_DS3231.h
que se usa en toda la aplicación CAO_SETAv1_0

Fíjate como se muestra por el puerto Serial la información del reloj.

Código:
// *****************************************************************************************
// Mostrar fecha hora en formato ES  'DD/MM/YYYY hh:mm:ss' por el puerto Serial
// *****************************************************************************************
void Serial_DDMMYYhhmmss(int DD, int MM, int YY, int hh, int mm, int ss){
    char Cad[24];
    snprintf(Cad, sizeof(Cad), "%02d/%02d/20%02d %02d:%02d:%02d  ",
            DD, MM, YY, hh, mm, ss);
    Serial.print(Cad);
}

Transformar esa función en una equivalente para LCD sería enviar el String Cad al LCD.

Como tu LCD es de 16x2 tendras que obtener una cadena algo menor y para ello tendrás que usar un formato diferente en snprintf()

Tienes la referencia de snprintf() y algunos ejemplos en http://www.cplusplus.com/reference/cstdio/snprintf/

Para entender como se especifican los formatos debes mirar en la documentación de printf()

Tienes la referencia de printf() y algunos ejemplos en http://www.cplusplus.com/reference/cstdio/printf/

Estas funciones necesitan que la correspondencia de los tipos de datos empleados coincida con lo especificado en la cadena que describe el formato, porque en caso contrario los resultados pueden ser erróneos.
#432
Muchas gracias Antonio, ya he mirado el tema y definitivamente si es problema de compatibilidad de las librerías, miré lo que me sugeriste y decidí revisar un sketch que tenía guardado de las primeras pruebas que hice y decidí terminarlo. Ya está hecho y antes de una semana lo pondré en el acuario, te agradezco enormemente la amabilidad y oportunidad en las respuestas a nuestras dudas y, aunque finalmente no pude utilizar el código de caoseta, aprendí mucho de él y lo utilicé para entender la lógica de lo que quería hacer. Si alguien desea tener el código lo puedo compartir. De nuevo, muchas gracias Antonio. Saludos desde Colombia.
#433
(05-04-2017, 08:52 AM)laserdisko escribió: Muchas gracias Antonio, ya he mirado el tema y definitivamente si es problema de compatibilidad de las librerías, miré lo que me sugeriste y decidí revisar un sketch que tenía guardado de las primeras pruebas que hice y decidí terminarlo. Ya está hecho y antes de una semana lo pondré en el acuario, te agradezco enormemente la amabilidad y oportunidad en las respuestas a nuestras dudas y, aunque finalmente no pude utilizar el código de caoseta, aprendí mucho de él y lo utilicé para entender la lógica de lo que quería hacer. Si alguien desea tener el código lo puedo compartir. De nuevo, muchas gracias Antonio. Saludos desde Colombia.

Perfecto, me alegro que te sirviera.
#434
Hola Antonio, de nuevo yo con una duda que me trae de cabeza: aunque ya tengo el sketch para mi acuario, se me ocurrió que con un pequeño menú que me permita configurar los datos básicos que son: temperatura máxima y mínima y valor del dimeo canales blanco, azul y rojo (entre 0 y 255), me quedaría de perlas el proyecto. Sin embargo, he buscado y no encuentro información que pueda utilizar (porque no la entiendo ó porque el hardware es completamente diferente y no lo puedo adaptar). He encontrado informacion sobre menús manejados con potenciometros ó encoders ó botones del keypad incluido en el lcd pero no he podido entender y adaptar nada de ello.
Por lo anterior te agradezco si me puedes iluminar sobre como puedo hacerlo, uso una botonera de 5 botones analógica (como la que planteaste en otro hilo y lcd 16x2.
Muchas gracias de antemano por tu ayuda.
#435
(08-04-2017, 06:06 PM)laserdisko escribió: Hola Antonio, de nuevo yo con una duda que me trae de cabeza: aunque ya tengo el sketch para mi acuario, se me ocurrió que con un pequeño menú que me permita configurar los datos básicos que son: temperatura máxima y mínima y valor del dimeo canales blanco, azul y rojo (entre 0 y 255), me quedaría de perlas el proyecto. Sin embargo, he buscado y no encuentro información que pueda utilizar (porque no la entiendo ó porque el hardware es completamente diferente y no lo puedo adaptar). He encontrado informacion sobre menús manejados con potenciometros ó encoders ó botones del keypad incluido en el lcd pero no he podido entender y adaptar nada de ello.
Por lo anterior te agradezco si me puedes iluminar sobre como puedo hacerlo, uso una botonera de 5 botones analógica (como la que planteaste en otro hilo y lcd 16x2.
Muchas gracias de antemano por tu ayuda.

Esta pregunta no es de las fáciles.

Los controladores tipo Arduino pueden hacer muchas cosas, pero existen una serie de tareas aparentemente básicas, pero que no son triviales de programar.
Los ordenadores personales tienen un S.O. y eso lo cambia todo porque facilita mucho a esos equipos la comunicación de unos programas con otros, la comunicación con otros equipos y la comunicación con el usuario. Por el contrario en un controlador no existe muchas facilidades para ese tipo de cosas. Lo que ofrecen son facilidades para controlar entradas y salidas analoógicas o digitales y comunicaciones con sensores mediante protocolos de comunicaciones hardware.

Para programar una simple botonera tendrás que programar un algoritmo que filtre las lecturas falsas al principio de la pulsación, que filtre posibles interferencias, que facilite funciones de repetición de tecla con el botón pulsado, y un largo etc de cosas que damos por sentadas. Si no lo haces no funcionará demasiado bien.

Después de reinventar esas ruedas para tu controlador habrás consumido un gran esfuerzo en lograr algo no demasiado funcional, que no te permite introducir datos alfabéticos, y que es fácil de ampliar (no escala demasiado bien).

Se pueden hacer y hay muchas librerías que implementan ese tipo de funciones para lograr esa interactividad con el usuario, pero no las considero la solución perfecta.

Lo ideal es interactuar a través de un terminal Android y el proyecto CaoBtRefrig explica como se hace. Es un proyecto nada trivial, pero las posibles ampliaciones de funcionalidad son enormes. Son muy versátiles y potentes.

En CAO1 se implementó un buen menú para un LCD de 20x4 y botonera de cinco botones, pero este tipo de interfaces de usuarios son costos en términos de código y de consumo de memoria y no demasiado funcionales.

Leer Una configuración de DipSwitch o un potenciómetro es algo bastante más fácil, pero tú necesitas configurar muchas cosas y seguramente no querrás poner muchos potenciómetros.

Si combinas elementos tales como DipSwitch, Potenciómetros y pulsadores puedes hacer muchas cosas, pero tiene bastante trabajo.

Por ejemplo podrías seleccionar en un DipSwitch de 3 interruptores hasta 8 combinaciones que podrían corresponder con opciones de un menu y ajustando el potenciómetro y confirmando con un pulsador podrías alterar la configuración.

Algunos tipos de pantallas ya incluyen algunos de estos elementos.

Podrías estudiar sistemas de interacción con el usuario como el que usan algunas impresoras 3D.

Tambien tienes sistemas de pantallas táctiles, etc.

El caso es que no tengo nada en plan sencillito que te pueda servir. Si tienes alguna idea despues de lo que acabo de mencionar no dudes en consultarme.

Usuarios navegando en este tema: 4 invitado(s)


Salto de foro: