QUEDADA AM - ABRIL

Quedada conjunta con nuestros amigos de la AEA, que nos ofrecerán una interesante charla.
DOMINGO, 7 DE ABRIL. ¡APÚNTATE YA!

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
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 428058
#16
Como dices. Cuando funcione primero esto. Ya se vera el restode cosas.
Tambien querria poner un sensor de temperatura para dentro de la caja para que en caso de subir se enciendan los ventiladores que he dejado por si acaso.
Pero lo primero es lo primero
#17
Os paso una función de interpolación.

Un valor del día puede venir dado por un valor entero o un valor long. Dado que los calculos intermedios podrían desbordar el máximo valor de un entero, suelo interpolar con long. (es una costumbre).
Código:
// *******************************************************************************
// InterpolacionLineal del valor del dimeo pata un momento TimeX dentro de un periodo de
// tiempo  Time0..TimeF, sabiendo que al comiezo del periodo el valor del dimeo valdrá
// Dim0 y al Final DimF
//
// Uso:
//      DimX= InterpoLineal(Time0, TimeX, TimeF, Dim0, DimF)
// *******************************************************************************
int InterpoLineal(long Time0, long TimeX, long TimeF, long Dim0, long DimF){
    return (int) ( ((TimeX-Time0)*(DimF-Dim0) / (TimeF-Time0)) + Dim0 );
}

Yo voy a integrar todo lo que pueda en la caja que hará de pantalla de LEDs y en lugar de metacrilato voy a usar PVC espumado de un centímetro. Se trabaja como la madera. El metacrilato es un pelín más puñetero cuando no se tienen buenas herramientas.

Aitor el aspecto de tu montaje tiene una pinta estupenda. Eres un manitas, no como yo. ;-)

Yo tengo la idea de usar cuatro canales de dimeo para los LEDs. Inicialmente pensé en usar rojo, verde y azul + blanco cálido (todos ellos en muy diferentes proporciones.

De las primeras pruebas he visto que a pesar de usar el verde en muy poca medida y casi Siempre superpuesto con el rojo, no me gusta. Yo suelo ir variando el tono durante el amanecer que en mi caso durará una cantidad de tiempo configurable. Por defecto he definido 45 minutos de duración crepuscular tanto para el alba como para el ocaso que tendrán un comportamiento simétrico en cuanto a cambio de tonalidades de luz.

Estoy pensando cambiar los LEDs verdes por LEDs amarillos.

Para mí cada Arduino se comportará como una unidad central autosuficiente con independencia del número de acuarios que controle.

Por esa razón, mi enfoque no es el de usar un único reloj para varios Arduinos, sino el de que cada Arduino lleve su propio reloj de tiempo real y que todos ellos se puedan sincronizar, (aunque eso será para una versión posterior).

Mi primera versión no admitirá controles por puerto serie ni mucho menos mediante interfaz web. Mi primera versión usará un menú de botones para poder configurar el funcionamiento del controlador con parámetros que se guardarán en la EEPROM del Arduino, para ser recuperables en caso de caída de corriente.
#18
Realmente hace falta una interpolación? Si la función devuelve el valor de intensidad dada la hora del día ya no haría falta interpolar. Cada vez que se llamase la función se obtendría el valor de intensidad en función de la hora del día (otros parámetros se podrían configurar pero una vez establecidos, sería la hora la que diese la intensidad)
#19
(08-03-2014, 11:58 PM)carlosterre escribió: Realmente hace falta una interpolación? Si la función devuelve el valor de intensidad dada la hora del día ya no haría falta interpolar. Cada vez que se llamase la función se obtendría el valor de intensidad en función de la hora del día (otros parámetros se podrían configurar pero una vez establecidos, sería la hora la que diese la intensidad)

La interpolación te permite definir una función mediante puntos concretos. La forma más sencilla de hacer esto es definiendo la función mediante tramos rectos entre puntos. Son cálculos muy ligeros para el procesador y dan una buena aproximación.

En la naturaleza la variación de la luz diurna está afectada por el cruce de las nubes por delante del sol.

La precisión en este tipo de funciones no parece algo importante. Las funciones para la iluminación pueden definirse a ojo según nuestros gustos.

Lo que yo creo que puede interesar más, sería mantener una duración de unos 45 minutos a las transiciones crepusculares (o algo más) para dar tiempo a ciertos cíclidos que cuidan a su prole. Imita a la naturaleza y daría tiempo a los papas de acostar a sus nenes.

Hay muchas formas de definir una función: Una vez definido el conjunto de puntos. Se podría hacer una interpolación polinimial pero siempre resultará más costoso para el procesador.

El caso de interpolación mas ambicioso sería el de interpolar por mínimos cuadrados. Se usa cuando se tiene una nube de puntos (fruto de mediciones imprecisas por ejemplo) y se desea obtener una función que se ajuste lo mejor posible a la curva ideal que responde a esos valores en ausencia de errores de medida.

Para la luz solar no tiene mucho sentido. Esto sien embargo resulta idea para el ajuste de sensores analógicos.

1) Haces unas medidas previas, 2) obtienes una función y 3) usas la función obtenida para leer el valor del sensor analógico.

