El codigo funciona en una breadboard, pero conectada a la pantalla no.

27 Abr 2012
44
España
Provincia
Badajoz
Buenos días,
Tengo una pantalla que llevo utilizando hace un par de años, y quiero automatizarla con arduino, el código que tengo es el que ya muchos conocéis y está en el foro de Dani, funciona perfectamente con pruebas realizadas en una breadboard.
Pero cuando la he conectado a la pantalla, montada con los tip141 no funciona.
Se encienden las luces pero como si estuvieran al 50% y en ese tramo horario lo mismo tienen que estar apagadas.
O deben estar al 98% y siguen al 50%.

¿Alguien puede decirme porqué puede ser?
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
Pues la verdad es que es dificil ayudarte asi sin más.
Pero una cosa esta clara....si la tenias funcionando en la Breadboard y ha dejado de funcionar la pasarla a la pantalla es que algo no has conectado bien....revisa una a una las conexiones, algo se te ha escapado.
Un saludo
 
27 Abr 2012
44
España
Provincia
Badajoz
Cuando digo que la tengo trabajando en la breadboard, se alimentaba por arduino con 3 led de pruebas uno para cada canal, relé, sondas y todo perfecto.
Es ahora cuando al conectarlo a la pantalla principal con los tips, cuando existe el problema.
la conexion de los tips es básicamente sencilla para tenerlo mal conectado, lo he revisado una y otra vez.
En total son 11 tips, uno para cada línea, al no funcionar todos juntos, he probado con uno sólo y hace básicamente lo mismo.
Los pin en el arduino los tengo conectados al pwm, que es como viene funcionando, no creo que deba ser nada de códigos, ya que funciona y carga bien.
Alguna sugerencia...
gracias
 
27 Feb 2011
204
España
Provincia
Madrid
Potencias de los leds? Potencia de la fuente dr alimentacion? Da mas detalles. 11 tip a mi personalmente me parecen una barbaridad pero tambien depende del acuario que tengas claro.... tienes algo mal en el circuito de potencia y no en el de control. Un saludo.

Enviado desde mi GT-I9505 usando Tapatalk 2
 
27 Abr 2012
44
España
Provincia
Badajoz
La pantalla esta funcionando con 11 series de 7 led de 3 voltios de 3 watios y la fuente es de 24 vol 15 amp.
Estos son los tip y como los tengo conectados 20141219_230050.jpg el negro al gnd de arduino y negativo de la fuente.
gris del positivo de la fuente a la salida de la serie de Led y el verde al pwm de arduino
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
Hola no se si te has expresado mal o yo no lo he entendido bien.
Pero dices que el cable gris va desde el positivo de la fuente de alimentacion a la serie de leds???
si es asi esta mal...

Revisa este esquema a ver si lo tienes igual...
TIP141_2_zpsc27f0c1b.jpg

Un saludo
 
31 Jul 2012
16
Barcelona Capital
Provincia
Barcelona
¿Tienes puesta una lámina de mica entre el tip y el disipador?.

Igual el problema es que tienes que aislar cada tip del disipador, o disipadores independientes para cada tip-

Saludos
 
27 Abr 2012
44
España
Provincia
Badajoz
jmcadsl la conexión esta bien es como lo tengo conectado.

Lanchone este es el disipador 20141221_143709.jpg
 
27 Abr 2012
44
España
Provincia
Badajoz
Bnas, nadie sabe porque puede ser?
He probado alimentar el arduino también desde alimentación usb y con alimentador de 7,5 por descartar y tampoco.
No se me ocurre nada

Este es el código, carga y funciona en la breadboar.

#include <LiquidCrystal.h> //pantalla
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Pantalla

#include <OneWire.h>//temperatura
#include <DallasTemperature.h>//temperatura
#define ONE_WIRE_BUS 41//temperatura, pin de entrada
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensors(&oneWire);

#include <Ultrasonic.h> //Sensor Distancia
Ultrasonic ultrasonic(31,33); //Pines Sensor

byte PIN_SENSOR = A1; //Sensor Temperatura Acuario

float centi()
{// Funcion para leer el dato analogico y convertirlo a digital:
int dato;
float c;
dato=analogRead(A0); //Sensor Temperatura Pantalla

c = (500.0 * dato)/1023;
//Esta fórmula sale de la relación del sensor con los grados. Ésta es fácilmente rastreable por la web pero vamos a intentar explicarla un poco: El sensor de temperatura LM35 responde a variaciones de 10 mV por cada grado centígrado. Si el sensor detecta 1 grado centígrado a la salida del sensor obtendríamos 10 mV. Ejemplo: 26,4ºC = 264 mV = 0.264 V.
//Tenemos que el convertidor de analógico a digital es de 10 bits de resolución, los valores variarán entre 0 y 1023, entonces Vout= (5V*Dato)/1023 siendo ( 0 < Dato < 1023 ) y para ajustar la escala a grados centígrados: Vout = ((5V*Dato)*100)/1023
return (c);
}
float kelvin(float cent)
{
float k;
k=cent+273.15;
return(k);
}
float fahren(float cent)
{
float f;
f=cent*1.8+32;
return (f);
}
float rankin(float cent)
{
float r;
r=(cent + 273.15)*1.8;
return (r);
}
//Hasta aquí hemos declarado las funciones de conversión del dato analógico de entrada del sensor en grados celsius en sus respectivas equivalencias.



