Diferencia entre revisiones de «Insoladora»

De Proyectos
Ir a la navegación Ir a la búsqueda
Línea 67: Línea 67:
|}
|}
=== Montaje ===
=== Montaje ===
Detalle del montaje de los Sujeta Reactancias y las Reactancias:<br>
<br>
<br>
<br>
[[File:Ins_Montaje02.png|450px]]<br>
[[File:Ins_Montaje03.PNG|450px]]<br>


== Soportes Vidrio, vidrio y vidrio de ajuste ==
== Soportes Vidrio, vidrio y vidrio de ajuste ==

Revisión del 14:35 31 dic 2015

Propósito

He querido constrir mi propia insoladora UV para la creación de placas PCB electrónicas.
He diseñado un circuito que controlado con un arduino pro mini y con un lcd de 16x2, un joestick y dos botones me permiten controlar el tiempo de insolado. El circuito está preparado para una insoladora de doble cara, aunque yo de momento solo he construido una insoladora de una sola cara.
El programa contiene un pequeño menú con tres memorias para guardar tres tiempos diferentes y luego poder volver a cargarlos y una opción para activar las dos caras, solo la inferior o solo la superior.
He querido hacer un modelo que todo sea atornillable por si se tiene que desmontar por algún motivo y las piezas que utilizo para colocar los componentes (como los casquillos, las reactancias, etc) son impresas.

Teoria sobre la luz UV



Luz visible - 400 - 750nm

Luz actínica - 400-480nm
Está dentro del espectro visible. Forma parte de los azules/violetas

Luz UV - 300 - 400nm
Se utiliza para higienizar el agua (acuarios, ...)

Explicación diferentes UV (A, B y C) - http://aquaflash.blogspot.com.es/2009/04/34-luz-ultravioleta-tratamiento.html

Philips

Hardware

Fluorescentes y casquillos

Fluorescente Casquillos Soporte Casquillos
[[File:]] [[File:]] [[File:]]
texto texto Soporte para collar el casquillo a la base y darle altura al tubo. Se colocan dos insertos de M3, uno para collar el soporte al casquillo y el otro para collar el soporte a la base
http http Soporte Casquillo

Montaje

Detalle del montaje de los Sujeta Casquillos, los Casquillos y los Fluorescentes:



Lugar de colocación de los Sujeta Casquillos en la Base:

File Imagen de la base con la posición de los sujeta casquillos

Explicación del montaje. Referencia al pdf con los taladros de la base (agrupados por colores los de cada sección)
Imagen del montaje
PDF del montaje

Reactancias

Reactancias Soporte Reactancias
[[File:]] [[File:]]
texto Soporte para collar las reactancias a la base. Las reactancias se colocan de dos en dos y se necesitan dos soportes por cada par de reactancias. En la parte superior del soporte van dos insertos de M3 para collar las reactancias y en la parte inferior del soporte va un inserto para collarlo a la base
http Soporte Reactancia

Montaje

Detalle del montaje de los Sujeta Reactancias y las Reactancias:


Soportes Vidrio, vidrio y vidrio de ajuste

Soporte Vidrio Parte A Soporte Vidrio Parte B Vidrio Vidrio Ajuste Pinzas
[[File:]] [[File:]] [[File:]] [[File:]] [[File:]]
Soporte para el vidrio. Consta de dos partes. La parte A es donde se apoya el vidrio y está sujeta a la base. Se usan dos insertos, uno para collar la parte A a la base y la otra donde se collará la parte B Esta pieza sirve para sujetar el vidrio a la parte A. Con un tornillo M3 que pasa por la parte B se enrosca con la parte A y queda el vidrio sujeto. Vidrio que se usa como base donde apoyar el fotolito y el PCB Vidrio para apretar el fotolito a la PCB. Se crea un "sandwich" entre el vidrio inferior, el fotolito, el pcb y el vidrio superior Pinzas para juntar los dos vidrios
Soporte Vidrio Parte A Soporte Vidrio Parte B

Montaje

Detalle del montaje de los Sujeta Casquillos, los Casquillos y los Fluorescentes:


Soportes PCB

Soporte para PCB
[[File:]]
texto
htpp

Montaje

PCB LCD, embellecedores, botones y espaciadores

