Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Insoladora Homemade
#1
FINALIZADA

Bueno, edito la primera pagina para dejar un poco el resumen de todo, para empezar un video del funcionamiento:






Una fotos:

resim

resim

resim

resim

resim


Codigo:

Código:
//Insoladora V1.0

//Librerias
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Bounce.h>

//Caracteres
byte uparrow[8] = {        //Flecha hacia arriba
    B00100,
    B01110,
    B10101,
    B00100,
    B00100,
    B00100,
    B00100,
    B00100
};
byte downarrow[8] = {    //Flecha hacia abajo
    B00100,
    B00100,
    B00100,
    B00100,
    B00100,
    B10101,
    B01110,
    B00100
};

//LCD
LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

//Botones
Bounce UP = Bounce(2,100);        //Pin 2 para boton UP
Bounce DOWN = Bounce(3,100);        //Pin 3 para boton DOWN
Bounce START = Bounce(4,100);        //Pin 4 para boton START
Bounce STOP = Bounce(5,100);        //Pin 5 para boton STOP

//Salidas
#define RELE 6
#define BUZ 8

//Variables
long segundos = 0;    //Variable para los segundos
long minutos = 0;    //Variable para los minutos
long segundosactual = 0; //Variable para temporizacion
long segundostotal = 0; //Segundos a temporizar
long segundosviejo = 0; //Tope de segundos para el FOR
long contador = 0;
long multiplo = 1;

void setup() {
  // put your setup code here, to run once:
  //PINES
  pinMode(RELE, OUTPUT);
  pinMode(BUZ, OUTPUT);
  //Iniciamos el LCD
  lcd.init();
  lcd.backlight();                     //Iniciamos la retroiluminacion
  lcd.setCursor(0,0);                //Situamos el cursor al inicio
  lcd.print("Insoladora V1.0");        //Imprimimos mensaje inicial
  lcd.setCursor(5,1);                //        
  lcd.print("L1llo5");                //
  delay(2000);                        //Esperamos 2 segundos con el mensaje
  lcd.clear();                        //Limpiamos la pantalla

  //Registro Caracteres
  lcd.createChar(1, uparrow);
  lcd.createChar(2, downarrow);
}