#include <Wire.h> //reloj
#define DS1307_I2C_ADDRESS 0x68// reloj
// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );
}
// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val){
return ( (val/16*10) + (val%16) );
}
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int alarma;



// Pines de los relés
int PinLuces = 30;
int PinLuzSump = 34;
int PinBombas = 38;
int PinCalentador = 42;
int PinVentilador = 46;

// Pines de Estado
int EstadoBombas=0;
int EstadoCalent=0;
int EstadoVentil=0;

int Retraso=5000;




/******************************************************************************\
|************************** SETUP *************************|
\******************************************************************************/

void setup() {
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
pinMode(7, OUTPUT); //Azules PWM
pinMode(8, OUTPUT);//Mixtas PWM
pinMode(9, OUTPUT);//Blancas PWM

// set up the LCD's number of columns and rows:
lcd.begin(20,4);
// Print a message to the LCD.
lcd.print(" ## ## ## ## ## ## ");
lcd.print(" ## MARINE REEF ## ");
lcd.print(" ## MARINE REEF ## ");
lcd.print(" ## ## ## ## ## ## ");

sensors.begin();//Temperatura

// si desea poner en hora, active esta parte y luego vuelva a quitarla

second = 0;
minute = 20;
hour = 13;
dayOfWeek = 7;
dayOfMonth = 1;
month = 4;
year = 12;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);


pinMode(PinLuces, OUTPUT); //Luces
pinMode(PinLuzSump, OUTPUT); //Luz del Sump
pinMode(PinBombas, OUTPUT); //Bombas
pinMode(PinCalentador, OUTPUT); //Calentador
pinMode(PinVentilador, OUTPUT); //Ventiladores

delay(1000);
lcd.clear();
}


/********************* # #### #### #### **************************\
|********************** # # # # # # # ***************************|
|********************** # # # # # #### ***************************|
\********************* ### #### #### # **************************/
void loop() {
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora

lcd.clear();
if (minute < 2) Retraso=1000;
else if (hour < 5) Retraso=10000;
else Retraso=2500;

Bombas();
Luces(minute, hour);
Bombas();
Temperatura(minute, hour);
Bombas();
Niveles(minute, hour);

}


/******************************************************************************\
|************************** FUNCIONES PRINCIPALES *************************|
\******************************************************************************/