Lo que hay que considerar, es que estamos usando un procesador de 8 bits con muchas limitaciones (Los floats tienen una precisión de 6 o 7 dígitos decimales) y algunos de estos algoritmos, solo funcionan manejando valores reales con una cantidad muy grande de decimales significativos. De otra forma, en los cálculos matriciales se pierde tanta precisión que el polinomio obtenido no cumple las espectativas. (La rama de la mátemática que estudia estos métodos de interpolación se llama cálculo numérico).

Con Arduino DUE de 32 bits muchas de estas limitaciones podrían mejorar, ya que es algo que depende del procesador y del compilador que se use.
#20
Ya, pero la frecuencia a la que se hacen los cambios de luz en el acuario permite al procesador hacer tantos cambios complejos como se quiera... No tenemos que olvidar que un arduino es como HAL9000 cuando lo comparamos con la potencia de cálculo del módulo Apolo de la NASA que llego a la luna! Big Grin
#21
Alucinado me teneis.........
Una pregunta:
Se podria con una señal de entrada hacer que arduino saque sinultaneamente dos salidas?
Entiendo que si se podria.
Lo digo porque pudiera encender mis led blancos y rojos a la vez.
Aunque el dimeo de cada uno de ellos tenga una subida en tiempo y en pwm disrintos.
Lo que no se como podria hacer que el led rojo tras 20min funcionando se apagase ya que no lo necesitaria encendido puesto que el led blanco ya estaria haciendo su amanecer.

Y otra cosa mas;
Si uso dos lineas de tiempo a la vez. No multiplicare el tiempo por dos ya que arduino lee primero una linea.luego hace un paron y luego lee la otra. Etc etc etc.
#22
(09-03-2014, 11:56 AM)carlosterre escribió: Ya, pero la frecuencia a la que se hacen los cambios de luz en el acuario permite al procesador hacer tantos cambios complejos como se quiera... No tenemos que olvidar que un arduino es como HAL9000 cuando lo comparamos con la potencia de cálculo del módulo Apolo de la NASA que llego a la luna! Big Grin

No hay ninguna forma en que puedas evitar la pérdida de precisión. La aritmética en coma flotante no existe en el procesador de Arduino. Está emulada por el compilador. Yo intenté usar interpolación polinomial por mínimos cuadrados y los resultados eran decepcionantes.

Una vez obtenida la función de interpolación el coste para el procesador no es muy alto para una única lectura, el problema es el resultado de lecturas únicas es horrible y hay que promediar decenas de ellas oi mejor aún cientos de ellas. La función de interpolación se calcula una sola vez durante la inicialización del sistema y le cuesta un poquito.

Intenté usar simples termistores NTC como sensores de temperatura. Se puede hacer con resultados razonables, pero yo harto de estrujar las posibilidades de los termistores con Arduino he decidido confiar en los sensores digitales DS18x20. Concretamente heoptado por sensores DS18B20 de Dallas.

Rango de temperaturas de funcionamiento de -55 °C a 125 °C.
Admite una precisión máxima de 12 bits lo que da un error máximo de (+/-) 0,0625 ° C . Usa un protocolo OnWire que sobre una única linea te permite poner tantos sensores como quieras ya que cada uno viene de fabrica con una clave grabada a modo de dirección en el bus. Al ser digital es bastante inmune a las interferencias cosa que en el termistor siempre da problemas y te obliga a promediar cientos de lecturas para poder obtener una lectura que ni se aproxima a esa precisión. El DS18B20 es una maravilla que cuesta del orden de cuatro euros y que tiene forma de transistor.

El bucle principal de mi sistema debe tardar 5 segundos (para refrescar la información del display) y parece mucho tiempo, pero si empiezas a derrochar tiempo de proceso en cada función que implementas, al final no llegas. Haciendo las cosas bien, sobra tiempo para eso y para mucho más. Todos los recursos del procesador deben ser optimizados a medida que desarrollas, porque la acumulación de pequeños derroches de los mismos, te puede llevar a tener que revisar todo tu programa cuando este alcance cierto tamaño.