void loop()
{
    // put your main code here, to run repeatedly:
    //Leemos el tiempo guardado
    segundos=EEPROM.read(1);
    minutos=EEPROM.read(2);
    do{
        lcd.setCursor(0,0);
        lcd.print("Tiempo:");
        //Actualizamos los botones
        UP.update();
        DOWN.update();
        //Imprimimos la flechas en pantalla
        lcd.setCursor(15,0);
        lcd.write(1);
        lcd.setCursor(15,1);
        lcd.write(2);
        //Imprimos los segundos y minutos
        imprimir(segundos,minutos);             //Imprimimos los minutos y segundos iniciales
        if (UP.risingEdge())                    //Comprobamos si se ha pulsado el interruptor UP
        {
            segundos=segundos+10;                //Sumamos 10 segundos en cada pulsacion
            if(segundos > 50)                    //Si los segundos pasan del 50, sumamos un minutos y reiniciamos los segundos
            {
                minutos=minutos+1;
                segundos=0;
                imprimir(segundos,minutos);        //Imprimimos
            }
        imprimir(segundos,minutos);                //Si no pasamos de 50 segundos los minutos no varian
        }
        else if (DOWN.risingEdge())                //Si pulsamos el boton DOWN
        {
            segundos=segundos-10;                //Restamos 10 segundos en cada pulsacion
            if(segundos < 0)                    //Si los segundos son menores que 0, restamos un minuto y ponemos los segundos a 50
            {
                minutos=minutos-1;                
                segundos=50;
                if(minutos<0)                    //Evitamos que los minutos puedan ser negativos
                {
                    minutos=0;                    //Ponemos a cero el contador
                    segundos=0;                    //
                }
                imprimir(segundos,minutos);        //Imprimimos
            }
            imprimir(segundos,minutos);            //Si no ocurre ni minutos negativos ni resta de los mismos imprimimos
        }
        START.update();
    }while (!START.risingEdge()||segundos==0&&minutos==0); //Mientras no se pulse START o sean cero los minutos y segundos se repite el bucle
    //Pantalla de Inicio
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("INICIANDO....");
    //Guardado en EEPROM
    saveseg(segundos);
    savemin(minutos);
    buzzer(2);
    delay(1000);
    lcd.clear();
    //Cuenta atras
    segundosactual=millis();                //Guardamos los millis en los que nos encontramos
    segundosviejo=millis();                    //Guardamos en otra variable
    segundostotal=(minutos*60+segundos);    //Calculamos los segundos totales que hay que temporizar
    lcd.setCursor(0,0);                        
    lcd.print("Insolando:");                //Imprimimos un mensaje de INSOLANDO
    while (segundosactual/1000<=segundosviejo/1000+segundostotal)    //Cuenta atras, mientras segundos actual, sea mas pequeño que la suma de los que teniamos mas los que necesitamos, repetimos el bucle
    {
        STOP.update();                //Actualizamos el estado del boton STOP
        if(STOP.risingEdge())        //Si pulsamos el boton stop paramos el bucle
        {
            digitalWrite(RELE, LOW);    //Ponemos a cero la salida del rele
            lcd.clear();
            //Ponemos a cero las variables
            segundosactual = 0;
            segundostotal = 0;
            segundosviejo = 0;
            contador = 0;
            multiplo = 1;

            break;                        //Salimos del while
        }                    
        digitalWrite(RELE, HIGH);        //Activamos el rele
        contador=segundosactual-segundosviejo;    //Calculamos la diferencia entre segundos viejo y nuevo
        if (contador>1000*multiplo)                //Cuando llege a 1000ms(1 segundo) restamos tiempo
        {
            if (segundos<=0)                    //Si los segundos son menores que 0 bajamos minutos
            {
                minutos=minutos-1;                    //Restamos un minuto
                segundos=59;                        //Seteamos los segundos a 59
                cuentaatras(segundos,minutos);        //Imprimimos
            }else
                {
                    segundos=segundos-1;                //Restamos segundos si no son menores que 0
                    cuentaatras(segundos,minutos);
                }
            multiplo=multiplo+1;                    //Empleamos multiplo, para ir aumentando de un segundo en un segundo la diferencia entre tiempos, y asi poder contar cada segundo
        }
        segundosactual=millis();        //Renovamos la variable millis
    }
    //////FIN DEL CONTEO
    digitalWrite(RELE, LOW); //Desactivamos el rele
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("FINALIZADO");//Mostramos mensaje de finalizado
    buzzer(1);                //Melodia de final
    lcd.clear();            
    //Ponemos a cero las variables
    segundosactual = 0;
    segundostotal = 0;
    segundosviejo = 0;
    contador = 0;
    multiplo = 1;    
    //Volvemos al tiempo guardado
    segundos=EEPROM.read(1);
    minutos=EEPROM.read(2);
}

//Funcion Imprimir
void imprimir(int seg,int minu)
{
if(minutos<10) //Si los minutos son menores de 10 situamos la cifra mas a la derecha
{
    lcd.setCursor(11,0);
    lcd.print(segundos);
    lcd.setCursor(10,0);
    lcd.print(":");
    lcd.setCursor(8,0);
    lcd.print("0");
    lcd.setCursor(9,0);
    lcd.print(minutos);
}
else
{    
    lcd.setCursor(11,0);
    lcd.print(segundos);
    lcd.setCursor(10,0);
    lcd.print(":");
    lcd.setCursor(8,0);
    lcd.print(minutos);
}
}

//Funcion imprimir cuenta atras, situacion correcta de los segundos
void cuentaatras(int seg, int minu)
{
    if(minutos<10&&segundos>=10) //Si los minutos son menores de 10 situamos la cifra mas a la derecha y los segundos mayores que 10
    {
        lcd.setCursor(13,0);
        lcd.print(segundos);
        lcd.setCursor(12,0);
        lcd.print(":");
        lcd.setCursor(10,0);
        lcd.print("0");
        lcd.setCursor(11,0);
        lcd.print(minutos);
    }else if(minutos>=10&&segundos>=10)
        {    
            lcd.setCursor(13,0);
            lcd.print(segundos);
            lcd.setCursor(12,0);
            lcd.print(":");
            lcd.setCursor(10,0);
            lcd.print(minutos);
        }
    if(minutos<10&&segundos<10) //Si los minutos son menores de 10 situamos la cifra mas a la derecha, los segundos menores que 10
    {
        lcd.setCursor(13,0);
        lcd.print("0");
        lcd.setCursor(14,0);
        lcd.print(segundos);
        lcd.setCursor(12,0);
        lcd.print(":");
        lcd.setCursor(10,0);
        lcd.print("0");
        lcd.setCursor(11,0);
        lcd.print(minutos);
    }else if(minutos>=10&&segundos<10)
        {    
            lcd.setCursor(13,0);
            lcd.print("0");
            lcd.setCursor(14,0);
            lcd.print(segundos);
            lcd.setCursor(12,0);
            lcd.print(":");
            lcd.setCursor(10,0);
            lcd.print(minutos);
        }
}

