Control de luces de Acuario

Buenas otra vez,

he continuado avanzando en este proyecto... y cuando creía que ya lo tenia todo montando... me ha surgido un fallo que no entiendo por que ocurre y no se me ocurre como resolver... a ver si me podéis decir que estoy haciendo mal.

Al diseño que ya tenia, he añadido 6 sensores de temperatura, uno para cada canal de color, otro para la temperatura del agua y 4 ventiladores de 5v para el disipador.

El caso es que al ir a conectar el pin de 5V que los conecta, la placa arduino parece que no termina de arrancar, le llega corriente por que se encienden los leds pero con escasa potencia.. de forma atenuada... si quito el pin de 5v funciona perfectamente... También pasa con el led que trae el step down, que alimenta al arduino, curiosamente, cuando falla se queda en un estado rojo/verde. Es como si hubiera algún elemento que esta haciendo excesiva resistencia.

Los ventiladores los he puesto en dos series, con un diodo de protección por cada una de ellas y un transistor 2n2222, lo único que se me ocurre es que no sean el transistor adecuado para esos 20v.

He comprobado la continuidad de todos los elementos y parece que esta todo correcto. Asi que no se que puede estar pasando. Adjunto el gráfico actualizado y un par de fotos del montaje por si ayudan algo.

He estado un rato leyendo tus mensajes, no termino de entender lo que quieres hacer ni se porque no obtienes lo que quieres.....

Pero si que he encontrado algunas discrepancias entre lo que dices y lo que dibujas, veo que te has esforzado en mostrarlo pero en algún momento has perdido la concentración.

IMHO Te recomiendo que hagas las cosas paso a paso. conectando la electrónica de uno en uno, por ejemplo:

1 - Conectar las alimentaciones uniendo los negativos y comprobando tensiones.
2 - Conectar ventiladores y dar positivo a la R de 330 Ohms y comprobar que los ventiladores funcionan.
3 - Conectar los leds y Drivers y seguir comprobando tensiones.(No conectar los driver sin los leds)
4 - Conectar, ahora si, el Arduino , y con un pequeño programa comprobar que activa y desactiva los ventiladores.
5 - Ampliar el programa para comprobar la modulación de los led.
6 - Conectar el RTC + programa que compruebe que funciona bien + lo anterior
7 - El lector de SD + programa .....
8 - Uno de los sensores + programa .....
9 - El resto de los sensores........
10 - Por fin, tu programa, sabiendo que tienes el hardware controlado.

Perdido:
../..
Los ventiladores los he puesto en dos series, con un diodo de protección por cada una de ellas

Que es dos series ? En el esquema los ventiladores están en paralelo.
Porqué pones diodos ? y porqué 4 ? No son ventiladores Brushless ?
El símbolo del diodo no es ese.

Perdido:
../..
El caso es que al ir a conectar el pin de 5V que los conecta,

"Los conecta" el que ? los ventiladores ? no van a 20V ? De que pin hablas ?

Mirando el circuito
La resistencia de 4.7K no es PullDown, es PullUp

Las resistencias de 10K tal y como están no sirven para nada bueno, si han de ser PullDown (que yo no digo que lo hayan de ser) tendrían que estar conectadas cada una de ellas entre negativo y cada una de las entradas de los drivers, (cables azules).

Los negativos GND de "potencia", únelos fuera del Arduino, el que más duele a los ojos es el de los ventiladores. Puedes unir los negativos de las salidas de los StepDown antes de llegar al Arduino

Asegúrate que en los StepDown, los negativos de entrada y salida sean los mismos, es decir, que la pista de la pcb vaya directa. Si no fuera así no se podrían unir los negativos de la fuente de 48V con los de las salidas de los StepDown y todo tu sistema seria un fracaso.

Convierte tu puzzle en partes pequeñas y lo conseguirás, Suerte.

PD, (No seria conveniente cambiar el titulo del hilo ?)

Ante todo muchas gracias por la respuesta!

Perdona si no me he explicado bien, a veces tiendo a correr :roll_eyes: intentare hacerlo mejor ahora:

El objetivo es montar una iluminación para un acuario, con 5 canales de luz con dimeado independiente para cada uno de esos canales, medidor de temperatura del agua, y mas funciones que espero poder ir haciendo según aprenda algo mas...

El esquema que puse efectivamente tenia algunos detalles que no eran exactos (por no redibujarlo), así que ahí pongo uno que si que lo es. Respecto a las "series" (no se si esta bien dicho así) de ventiladores, los dividí en 2 para rebajar el voltaje de los dos transistores por que no estaba seguro si aguantarían 20V. Me pareció que seria mejor dos grupos de 10V.

El pin de 5V creo que me refería al de los sensores de temperatura.

![

Lo he probado ahora y apagar y encender si lo hace.. pero el dimmer... nada de nada.. solo apaga y enciende... así que como has comentado, deben de ser las resistencias que están puestas como pull-up... parece que has acertado en eso!, supongo que creía cuando lo diseñe que el modulo de los drivers ya conecta el negativo a la placa.. Primer error por lo que se ve...

En cuanto a montarlo por partes... tienes toda la razón, no lo había hecho por que tengo de desoldar unas cuantas cosas... pero creo que no tengo mas remedio.

Tengo también mis sospechas que los GND no estén correctos, no entiendo muy bien lo que me comentas, por un lado dices que puedo unirlos los steps down antes de conectarlos a la placa... por donde exactamente? los dos por la conexión out y luego de esta a al pin GND arduino?, no se que diferencia habría ya que tal y como esta ahora.

Y por el otro hablas de comprobar los negativos de salida y entrada... ¿no deberían ser 0V al ser GND? tampoco se a que te refieres con la pista pcb y directa.... ¿con que?

Menuda parrafada que he soltado :stuck_out_tongue_winking_eye:

PD: he intentado cambiar el titulo del post... solo me cambia el del ultimo mensaje, no he sido capaz :confused:

Cuando he leído tu mensaje he caído en la cuenta de una cosa... había probado todas las partes por separado en la Protoboard ... todo funcionaba bien y ya daba por supuesto que por lo menos la parte de los leds estaba perfectamente ya que al encender se iluminaban sin problema... pero no había probado si se apagaban y encendían o si funcionaba el dimmer en el proyecto final! :-![

Lo he probado ahora y apagar y encender si lo hace.. pero el dimmer... nada de nada.. solo apaga y enciende... así que como has comentado, deben de ser las resistencias que están puestas como pull-up... parece que has acertado en eso!, supongo que creía cuando lo diseñe que el modulo de los drivers ya conecta el negativo a la placa.. Primer error por lo que se ve...

En cuanto a montarlo por partes... tienes toda la razón, no lo había hecho por que tengo de desoldar unas cuantas cosas... pero creo que no tengo mas remedio.

Tengo también mis sospechas que los GND no estén correctos, no entiendo muy bien lo que me comentas, por un lado dices que puedo unirlos los steps down antes de conectarlos a la placa... por donde exactamente? los dos por la conexión out y luego de esta a al pin GND arduino?, no se que diferencia habría ya que tal y como esta ahora.

Y por el otro hablas de comprobar los negativos de salida y entrada... ¿no deberían ser 0V al ser GND? tampoco se a que te refieres con la pista pcb y directa.... ¿con que?

Menuda parrafada que he soltado :stuck_out_tongue_winking_eye:

PD: he intentado cambiar el titulo del post... solo me cambia el del ultimo mensaje, no he sido capaz :confused:

Perdido:
Tengo también mis sospechas que los GND no estén correctos, no entiendo muy bien lo que me comentas, por un lado dices que puedo unirlos los steps down antes de conectarlos a la placa... por donde exactamente? los dos por la conexión out y luego de esta a al pin GND arduino?, no se que diferencia habría ya que tal y como esta ahora.

Y por el otro hablas de comprobar los negativos de salida y entrada... ¿no deberían ser 0V al ser GND? tampoco se a que te refieres con la pista pcb y directa.... ¿con que?

Intentare explicarme mejor.

Los dos puntos anteriores se refieren a lo mismo, al (-) o GND.

Tienes 3 (-) de tres fuentes de tensión, uno de la fuente de 48V y dos de los StepDown,
En el primer dibujo cada uno de los tres lo conectabas a un terminal (-) de la placa Arduino.
Esto no es bueno, conecta los tres (-) juntos fuera de la placa y luego conecta un solo (-) al Arduino.

Ahora bien, esta mezcla de tres fuentes de tensión que haces, (y que a mi no me gusta nada) solo funcionara si el (-) de la fuente de 48V es exactamente el (-) de las salidas de los StepDown.

Para verlo tienes que coger los StepDown y mirar las pistas, el (-) de la entrada tiene que ir directo al (-) de la salida .
Dicho de otro modo, los electrones que salen del (-) de la fuente de 48V y que llegan al (-) de la entrada del StepDown y siguen hasta el (-) de la salida del StepDown lo tienen que hacer pasando solo por cobre, sin nada de electrónica en su camino. La electrónica ha de quedar en los (+).
Lo siento pero no te lo se explicar mejor.

Creo que entiendo lo que dices, te refieres a los propios componentes, los steps downs, que tengan unión directa en el negativo sin pasar por el ningún componente entre sus dos polos.

Uno tengo claro que si que es directo, parece que por detrás hay un hilo que no pasa por nada mas, el otro no se ve nada por debajo... así que he probado la continuidad entre los dos y si que da... así que supongo que no hay ningún componente entre medias.

Ahora me has dejado preocupado con aquello de que no te gusta la unión de las tres fuentes de tensión.... como he comentado soy novato en estos temas y esa fue la solución que encontré al tema de la fuente de alimentación.

¿que otra/s solución/es podría haber para este caso que fuera mas correcta? ¿por que esta no es buena?

He estado probando diferentes cosas y he encontrado lo siguiente:

  1. El dimeado no funciona con las resistencias pull-down o pull-up (pasa lo mismo con las dos configuraciones). Eliminándolas ha funciona la iluminación con el dimer sin problema.

  2. El error que preguntaba que provocaba el apagado de la placa arduino... había puesto mal el gnd y el 5v... no se que paso pero me lié:cold_sweat: , así que ya no se produce un corto, pero surgió otro problema, me seguían sin dar lectura los sensonres de temperatura... enredando mas he visto que solo podía conectar 3 a un pin... peerroo... rebajando la resistencia a 4k en vez de 4,7k si que funcionan 6 sensores.

  3. haciendo pruebas con los ventiladores... no se que hice... pero creo que me los he llevado por delante.... los 4 :sob: supongo que habrá sido por meterle mas intensidad de corriente... El miedo que tengo ahora es comprar otros nuevos y volver a estropearlos... ¿como puedo probar ese circuito sin riesgo de freírlos?

Tengo pensado unir las masas gnd como me habéis comentado... el tema es que no se como puedo rebajar esa intensidad de la fuente de alimentación ¿alguna idea? o pensáis que puede ser otra cosa?

Nada consume mas de la cuenta.
Uno o 4 ventiladores que consume X mA seguirán consumiendo 4*X mA si estan conectados en paralelo.
De modo que usa una fuente de 1000A y ellos seguirán consumiendo lo que requieran.

Lo único que quema un ventilador de 12V por dar un dato es aplicarle mayor tensión lo que obliga a que circule mayor corriente.

oks gracias,

Supongo que siendo así, lo que habrá pasado al toquetear, es que cuando les di corriente, no estarían haciendo contacto 2 ventiladores y los otros dos si... recibiendo los 20V esos 2 en vez de los 10 que debían entrar para cada bloque...y al seguir toqueteando me he llevado por delante los otros 2.

Que rabia! :confused:

Existe alguna forma de poder recuperar esos ventiladores? o me olvido y toca comprar nuevos?

Pero como 2 ventiladores reciben 20 en lugar de 10, como los conectaste? En serie?

Los ventiladores tienen una especificación como todo. Se alimentan con determinada tensión digamos 12V y se conectan en paralelo.

Los ventiladores estaban conectados como en el gráfico... en paralelo 2 y 2 en serie... y ahora que lo dices... al estar en paralelo... el step down tenia que dar 10V no 20V.... he ahí la gran metedura de pata... no?

Son ventiladores de que tension? 10 V?

5V... aunque ahora que me los he cargado estoy pensado en poner 12V... supongo que disiparan mas, pero dudo ya que me gustaría reducir el consumo total.

Mi dios que batido de datos tienes en la cabeza.

Si los ventiladores son de 5V debes usar 5V y si estan en serie, los 10V a dos en serie estaba bien aplicado.

Pero no es algo aconsejable. Lo aconsejable es ponerlos en paralelo y aplicarles 5V a los 4.

Jejeje, si me he dado cuenta ahora que es todo como dices, es mejor ponerlos en paralelo, por que como falle solo una conexión, te llevas todo por delante!!

Me he despistado pero bien al aplicar 20v cuando tenia que haber sido 10v para cada pareja... en fin... así no se me vuelve a olvidar la diferencia entre serie y paralelo :-[

Si claro.. y menos mal que no te ha molestado lo del batido.. era broma pero ilustraba un poco tu confusión.

Se juega con serie/paralelo con resistencias.
Con lo demas hay que ser cuidadoso dentro de las tolerancias de cada dispositivo.

Jjeje no te preocupes me lo suelen decir mucho :wink:

Al conectarlos así, supongo que ahora me sobra ese segundo step down, así que nada, ahí pongo el gráfico. Así estaría correcto todo no?

Pareciera que si.
Yo ya simplemente estoy perdido con este proyecto asi que me consejo es que vayas probando las cosas paso a paso.

No veo resistencias de base en los 2n2222.

Si, iré probando! Muchas gracias por la ayuda, teóricamente ya debería estar todo correcto, espero no volver a meter la pata cuando vuelva a conectar todo :fearful:

He puesto una resistencia para cada una de las bases de 330Ω de los 2n2222 están un poco pequeñas en el gráfico, si lo amplias deberías poder verlo sin problema.

Tienes razón.

Ya casi creia que lo tenia completo, pero me he encontrado con 3 errores de programación que no se como puedo solucionar:

  • La idea que tenia en este proyecto controlar por separado 5 canales de leds y poder ir incrementando la luz suavemente (dimmer), pensé en dividir los 255 de las entrada pwm en tres fases de 85 para tener un mayor control y para que incremente su valor de 0 a 85 deberían transcurrir unos 20-30m hasta completarla.

Las pruebas las reduje a 1 minuto, así que debería contar en en ese tiempo 4.25 veces para hacer 20m

La interrupción la he creado con el timerOne un contador que fuera sumando +1 (Timer1.initialize(7058823):wink: sin embrago me cuenta 8.. si cambio ese valor me sigue dando 8.. enredando el valor lo conseguí bajar a 6, el caso es que no se a que se debe, por lo que he leído hay una limitación de 5sg para las interrupciones, con lo que creo que debería salir bien.

Así que ahora tengo la duda si la librería timerOne es valida o tengo que buscar otro tipo de librería o timer, he mirado pero no veo la solución.

  • El segundo problema que tengo es al añadir todo el código completo, con los sensores de temperatura y los ventiladores, aparece un nuevo retardo, el reloj, empieza a sumar de 2 en dos si elimino todos los delay y millies y si los dejo llegado dar saltos de 4 o 5s... creo que es por la lectura de los sensores, que le lleva tiempo... que tendría que hacer, crear otra interrupción cada segundo para la función de la hora??? los ejemplos de la hora los veo siempre con millis... así que no se
  • El ultimo problema no se si es de hardware.... pero cuando muestro los datos de esos sensores, el rft comienza a volverse loco... a veces lo lee bien, pero cuando el cambio es brusco, comienza a parpadear... me parece que esta relacionado con el problema anterior, pero no lo tengo claro.

Espero haberme explicado bien y a ver si me podéis iluminar por donde puedo tirar.... Gracias!

Ahí pongo el código del punto 1 que va a quedar mas claro, decirme si necesitáis que ponga el completo (creo que es mejor ver los problemas por partes).

#include <TimerOne.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc; // Declaramos un RTC DS3231

const int led[5] = {10,45,13,46,44}; //pines led, Deben ser PWM

int dameHora = 0;
int dameMinuto = 0;
int dameSegundo = 0;
volatile unsigned long contador_dimmer = 0; // La definimos como volatile
int i,j; //Variables auxiliares para ciclos repetitivos

void setup () {
  Serial.begin(9600);

  for(i=0; i<4; i++){ //salidas pines led
    pinMode(led[i], OUTPUT);
  }
 
   // Comprobamos si tenemos el RTC conectado
  if (! rtc.begin()) {
   Serial.println("No hay un módulo RTC");
   while (1);
  }
}

// hay que descomentar la linea de debajo y compilar solo una vez para actualizar hora
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

//--- Declaramos interrupciones---//
void dameTimer_mas(){
 //Timer1.initialize(1000000); //Creamos interrupcion cada segundo
  // Timer1.initialize(16000000); //Creamos interrupcion cada 5 segundo
   //Timer1.initialize(7058823);  //Creamos interrupcion cada 7,058823 seg para hacer dimmer 30m
   Timer1.initialize(14117647); //Creamos interrupcion cada 14,117647 seg para hacer dimmer 1h
   Timer1.attachInterrupt(dimmer_mas); // Activa la interrupcion y la asocia a la funcion interrupcion
}
void dameTimer_menos(){
   Timer1.initialize(14117647); //Creamos interrupcion cada 14,117647 seg para hacer dimmer 1h
   Timer1.attachInterrupt(dimmer_menos); // Activa la interrupcion y la asocia a la funcion interrupcion
}

//--- Contador creado por cada interrupcion---//
void dimmer_mas(){
  if(contador_dimmer==255){
    contador_dimmer=0;
  }else{
   contador_dimmer++; // Contador veces interrupcion
  }
}
void dimmer_menos(){
  if(contador_dimmer==0){
    contador_dimmer=255;
  }else{
   contador_dimmer--; // Contador veces interrupcion
  }
}
 
void loop () {
  queHora();
  dameMillis();
  enciendeLeds();
  delay(100);
}

void queHora(){
 DateTime now = rtc.now();
 dameHora = now.hour();
 dameMinuto = now.minute();
 dameSegundo = now.second();
 
 Serial.print(now.hour());
 Serial.print(':');
 Serial.print(now.minute());
 Serial.print(':');
 Serial.print(now.second());
 Serial.print(" ");
 Serial.print(now.day());
 Serial.print('/');
 Serial.print(now.month());
 Serial.print('/');
 Serial.print(now.year());
 Serial.println();
}

void dameMillis(){//contamos en millis en vez de usar delay
  unsigned long T ;
  int n = 0 ;
  T = millis();
  while (millis() <= T + 1000){   // Mientras no pase un Segundo = 1000 mS
    n++ ;                         // Contamos cada vez que leemos
  }
}

void enciendeLeds(){
  analogWrite(led[1],0);
  analogWrite(led[2],0);  
  analogWrite(led[3],0); 
  analogWrite(led[4],0); 

if(dameMinuto == 54){if(dameSegundo >= 0  && dameSegundo <= 3){contador_dimmer=0;}}
if(dameMinuto >= 54 && dameMinuto <55 ){
    dameTimer_mas(); //Arrancamos interrupcion TimerOne
    ledAzul();
    monitor_dimmer();
}
}

void ledRojo(){
  noInterrupts();   // Suspende las todas las interrupciones
  analogWrite(led[0],contador_dimmer);
  interrupts();     // Autoriza las todas las interrupcione
}
void ledVerde(){
  noInterrupts();   
  analogWrite(led[1],contador_dimmer);
  interrupts();     
}
void ledAmarillo(){
  noInterrupts();   
  analogWrite(led[2],contador_dimmer);
  interrupts();     
}
void ledBlanco(){
  noInterrupts();   
  analogWrite(led[3],contador_dimmer);
  interrupts();     
}
void ledAzul(){
  noInterrupts();   
  analogWrite(led[4],contador_dimmer);
  interrupts();
}

void monitor_dimmer(){
  Serial.print("contador_dimmer = ");
  Serial.println(contador_dimmer);
  delay(100);
  Serial.println();
}