void Luces(int minutos, int horas) {
int LucesAzules;
int InicioAmanecerAzul=800;//13:30
int FinAmanecerAzul=924; //15:40
int InicioAnochecerAzul=1375;//22:90
int FinAnochecerAzul=1440;//24:00
int FinLuzLuna=120;//2:00
int MaxAzul=250;
int PorcentAzules;

int LucesMixtas;
int InicioAmanecerMixtas=930;//15:50
int FinAmanecerMixtas=1014;//16:90
int InicioAnochecerMixtas=1326;//22:10
int FinAnochecerMixtas=1408;//23:46
int MaxMixtas=250;
int PorcentMixtas;

int LucesBlancas;
int InicioAmanecerBlancas=1080;//18:00
int FinAmanecerBlancas=1143;//19:05
int InicioAnochecerBlancas=1318;//21:96
int FinAnochecerBlancas=1380;//23:00
int MaxBlancas=250;
int PorcentBlancas;

int Tiempo;
Tiempo=horas*60+minutos;
//Tiempo=Tiempo+60; //Horario de Verano

//################################# AZULES ###################################
//Luna
if (Tiempo <= FinLuzLuna) LucesAzules=map(Tiempo,0,FinLuzLuna, FinLuzLuna,0);
//Noche
if (Tiempo < InicioAmanecerAzul && Tiempo > FinLuzLuna) LucesAzules=0;
//Amanecer
if (Tiempo >= InicioAmanecerAzul && Tiempo <= FinAmanecerAzul) LucesAzules=map(Tiempo, InicioAmanecerAzul, FinAmanecerAzul, 0, MaxAzul);
//Dia
if ((Tiempo > FinAmanecerAzul) && (Tiempo < InicioAnochecerAzul)) LucesAzules=MaxAzul;
//Anochecer
if (Tiempo >= InicioAnochecerAzul && Tiempo <= FinAnochecerAzul) LucesAzules=map(Tiempo, InicioAnochecerAzul, FinAnochecerAzul, MaxAzul, FinLuzLuna );

//Control
if( LucesAzules <0) LucesAzules=0;
if( LucesAzules >MaxAzul) LucesAzules=MaxAzul;


//################################# MIXTAS ###################################
//Noche
if (Tiempo < InicioAmanecerMixtas) LucesMixtas=0;
//Amanecer
if (Tiempo >= InicioAmanecerMixtas && Tiempo <= FinAmanecerMixtas) LucesMixtas=map(Tiempo, InicioAmanecerMixtas, FinAmanecerMixtas, 0, MaxMixtas);
//Dia
if (Tiempo > FinAmanecerMixtas && Tiempo < InicioAnochecerMixtas) LucesMixtas=MaxMixtas;
//Anochecer
if (Tiempo >= InicioAnochecerMixtas && Tiempo <= FinAnochecerMixtas) LucesMixtas=map(Tiempo, InicioAnochecerMixtas, FinAnochecerMixtas, MaxMixtas, 0 );
//Control
if( LucesMixtas <0) LucesMixtas=0;
if( LucesMixtas >MaxMixtas) LucesMixtas=MaxMixtas;

//################################# BLANCAS ###################################
//Noche
if (Tiempo < InicioAmanecerBlancas) LucesBlancas=0;
//Amanecer
if (Tiempo >= InicioAmanecerBlancas && Tiempo <= FinAmanecerBlancas) LucesBlancas=map(Tiempo, InicioAmanecerBlancas, FinAmanecerBlancas, 0, MaxBlancas);
//Dia
if (Tiempo > FinAmanecerBlancas && Tiempo < InicioAnochecerBlancas) LucesBlancas=MaxBlancas;
//Anochecer
if (Tiempo >= InicioAnochecerBlancas && Tiempo <= FinAnochecerBlancas) LucesBlancas=map(Tiempo, InicioAnochecerBlancas, FinAnochecerBlancas, MaxBlancas, 0 );
//Control
if( LucesBlancas <0) LucesBlancas=0;
if( LucesBlancas >MaxBlancas) LucesBlancas=MaxBlancas;

//################################# RELES ###################################
if (LucesAzules+LucesMixtas+LucesBlancas >= 1)
{
digitalWrite(PinLuces, LOW);
digitalWrite(PinLuzSump, HIGH);
}
else
{
digitalWrite(PinLuces, HIGH);
digitalWrite(PinLuzSump, LOW);
}

analogWrite(7, 255-LucesAzules );
analogWrite(8, 255-LucesMixtas );
analogWrite(9, 255-LucesBlancas);

PorcentAzules =Porcent(LucesAzules ,255)*2;
PorcentMixtas =Porcent(LucesMixtas ,255)*2;
PorcentBlancas=Porcent(LucesBlancas,255)*2;

//PorcentAzules =(LucesAzules/MaxAzul)*100 ;
//PorcentMixtas =(LucesMixtas/MaxMixtas)*100 ;
//PorcentBlancas=(LucesBlancas/MaxBlancas)*100;



lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ILUMINACION ");
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);

lcd.setCursor(0, 1);
lcd.print(" Azules: ");
if (PorcentAzules < 10) lcd.print(" ");
lcd.print(PorcentAzules);
lcd.print("% ");

lcd.setCursor(0, 2);
lcd.print(" Mixtas: ");
if (PorcentMixtas < 10) lcd.print(" ");
lcd.print(PorcentMixtas);
lcd.print("% SUMP");

lcd.setCursor(0, 3);
lcd.print(" Blancas: ");
if (PorcentBlancas < 10) lcd.print(" ");
lcd.print(PorcentBlancas);
lcd.print("% ");
if (LucesAzules+LucesMixtas+LucesBlancas > 1)
lcd.print("OFF");
else
lcd.print("ON ");

delay(Retraso);

}

void Niveles(int minutos, int horas)
{
lcd.clear();
int CmAgua;
float Litros;
lcd.setCursor(0, 0);
lcd.print(" NIVEL AGUA ");
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);

lcd.setCursor(0, 1);
lcd.print(" Quedan: ");

//Sump 440*336, 1,478L por cm
CmAgua=63-ultrasonic.Ranging(CM);
Litros=CmAgua*1.5;

lcd.print(Litros);
lcd.print("L ");


lcd.setCursor(0, 2);
lcd.print(" ");
lcd.print((Litros/60)*100);
lcd.print("% ");