//Funciones Lectura y Grabado EEPROM
void saveseg(int segundos)
{
    int saveseg=0;
    saveseg=EEPROM.read(1);    //Leemos los segundos guardados
    if (saveseg!=segundos)    //Si los segundos guardados no coinciden con los nuevos volvemos a guardar
    {
        EEPROM.write(1,segundos);    //Guardamos
        lcd.setCursor(0,1);            
        lcd.print("Saved");            //Imprimimos para verificar el guardado
    }
}

void savemin(int minutos)
{
    int savemin=0;            
    savemin=EEPROM.read(2);    //Leemos los minutos guardados
    if (savemin!=minutos)    //Si los minutos guardados no coinciden con los nuevos volvemos a guardar
    {
        EEPROM.write(2,minutos);    //Guardamos
        lcd.setCursor(0,1);
        lcd.print("Saved");            //Imprimimos para verificar el guardado
    }    
}

//Funcion BUZ
void buzzer(byte melodia)
{
    switch (melodia)
    {
        case 1:                            //Melodia al finalizar la cuenta
        digitalWrite(BUZ, HIGH);
        delay(1000);
        for (int i = 0; i<10; i++)
        {
            digitalWrite(BUZ, HIGH);
            delay(200);
            digitalWrite(BUZ, LOW);
            delay(50);
        }
        break;                            //Melodia al iniciar la cuenta
        case 2:
        digitalWrite(BUZ, HIGH);
        delay(250);
        digitalWrite(BUZ, LOW);
        break;
    }
}

Resumen;

Bueno, para empezar la insoladora esta echa en MDF, la parte superior es de un viejo escaner, los flourescentes son normales, ya que me costaba encontrar UV, en un futuro puede que los cambie. La insoladora esta controlada por un arduino MICRO, una pantalla LCD conectada por I2C, 4 pulsadores, un rele pilotado por una salida digital y un transistor 2n3905 (Valen la mayoria de NPNs), un BUZZER, y como componentes auxiliares una fuente de 15V compacta, y un LM7809 para alimentar el arduino.

Bueno, despues de pasar el verano sin hacer demasiado, toca ponerse las pilas, vamos a ver si sacamos adelante una insoladora, la idea es aprovechar la parte superior de una impresora multifuncion y hacer la parte inferior en madera (MDF), por ahora nose si usare luz normal o tubos UV, pero lo primero tengo que acabar la estructura, para mañana espero tener todo ya montado.

resim

resim

resim

Tenia ojeados unos tubos UV a muy buen precio:

http://todoelectronica.com/tubo-fluoresc...c017dc571b
Citar
#2
Luego tienes que añadir las reactancias y los cebadores
Citar
#3
grafisoft escribió:Luego tienes que añadir las reactancias y los cebadores

Pensaba usar la electronica de lamparas de bajo consumo para los tubos, ya lo he echo con unos tubos de unos terrarios.

Tengo que plantearme como hacer un temporizador, nose si implementarlo con PICs o un arduino NANO, porque no he visto kits interesantes en ebay.
Citar
#4
Usa un arduino, lo tienes ya todo hecho, y unicamente tendrias que añadir un transistor, un diodo y un rele para conectar y desconectar la alimentacion de los tubos.
Citar
#5
grafisoft escribió:Usa un arduino, lo tienes ya todo hecho, y unicamente tendrias que añadir un transistor, un diodo y un rele para conectar y desconectar la alimentacion de los tubos.

Si, seguramente sea la primera opcion, no tengo mucha idea de programar en arduino, pero quiero aprender, cuando me llege el CLON, veremos aver que se puede hacer. Con un lcd de 2*16 y demas aver si monto un temporizador decentillo
Citar
#6
Eso es facil, ya veras, en 2 tardes lo tienes montado Guiño
Citar
#7
Algun LCD por ebay con i2c recomendado para el arduino?

EDITO: Estoy viendo el post de arduino del foro, seguramente me interese algo dele estilo a:

http://www.ebay.es/itm/High-quality-IIC-...972&_uhb=1

Graches¡
Citar
#8
Yo compré esta y fue conectarlo y listo:
http://www.ebay.com/itm/251132826320

