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.
Las soldaduras y las clemas no deberían producir caída de tensión apreciable.
El comportamiento que describes no es que yo tengo en los míos.

La cosa es muy simple. Debes de establecer un montaje de LEDs en serie para 12V aproximadamente.

Si falta un poco de voltaje y tu fuente tiene posibilidad de ajustar el voltaje, debes aumentarla hasta suministrar a los LEDs el voltaje correcto.

Si sobra algo y tu fuente lo permite también podrías ajustar el voltaje disminuyéndolo al voltaje correcto, y en caso contratrio producir una diferencia de potencial que lo compense.

Después de eso el circuito de dimeo sería del tipo siguiente.

[Imagen: xTMT35R.jpg]

Esto debería funcionar con un dimeo bastante suave y progresivo. En CAO usamos el pin 11 para la luz blanca. Te sugiero que hagas una prueba sencilla y me digas si se produce el efecto escalón que comentas.

Código:
int led = 11;
int brightness = 0;
int delayTime = 10;
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  while(brightness < 255)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness + 1;
  }
  while(brightness > 0)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness - 1;
  }
}
(23-02-2015, 07:06 PM)Antonio Castro escribió: [ -> ]Las soldaduras y las clemas no deberían producir caída de tensión apreciable.
El comportamiento que describes no es que yo tengo en los míos.

La cosa es muy simple. Debes de establecer un montaje de LEDs en serie para 12V aproximadamente.

Si falta un poco de voltaje y tu fuente tiene posibilidad de ajustar el voltaje, debes aumentarla hasta suministrar a los LEDs el voltaje correcto.

Si sobra algo y tu fuente lo permite también podrías ajustar el voltaje disminuyéndolo al voltaje correcto, y en caso contratrio producir una diferencia de potencial que lo compense.

Después de eso el circuito de dimeo sería del tipo siguiente.

[Imagen: xTMT35R.jpg]

Esto debería funcionar con un dimeo bastante suave y progresivo. En CAO usamos el pin 11 para la luz blanca. Te sugiero que hagas una prueba sencilla y me digas si se produce el efecto escalón que comentas.

Código:
int led = 11;
int brightness = 0;
int delayTime = 10;
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  while(brightness < 255)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness + 1;
  }
  while(brightness > 0)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness - 1;
  }
}

Macho, tal cuál tengo el circuito de los TIP141. Lo único lo que comento que no es exactamente el mismo cable de masa que va de la fuente al tip el que conecto a la masa de arduino, sino que a la masa de arduino conecto otro cable... pero entiendo que el cable de masa de la fuente que use es indiferente en este caso porque internamente la masa será única. Las series de leds son de 3 leds + resistencia. Pero sí es cierto lo que comento de la pérdida de tensión. Es más, por si eres capaz de arrojar algo de luz te cuento todos los datos posibles.

1. Fuente de alimentación de pc de 500w, en la salida de 12v da 25A según las especificaciones. En teoría voltaje constante en canales de 3.3v, 5v y 12v, PFC y muchas protecciones de sobretensión.
2. Monto una serie de 3 leds + su resistencia y sueldo los cables provenientes directamente desde la fuente, con poca longitud. Mido tensiones: Entre el + y - de los cables de la fuente hay 12,1v, midiendo desde la entrada de la resistencia al - del último led hay también 12,1v.
3. Monto todas las series de leds en paralelo diviendo en dos canales diferentes (para conectar a 2 tips distintos)... 12 series, 6 por canal, consumo de unos 5A por serie, no llega a 11A en total el consumo para la fuente. Cables de medio metro de largo. Mido tensiones, en cada canal hay 11,6V... ya se ha producido una caída de tensión al dividir entre las 2, la división es con una clema, los cables de 2,5mm. Hay conectados ya 36 leds y funcionando.
4. Monto extensiones de metro y medio de cable de 2,5mm para cada canal, de forma que están conectados con los cables ya soldados con un conector rápido (de esta forma si tengo que quitar la pantalla para tocar algo, solo tengo que desconectar los conectores rápidos y listo). Mido tensiones nuevamente y ahora me dan unos 11v por canal.
5. Sueldo los tips, los conecto ambos al canal de blancos definido en CAO (pin 11), defino un fotoperiodo y ejecuto la prueba. Mientras se ejecuta la prueba estoy midiendo con el voltímetro uno de los dos canales. 0v, 3.4v, 4.7v ... 11v son los saltos que va dando aproximadamente. Recordar que la prueba de fotoperiodo cambia de franjas horarias de golpe y por tanto los cambios de voltaje son de golpe. En funcionamiento normal del dimeo he medido también y va aumentando el voltaje progresivamente hasta los 11v. Ha habido un 9% de pérdida de potencial en el canal desde la primera serie soldada y probada a este paso por donde estamos.
6. Monto los leds azules en paralelo, los conecto a la fuente por el canal de 3.3v, mido y da 3.31v. Monto el cable entero como en el caso anterior, sueldo al tip, pongo la prueba y mido cuando la intensidad está máxima: 3.1v. También ha caído el potencial, un 6.5% en este caso.