Embellecedor LCD Embellecedor Joestick Embellecedor Botón Botón Joestick Botón Espaciador LCD Espaciador PCB LCD Espaciador PCB a LCD
[[File:]] [[File:]] [[File:]] [[File:]] [[File:]] [[File:]] [[File:]] [[File:]]
Se usa para tapar los desperfectos en el corte para el LCD de la tapa. Se usa para tapar los desperfectos en el corte para el Joestick de la tapa. Se usa para tapar los desperfectos en el corte para el Botón de la tapa. El Joestick está a unos 10mm por debajo de la tapa, para poder accionarlo he creado un "alargador". El Botón está a unos 10mm por debajo de la tapa, para poder accionarlo he creado un "alargador" Espaciadores entre la tapa y el LCD. Espaciadores entre la tapa y el PCB. Espaciadores entre el PCB y el LCD.
Embellecedor LCD Embellecedor Joestick Embellecedor Botón Botón Joestick Botón Espaciador LCD a Tapa Espaciador PCB LCD a Tapa http

Montaje

Demás acabados caja

Enchufe Cierres Bloqueador tapa Maneta
File File File
Conjunto de enchufe, interruptor y fusible. Cierres tipo maletín. Bloqueador de la apertura de la tapa. Maneta para facilitar el transporte.
http http http http

Electrónica

Consumo
Arduino Pro mini
Leds 20mA
Reles 260mA
LCD
USB to UART 26mA
Total


Rele
http://gfinder.findernet.com//assets/Series/353/S40ES.pdf - 40.52 de 5V
Rele neceesita 130mA para activar bobina

Utilizando la teoria del apartado Circuito Relé calcularé la resistencia de base.

IC=IRele+ILed=VReleRRele+ILed=5??+15=??mA

RB=(VControl−VBE)⋅βIC=(5−0.6)⋅????=??Ω

El valor normalizado es ??Ω

Según la fórmula de arriba podemos sacar la corriente que pasará por el relé:

IRele=VReleRRele=5??=??mA

La IB la calcularemos a través de la relación de corrientes del transistor:

IC=β⋅IB→IB=ICβ=??mA??=??mA
Transistor

Resistencia Transistor


Condensadores
100nF SMD 1206 50V- http://www.ondaradio.es/producto/csx100kb-rohs-smd-cond-cer-100-nf-x7r-10-50v-1206-bls100-20556.aspx

En la sección Uso práctico del Filtro de la entrada Fuente de Alimentación comento la regla práctica de 1000uF por cada amperio de corriente en la salida.
En este caso tendré unos 400mA como máximo a la salida, por lo tanto escogeré un condensador de 470uF (que es el valor anterior a 1000uF).
También colocaré los condensadores que comenta el usuario Fogonazo en el forosdeelectronica.com con los valores de C2 - 100nF y C3 - 100nF.

Regulador voltaje
Regulador 7805 SMD NCV7805BD2TG

Diodo
http://es.rs-online.com/web/p/products/7103156/ - S2G-E3/5BT 1.5A 400V

Transformador
http://www.crovisa.com/espanol/ncpde3-2.htm - 9V 3,2VA Una sola salida

Puente de diodos
http://es.rs-online.com/web/p/products/8129180/ - RMB4S-E3/45 400V 0.8A

Requerimientos

Lista de componentes (BOM)

Análisis de los bloques

En cada bloque

  • Explicación de la funcionalidad del bloque
  • Medición consumos si lo necesita
  • Enlaces a las diferentes fuentes de donde se ha buscado la informacion

Bloque 1 - Alimentación

Bloque 2 - Arduino

Bloque 4 - Reles

Bloque 5 - LCD y botones

Esquemáticos

Archivos

  • Fotolitos
  • Archivos Kicad

Galería PCB

Galería de fotos de las diferentes etapas de la producción del PCB

Programación

Esquema menú y comportamiento lógico del menú