No he tenido problemas
Citar
#9
hectorri escribió:Yo compré esta y fue conectarlo y listo:
http://www.ebay.com/itm/251132826320

No he tenido problemas

Perfecto¡¡ Muchas Gracias, quiero ir teniendo todo ya que las cosas como sabemos tardan en llegar, espero no tener problemas con el arduino clonico Lengua, lo implementare con este y luego mi idea es pasarlo a uno NANO
Citar
#10
Uso las librerías de las que hablamos en este hilo (para cuando te llegue): http://spainlabs.com/foro/viewtopic.php?f=9&p=6683

Yo cuando miré una LCD con el I2C busqué directamente la más barata, no sabía que había algunas problemáticas como la de jukillo. En mi caso no ha habido sorpresas raras.
Citar
#11
Traigo nuevos avances, lo primero las fotos:

resim

resim

resim

resim

resim

He comprado un arduino NANO y una LCDI2C, para el futuro temporizador, me queda poner la conexion a la red que veis en la ultima foto, y bueno, comprar los tubos hacer el interior y demas..., los tubos comprare seguramente 3 de 30cm de largo, para ponerlos a lo largo de la insoladora, creo que sera mas que suficiente, el tubo es:

http://todoelectronica.com/tubo-fluoresc...c017dc571b

8W, y 30cm aprox de largo.

Realizare una separacion entre los tubos y la electronica, el compartimento de los tubos ira pintado en blanco para mejorar la dispersion de la luz.

Todo el trabajo esta hecho con sierra de mesa, y fresadora.

Un saludo¡
Citar
#12
Creo que mejor que pintarlo en blanco es que lo forres con papel de aluminio, para que refleje mejor. Es una opcion, no es obligatorio hacerlo, puedes dejar el color madera si quieres.
Citar
#13
grafisoft escribió:Creo que mejor que pintarlo en blanco es que lo forres con papel de aluminio, para que refleje mejor. Es una opcion, no es obligatorio hacerlo, puedes dejar el color madera si quieres.

El tema es que el aluminio refleja la luz en todas direcciones, y pienso que el blanco lo difumina mas homogeneamente, es decir no hay reflejos ni nada por el estilo que pueden darse al poner aluminio, vamos es una teoria jejejejej no tengo problemas en poner una cosa u otra.

Enviado desde mi Nexus 4 usando Tapatalk 2
Citar
#14
Yo es lo que he visto por ahi, mi insoladora la tengo sin pintar, con color de la madera sin mas
Citar
#15
Una vista provisional de como quedarian los 3 flourescentes, y las "paredes" que los separen de la electronica.

resim

resim

resim

Tendre que esperar para acabarla, ya que necesito los tubos, y los correspondientes casquillos, y los tubos hasta el 26, no empiezan a trabajar donde los voy a pedir, asique tocara esperar....
Citar
#16
A que altura del cristal vas a dejar los fluorescentes
Citar
#17
grafisoft escribió:A que altura del cristal vas a dejar los fluorescentes

Pues calcula que de fondo la insoladora tiene 15,5cm, calculo que quedaran entre unas cosas y otras a 15CM del cristal
Citar
#18
Me parece que va a ser mucha distancia, mira de dejarlo entorno a 5cm y crea un falso fondo donde meter toda la electronica
Citar
#19
grafisoft escribió:Me parece que va a ser mucha distancia, mira de dejarlo entorno a 5cm y crea un falso fondo donde meter toda la electronica

Sin problema, una vez llegen los tubos los pondre a la altura que mejor queden. Al final me sobrara sitio por todas partes jajjajaja

Enviado desde mi Nexus 4 usando Tapatalk 2
Citar
#20
Tiene pinta de que te va a sobrar mucho espacio si. Pero no los pongas abajo del todo Guiño
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  [DIY] Insoladora casera con leds UV Bayaz 4 938 06-04-2017, 08:48 PM
Último mensaje: Bayaz
  Insoladora con leds UV cna 36 5,817 02-12-2014, 03:52 PM
Último mensaje: teammariano
  [FABRICANDO] Insoladora LED hectorri 23 3,202 04-04-2014, 11:38 AM
Último mensaje: nexocomun
  Fabricando insoladora casera [TERMINADA] ClioS 14 3,053 19-08-2013, 09:09 AM
Último mensaje: ClioS
  Insoladora casera, para ponerse morenos!! jukillo 8 1,595 26-06-2013, 09:50 PM
Último mensaje: Lord Bergidum