Go Down

Topic: Control de luces de Acuario (Read 4756 times) previous topic - next topic

surbyte

Son ventiladores de que tension? 10 V?

Perdido

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.

surbyte

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.

Perdido

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 :-[

surbyte

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.


Perdido

#35
Nov 08, 2018, 10:58 pm Last Edit: Nov 08, 2018, 10:58 pm by Perdido
Jjeje no te preocupes me lo suelen decir mucho  ;)

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?


surbyte

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.

Perdido

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  :smiley-eek-blue: 

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.

surbyte


Perdido

#39
Dec 30, 2018, 10:11 pm Last Edit: Dec 30, 2018, 10:14 pm by Perdido
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);) 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).

Code: [Select]
#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();
}

tauro0221

Hi,
Yo tengo una pregunta. Porque el uso de 4 modulos de PS y no uno que te supla el voltaje y que tenga suficiente capacidad para suplir la corriente  de las 4 lineas de LEDs.Posiblemente ya seea tarde pues la lo mejor ya compraste esto. Creo que con PS con suficiente capacidad de voltaje y corriente lo pudiste alimentarlo.  Imaginate que tengas 50 lineas de LDS vaz a usar 50 PS. Solmente una observacion.

Perdido

Hola,

Perdona pero no entiendo muy bien tu pregunta.. ¿a que te refieres con los 4 modulos de ps? y que es ps?

Lo que tengo conectado es 5 lineas de leds, cada una con 10 leds de 3,3V  conectados a 5 driver, uno por linea.

La fuente de alimentación es de 48V y de ahí va a todo el circuito... solo hay un step down de 48V a 5V para alimentar la placa Arduino, pero tira de la fuente principal.

surbyte

Quote
3. El ultimo problema no se si es de hardware.... pero cuando muestro los datos de esos sensores, el rft comienza a volverse loco...
Qué es rtf?

Supongo que dirtas RTC no?


Otro tema:

Code: [Select]
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
  }
}


No usas delay() pero como crees que funciona delay() del mismo modo o parecido.
Se supone que no consumas tiempo inutilmente, y esto son 1000 mseg consumidos cada vez que caemos ahi.

Elimina esta acción.

Asi debe quedar tu loop eliminado el damemilllis()
Code: [Select]

// define T como global

unsigned long T ;

// luego...

void loop () {
  if (millis() - T> 1000UL) {
      queHora();                 // aca mostrará la hora cada 1 segundo o 1000 mseg
      T = millis();
  }
  enciendeLeds();              // n o se que quieres hacer con los leds.
}


Los puntos 1 y 2 los estoy analizando.

Cambia esto al momento de comparar

Code: [Select]
void dimmer_mas(){
  if(contador_dimmer==255UL){
    contador_dimmer=0UL;
  }else{
   contador_dimmer++; // Contador veces interrupcion
  }
}
void dimmer_menos(){
  if(contador_dimmer==0UL){
    contador_dimmer=255UL;
  }else{
   contador_dimmer--; // Contador veces interrupcion
  }
}

Perdido

#43
Dec 31, 2018, 12:20 pm Last Edit: Dec 31, 2018, 12:20 pm by Perdido
Quería decir TFT, el monitor de 2,4"  :-[

He reemplazado la función de Millies y parece que el ejemplo funciona mejor, también he puesto los UL acompañando a las unidades en los contadores como indicas, pero ahí no he notado ningún cambio.

¿que función desempeñan esos UL?

Lo que quiero hacer con los leds es que hagan dimmer así:



No se si sera la mejor manera de hacerlo, pero he pensado en ponerlos cada color en 4 fases de dimmer (0, 85, 170, 255), para que los procesos no sean eternos  y así controlar bien los colores, de tal forma que las fases deberían recorrer el rango de 0 a 85, de 85 a 170 y de 170 a 255, y luego hacerlos a la inversa

Así que para recorrer esos rangos a una hora/minuto/segundo determinados, cree un contador mediante el timerOne  que debería ejecutarse al entrar en ese tiempo establecido y recorrer el rango lentamente, por ejemplo de 0 a 85 en 30minutos.

El problema que tengo en este punto es que no me contabiliza bien y no se a que se debe pero hace mas rápido de lo q debería y los tiempos no responden.

surbyte

Quote
¿que función desempeñan esos UL?
unsigned long, le dice al compilar que ese número es un numero entero largo y no un simple entero.

Go Up