Estamos acostumbrados a infravalorar estos factores porque usamos ordenadores mucho más potentes.

(09-03-2014, 12:23 PM)aitorlaguna escribió: Alucinado me teneis.........
Una pregunta:
Se podria con una señal de entrada hacer que arduino saque sinultaneamente dos salidas?
Entiendo que si se podria.
Lo digo porque pudiera encender mis led blancos y rojos a la vez.
Aunque el dimeo de cada uno de ellos tenga una subida en tiempo y en pwm disrintos.
Lo que no se como podria hacer que el led rojo tras 20min funcionando se apagase ya que no lo necesitaria encendido puesto que el led blanco ya estaria haciendo su amanecer.

Y otra cosa mas;
Si uso dos lineas de tiempo a la vez. No multiplicare el tiempo por dos ya que arduino lee primero una linea.luego hace un paron y luego lee la otra. Etc etc etc.

La técnica que mencionas se ouede usar tanto para salidas como para entradas y se llama multiplexación.

Hay circuitos especializados para eso. No he probado ninguno y no podría recomendarte nada, pero buscando un poco y para que puedas ver cual es la idea, creo que lo que buscas se parece a esto:
MODULO ARDUINO MUX SHIELD II SPARKFUN - MULTIPLEXOR
#23
Lo decía en el contexto de la función del compañero que esta haciendo una rampa para iluminar con ciclos de espera de 20 segundos entre cambios Wink

En cualquier caso: yo estoy aquí de mirón!

Así que: > nul cuando lo que diga sea una tontería o no aplique! Big Grin
#24
Los mirones y los preguntones son muy bien venidos. Big Grin
Se trata de enseñar, aprender y crear afición a estos temas de automatización del control de acuarios.

Las consideraciones que yo estoy haciendo son generalidades que conviene tener en mente.

Un controlador de acuario que ne mi opinión nunca estará totalmente finalizado en la mente de un diseñador. Siempre cabe hacer un montón de mejoras y ampliaciones y lo que parece suficiente hoy dentro de unos meses se puede quedar corto.

Mi proyecto, aun en pañales, busca que sea muy fácil de ir ampliando funcionalidades porque estoy seguro de que eso será muy necesario y será lo que proporcione verdadera utilidad al proyecto.
#25
Pues este mirón agradece vuestra charla. ¡Me estáis recordando un montón de cosas que tenía en el trastero de mi memoria! Interpolación, cálculo numérico, multiplexor... son todos ellos conceptos que no me son ajenos pero que tenía totalmente olvidados. Gracias a vosotros estoy revisando el trastero, sacándolos, limpiándolos y recordando su uso.
#26
Genial -happy.gif
#27
Hola, soy nuevo en este foro, me he iniciado en el tema de atardecer amanecer con arduino y ya lo he comprado todo , (solo falta que llegue) pero tengo dudas a la hora de programar el arduino cuando llegue el momento y espero que alguno de vosotros me podais hechar un cable.
Ahora lo que tengo es una pantalla de leds de 48 leds de 3w con dos fuentes de alimentacion deam well 60-48 D con dos potenciadores y quiero poner el arduino de la siguiente forma:

[Imagen: KRUSDUINO_D2.jpg]
Como he dicho antes , ya lo tengo todo el circuito montado , solo colocar el reloj , arduino y lcd, espero que me ayudeis , gracias.
#28
Hola Antonio se agradece que nos dediques parte de tu tiempo.
Hay alguna posibilidad para aquellos que no saben nada, pero nada de programación, se acerquen a este mundillo?
Me refiero sobre todo a lecturas recomendadas, paginas dedicadas al arduino con ejemplos prácticos básicos, etc.
#29
Hola vairo , yo estoy igual que tu.
#30
(24-03-2014, 11:52 PM)juanma1970 escribió: Hola, soy nuevo en este foro, me he iniciado en el tema de atardecer amanecer con arduino y ya lo he comprado todo , (solo falta que llegue) pero tengo dudas a la hora de programar el arduino cuando llegue el momento y espero que alguno de vosotros me podais hechar un cable.
[...]
Como he dicho antes , ya lo tengo todo el circuito montado , solo colocar el reloj , arduino y lcd, espero que me ayudeis , gracias.

Intentaré ayudarte en lo que pueda. La programación de Arduino no se me da mal.
La imagen es demasiado pequeña, solo identifico la fuente de alimentación y el RTC.

Usuarios navegando en este tema: 2 invitado(s)


Salto de foro: