Página principal del proyecto CAO
Primer proyecto CaoBT (Refrigerador de acuario)
El día 22 de octubre se publicaron los fuentes del proyecto. El primero de una serie CaoBT que usa BlueTooth.
Más adelante se publicarán nuevos proyectos de esta serie.
Qué es CAO
CAO es proyecto para la automatización de acuarios basado en Arduino. El software del proyecto es de descarga gratuita con licencia de uso Creative Commons Attribution-NonCommercial-ShareAlike (CC by-nc-sa).
¿Qué es CAO1?
CAO1 es la primera versión de mi software para proyecto CAO. Se trata de un software para el sistema de Control de Acuarios por Ordenador CAO1 basado en Arduino. Existe un libro sobre CAO1 que contiene explicaciones muy detalladas y es de gran interés para los que comienzan con CAO. El caso que que ya no me interesa ofrecerlo desde Amazón y ahora ofrezco la descarga totalmente gratis en formato ODT o PDF desde mi Dropbox.
➡ Los enlaces para descargar el libro son los siguientes: CAO1.odt o CAO1.pdf
Si tienes problemas con las descargas contacta conmigo.
Enlaces para hacer preguntas sobre CAO:
Recientemente he decidido reconsiderar el lugar para atender dudas. Ahora como lugar preferente para hacer preguntas sugiero usar los comentarios en este post. Para ello puedes usar este o cualquier otro post donde se hable de CAO. Ello sin perjuicio de continuar atendiendo a los comentarios y preguntas que me lleguen a través de otras páginas. La razón es que deseo potenciar mi permalink www.ciberdroide.com que para algo lleva años pagando el dominio.
Contacto privado con el autor:
Si se trata de un tema que puede interesar a más personas conviene usar los comentarios para que todos puedan compartirlo y aprender.
En caso contrario, use el formulario de contacto con el autor.
Lugar principal de descarga: Descargas CAO desde DropBox
Los contenidos vienen empaquetados en ficheros ZIP. Incluyen los fuentes y la documentación de una o más aplicaciones.
Lista de contenidos:
- Primer proyecto CaoBT (Refrigerador de acuario)
- Cao_CambH2o_V01_PAK.zip (489Kb) Cambiador de agua de acuario basado en Arduino.
- CAO_1.2.1.zip (478Kb) Última versión del controlador de acuario CAO1.
- CAO_SETA.zip (2,5Mb) CAO (S)imple (E)lectric (T)imer (A)rduino.
- Dimmer1C.V1.2.zip (563Kb) Dimmer de un solo canal para iluminación de acuario.
- LinealSensorLCD.zip (730Kb) Medidor de pH.
- SimpleDimmer.zip (31Kb) Un dimmer sencillo.
Vídeos publicados:
Todos los vídeos fueron publicados en mi canal de Youtube acastro008 . Tienes una lista de ellos en Relación de vídeos del proyecto CAO
Manu Hernandez
Fantástico trabajo el realizado. Proyecto siempre vivo y evolucionando.
Tengo un acuario de 120 l. comunitario y plantado. Tiene dos pantallas que hice en su día, en paralelo, de 12 leds de 3 W en serie alimentadas con una fuente dimeable con potenciómetro.
Es hora de evolucionar y pretendo aprender basándome en tu proyecto para automatizar cada una de las pantallas; control de temperatura de agua (calentador o ventilador); control de temperatura de las dos pantallas, ventiladores en función de la temperatura de pantalla haciendo que si llega a temperatura crítica y el ventilador estuviera a tope, vaya rebajando el nivel de luz; un control de humedad para la tapa, de modo que en invierno, cuando se condense mucho, se ponga en marcha un par de ventiladores en la tapa para que larguen la humedad fuera; pantalla, relés, botones, zumbadores, etc. y más adelante control de CO2 en función de PH.
Pretendo poner una fuente de alimentación de 48 V y 1,400 A para alimentar las dos pantallas (si la encuentro). ¿Sería recomendable colocar una resistencia en la entrada a la pantalla led para asegurar que no sobrecargo la serie?.
¿Cómo sería la conexión de arduino a una placa de cuatro mosfet 540? Tiene tres conectores: supongo que uno es la señal, otro base, ¿??
No encuentro el dato en la red.
Enhorabuena por tu trabajo y gracias por compartir tu conocimiento
Manu
Antonio Castro
No dispongo de esa placa. Lo he buscado en Aliexpress y no todos los vendedores ofrecen información. He visto una que si lo explica.
http://es.aliexpress.com/store/product/4-Power-FET-Switches-Improved-Version/1403766_2040974077.html
El esquema creo que se entiende bien.
Si miramos por abajo la placa vemos los terminales señalados con Vpp conectan el positivo de la fuente de potencia con cada uno de los polos positivos de salida de cada canal. Todos los canales se alimentan de una misma fuente de potencia y funcionan con ánodo común.
Si continuas teniendo dudas intentaré hacer un dibujo de lo que yo creo que sería la forma de conectarlo aunque yo lo que haría (por si las moscas) es confirmar antes mis suposiciones con una detallada inspección visual y pruebas de continuidad de pistas, etc.
Daniel Pantoja
Hola, sera que me puedas ayudar con el codigo para Ph con el arduino mini pro
Jose Ignacio
Hola Antonio.
Gracias por compartir tu trabajo, estoy trasteando con el dimmer1C y al compilar me sale este error:
———————————————————————–
Arduino:1.6.13 Hourly Build 2016/10/21 05:33 (Windows Vista), Tarjeta:»Arduino/Genuino Uno»
sketch\CaoDim1C_Dimer1C.cpp: In member function ‘char* CaoDim1C_Dimmer1C::GetZona()’:
sketch\CaoDim1C_Dimer1C.cpp:252:76: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
case Noche: return _TantoPorMilPeriodo(«Noche», _IniNoche, _IniAlba);
^
sketch\CaoDim1C_Dimer1C.cpp:253:75: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
case Alba: return _TantoPorMilPeriodo(«Alba», _IniAlba, _IniDia);
^
sketch\CaoDim1C_Dimer1C.cpp:254:77: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
case Dia: return _TantoPorMilPeriodo(«Dia», _IniDia, _IniOcaso);
^
sketch\CaoDim1C_Dimer1C.cpp:255:77: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
case Ocaso: return _TantoPorMilPeriodo(«Ocaso», _IniOcaso, _IniNoche);
^
sketch\CaoDim1C_Dimer1C.cpp: In member function ‘char* CaoDim1C_Dimmer1C::GetStrStRegrig()’:
sketch\CaoDim1C_Dimer1C.cpp:272:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
return «REFRIG ON «;
^
sketch\CaoDim1C_Dimer1C.cpp:275:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
return «Refrig off»;
^
sketch\CaoDim1C_Lcd20x4.cpp: In constructor ‘CaoDim1C_Lcd20x4::CaoDim1C_Lcd20x4()’:
sketch\CaoDim1C_Lcd20x4.cpp:25:11: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
_OvErr=»OvErr en FmtCad»; // Mensaje de error
^
In file included from sketch\CaoDim1C_Lcd20x4.h:13:0,
from sketch\CaoDim1C_Lcd20x4.cpp:11:
C:\Users\Jose\Documents\Arduino\libraries\NewliquidCrystal/LiquidCrystal_I2C.h: In member function ‘void CaoDim1C_Lcd20x4::Ini()’:
C:\Users\Jose\Documents\Arduino\libraries\NewliquidCrystal/LiquidCrystal_I2C.h:154:9: error: ‘int LiquidCrystal_I2C::init()’ is private
int init();
^
CaoDim1C_Lcd20x4.cpp:31: error: within this context
lcd_i2c.init();
^
sketch\CaoDim1C_Lcd20x4.cpp: In member function ‘void CaoDim1C_Lcd20x4::PrintLnSerBeep(const __FlashStringHelper*, boolean, boolean)’:
CaoDim1C_Lcd20x4.cpp:130: error: ‘prog_char’ does not name a type
const prog_char *p= (const prog_char *)Linea;
^
In file included from C:\Users\Jose\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from sketch\CaoDim1C_Lcd20x4.h:11,
from sketch\CaoDim1C_Lcd20x4.cpp:11:
CaoDim1C_Lcd20x4.cpp:135: error: ‘p’ was not declared in this scope
unsigned char c = pgm_read_byte(p++);
^
sketch\CaoDim1C_Lcd20x4.cpp: In member function ‘char* CaoDim1C_Lcd20x4::Fmt(const __FlashStringHelper*, …)’:
CaoDim1C_Lcd20x4.cpp:174: error: ‘prog_char’ does not name a type
const prog_char *p= (const prog_char *)fmt;
^
In file included from C:\Users\Jose\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from sketch\CaoDim1C_Lcd20x4.h:11,
from sketch\CaoDim1C_Lcd20x4.cpp:11:
CaoDim1C_Lcd20x4.cpp:178: error: ‘p’ was not declared in this scope
unsigned char c = pgm_read_byte(p++);
^
exit status 1
within this context
Este reporte podría tener más información con
«Mostrar salida detallada durante la compilación»
opción habilitada en Archivo -> Preferencias.
————————————————————————————–
Con un mega sale algo parecido.
¿alguna sugerencia?
Gracias
Antonio Castro
Esto se debe al cambio de versión del compilador. Afecta no solo al software de CAO1 sino a muchas librerías.
La inmensa mayoría de los errores son en realidad simples avisos. La solución es continuar compilando con el la versión 1.6.0.
Yo agradezco las consultas en mi Blog, ya que así puedo gestionarlas mejor. Será un placer continuar ayudándote.
En el foro de acuariofiliamadrid me preguntas por temas de documentación de CAO1.
La documentación de CAO1 actualmente disponible es algo antigua. Documentar es lo que más trabajo me lleva y es un timpo de tarea que tampoco me resulta ni sencilla ni agradable. Suelo tomarme mucha molestia, porque intento facilitar al máximo la compresión de todos los temas técnicos. Lo que puedo hacer es ofrecerte la versión completa original sobre la cual edité el libro. Acabo de suprimir la publicación en Amazon en este preciso instante. Amazon no trata demasiado bien a los que ponemos un precio muy bajo y no me interesa subir el precio, así que ahora lo publicaré gratuitamente.
El formato está adaptado a las necesidades de Amazon de libro electrónico y de momento no lo voy a tocar. lo que tendría que hacer es publicar una segunda revisión ampliada y revisada, pero no doy para más.
Que yo recuerde, el esquema es básicamente el mismo que en la primera versión.
Espero que te sirva. Si no encuentras algo, me pones otro comentario y te lo busco.
cristian
Felicidades Antonio, excelente trabajo.
Solo tengo una duda con el CAO seta, es posible añadirle el diplay para configurar la hora directamente por diplay y no por codigo fuente.
Antonio Castro
Naturalmente que se puede. Es cuestión de trabajo y de tiempo.
Lo que sería aún más interesante sería ponerle un modulito HC-05, y que se pueda configurar desde un terminal Android.
Joaquin Escandon
Buenas noches Antonio. Lo primero felicitarte por tu trabajo , esfuerzo y generosidad con todos.
Por fin ya monte el acuario de peces de Malawi, después de cuatro meses esta bien, y ahora voy a lanzarme a automatizarlo con los siguientes sensores, Temperatura, PH, y encedido y apagado creciente o decreciente mediante tiras leds, sin rgb, color blanco para el día y color azul para la noche.
Intente comprar tu libro , pero en el enlace me sale no disponible, para ir poco a poco copiando librerias y códigos, pues en estos temas estoy sin idea.
Aimismo intnete descargar la carpeta tuya Dimmer C.1 y después de descomprimido, no soy capaz de abrir los txt, asi que si eres tan amable mis dudas son las siguientes:
-Donde puedo comprar tu libro.
-Que materiales necesito para hacer este Proyecto, pues como bien sabes tarda bastante en llegar a España, lo cual me viene de perlas para ir aprendiendo.
Muchas gracias de nuevo por tu paciencia y recibe un gran saludo.
Antonio Castro
Acabo de incluir en la página de CAO enlaces para poder descargar el libro gratuitamente desde mi dropbox
https://acubiomed.com/cao/
Creo que el fichero txt que no puedes ver está vacío es una basurilla que se coló en el paquete.
Te recomiendo que te descargues el paquete de CAO SETA. Es un programador basado en Arduino y sería una base muy buena para tu proyecto. Los materiales de ese proyecto te valen todos para el tuyo aunque puede que necesites algún otro material para la parte de sensores de temperatura y pH.
https://www.dropbox.com/s/2sxili91pcwzkqy/CAO_SETA.zip?dl=0
A medida que avances me vas preguntando las dudas y yo te voy desatascando proporcionándote los enlaces a la información que necesites o haciendo alguna sugerencia concreta. También estaré encantado de saber de tus avances. Seguimos en contacto.
Joaquin Escandon
Muchas gracias Antonio , me pongo a descargarlo y empiezo con ello.
También quiero aprovechar para hacerte agradecerte toda la información que me ofreces, así como tu enorme paciencia. Un fuerte saludo.
Joaquin Escandon
Buenas noches Antonio.
Lo primero desearte unas Felices Fiestas.
Antonio , estoy comprando todos los materiales que salen en tu excelente artículo del DIMMER 1C y me surge una duda para la compra de materiales.
Vi en esta página que instalas un equipo que se llama MOSEFT, y quisiera saber si es necesario para mi proyecto de regulación de tiras leds para conseguirlo. Compre hace tiempo una tarjeta con 4 modulos reles de potencia. Dos de ellos serían para los termocalentadores y otros dos de reserva .
Tambien compré la pantalla LCD 20X4 MODULO DISPLAY BLUE TE116, IIC/I2C/TWI , una sonda o sensor DS18B20 sumergible y un transistor TIP141, un reloj de precisión DS3231 RTC.
Me podrías ayudar y comentarme si necesito algún componente mas?.
Muchas gracias por tu paciencia y recibe un cordial saludo.
Antonio Castro
Yo no tengo una ingeniería en telecomunicaciones ni he realizado estudios superiores en eletrónica. Circutitos basados en trabajos publicados en Internet me han funcionado bien durante meses pero terminaron fallando. Por ello muchas de las soluciones que he ido proponiendo en los montajes que he propuesto las he ido mejorando con el tiempo.
En el tema del Dimeo usar un transistor bipolar darlington de potencia como los TIP120 y TIP141 tiene el inconveniente de que se calientan. Si usamos Arduinos a 5V podemos usar transistores mosfet.
La desventaja de los transistores bipolares con respecto a los mosfet es que su resistencia colector-emisor en modo saturación, es del orden de unos 3 ohmios (es el caso del Tip142), mientras que en un mosfet IRF540 es del orden de solo 0,044 ohmios. Esto hace que los mosfet se calienten mucho menos.
Otro aspecto importante del dimeo es que yo usaba una fuente de alimentación a 12V para la potencia del dimeo y de esa misma fuente mediante un regulador de voltaje sacaba la alimentación para Arduino.
Tras algunos problemas en algunos circuitos ahora veo que conviene independizar al máximo los circuitos de potencia no solo en la alimentacion, sino en las salidas de Arduino. Por ello usar una etapa que además del MOSFET incluya un optoacoplador estaría mucho mejor.
Un ejemplo:
Imagen circuito Mosfet
Optoacopladores que pueden usarse son 4N25 y 4N35.
Tambien venden módulos MOFETS ya montados.
Hablo de mejoras, para hacer más fiable y robustos los circuitos y que así duren muchos años sin dar problemas. En las entradas de Arduino también es interesante usar optoacopladores cuando usamos sensores muy sensible que van sumergidos para aislarlos completamente.
El LCD y el RTC que has elegido me parecen adecuados.
Los sensores de temperatura digitales deben ir extraordinariamente bien aislados o de lo contrario terminan fallando tras unos meses de funcionamiento por problemas de hermeticidad del sellado. Las sondas comerciales DS18B20 sumergibles no son nada fiables. Yo me entretengo en impermeabilizarlas mejor.
Cuando una sonda de temperatura falla generalmente devuelve el valor cero y si usa ese dato para el calefactor, este seguirá calentando hasta convertir tu acuario en una sopa de pescado con verduras. Es algo que he insistido mucho y gente que no me hizo caso ya ha tenido ese desastroso problema. Yo uso el sensor de temperatura sellado por mí y solo lo uso para refrigerar el agua en verano. Los clásicos termostatos de acuario funcionan muy bien y son muy fiables.
Revisa esto.
Tag DS18x20
Siempre has de hacer pruebas previas de cualquier cosa que diseñes. Cuantas más pruebas mejor.
Joaquin Escandon
Buenas tardes Antonio.
Muchisimas gracias por aclarar mis múltiples dudas.
Referente al sensor de temperatura DS18B20, he leido artículos anteriores tuyos y avisabas de este incoveniente, por lo cual mi idea era encapsularlo en un tubo de ensayo de cristal, con lo cual la boca del tubo de ensayo estaría siempre por encima del nivel del agua del acuario solucionando con ello el problema de posibles filtraciones al sensor y evitando tener esta año la sopa de pescado para Navidad con nuestros peces.
Para el tema de módulo mosfet dime tu opinión sobre el de este enlace, pues en mi proyecto es para dos tiras LED 5050 de 2 metros cada una, con un consumo de 30 watios por tira.
Esto es lo que encontré dada mis nulos conocimientos si es otro tipo comentamelo para comprarlo.
Muchisimas gracias de nuevo Antonio, y la verdad eres un gran maestro
Joaquin Escandon
Perdona Antonio que se me olvido el enlace.
Este es el que ví, dime tu valiosa opinión.
http://www.ebay.es/itm/TOP-MOSFET-Boton-IRF520-MOSFET-Modulo-Regulador-Para-Arduino-Arm-Raspberry-Pi-/381749178849?hash=item58e20631e1:g:558AAOSwPCVX~l2l
Muchas gracias,
Saludos
Antonio Castro
Es un circuito muy básico. Puede funcionar, pero al no incluir optoacoplador puede que no sea lo ideal. A esa potencia las ondas cuadradas (que contienen armónicos de alta frecuencia) podrían afectar al Arduino o al sensor. Lo que necesitas son circuitos de este tipo: 4 Power FET Switches (Improved Version)
Este es un poco caro y los he visto iguales más baratos. También los encontrarás para menos canales. Te he puesto este enlace porque viene el circuito. Es muy simple y si quieres también te lo puedes hacer tú. En cualquier caso siempre es bueno que sepas exactamente lo que compras. Hay demasiadas cosas que se parecen y que no son lo mismo.
He visto este en Aliexpress Four Channel 4 Route MOSFET Button IRF540 V4.0+ MOSFET Switch Module For Arduino No menciona la característica de optoacoplado pero la imagen parece la misma.
Mi consejo es que sigas buscando hasta estar seguro.
Joaquin Escandon
Hola Antonio.
Muchas gracias, pero has de darte cuenta que yo compro lo que tu me aconsejes, pues no tengo ni idea por tanto yo soy la mano ejecutora de la compra y tu el maestro para indicarme .
Comprare ese que tu me dices ahora mismo.
Gracias de nuevo y recibe un fuerte abrazo.
Joaquin Escandon
Hola Antonio.
Muchas gracias, pero has de darte cuenta que yo compro lo que tu me aconsejes, pues no tengo ni idea por tanto yo soy la mano ejecutora de la compra y tu el maestro para indicarme .
Ya la acabo de comprar
Comprare ese que tu me dices ahora mismo.
Gracias de nuevo y recibe un fuerte abrazo.
Sergio Domínguez
Veo que en el libro de CAO hablas de introducir un electrodo de grafito en el acuario, para las derivaciones a tierra física. ¿Valdría un electrodo de grafito de soldadura, o tendría que ser de los usados como picas de tierra?. ¿Podría valer un electrodo de soldadura de acero inoxidable?.
Gracias de antemano, un saludo.
Antonio Castro
Es un tema complicado porque las normas para instalaciones domésticas de acuarios . El problema es que no todos los aparatos tienen toma de tierra para poder conectarlos. Los calentadores no la tienen y las bombas de los filtros tampoco suelen tener. Son aparatos con carcasa de plástico pero una derivación afectaría al agua del acuario.
Lo más importante es disponer de un buen diferencial que salte al detectar la menor derivación en cualquiera de las líneas de la vivienda en el cuadro principal a la entrada de la misma. Si el acuario no tiene toma de tierra meter la mano en un acuario con una derivación podría dar una pequeña sacudida pero no te quedas pegado porque salta el diferencial.
Si tienes la toma de tierra conectada al agua una derivación provocará el salto del diferencial en ese mismo instante con independencia de que alguien meta la mano o no. Incluso puede ocurrir en tu ausencia y el acuario se quedaría sin corriente eléctrica hasta que volvieras y arreglaras el problema. Puede que marcharse dejando una toma de tierra en el agua no sea tan buena idea.
Yo creo que la normativa europea exige que en las instalaciones domésticas se instalen interruptores diferenciales de alta sensibilidad con una corriente de fuga menor o igual a 30 mA y un tiempo de respuesta de 50 ms, lo cual garantiza una protección adecuada para las personas en cualquier tipo de derivación. El diferencial es el elemento clave para salvar vidas.
Tengo muchas dudas, pero en mi modesta opinión creo que lo más apropiado sería conectar una toma a tierra solo como medida de seguridad adicional mientras se hacen tareas de mantenimiento, y de vez en cuando para verificar que el diferencial no detecta nada anormal en el acuario y que puedes meter la mano sin sufrir un susto.
Quizás el mejor grafito sea el que se usa en papelerías, pero no hay garantías sobre las impurezas de un material que no está pensado para lo que nosotros queremos usarlo.
Sergio Domínguez
Podría deberse en algunos casos no a la derivación, «pregunto», sino al movimiento del agua que cree una electricidad «remanente». Por lo tanto no haría que salte el diferencial esa forma de electricidad a modo de dinamo, no obstante, si es verdad que si hubiese una derivacion de cualquiera de los otros elementos y si esta conectada a tierra te echaría abajo la corriente eléctrica con el perjuicio que tu comentas.
Mi diferencial es de 30 mA, segun norma, pero detecto en el acuario Voltajes de 80 V entre mi cuerpo y el agua, y sin embargo no salta. No se la corriente (A) que circula, pero es verdad que noto un cosquilleo en las heridas. He verificado el diferencial con su botón de test y funciona correctamente.
Puede ser esto correcto o debo de sospechar de algún funcionamiento anómalo de algún dispositivo del acuario.
Perdona por el tostón, pero es un tema que me preocupa bastante.
Francisco Jose
Hola Antonio, ante todo felicitarte por el gran trabajo que haces, y ahora mi pregunta.
Estoy haciendo pruebas con el Dimmer1c y yo necesitaría dimmer para 2 canales, por donde debería empezar a modificar su programa para adaptarlo a mis necesidades? o Existe ya dicho programa para 2 canales?
Gracias de antemano Antonio.
Antonio Castro
El dimmer usa un módulo preinstanciado (es una declaración previa del objeto).
Si miras el principio del fichero «CaoDim1C_Dimmer1C.cpp» verás una línea que declara una instancia de ese objeto denominada «Dimmer». Concretamente es la línea siguiente:
CaoDim1C_Dimmer1C Dimmer; // Preinstancia
En lugar de esa línea, pon tantas como canales necesites y llámalos como quieras, lo que sigue es un ejemplo:
CaoDim1C_Dimmer1C DimmerLuzAzul; // Preinstancia 1
CaoDim1C_Dimmer1C DimmerLuzBlanca; // Preinstancia 2
Ahora al final del fichero «CaoDim1C_Dimmer1C.h»
En lugar de la linea siguiente:
extern CaoDim1C_Dimmer1C Dimmer;
pon un par de líneas como las que siguen:
extern CaoDim1C_Dimmer1C DimmerLuzAzul;
extern CaoDim1C_Dimmer1C DimmerLuzBlanca;
Ahora ya puedes inicializar en tu programa cada una de las instancias, pero hay un problema. Mira los parámetros para inicializar:
Ini(int Pin, int MaxDimmer, int PinRefrig, int DimRefrig)
¿Deseas un PinRefrig diferente para cada objeto dimmer?
Seguramente ambos canales usarann la misma luminaria y en tal caso el sistema de refrigeración debería ser único por trabajar los leds de ambos canales a la misma temperatura, pero en realidad el pin de refrigeracion va a quedar de forma independiente en cada canal. Definirlos con el mismo pin no es buena idea, no garantizaría un buen funcionamiento porque n la lógica de control se pisarían el uno al otro.
Hay varias soluciones para resolver eso, pero la solución depende en parte de lo que tu necesites. Por ejemplo podrías necesitar refrigeración solo para un canal por ser mucho más potente y lo que puedes hacer es pasar al otro canal un pin que no se conectará a ningún ventilador, o puedes usar un ventiladorcito independiente para cada canal.
En esta aplicación uso todo o nada para los ventiladores, pero en otras aplicaciones uso regulación de velocidad del ventilador para bajar revoluciones, y de esa forma hacerlo más silencioso y alargar la vida del ventilador.
Con los escasos datos que me proporcionas, te ofrezco las posibilidades que creo podrían interesarte.
Si me aportas dudas o más información te podré ayudar mejor.
Francisco Jose
Hola Antonio, muchas gracias por la pronta respuesta, que claro me lo dejas todo en 5 lineas, dicen que quien la lleva la entiende, y me resultara mucho mas sencillo de lo que esperaba, debido claro esta a una gran organización en tu método de programar.
Respecto a los ventiladores, mis pantallas llevan 1 ventilador por canal, así que le asignare uno por cada canal, y empezare a indagar para activarlos con una consigna de temperatura que provenga de un 18B20, creo que seria genial, pero de momento lo dejare como esta.
El dimmer lo necesito para un acuario marino, por lo tanto cada canal ira independiente en horario e intensidad, voy a probar con esto y le comento como voy con mi proyecto, aunque también le digo que los 119 post de acuariofiliamadrid espero me ofrezcan suficiente información como para no molestarle con un proyecto personal mío, aunque si tengo alguna duda permitame preguntarle.
Prefiere por este medio o por el foro?
Muchas gracias por poner a mi disposición tantos conocimientos.
Saludos Antonio.
Antonio Castro
Prefiero en mi propio Blog porque me llegan puntualmente todas la notificaciones de entradas nuevas, y parece que las de acuariofiliamadrid no siempre ocurre y no siempre me acuerdo de mirar los mensajes pendientes. En mi Blog estoy como en mi casa.
Tiene muy buena pinta tu proyecto. Sería un honor compartir los logros de tu proyecto en este Blog. 😉
Manu Hernández
Una de las principales cuestiones a resolver es la temperatura de los disipadores de led ya que el calor no disipado acorta mucho la vida de los led. Por eso emplear suficiente tamaño de disipador de aluminio y ayudarle con ventilador es en mi opinión fundamental.
En el transcurso del planteamiento del sistema automático del acuario y mientras voy aprendiendo las cuestiones básicas de electrónica y programación me detengo sobre el sistema más adecuado para controlar un ventilador de modo que no haga más ruido del necesario ni enfríe menos de lo requerido.
Actualmente los ventiladores los tengo controlados por tensión mediante un sencillísimo sistema con un transistor, un NTC y un potenciómetro y funciona perfectamente: http://www.geocities.ws/podernixie/fanspeed/
Ajustando el potenciómetro se ajusta la sensibilidad del sistema.
He practicado un poco en el control de ventilador por arduino con el TIP 120, mosfet 540, Controlador L298N Motores mientras voy aprendiendo sobre dimeo y arduino.
El asunto es que no me convence que el ventilador controlado digitalmente chisquee cuando no va al 100% y la solución es básicamente como planteas en alguno de los foros que participas, modificando la frecuencia para hacerlo inaudible.
Sin embargo los ventiladores “normales” no recomiendan el empleo de PWM directamente (ver
http://www.tme.eu/es/Document/1b654ba5181e234d559f369f859cddf4/MB60201VX-A99.pdf):
“7. DO NOT use power or ground PWM to control the fan speed. If the fan speed needs
to be adjusted, please contact Sunon to customize the product design for your application.”
Por lo que me lleva a pensar en ventiladores de 4 hilos que gestionan por pwm la velocidad. De modo que le aplicamos la fuente de alimentación y por el cable azul lo controlamos por PWM a 5 voltios pero con frecuencia de 25 kHz.
Ver características: http://www.formfactors.org/developer/specs/rev1_2_public.pdf
“PWM Control Input Signal
The following requirements are measured at the PWM (control) pin of the fan cable connector :
PWM Frequency: Target frequency 25 kHz, acceptable operational range 21 kHz to 28 kHz
Maximum voltage for logic low: VIL = 0.8 V
Absolute maximum current sourced: Imax = 5 mA (short circuit current)
Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage)
This signal must be pulled up to a maximum of 5.25V within the fan.”
Y aquí llevo atascado bastante tiempo. Ya sé que se puede cambiar la frecuencia. En algunos artículos veo que lo explicas. Pero no lo entiendo.
La clave debe estar en instrucciones que no alcanzo, como:
“TCCRdigitoB = TCCRdigitoB & dígitos | 0x_dos_dígitos”
TCCRx es un registro de control de timer. Supongo que ahí va indicado el timer que se trate (si fuera para el pin 11 y 12 en arduino mega sería el timer 1). La parate de & dígitos no se de dónde salen. Y la parte del 0x_dos_digitos pudiera referirse al divisor (1, 8, 64, 256, 1024)
En arduino mega sé que no es recomendable emplear timer 0 porque afecta a delay, millis… ni el 2 porque afecta a tone(). Pongamos, por ejemplo que se reserva para ventiladores el timer 1, por lo que podríamos usar los pin 11 y 12. Pero me pierdo con los registro de contador de tiempo: TCCRx, TCNTx, OCRx, ICRx, TIMSKx TIFRx.
Tengo entendido que se puede calcular cualquier frecuencia incluso fuera de los 31 Hz, 122 Hz, 488 Hz, 4Khz, 31Khz. Pero eso ya es otro mundo.
Lo más cerca que he estado es por aquí https://forum.arduino.cc/index.php?topic=307550.0, pero me falta base y no comprendo ni los razonamientos
Otra fuente: https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM pero esta está en inglés con lo que aún peor
Para mí, chino.
¿Qué opinas?. ¿Voy encaminado o me perdí totalmente?. ¿Una ayudita?
Saludos cordiales
Antonio Castro
Perdona que no te atendiera antes, porque he tenido que atender asuntos pendientes simultaneamente . Ahora también estoy muy liado y te tengo que pasar programas para hacer pruebas con Arduino e informacion completa sobre el tema que me preguntas pero tendría que preparartelo y ahora no tengo mucho tiempo. Te cuento lo esencial.
Los inconvenientes que mencionas en el uso de PWM en ventiladores normales los conozco y los he resuelto mediante un comportamiento del software que logra que dichos ventiladores funcionen a la menor velocidad necesaria para refrigerar a la temperatura deseada y hacerlo con el menor ruido y sin pararse por falta de potencia.
Para ello recurro a averiguar las características del ventilador y los guardo como párametros de configuración del sistema. Es un proceso sencillo.
Sigo luego.
Antonio Castro
Voy a explicar un poco mejor las diferentes opciones.
1) Ventiladores de cuatro pines.
En ellos se proporciona por un lado la alimentación de potencia con un voltaje en corriente contínua que puede ser de 12v por ejemplo, y por otro una señal de PWM a baja intensidad. a 25kHz (en realidad entre 21 y 28 KHz). Al estar por encima de lo 20KHz en todos los casos, será inaudible para los humanos, pero a mí no me gusta porque puede molestar a gatos y perros que son capaces de escuchar hasta los 30KHz. Son ventiladores que llevan en su interior una parte de electrónica para hacer el dimeo y necesitan una placa con un controlador y con un software adecuado. Suelen usarse en equipos diseñados para ventiladores de este tipo. Por ejemplo para ventilar CPUs en placas diseñadas para ello.
2) Los ventiladores de 3 pines son exactamente iduales de los de dos pines pero existe un tercer pin que emite pulsos en funcionde la velocidad de giro y con un software adecuado permite obtener las revoluciones por minuto del ventilador. No lo veo útil. En Arduino se necesitaría reservar un servicio de interrupción (creo que es malgastar ese recurso) solo para poder hacer lecturas de las revoluciones por minutos. Puedes ver un programa de ejemplo AQUI
1) Un ventilador de dos hilos es el ventilador básico. Se puede dimear usando una frecuencia que no resulte molesta y yo he elegido una muy baja apenas audible de 30Hz. No es nada molesto. Lo esencial es usar un software que tenga en cuenta las necesidades del ventilador que usamos que es lo que yo hago, porque cada ventilador es diferente.
Los ventilador no suelen arrancar hasta que se le proporciona una determinada potencia PWM, pero una vez que han arrancado la inercia hace que puedan seguir girando usando una potencia bastante menor que es muy fácil de averiguar. Basta ir subiendo la potencia y cuando empiece a girar el ventilador apuntas el valor de la potencia en ese instante. Luego empiezas a disminuir la potencia hasta ya no sea capaz de girar y en ese otro punto anotas esa otra potencia.
Para poder trabajar a muy bajas revoluciones basta con dar un pequeño impulso de vez en cuando. Yo lo hago con pulsos de una décima de segundo a plena potencia a intervalos de 5 segundos (o incluso más) porque lo que interesa es que el ventilador no se quede parado cuando le llega poca potencia. Si tiene potencia por encima del mínimo para que mantenga girando se le ayuda a empezar y a que no se pare.
También podemos establecer la máxima potencia de ventilacion para poner un límite máximo cuando el ventilador tenga más potencia de la necesaria.
Para mí no es mejor usar los ventiladores de más de dos pines. He probado con varios ventiladores de dos hilos y siempre he logrado funcionamientos muy suaves y seguros. Usando un ventilador con potencia algo sobrada se logra que normalmente el giro sea lento y eso resulta muy agradable y prolonga la vida del ventilador. Los ventiladores en ambientes húmedos no deben permanecer parados durante varios días.
Un detalle que no has comentado es que tipo de Arduino piensas usar
Manu Hernandez
Como siempre agradecido por tus comentarios.
Utilizaré arduino mega 2560. Tenía pensado emplear los pin 11 y 12 (timer 1) para ventiladores (2 ventiladores que refrigeran leds, y otros dos ventiladores mas pequeños que impulsarán/expulsarán aire a la superficie cuando la temperatura del agua sea alta, como en verano, y/o cuando la condensación sea alta).
Si no he entendido mal, planteas un movimiento suave y constante del ventilador; modificas la frecuencia a 30Hz y programas algo así (seguramente digo alguna barbaridad):
digitalWrite(pin, HIGH)
delayMicroseconds(100000)
digitalWrite(pin, LOW)
delayMicroseconds(5000000)
Pero si ese es el fin sería más fácil calcular el voltaje a aplicarle mínimo necesario para que gire y nos olvidamos de pulsos PWM.
Sigo dándole vueltas al ponerle una frecuencia de 25Khz (no tengo perros ni gatos) y con timer 1 al los pines 11 y 12 y gestionar un par de ventiladores que dimeen ellos mismos en función de la señal enviada o bien uno de dos hilos que le aplico directamente al voltaje dimeado.
**Habrá momentos que la temperatura de leds suba más por estar al 100% y otros momentos que baje con variaciones por lo que el ventilador debería responder en función de la temperatura**
¿Te entendí bien?
¿Cómo iría la instrucción para modificar la frecuencia en esos pines? -TCCRdigitoB = TCCRdigitoB & dígitos | 0x_dos_dígitos-
Saludos
Antonio Castro
Ya había escrito un artículo especial sobre el tema de los invernaderos para así poder atender mejor los comentarios de toda la gente interesada en Invernaderos. Es este:
Automatización de invernaderos con CAO.
Es en los comentarios de esa página es donde deberíamos haber comentado, pero yo con las prisas te he ido respondiendo también aquí sin darme cuenta que estábamos en la página principal de CAO. Culpa mía.
Ya tengo un código para que puedas probar lo que te propongo. Te respondo en los comentarios del artículo que acabo de mencionar y seguiremos a partir de allí.
Miguel Angel
yo en la lineas donde ponen:
const prog_char *p= (const prog_char *)fmt;
las he cambiado por:
const char PROGMEM *p = (const char PROGMEM *)fmt;
arduino 1.8.2
ya no da ningún error.
El mejor mosfet que recomiendo para el control de leds, lamparas etc. es el modelo IRL3803 , por que? miramos el datasheet del mosfet y nos dice tiene muy poca resistencia de entrada 0.006 ohms, 50W máximo sin disipador unos 25A a 12vcc max., ademas de que esta «parido» para este tipo de funcionamiento tal como control pwm de 15khz hasta mas de 100khz de los microprocesadores etc. , vamos que el mosfet no se agobia cuando le pones 3 led de 3w cada uno, los irf540, el tip41 o similares están obsoletos y se usan para amplificadores de audio etc.
Miguel Angel
en SimpleDimer con la versión Arduino 1.8.2 da error de tarjeta, hay que cambiarla de la versión 1.6.18 a la versión 1.6.11 en el gestor de tarjetas…
hay que acordarse de que si quieres compilar otro programa diferente ha que cambiarla a la ultima versión 1.6.18 que es la ultima…
errores tal como…
C:\Program Files x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp:51:1: error: this is the insn:
(insn 1555 1552 1558 71 (set (mem:QI (post_dec:HI (reg/f:HI 32 __SP_L__)) [0 S1 A8])
(subreg:QI (reg/f:HI 892) 1)) sketch\CaoSimDim_Dimer.cpp:255 1 {pushqi1}
(expr_list:REG_ARGS_SIZE (const_int 9 [0x9])
(nil)))
en linux da otro tipo de error pero es el mismo
Saludos Miguel Ángel
José María Durán
Me presento soy José de Argentina C.A.B.A tengo 57 años ebanista y mi acuario funcionando con luz de LED con 6 líneas de diferente dimeo, no que me cuesta es poder poner otros accesorios para automatizar mi acuario plantado.
Me encantaron sus proyectos y empecé con CAO BT.
LOGRO todas las pruebas hasta las pruebas N° 3 pero tengo un LCD I2C 20 X 4 y no encuentro donde cambiar el 16 x 2 x el 20 x4.
El monitor lo e probado con un programita de prueba y funciona bien el Bluetooth también lo e configurado pero colge con el LCD que es lo que compre x que lo necesitaba para cao 1.
Agradeceré si me puede ayudar.
Antonio Castro
Creo recordar que todo el programa está diseñado para el LCD 16 x 2.
Es decir solo mando información a las dos primeras líneas del LCD.
Lcd.PrintAt(0, …
Lcd.PrintAt(1, …
Esto debería mostrar la informacion en las dos primeras líneas de un LCD 20 x 4.
El refresco de informacion suele ocurrir dentro de la funcion Monitor()
Si no sale ninguna informacion hay que mirar si la
En las primeras líneas del modulo CaoRefr_Lcd.cpp se inicializa la dirección I2C del LCD.
#include // Para I2C // Para el LCD 16×2 (uso opcional)
#include
#ifndef LCD_ADDRESS
#define LCD_ADDRESS 0x27 // Direccion por defecto I2C para LCD_LIQUIDCRISTAL
#endif
Dependiendo del hardware empleado podría ser necesario usar otra dirección.
Me alegra mucho que fueras capaz de llegar tan lejos y espero que des con el problema.
Te paso un programita que va probando todas las direcciones I2C para localizar dispositivos I2C conectados al bus.
Te puede servir para averiguar la dirección I2C de un dispositivo.
/****************************************************
I2C LCD PROBLEM WITH ARDUINO – SOLVED
By: Ahmed Abseed for arduiny.com
http://arduiny.com/i2c-lcd-problem-with-arduino-solved/
*****************************************************/
#include
#include
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println(«I2C Scanner»);
}
void loop(){
byte error, address;
int nDevices;
Serial.println(«Scanning»);
nDevices = 0;
for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // wait 5 seconds for next scan }
José María Durán
Muy agradecido por la información , nunca antes trabajara con un programa con pestañas adicionales al descubrir las pestañas pude corregir y cambiar 16 x2. Por 20×4 i funciono sigo con las pruebas ya estoy en la tercera ul próximo paso probar Bluetooth.
Mu interesante du informacion y muy clara después de hacer andar este cacharro como dicen en España y aun que no conozco soy hijo de españoles muy orgulloso, intentaré hacer CAO .