Acuariofilia Madrid

Versión completa: Aula Arduino para principiantes.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Estamos hablando de segundos; igual no es necesario ese nivel de exactitud en un acuario, igual que 1/2 grado en la temperatura...

Este reloj tiene mas de 5 años...
[Imagen: P1060620_zps3f585697.jpg]

Esta colocado aquí dentro.
[Imagen: P1060612_zpsd63e302e.jpg]

De veras, buscar otro tipo de reloj y olvidarnos de problemas.
Impresionante foto de tu instalación. Todo muy ordenadito.

Habrá que recurrir a ti para preguntar donde comprar ciertas cosas que parece tienes algún tipo de formación o preparación técnica sobre estas cosas.

Respecto al RTC. Yo no repetiría comprando un componente que no dió el resultado apetecido, pero realmente no sé si buscar otro tipo de reloj solucionaría el problema porque no tengo claro que el problema tenga que ver con el tipo de reloj sino con el fabricante y el modelo.

[Imagen: 0X51MZC.jpg]

Soy incapaz de saber si existen diferencias significativas entre placas parecidas pero no necesariamente iguales en prestaciones.

Prefiero no repetir fabricante porque ya me ha pasado comprar distintas cosas en un mismo fabricante y quedar decepcionado.

Me parece normal que un RTC que además trae una EEPROM y que se venda más barato que la mayoría de productos similares, sea en realidad un producto de baja calidad que pese a ello se venderá como churros. Son productos diseñados para pequeños consumidores como nosotros. No somos el tipo de cliente exigente. Somos más bien el tipo de cliente despistado y masoquista que ante la duda se tira a lo barato sin pensar más.
Hola de nuevo.

Creo que ya lo comenté, pero mi formación en temas electrónicos o de programación son básicos, pero me considero muy cabezón, e internet es un aula gigantesca y gratuita.

En muchos foros se trata el tema de Arduino y la acuariofilia, como portalpez, acuavida, todomarino, the planted tank, reefcentral, etc.

El controlador que ves está basado en el desarrollado en el foro Portalpez, con algunas modificaciones mías, a parte del dimeo de las luces, controla los ventiladores de la pantalla y del acuario, relé del calentador y del CO2, nivel del acuario y de una bombona de relleno.

Muchos conceptos, de entrada se me escapan, pero después intento documentarme y hacer pruebas. En tema del reloj, por ejemplo, recuerdo que Fernando, el diseñador del controlador Ferduino, fue quien comento el conflicto entre las memorias epromm del reloj y del Arduino. Yo no se argumentar esa afirmación, pero viendo que mis relojes fallaban mas que una escopeta de feria, compré otro reloj sin epromm (mucho mas caro) y se acabaron los problemas.

http://pages.ebay.com/link/?nav=item.vie...10&alt=web

Antonio, de tu controlador tengo que decirte que intentando descifrar el código, veo que estas varios niveles superiores de otros códigos que corren por la red; a mi, por ejemplo, me gusta que uses una simple pantalla I2C de 20*4 líneas, simple y visual. Seguiré su evolución para intentar adaptarlo a un nuevo controlador y pantalla que estoy ya trasteando.

Saludos.
Hola , buenos dias, despues de unos cuantos dias de reposo por el accidente de moto que tuve, hoy me he levantado y me he puesto con el dimmer 1c , vaya currada antonio , eso se merece una ola como se dice aqui, pues solo una cosa , he probado el test de dimeado y al principio empieza por el 55 % y despues se apaga de golpe para el periodo de noche , luego me hace otra vez el alba desde 0% hasta 100% ( hasta hay correcto) , pero no me hace el ocaso ,¿ es correcto esto que digo?.......Supongo que tu lo habras probado todo antes, pero el test a mi no me sale completo.
Gracias.
Te voy a dar mi humilde opinión sobre este tema.

Las librerías que existen para Arduino son estupendas, son básicamente controladores especializados para algún dispositivo hardware o para gestionar algún protocolo y están bien programadas.

Por contra, las aplicaciones que he visto en Internet realizadas para Arduino me han parecido en general demasiado básicas. Me pregunto si habrá otras muchas aplicaciones, más sofisticadas y que no estén siendo liberadas bajo licencia de software libre.

Una de las cosas que más me ha extrañado es que algunos temas importantes, parecen no estár suficientemente desarrollados en Internet. Por ejemplo, el uso de la memoria Flash (PROGMEM) para ahorrar la escasa SRAM. Solo he visto cuatro cosillas en Internet.

Yo la había usado la PROGMEM para meter una tabla de atributos de parámetros, para salidas por el puerto Serial, porque el módulo Serial ya viene preparado para aceptar que le pasen datos desde la PROGMEM, y poco más.

Con motivo de desarrollar la versión reducida para Arduino UNO he tenido rebañar al máximo la SRAM. He metido en el modulo del display funciones que me permiten hacer uso de la PROGMEM.

Muchos de los datos enviados al LCD son en todo o en parte cadenas de texto que puede estar en PROGMEM. Esto afectó a un montón de código desperdigado por toda la aplicación, pero en su conjunto supone un gran ahorro del recurso más escaso en esta plataforma, la SRAM.
Un offtopic

Espero que la recuperación sea leve Juanma .
(09-08-2014, 09:39 AM)juanma1970 escribió: [ -> ]Hola , buenos dias, despues de unos cuantos dias de reposo por el accidente de moto que tuve, hoy me he levantado y me he puesto con el dimmer 1c , vaya currada antonio , eso se merece una ola como se dice aqui, pues solo una cosa , he probado el test de dimeado y al principio empieza por el 55 % y despues se apaga de golpe para el periodo de noche , luego me hace otra vez el alba desde 0% hasta 100% ( hasta hay correcto) , pero no me hace el ocaso ,¿ es correcto esto que digo?.......Supongo que tu lo habras probado todo antes, pero el test a mi no me sale completo.
Gracias.

Ni idea del accidente, ha debido ser un buen castañazo, espero que estés bien.

Respecto a lo que me cuentas del programa:
Lo tengo probado en mi Arduino MEGA.
Al finalizar la inicialización informa de cuanta memoria libre queda.

Es importante que me digas cuanta memoria dice que te queda.

La cantidad entre paréntesis ignorala.

Tiene que hacer la simulación de los cuatro períodos.

En la primera línea aparece la hora simulada.
En la segunda línea aparece el nombre del periodo en curso junto al porcentaje del mismo transcurrido.

Empieza con el Ocaso al 55% luego hace la noche completa, luego el alba, luego el dia, luego el ocaso y termina haciendo un pequeño trocito de la noche.

Para que la simulación no sea aburrida, durante los periodos largos (dia y noche), el reloj irá mucho más rápido.

Si te fijas en la progresión del dimeo indicada en el LCD durante la simulación, este varía linealmente entre 0 y el valor máximo durante el aba, y a la inversa durante el ocaso.

No obstante, la variación de la intensidad de luz con niveles de dimeo muy bajos aparenta ser más brusca.

Ignoro si te estás dejando llevar por ese efecto óptico. Eso se puede corregir. De hecho, yo lo uso en mi acuario con una función exponencial.

Se me olvidaba, Juanma, tienes la hora de inicio del alba que por defecto es a las 8:15:00
y la hora de inicio del ocaso a las 20:15:00

Los crepúsculos por defecto duran tres cuartos de hora y si pones alguna de esas hora podrás asistir al dimeo a velocidad real.
Vaya mala suerte compañero, que te recuperes, ya se sabe que la carrocería de la moto es nuestro cuerpo.

Sobre el dimeo; tengo unos leds como estos:
[Imagen: T2eC16FEFIoMJBB4BSRVMeUcG60_121_zps2264248a.jpg]
En color blanco, para hacer pruebas. Los conecto al TIP141, y al valor 1 de pwm ( 1 de 255), ya hace bastante luz. Imagino que no es "problema" del Arduino o del código, si no que el led no puede arrancar con menos luz.

Antonio, si no estoy mal informando, el Arduino fue diseñadora para la ens eñanza, y los acuarofilos le damos un uso muy diferente, igual se le exige demasiado, no te parece?.

Saludos

Aun no he podido montar el circuito y probar tu código. Espero hacerlo el lunes.
(09-08-2014, 05:10 PM)xavi escribió: [ -> ](...)
En color blanco, para hacer pruebas. Los conecto al TIP141, y al valor 1 de pwm ( 1 de 255), ya hace bastante luz. Imagino que no es "problema" del Arduino o del código, si no que el led no puede arrancar con menos luz.

Antonio, si no estoy mal informando, el Arduino fue diseñadora para la ens eñanza, y los acuarofilos le damos un uso muy diferente, igual se le exige demasiado, no te parece?.

Saludos

Aun no he podido montar el circuito y probar tu código. Espero hacerlo el lunes.

Se trata de un efecto óptico debido a la persistencia de la retina descubierto por Peter Mark Roget y aplicado a la generación de imágenes animadas. El ojo continua viendo luz después de una décima de segundo antes de desaparecer por completo. Para el cine actualmente se usa 25 imagenes por segundo. La frecuencia PWM usada generalmente en Arduino es 980 Hz en los pines 5,6 3,11 o de 490 para otros pines, que se corresponden con períodos de aproximadamente 2 milisegundos o 1 milisegundo. Es decir, mucho más rápido que nuestra retina.

Es de suponer que para los cloroplastos de las plantas la cantidad de energía luminosa recibida será lo que cuente. Las plantas y los peces no van a tener la misma sensación de cantidad de luz usando PWM. Probablemente la retina de los peces, al igual que nosotros, van a rellenar en gran medida esos huecos de un milisegundo de oscuridad con la sensación de recibir luz.

El tiempo total que tarda en desaparecer por completo esa sensación depende de la intensidad de la luz. Todos sabemos lo que nos pasa si nos da el fogonazo de un flash en los ojos o si un coche nos deslumbra con los faros.

Yo para paliar en parte este efécto óptico del PWM con LEDs en Arduino, aplico una función exponencial a la hora de dimear, y eso hace mejorar un poco el efecto visual.

Hace que parezca que el dimeo más gradual para valores intermedios de dimeo. El problema es que a valores de dimeo muy bajos no hay solución, se sigue notando bastante porque el PWM es muy rápido y solo disponemos de 256 valores diferentes de dimeo. Hagamos lo que hagamos, las diferencias de dimeo a valores muy bajos se van a notar mucho.

La función exponencial es la siguiente.

Código:
// *******************************************************************************
// Un valor entre 0..255 será transformado en otro dentro del mismo rango, pero
// con un valor proporcional al cuadrado del valor pasado como argumento. Esto se
// hace así para minimizar el efecto óptico de la persistencia en la retina que
// hace que tiende a apreciarse la existencia de una luz superior a la cantidad de
// luz recibida cuando se usan Leds com PWM que no tienen la inercia propia de los
// filamentos incandescentes.
// *******************************************************************************
int Conv_Led_PWM_Exp2(int i){
    float f;
    
    f=  ( (float) i * (float) i) / 253.0;
    if (f>255.0)
        return 255;
    else
        return (int) f;
}
A la hora de hacer AnalogWrite() le pasaríamos un valor alterado por esa función.

// analogWrite(_PinX[Led], ValOut);
analogWrite(_PinX[Led], Conv_Led_PWM_Exp2(ValOut) );

Usar la función lineal directa o la función exponencial, es algo podría hacerse depender un parámetro configurable, pero lo lógico es que esto sea algo que se elija una vez y no deseemos estar modificando.

Me interesaba dejarlo tal y como se usa normalmente en Arduino, para ver si surgía nuevamente este tema del cual ya habíamos hablado hace tiempo y que afecta a todos los usuarios del dimeo con Arduino.

Respecto al diseño de Arduino para la enseñanza
En mi opinión, el hecho de estar diseñado para la enseñanza solo significa que es mucho más robusto de lo estrictamente necesario. Hay pocas formas de cargarse un Arduino.

La potencia de Arduino puede ser algo limitada para algunas aplicaciones profesionales pero en este tema siempre es una cuestión de calidad precio y la relación de calidad precio de Arduino es fantástica. Es muy versatil.

Se da la paradoja de que ha salido el Arduino DUE mucho más potente en casi todos los sentidos que el Arduino Mega 2560 y curiosamente, es incluso más barato que el MEGA 2560.

El DUE con arquitectura de 32 bits es otro mundo. Presenta ciertas incompatibilidades con la línea anterior de 8 bit porque trabaja con voltajes de 3.3v en entradas y salidas, pero no hay color. Hay un gran salto cualitativo entre ambas gamas.
(09-08-2014, 10:14 AM)Antonio Castro escribió: [ -> ]
(09-08-2014, 09:39 AM)juanma1970 escribió: [ -> ]Hola , buenos dias, despues de unos cuantos dias de reposo por el accidente de moto que tuve, hoy me he levantado y me he puesto con el dimmer 1c , vaya currada antonio , eso se merece una ola como se dice aqui, pues solo una cosa , he probado el test de dimeado y al principio empieza por el 55 % y despues se apaga de golpe para el periodo de noche , luego me hace otra vez el alba desde 0% hasta 100% ( hasta hay correcto) , pero no me hace el ocaso ,¿ es correcto esto que digo?.......Supongo que tu lo habras probado todo antes, pero el test a mi no me sale completo.
Gracias.

Ni idea del accidente, ha debido ser un buen castañazo, espero que estés bien.

Respecto a lo que me cuentas del programa:
Lo tengo probado en mi Arduino MEGA.
Al finalizar la inicialización informa de cuanta memoria libre queda.

Es importante que me digas cuanta memoria dice que te queda.

La cantidad entre paréntesis ignorala.

Tiene que hacer la simulación de los cuatro períodos.

En la primera línea aparece la hora simulada.
En la segunda línea aparece el nombre del periodo en curso junto al porcentaje del mismo transcurrido.

Empieza con el Ocaso al 55% luego hace la noche completa, luego el alba, luego el dia, luego el ocaso y termina haciendo un pequeño trocito de la noche.

Para que la simulación no sea aburrida, durante los periodos largos (dia y noche), el reloj irá mucho más rápido.

Si te fijas en la progresión del dimeo indicada en el LCD durante la simulación, este varía linealmente entre 0 y el valor máximo durante el aba, y a la inversa durante el ocaso.

No obstante, la variación de la intensidad de luz con niveles de dimeo muy bajos aparenta ser más brusca.

Ignoro si te estás dejando llevar por ese efecto óptico. Eso se puede corregir. De hecho, yo lo uso en mi acuario con una función exponencial.

Se me olvidaba, Juanma, tienes la hora de inicio del alba que por defecto es a las 8:15:00
y la hora de inicio del ocaso a las 20:15:00

Los crepúsculos por defecto duran tres cuartos de hora y si pones alguna de esas hora podrás asistir al dimeo a velocidad real.
Gracias por vuestro interes respecto al castañazo como dice antonio-good.gif parece que me han pasado unos cuantos elefantes por encima ....pero voy recuperandome..no ha sido nada grave ...
Ayer no me di cuenta del periodo...(estaba echo polvo)...hoy me he puesto otra vez y el fotoperiodo esta mal, colgare una foto , por eso me hacia el proceso y se cortaba, sera cuestion de modificar parametros en el codigo, la memoria libre es de 315.
Joder como me cuesta escribir.....chao.
[Imagen: 3GlIBcX.jpg]
Donde se cambian los parametros de hora?
(10-08-2014, 11:49 AM)juanma1970 escribió: [ -> ]Gracias por vuestro interes respecto al castañazo como dice antonio-good.gif parece que me han pasado unos cuantos elefantes por encima ....pero voy recuperandome..no ha sido nada grave ...
Ayer no me di cuenta del periodo...(estaba echo polvo)...hoy me he puesto otra vez y el fotoperiodo esta mal, colgare una foto , por eso me hacia el proceso y se cortaba, sera cuestion de modificar parametros en el codigo, la memoria libre es de 315.
Joder como me cuesta escribir.....chao.