Hoy no podré, pero mañana probaré el dimeo puro con un ejemplo sencillo como el que has puesto y te cuento.

Pero alguna explicación a lo anterior que he contado?? se ha perdido 1 voltio en total de la fuente. O es por las conexiones de los cables (por clemas para permitir la desconexión rápida de los cables), o algo raro pasa. La fuente en teoría debería dar ese amperaje en los 12 voltios sin despeinarse. Si necesitas más datos o más información solo pídela, intentaré ser todo lo minucioso posible para dar con la clave del asunto.
No podría asegurarlo, pero podría ser que esa fuente no se esté comportando como cabe esperar y que no mantenga bien el voltaje con cargas importantes.

Cuando hay resultados inesperados hay que simplificar al máximo la prueba. Espero que la pruebecita sencilla te aporte algún dato más.
He estado jugando con Arduino para simular un algoritmo que permita defensa frente a ataques por fuerza bruta. Me refiero a no permitir demasiados reintentos fallidos en un sistema de autentificación. El programa no trata el problema de la autentificación sino el de la mosca cojonera que insiste cansinamente con reintentos sucesivos hasta reventar tu clave.

Es un simple contador de ataques. No necesita ningún hardware. Debería funcionar en cualquier Arduino (Creo) y solo necesita activar el monitor serial en el IDE y empezar a tocar las narices al programa cada vez que pulsemos <Enter>. Tiene más de curiosidad entretenida que de otra cosa.

[attachment=1831]
Está chulo Antonio, con eso creo que será protección suficiente si se abre un acceso externo a CAO.

Respecto a la pantalla y la fuente, me temo que hasta el fin de semana no tendré tiempo de hacerle pruebas. Puede ser que el tema del voltaje sea que la fuente da menos chicha de la que debiera por especificaciones o que esté capada de algún modo, revisaré. De todas formas, que el voltaje final sea 11 o 12v no debería influir en absoluto para que el dimeo vaya bien o no, ya que con 11v de salida la fuente los leds brillan con fuerza.

Para compilar CAO en el IDE 1.6, en vez de crear un nuevo fichero de config que se incluyese en el resto de ficheros, he observado que todas las clases principales que eran las que no compilaban incluyen el Cao1_Lcd20x4.h. Así que he metido la definición del typedef ahí y ya compila CAO perfectamente.

Recuerdo la línea a añadir, yo la he añadido justo después de los defines.
Código:
typedef char PROGMEM prog_char;


En otro orden de cosas. Modifiqué CAO para que fuese compatible con mi display.

El display que uso es este: http://www.banggood.com/IIC-or-I2C-2004-...08616.html

Más info sobre el display (la V3): http://arduino-info.wikispaces.com/LCD-Blue-I2C#v3

Librería: https://bitbucket.org/fmalpartida/new-li...V1.2.1.zip es la última versión de la new-liquidcrystal que en teoría es la más rápida.

En CAO para que funcione hay que cambiar al menos:

La instanciación de la LiquidCrystal en el .ino será con:
Código:
LiquidCrystal_I2C lcd_i2c(LcdAddress, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

En Cao1_Lcd20x4::Ini() hay que inicializarla con
Código:
lcd_i2c.begin(20,4);

Creo que cambié o añadí alguna funcionalidad más en la clase del lcd, pero lo básico para que compile y funcione la pantalla es esto.

Antonio, te has planteado versionar el proyecto en github por ejemplo?? sería mucho más cómodo para hacer cambios y subidas de versión, amen de descargarlo. Git gui hay para windows y linux y es muy sencillo y potente de usar.
Bueno ese tipo de cosas parece lógico que deban ser modificadas por cada usuario. La variedad de hardware es enorme y hacer una aplicación que lo contemple todo tampoco tiene mucho sentido.

Lo más universal sería usar un interfaz web.

Conozco Git Hub, pero de momento prefiero ir a mi aire. No considero que el diseño actual de CAO sea el definitivo y necesito tomarme estos temas con calma. Quizás más adelante.
(25-02-2015, 01:55 PM)Antonio Castro escribió: [ -> ]Bueno ese tipo de cosas parece lógico que deban ser modificadas por cada usuario. La variedad de hardware es enorme y hacer una aplicación que lo contemple todo tampoco tiene mucho sentido.

Lo más universal sería usar un interfaz web.

Conozco Git Hub, pero de momento prefiero ir a mi aire. No considero que el diseño actual de CAO sea el definitivo y necesito tomarme estos temas con calma. Quizás más adelante.

Has probado la librería new liquidcrystal? debería ser compatible también con tu pantalla y por lo que he leído es más rápida que la liquidcrystal clásica. Con estas modificaciones funcionaría en CAO.
(25-02-2015, 02:28 PM)Agamenon escribió: [ -> ]Has probado la librería new liquidcrystal? debería ser compatible también con tu pantalla y por lo que he leído es más rápida que la liquidcrystal clásica. Con estas modificaciones funcionaría en CAO.

Estoy bastante liado me lo he apuntado como pendiente de hacer algunas pruebas.
Pensé que esto ya lo había respondido.
(23-02-2015, 07:06 PM)Antonio Castro escribió: [ -> ]Las soldaduras y las clemas no deberían producir caída de tensión apreciable.
El comportamiento que describes no es que yo tengo en los míos.

La cosa es muy simple. Debes de establecer un montaje de LEDs en serie para 12V aproximadamente.

Si falta un poco de voltaje y tu fuente tiene posibilidad de ajustar el voltaje, debes aumentarla hasta suministrar a los LEDs el voltaje correcto.

Si sobra algo y tu fuente lo permite también podrías ajustar el voltaje disminuyéndolo al voltaje correcto, y en caso contratrio producir una diferencia de potencial que lo compense.

Después de eso el circuito de dimeo sería del tipo siguiente.

[Imagen: xTMT35R.jpg]

Esto debería funcionar con un dimeo bastante suave y progresivo. En CAO usamos el pin 11 para la luz blanca. Te sugiero que hagas una prueba sencilla y me digas si se produce el efecto escalón que comentas.

Código:
int led = 11;
int brightness = 0;
int delayTime = 10;
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  while(brightness < 255)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness + 1;
  }
  while(brightness > 0)
  {
    analogWrite(led, brightness);
    delay(delayTime);
    brightness = brightness - 1;
  }
}



Antonio, esta mañana he estado probando el dimeo en la pantalla.

Probando el ejemplo que has posteado y modificándolo para que saque por la lcd el valor de paso actual y que cada paso sea en 1 segundo, se observa un dimeo suave y progresivo. Se encience desde el paso 1. he de reconocer que aprecio perfectamente saltos de luminosidad entre los 40 primeros pasos, pero mi novia por ejemplo solo aprecia entre los 10 primeros pasos. En general es suave y progresivo y hay luz entre los pasos 1 y 255, a diferente intensidad. Por tanto la fuente, los TIP y el PWM de arduino funcionan perfectamente.

Pero en CAO el amanecer y el anochecer me va a saltos bruscos y sin cumplir los tiempos esperados. He estado haciendo pruebas con la función de probar fotoperiodo. Estos son los datos que he obtenido por si arrojan algo de luz a qué está ocurriendo.

Características del sistema:
2 canales: canal blanco de principal y un canal azul que por ahora además está desactivado (soldando se rompió un led y estoy esperando que me llegue otro para volver a montar la serie). Por tanto el dimeo completo es ÚNICAMENTE en el canal blanco, estando los leds rojos también en ese canal (por tema de cableado no me ha compensado por ahora crear un tercer canal para ellos).

Fotoperiodo configurado en:
Ini alba -> 13:00
Ini dia -> 14:00
Ini ocaso -> 21:45
Ini noche -> 22:45

Los datos que devuelve CAO después de setear estos parámetros son:
Crpsc=600
FTPer=5250
Zenit=10725


Ejecución de prueba de fotoperiodo:
00:00 -> no hay luz
13:12 -> no hay luz
13:24 -> Sigue sin haber ABSOLUTAMENTE nada de luz.
13:36 -> Hay luz tenue
13:48 -> Hay luz muy intensa
14:00 -> Luz completa
21:45 -> Luz completa
21:57 -> Luz muy intensa
22:09 -> Luz tenue
22:21 -> Ya no hay nada de luz

Pues ese es el comportamiento... le encuentras algún sentido?? yo definiendo el horario anteriormente descrito espero que la luz comience a encenderse de forma tenue a las 13:00 y aumente progresivamente hasta las 14:00; comenzando el proceso inverso desde las 21:45 hasta las 22:45. Pero obviamente no se está comportando así. Me da la sensación de que tendrá que ver con el uso del canal blanco como único canal?
Creí que hablabas de comportamiento en modo normal y ya no recuerdo como va la prueba esa. Seguramente la prueba no intenta obtener todos los valores intermedios porque los LEDs se verían bien pero las trazas serían excesivas y se verían mal. Tiene pinta de estar todo bien.

El código del fotoperiodo y del dimmer no son triviales, pero pero puedes leer las explicaciones de esas partes en mi libro, y luego si quieres programar tú algún tipo de prueba diferente para incluirla en el menú de pruebas del fotoperiodo. Para que sea más sencillo podrías basarte en los dos test que tengo y modificar alguno de ellos a tu gusto, podrías por ejemplo hacer un test destinado a probar exclusivamente un crepúsculo.

Una pregunta. ¿Cuanto tardabas tú en recibir un pedido de banggood? Se me está haciendo eterno la recepción de un pedido de Aliexpress.
(28-02-2015, 08:56 PM)Antonio Castro escribió: [ -> ]Creí que hablabas de comportamiento en modo normal y ya no recuerdo como va la prueba esa. Seguramente la prueba no intenta obtener todos los valores intermedios porque los LEDs se verían bien pero las trazas serían excesivas y se verían mal. Tiene pinta de estar todo bien.

El código del fotoperiodo y del dimmer no son triviales, pero pero puedes leer las explicaciones de esas partes en mi libro, y luego si quieres programar tú algún tipo de prueba diferente para incluirla en el menú de pruebas del fotoperiodo. Para que sea más sencillo podrías basarte en los dos test que tengo y modificar alguno de ellos a tu gusto, podrías por ejemplo hacer un test destinado a probar exclusivamente un crepúsculo.

Claro Antonio, hablo de ver saltos de luz bruscos en el modo normal. El test de fotoperiodo lo que he visto que hace es poner la iluminación al estado que estaría en horas concretas dentro del fotoperiodo. Y lo que quería mostrarte con el mismo es que en horas donde debería estar la luz suave (como a las 13:12 en mi ejemplo) no hay nada de luz, y es más, a mitad del amanecer, a las 13:24 aún no hay luz. Te he dado esos datos por si ves algo de lógica en el comportamiento según tu algoritmo de dimeo teniendo en cuenta que SOLO uso el canal de blancos actualmente. De todas formas me meteré en la clase de fotoperiodo esta semana porque quiero hacer lo de ajustar la luz nocturna a una duración de X tiempo al comenzar el periodo de noche. Pero como me falta un led azul y no puedo montar la serie de azules aún no estoy teniendo mucha prisa.

(28-02-2015, 08:56 PM)Antonio Castro escribió: [ -> ]Una pregunta. ¿Cuanto tardabas tú en recibir un pedido de banggood? Se me está haciendo eterno la recepción de un pedido de Aliexpress.

Banggood entre 2 semanas y 3. Rara vez llega al mes. Aliexpress efectívamente es mes y medio... yo solo lo uso para cosas que no encuentro en banggood. Por ejemplo pedí una fuente de alimentación de 12v 25A conmutada y ajustable hace 2 semanas para evitar usar resistencias en mis series y aún no la han enviado siquiera... son la leche estos de aliexpress.


En otro orden de cosas. He probado la librería que tiene dallas para sus sensores y funciona muy bien con múltiples sensores. NO hace falta saber las direcciones de cada sensor. Simplemente la clase detecta las líneas distintas que haya y cuando pides temperatura las almacena en un array. Luego ya solo tienes que pedir los grados del sensor 0, del 1, del 2... los que quieras. Sin tener que lidiar con direcciones físicas. Puede que para la nueva versión de CAO sea cómodo usarla y nos olvidamos de que el usuario tenga que averiguar y configurar las direcciones de los sensores, simplemente decir (y puede ser dentro del menú de sensores directamente) si el 0 es temperatura del acuario y el 1 temperatura de leds o al contrario.
(28-02-2015, 09:07 PM)Agamenon escribió: [ -> ]
(28-02-2015, 08:56 PM)Antonio Castro escribió: [ -> ]Creí que hablabas de comportamiento en modo normal y ya no recuerdo como va la prueba esa. Seguramente la prueba no intenta obtener todos los valores intermedios porque los LEDs se verían bien pero las trazas serían excesivas y se verían mal. Tiene pinta de estar todo bien.

El código del fotoperiodo y del dimmer no son triviales, pero pero puedes leer las explicaciones de esas partes en mi libro, y luego si quieres programar tú algún tipo de prueba diferente para incluirla en el menú de pruebas del fotoperiodo. Para que sea más sencillo podrías basarte en los dos test que tengo y modificar alguno de ellos a tu gusto, podrías por ejemplo hacer un test destinado a probar exclusivamente un crepúsculo.

Claro Antonio, hablo de ver saltos de luz bruscos en el modo normal. El test de fotoperiodo lo que he visto que hace es poner la iluminación al estado que estaría en horas concretas dentro del fotoperiodo. Y lo que quería mostrarte con el mismo es que en horas donde debería estar la luz suave (como a las 13:12 en mi ejemplo) no hay nada de luz, y es más, a mitad del amanecer, a las 13:24 aún no hay luz. Te he dado esos datos por si ves algo de lógica en el comportamiento según tu algoritmo de dimeo teniendo en cuenta que SOLO uso el canal de blancos actualmente. De todas formas me meteré en la clase de fotoperiodo esta semana porque quiero hacer lo de ajustar la luz nocturna a una duración de X tiempo al comenzar el periodo de noche. Pero como me falta un led azul y no puedo montar la serie de azules aún no estoy teniendo mucha prisa.

(28-02-2015, 08:56 PM)Antonio Castro escribió: [ -> ]Una pregunta. ¿Cuanto tardabas tú en recibir un pedido de banggood? Se me está haciendo eterno la recepción de un pedido de Aliexpress.

Banggood entre 2 semanas y 3. Rara vez llega al mes. Aliexpress efectívamente es mes y medio... yo solo lo uso para cosas que no encuentro en banggood. Por ejemplo pedí una fuente de alimentación de 12v 25A conmutada y ajustable hace 2 semanas para evitar usar resistencias en mis series y aún no la han enviado siquiera... son la leche estos de aliexpress.

En otro orden de cosas. He probado la librería que tiene dallas para sus sensores y funciona muy bien con múltiples sensores. NO hace falta saber las direcciones de cada sensor. Simplemente la clase detecta las líneas distintas que haya y cuando pides temperatura las almacena en un array. Luego ya solo tienes que pedir los grados del sensor 0, del 1, del 2... los que quieras. Sin tener que lidiar con direcciones físicas. Puede que para la nueva versión de CAO sea cómodo usarla y nos olvidamos de que el usuario tenga que averiguar y configurar las direcciones de los sensores, simplemente decir (y puede ser dentro del menú de sensores directamente) si el 0 es temperatura del acuario y el 1 temperatura de leds o al contrario.

El problema, es que no existe tal cosa tal como posición física. Los sensores se conectan al bus en paralelo, así que es como si todos ellos estuvieran a la misma distancia. Solo se pueden direccionar de forma segura por su direccion interna que para eso está. El orden de los sensores creo que es arbitrario y la sustitución de un sensor por otro podría tener consecuencias desastrosas por confundir la identidad de un sensor con la de otro. Es muy importante identificar con seguridad el sensor que estás usando para cada cosa. Si tu haces pruebas al respecto y llegas a alguna conclusión sobre la identificación por posición que pueda ser de interés compártela, pero lo que yo he averiguado no me ha convencido de usar ese sistema que fué el primero que intenté por ser el más cómodo desde el punto de vista de programación y configuración.

Mi módulo para ese sensor introduce un sistema de lectura en diferido porque realizado de otra forma, desde que solicitas la lectura hasta que puedes obtener con seguridad el dato correcto transcurriría demasiado tiempo.

Mi módulo para ese sensor está pensado para un uso como el que CAO necesita. CAO hace lecturas muy rápidas cada dos segundos. Que el valor obtenido llegue con dos segundos o más de retraso es indiferente para el control de un acuario donde las variaciones de temperatura son muy lentas.

Para verificar el funcionamiento del dimmer de cuatro canales te recomiendo desnchufafar la etapa de potencia con los TIPs y enchufar cuatro diodos LEDs con los colores adecuados a cada canal y en serie con cada uno de ellos una resistencia de unos 330 Ohms. Lo dejas permanentemente encendido y haces un seguimiento en tiempo real durante el amanecer. Ten en cuenta que los canales van evolucionando de acuerdo no solo a la intensidad de la luz sino a su tonalidad. En el alba se empieza con luz roja luego naranja y la luz blanca, que tiene un canal con más potencia, va tomando protagonismo más adelante. Puede que sea ese comportamiento el que te esté despistando.
¿Sabeis si Eclipse tendrá soporte para Arduino? ¿Me he registrado en la página oficial de Arduino y en la de Ferduino. Soy Ingeniero técnico informático, pero hace mucho que no pico código. A ver si soy capaz de ilustrarme en el chip de ATMEL y en la plataforma Arduino.

Me contesto yo mismo. Sí que lo tiene.

http://m.youtube.com/watch?v=bmBrGRLOn98
(01-03-2015, 02:02 PM)rendered escribió: [ -> ]¿Sabeis si Eclipse tendrá soporte para Arduino? ¿Me he registrado en la página oficial de Arduino y en la de Ferduino. Soy Ingeniero técnico informático, pero hace mucho que no pico código. A ver si soy capaz de ilustrarme en el chip de ATMEL y en la plataforma Arduino.

Me contesto yo mismo. Sí que lo tiene.

http://m.youtube.com/watch?v=bmBrGRLOn98

En la página oficial de arduino viene como configurarlo. Se puede hasta compilar con él... aunque configurar bien el compilador es un poco coñazo. Yo eclipse lo uso como IDE y para compilar y subir a la placa el de arduino
Muchas gracias, Agamenon. A ver si consigo sacar tiempo. La verdad es que conozco desde hace tiempo de oidas la plataforma Arduino, pero nunca lo he trabajado. No me extraña que haya triunfado. Yo he trabajado mucho el sector industrial y la diferencia de precio respecto de otras soluciones es de escándalo, siendo apto perfectamente para cosas como esta.
Para colmo, encima hay gente como tú, Antonio y tantos otros, que mantiene vivo el espíritu de compañerismo y comunidad que envuelve a los sistemas abiertos.