lcd.setCursor(0, 3);
lcd.print("MIN ");
if (Litros > 5) lcd.print((char)255);
if (Litros > 10) lcd.print((char)255);
if (Litros > 15) lcd.print((char)255);
if (Litros > 20) lcd.print((char)255);
if (Litros > 25) lcd.print((char)255);
if (Litros > 30) lcd.print((char)255);
if (Litros > 35) lcd.print((char)255);
if (Litros > 40) lcd.print((char)255);
if (Litros > 45) lcd.print((char)255);
if (Litros > 50) lcd.print((char)255);
if (Litros > 55) lcd.print((char)255);
if (Litros > 60) lcd.print((char)255);


lcd.setCursor(17, 3);
lcd.print("MAX");

delay(Retraso);
}

void Temperatura(int minutos, int horas)
{
float Pantalla = centi ();


lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" TEMPERATURA ");
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);

lcd.setCursor(0, 1);
lcd.print(" Pantalla: ");
lcd.print(Pantalla);
lcd.print((char)223);
float C = (5.0 * analogRead(PIN_SENSOR) * 100.0) / 1024;
float F = C * 1.8;
lcd.setCursor(0, 2);
lcd.print(" Acuario: ");
lcd.print(C);
lcd.print((char)223);

//if (Pantalla < 30) EstadoCalent=1;
//if (Pantalla > 32) EstadoCalent=0;
if (Pantalla < 19) EstadoVentil=0;
if (Pantalla > 21) EstadoVentil=1;

lcd.setCursor(0, 3);
if(EstadoCalent==1 ){
digitalWrite(PinCalentador, LOW);
lcd.print(" HOT ON ");
}
else
{
digitalWrite(PinCalentador, HIGH);
lcd.print(" HOT OFF ");
}
if(EstadoVentil==1 )
{
digitalWrite(PinVentilador, LOW);
lcd.print(" COLD ON ");
}
else
{
digitalWrite(PinVentilador, HIGH);
lcd.print(" COLD OFF");
}
delay(Retraso);
}

void Bombas()
{

if (EstadoBombas == 0)
{
digitalWrite(PinBombas, HIGH);
EstadoBombas =1;
}
else{
EstadoBombas = 0;
digitalWrite(PinBombas, LOW);
}
}
/******************************************************************************\
|************************** FUNCIONES AUXILIARES *************************|
\******************************************************************************/

////////////////////////////////////////////////// MODIFICA LA HORA /////////////////////////
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
int i=0;
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(i);
Wire.write(decToBcd(second)); // 0 a bit 7 inicia el reloj
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour)); // Si usted quiere 12 hora am/pm usted tiene que poner el
// bit 6 (tambien tiene que cambiar readDateDs1307)

Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}

///////////////////////////////////////////// LEE LA HORA /////////////////////
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
int i=0;
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(i);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control

*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}

///////////////////////// PORCENTAJE ////////////////////////////////

int Porcent(int Valor, int Maximo)
{
int result;
result=Valor*50;
result=result/Maximo;
return result;
}
 
27 Abr 2012
44
España
Provincia
Badajoz
Bnas tardes,
nadie puede ayudarme, es posible que la placa arduino esté mal, es por el código...

Creo que lo dejaré para después de fiestas, demás tengo la cabeza saturada
felices fiestas a todos
 
27 Abr 2012
44
España
Provincia
Badajoz
Buenos días,
El problema debe estar en el código, donde no lo sé, es extraño porque he probado con un código sencillo con la misma conexión a la pantalla y funciona perfectamente.
Por favor mirar si hubiera algo que no consigo detectar.
Mil gracias y felices fiestas a todos...
 
1 Jul 2009
627
españa
Provincia
huelva
Buenos días,
El problema debe estar en el código, donde no lo sé, es extraño porque he probado con un código sencillo con la misma conexión a la pantalla y funciona perfectamente.
Por favor mirar si hubiera algo que no consigo detectar.
Mil gracias y felices fiestas a todos...

creo que esta aqui
Código:
analogWrite(7, 255-LucesAzules ); 
analogWrite(8, 255-LucesMixtas ); 
analogWrite(9, 255-LucesBlancas);
y es asi
Código:
analogWrite(7, LucesAzules ); 
analogWrite(8, LucesMixtas ); 
analogWrite(9, LucesBlancas);
 
25 Ene 2014
12
Salou
Provincia
Tarragona
Tal y como te comenta medina el analogWrite puede ser el problema que tienes.

tu lo defines:
analogWrite(7, 255-LucesAzules );
analogWrite(8, 255-LucesMixtas );
analogWrite(9, 255-LucesBlancas);

supongo porque quieres mandar el valor de dimeo a la salida.

pero le estas realizando una operación matemática y las operaciones matemáticas se deben realizar fuera de la función analogWrite.

Lazules=255-LucesAzules;
Lmixtas=255-LucesMixtas;
Lblancas=255-LucesBlancas;

analogWrite(7,Lazules);
analogWrite(8,Lmixtas);
analogWrite(9,Lblancas);

creo que tendrias que probar así.

saludos
 
Arriba