Funcionamiento sistema:

  • En modo reposo
    • Imprimir contador
    • Se entra directamente en el modo configurar el tiempo
    • Con las felcas de UP/DOWN y LEFT/RIGHT podremos movernos por el contador y modificar el valor
    • Con el botón Start empieza la cuenta atras
    • Con el botón Cancel se cancela la cuenta atrassi se ha iniciado y se coloca el contador a 0
  • En modo menu
    • Se utilizan las flechas UP/DOWN para desplazarse por el menu
    • Se utiliza el boton ENTER para acceder a los submenus/opciones
    • Menu guardar tiempo en memoria
      • Se muestran tres memorias para guardar el tiempo
      • Se selecciona la memoria que donde se quiere guardar y el tiempo que hay en el contador se guarda en la memoria
    • Menu cargar tiempo de memoria
      • Se muestran las tres memorias
      • Se selecciona la memoria que se desea y el tiempo se carga en el contador
    • Menu Doble Cara
      • Se muestran las opciones de insolado
      • Se selecciona el modo deseado y se guarda en memoria

Código


Archivo código: Insoladora.ino

Bloque 01 - Defines

  • Utilizo el define para dar un nombre más intuitivo a los pines de los botones, joystick y reles (Seccion Definicion pin arduino)
  • Lo mismo para los estados del menu (Sección Definicion estados)
  • El define INTERVAL_MILLIS y REBOUNCE_TIME son parametros de la libreria Bounce


Bloque 02 - Declaracion objetos

  • Declaro los objetos botones con el sistema debounce
  • Declaro el obejto lcd con la dirección i2c, las lineas que tiene y las filas


Bloque 03 - Declaracion variables

  • Declaración variable state donde almaceno en que estado estoy. Inicializo en el estado inicial, E_INICIAL
  • Declaración de un struct para almacenar el tiempo e inicializado a 0
  • Variable posicionCursor que almacenara donde esta el cursor para cambiar los digitos de los minutos y segundos. Inicializo a 9 que es dond estan las unidades de segundo
  • Variable milisegundos que almacena los milisegundos transcurridos cuando el cronometro está en marcha
  • Declaración de las variables para almacenar los textos de los diferentes menus
  • Variable posMenu para guardar el menu que tenemos seleccionado
  • Declaración de la variable reles que almacenará que cara de la insoladora queremos encender


Bloque 04 - Setup

  • Configuro los pines RELE1 y RELE2 como output y los inicializo en low
  • Configuro los pines de los botones como input activando los pull-up internos del arduino pro mini. Hay que tener en cuenta que la lógica sera negativa. Cuando se apriete un boton la señal de entrada será LOW y en modo reposo será HIGH


Bloque 05 - Loop

El bloque del Loop consiste en un switch en donde cada case corresponde con un estado y la variable state almacena en que estado se encuentra el programa.

  • Estado 0 - Inicial
  • Estado 1 - Configurar Tiempo
  • Estado 2 - Cuenta atras
  • Estado 3 - Menu
  • Estado 4 - Menu Guardar
  • Estado 5 - Guardar en memoria
  • Estado 6 - Menu Cargar
  • Estado 7 - Cargar de memoria
  • Estado 8 - Menu Doble Cara
  • Estado 9 - Guardar Doble Cara
  • Estado 10 - Acción cancelar dentro del menu