Pufff..., me alegro que no fuera grave, pero si te cuesta escribir y ya hace de eso algunos días ha tenido que ser un trompazo de campeonato. -blink.gif

Lo de trompazo lo digo por lo de los elefantes. Pobrecillos que susto se habrán llevado.

Respecto a lo que comentas del fotoperiodo. El código viene preparado para que por defecto funcione con un fotoperiodo de 12 horas y debería funcionar bien.

El módulo fotoperiodo guarda tres parametros en la EEPROM con los siguientes valores por defecto.

Por la imagen da la impresión que algún dato no lo ha guardado bien en la EEPROM.

En cualquier caso, tómatelo con calma.
Si te aburres y quieres seguir cacharreando te sugiero lo siguiente:

1) Entra en el menú "Info. Fotoperiodo"
Aparecerán 7 datos:

IniAlba
IniDia
IniOcaso
IniNoche
Fotopr=7200
Zenit= 9000
Crpsc=450

Los cuatro primeros, iniAlba, iniDia, IniOcaso e IniNoche (aparecen tambien durante el arranque) y se calculan a partir de los tres siguientes Fotopr, Zenit, Crpsc que son los importantes y son modificables por menú. He puesto los valores por defecto que debería funcionar bien, intenta configurarlo de esa forma. Algo está pasando.

2) Entra en el menú de configuración y echa un vistazo para saber lo que puedes modificar desde ese menú.
(10-08-2014, 12:24 PM)Antonio Castro escribió: [ -> ]
(10-08-2014, 11:49 AM)juanma1970 escribió: [ -> ]Gracias por vuestro interes respecto al castañazo como dice antonio-good.gif parece que me han pasado unos cuantos elefantes por encima ....pero voy recuperandome..no ha sido nada grave ...
Ayer no me di cuenta del periodo...(estaba echo polvo)...hoy me he puesto otra vez y el fotoperiodo esta mal, colgare una foto , por eso me hacia el proceso y se cortaba, sera cuestion de modificar parametros en el codigo, la memoria libre es de 315.
Joder como me cuesta escribir.....chao.

Pufff..., me alegro que no fuera grave, pero si te cuesta escribir y ya hace de eso algunos días ha tenido que ser un trompazo de campeonato. -blink.gif

Lo de trompazo lo digo por lo de los elefantes. Pobrecillos que susto se habrán llevado.

Respecto a lo que comentas del fotoperiodo. El código viene preparado para que por defecto funcione con un fotoperiodo de 12 horas y debería funcionar bien.

El módulo fotoperiodo guarda tres parametros en la EEPROM con los siguientes valores por defecto.

Por la imagen da la impresión que algún dato no lo ha guardado bien en la EEPROM.

En cualquier caso, tómatelo con calma.
Si te aburres y quieres seguir cacharreando te sugiero lo siguiente:

1) Entra en el menú "Info. Fotoperiodo"
Aparecerán 7 datos:

IniAlba
IniDia
IniOcaso
IniNoche
Fotopr=7200
Zenit= 9000
Crpsc=450

Los cuatro primeros, iniAlba, iniDia, IniOcaso e IniNoche (aparecen tambien durante el arranque) y se calculan a partir de los tres siguientes Fotopr, Zenit, Crpsc que son los importantes y son modificables por menú. He puesto los valores por defecto que debería funcionar bien, intenta configurarlo de esa forma. Algo está pasando.