Bloque 06 - Funciones

  • imprimirTiempo()
    • Muestra el tiempo por pantalla
    • Si solo hay unidades de segundos o minutos inserta un 0, sino escribe directamente lo que hay en el struct cuenta
  • limpiaLCD()
    • Función que uso para limpiar el lcd al pasar del modo temporizador al modo menu
    • Tambien quita el cursor
  • configuraTiempo()
    • Esta función es la encargada de modificar el tiempo cuando utilizamos los botones UP/DOWN y /LEFT/RIGHT
    • Consta de 4 ifs que son los encargados de controlar que boton se ha pulsado
    • El comportamiento lógico se divide en dos bloques
      • 2 ifs que controlan LEFT/RIGHT, que son los que desplazan el cursor entre los segundos y minutos
        • Se tiene en cuenta que la posicion del cursor solo pueda "navegar" por los segundos
        • Las posiciones son de la casilla 9 (unidades de segundo) a la casila 5 (decenas de minutos). Se saltan los ":" que hay entre segundos y minutos
      • 2 ifs que controlan UP/DOWN, que son los que aumentan el numero de segundos y minutos
        • Se controla que los minutos ni los segundos pasen de 59
        • Se utilizan ifs para saber si estamos en unidades o decenas y en segundos o minutos (es decir se utilizan para saber donde esta el cursor). Dependiendo de donde esta el cursor de aumenta el numero de minutos o segundos de unidad en unidad o de 10 en 10
        • Al acabar de modificar el tiempo se llama a la funcion imprimirTiempo() para actualizar el valor por pantalla
  • resetTiempo()
    • Encargada de poner el tiempo a 0
    • Tambien pone el cursor en la posicion inicial, que es la de unidades de segundo
  • cuentaAtras()
    • Encargada de hacer la cuenta atras cuando se presiona el boton start
    • Utiliza la funcion millis() de arduino como "reloj" y compara el valor del temporizador que hemos puesto con el valor de millis()
    • Actualiza el valor del contador en cada cambio de decimas


  • activaReles()
    • Activa los reles que encienden la cara superior, inferior o ambas a la vez.
    • Utiliza la funcion EEPROM.gets() para leer de memoria que cara ha de encenderse
    • Mediante un switch enciende un rele u otro
  • desactivaReles()
    • Desactiva los dos reles sin importar cual estaba activo


  • funciones menu
    • Las explico en la sección Menu porque utilizaré gráficos para que sea más entendible


  • guardaMemoria()
    • Se ocupa de guardar el tiempo que introducimos en la Memoria 1, o la Memoria 2 o la Memoria 3
    • Lo primero que hace es convertir los segundos y minutos que son un struct a un int (es la variable que creamos segundosTotales)
    • Mediante la funcion EEPROM.put() guardamos en la memoria el valor del tiempo
      • El primer argumento de la función es la posicion de la memoria eeprom donde se guardará el dato. Vemos que este primer argumento es posMenu*16
      • Las tres memorias (Memoria 1, Memoria 2 y Memoria 3) se guardan consecutivamente por eso utilizamos el valor de la variable posMenu (el cual nos indica en que Memoria queremos guardar el dato) y lo multiplicamos por el tamaño que ocupa la variable segundosTotales. Sabiendo que es un int ocupa 16bits
      • El segundo argumento es la variable a guardar, segundosTotales
  • cargaMemoria()
    • Funciona igual que guardaMemoria() pero haciendo el trabajo inverso
    • Leemos de la eeprom con la funcion EEPROM.get()
      • El primer argumento es la memoria que queremos cargar (Memoria 1, 2 o 3)
      • El segundo argumento es es una variable que creo para guardar esa informacion leida de la eeprom
    • Luego divido los segundosTotales en segundos y minutos y lo almaceno en el struct cuenta
  • caraGuardar()
    • Guardamos la opción escogida en la memoria eeprom con la funcion EEPROM.put()
      • Como hemos dicho antes la información guardada esta consecutivamente, por lo tanto teniendo en cuenta que hay tres Memorias del tiempo (Memoria 1, 2 y 3) y que cada Memoria es un int de 16 bits (2 bytes), en la casilla que tenemos que guardar la opción escogida sera 3*16 (o 3*2*8)
      • El segundo parametro de la función es la opción que hemos escogido (Inferior, Doble Cara o Superior). Esta información la tiene la variable posMenu.


Bloque 07 - Funciones eventos

  • funciones de los eventos de todos los botones (Start, Cancel, Enter, Up, Down, Left y Right)
    • Controlan mediante las funciones del objeto Bounce si se ha presionado un boton o no
    • la funcion boton.update() devuelve TRUE si se ha cambiado el estado del boton
    • si se ha cambiado el estado miramos si es LOW (se ha activado el boton) y entonces devolvemos TRUE
    • sino se ha cambiado el estado del boton o no es LOW se devuelve FALSE
    • sino utilizamos la funcion boton.update() lo que obtendriamos es que si apretamos un boton (por ejemplo UP), solo con una presion las unidades no pararian de subir. Al utilizar esta funcion nos obliga a que cada vez que queramos subir una unidad tenemos que hacer una presion al boton UP
  • ev_fin_cuenta_atras()
    • Controla que si la variable cuenta llega a 0 devuelve TRUE y significaria que se ha acabado la cuenta atras

Enlaces

http://i.stack.imgur.com/oOtkU.png
http://arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf

Tema UART to USB mirare los chips de microchip i los de silicon
[1] - Aqui info sobr evarios uC USB to UART
[2] - Explicación buena de los uC RS232 y los que ya convierten USB to UART directamente
[3] - Esquema conectando el FT234XD
[4] - tutorial instalando y conectando Arduino Pro Mini