2) Entra en el menú de configuración y echa un vistazo para saber lo que puedes modificar desde ese menú.
Vale , cuando entro en configuracion me sale lo siguiente
Fotopr= 0
Zenit= 9000
Crpsc= 450
Intento modificar fotopr y subo de 100 en 100 hasta 7200 confirmo y despues me vuelve a salir 0 , osea que por alguna razon no me deja modificar ese dato.
Se deberia de modificar por codigo ...no?
[Imagen: 6KSkJ1e.jpg]
Puede ser que el rtc no me funcione?
Es raro que unos parámetros tomaran el valor correcto y otros no.
Se usa el mismo procedimiento para todos.

Algo no va bien. Intenta modificar ligeramente los otros parámetros para ver si te deja.
Intenta usar la opción de restaurar los valores por defecto para todos los parámetros.

Si continúa Fotopr=0 sugiero que modifique la dirección de la EEPROM en el fichero
'CaoDim1C_Parm2 y en lugar de ...

#define POS_HEADER 300

cambia esa linea por

#define POS_HEADER 200

Luego recompila y vuelve a cargarlo al Arduino. Ejecuta activando la consola Serial porque puede aparecer en ella algún mensaje de error que nos dé más pistas.

Esta prueba sería para descartar que alguna posición de tu memoria EEPROM esté inservible.
(09-08-2014, 09:50 AM)PECES TROPICALES escribió: [ -> ]Un offtopic

Espero que la recuperación sea leve Juanma .

Gracias.
(10-08-2014, 06:47 PM)Antonio Castro escribió: [ -> ]Es raro que unos parámetros tomaran el valor correcto y otros no.
Se usa el mismo procedimiento para todos.

Algo no va bien. Intenta modificar ligeramente los otros parámetros para ver si te deja.
Intenta usar la opción de restaurar los valores por defecto para todos los parámetros.

Si continúa Fotopr=0 sugiero que modifique la dirección de la EEPROM en el fichero
'CaoDim1C_Parm2 y en lugar de ...

#define POS_HEADER 300

cambia esa linea por

#define POS_HEADER 200

Luego recompila y vuelve a cargarlo al Arduino. Ejecuta activando la consola Serial porque puede aparecer en ella algún mensaje de error que nos dé más pistas.

Esta prueba sería para descartar que alguna posición de tu memoria EEPROM esté inservible.
Nada no me deja modificar nada.
<<BEEP>>
Ini. Botonera.
Botonera OK.
<Ring>
PARM PROGMEM
MAGIC=1234512345
TIMESTAMP=1251071185
Fecha de Modif. de los Parametros=23/08/2009 23:46:25
MAGIC=1234512345
TIMESTAMP=1251071185
Fecha de Modif. de los Parametros=23/08/2009 23:46:25
=========================
Fecha actu.parms
23/08/2009 23:46:25
Numero de parametros =5
-------------------------
0) Ftperiod =0
1) Zenit =9000
2) Crepusc =450
3) MaxDim =250
4) DimRefrig =5
=========================
<<BEEP>>

Dimmer1C (SubprCAO)
Fichero Compilado
Aug 6 2014 09:08:45
<<BEEP>>

Ini. Dimmer.
Inicializando ciclo de 24 horas
Config.Fotoper
IniAlba=14:15:00
IniDia=15:00:00
IniOcaso=14:15:00
IniNoche=15:00:00
<<BEEP>>
Fotpr=0 00:00:00
Zenit=9000 15:00:00
Crpsc=450
<<BEEP>>
<<BEEP>>

RTC is NOT running!
FIN Setup() (35s)
MemLibre=315 (-5253)
<<BEEP>>

<<BEEP>>
Fin Inicializacion
Tengo claro que el RTC no me funciona , he cambiado la pila y nada , ya tengo otro pedido que me llegara mañana, pero no creo que sea por eso, de todas formas ya he cambiado ese parametro y se queda igual.

#include <Arduino.h>
#include <EEPROM.h>
#include <avr/pgmspace.h>
#include "CaoDim1C_RTC.h"

#define MAXL_IDENT 10
#define MAGIC 1234512345UL
#define POS_HEADER 200
Supongo que te referias a esta ultima linea.