Insoladora
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
- TUV 11W FAM - 226mm largo - 2.6W UVC - Purificar Agua - http://download.p4c.philips.com/l4b/9/928002204013_eu/928002204013_eu_pss_espes.pdf
- TUV PL-S 11W/2P 1CT - 236mm largo - 3.2W UVC - Purificar Agua - http://download.p4c.philips.com/l4b/9/927902304007_eu/927902304007_eu_pss_espes.pdf
- Actinic BL PL-S 11W/10/2P 1CT - 236mm largo - 2.8W UVA - Atraer insectos - http://download.p4c.philips.com/l4b/9/927902321007_eu/927902321007_eu_pss_espes.pdf
- Actinic BL TL-D 15W/10 1SL - 451mm largo - 4.51W UVA - Atraer insectos - http://download.p4c.philips.com/l4b/9/928024801029_eu/928024801029_eu_pss_espes.pdf
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
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
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
Soportes PCB
| Soporte para PCB |
|---|
| [[File:]] |
| texto |
| htpp |
Montaje
PCB LCD, embellecedores, botones y espaciadores
| PCB LCD | Embellecedor LCD | Embellecedor Joestick | Embellecedor Botón | Botón Joestick | Botón | |
|---|---|---|---|---|---|---|
| Imagen | [[File:]] | [[File:]] | [[File:]] | [[File:]] | [[File:]] | |
| Descripción | texto | texto | texto | texto | texto | |
| enlace | http | http | http | http | htpp |
Montaje
Demás acabados caja
| Enchufe | Cierres | Bloqueador tapa | Maneta |
|---|---|---|---|
| File | File | File | File |
| texto | texto | texto | texto |
| http | http | http | http |
Electrónica
| 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.
El valor normalizado es
Según la fórmula de arriba podemos sacar la corriente que pasará por el relé:
La la calcularemos a través de la relación de corrientes del transistor:
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 3 - USB to UART
Despues de mirar varias esquematicos de como integrar el conversor UART to USB CP2102 listo las consideraciones:
- Colocar un fusible autorearmable de 500mA como indican en esta web [1]. El fusible se conecta en el pin VBUS del USB para proteger el puerto USB del ordenador
- El pin REGIN se conecta a GND a traves de un condensador de entre (1uf y 0.1uf). Éste es un condensador de desacoplo. También se conecta al VBUS del USB porque por el pin REGIN del CP2102 se alimenta el CP2102
- El pin VBUS del CP2102 va conectado al VBUS del USB. El pin VBUS del CP2102 sirve para indicar al CP2102 que esta conectado al USB. Por lo tanto cuando conectamos físicamente el USB al ordenador hacemos entrar una señal de high por el pin VBUS del CP2102
- Los pines D+ y el D- del CP2102 se conectan a D+ y D- del USB
- Los pines TXD y RXD del CP2102 se conectan a los pines TXD y RXD del Arduino Pro Mini. El TXD del CP2102 al RXD del Arudino Pro Mini y el RXD del CP2102 al TXD del Arudino Pro Mini
- Le añado un led al TXD y otro al RXD para ver cuando hay actividad. Utilizo dos resistencias para controlar el voltaje y el amperaje que iran por el led
- Conecto el pin RST del Arduino Pro Mini al DTR del CP2102 como explico más abajo
- El pin GND del CP2102 va conectado al GND del USB
- Del pin VDD del CP2102 hablo un poco más abajo
Reseteo automático
Extracto de la documentación de Sparkfun sobre el Arduino Pro Mini:
"Reseteo automático por Software.
En lugar de utilizar el pulsador de reseteo antes de cargar un nuevo sketch la Arduino Mini Pro ha sido diseñada de modo que permite el reseteo automático por el software instalado en nuestro ordenador.
Uno de los pines en el conector de 6 pines está conectado con la linea de reseteo del ATmega168 mediante un condensador de 100 nanofaradios. Este pin se conecta a una de las líneas de control de flujo por hardware del convertidor de USB a serie al conector RTS cuando se utiliza un cable FTDI o al conector DTR cuando se usa una placa convertidora de Sparkfun. Cuando esta línea se pone en estado LOW el chip se reinicia.
El software de Arduino tiene la capacidad de cargar código en la placa simplemente presionando el botón de "upload" en el Arduino IDE. Esto significa que el gestor de arranque tarda menos tiempo en ejecutarse, pues la linea de reseteo está perfectamente coordinada con el inicio de la descarga."
En la siguiente imagen se ve el conector de 6 pines y el pin de reset del Atmega328 como estan conectados mediante un condensador de 0.1uF.
Conectando este pin DTR al pin DTR del CP2102 conesguimos que no haga falta resetear el Arduino Pro Mini antes de cargar el software, lo hace el propio IDE de Arduino.

Mirando por internet me he encontrado con este video Arduino Mini Pro + CP2102 USB to TTL - Tutorial de Walter F.C. donde nos muestra la manera que ha utilizado el para conectar una placa con el CP2102 a su Arduino Pro Mini.
![]()
Vemos que conecta el pin de RST del Arduino a través de un condensador al DTR del CP2102. Creo que es lo mismo que si hubiese conectado el DTR del CP2102 al conector que está al lado del TXO que se ve en morado en la imagen.
Lo que no entiendo es porque pone una resitencia entre el pin VCC y RST.
Alimentar el CP2102
- El integrado CP2102 se alimenta a través del pin REGIN que como hemos dicho antes va conectado al VBUS del USB, que es el que lleva 5V
- A parte el CP2102 puede alimentar el microcontrolador al que va conectado si este es de 3.3V a través del pin VDD
- En los diferentes esquemas he visto que VDD siempre lo conectan a GND mediante un condensador. Es el condensador de desacoplo
- Si el controlador que queremos conectar al CP2102 es de 5V, conectaremos el controlador directamente al VBUS del USB
Diferentes esquemas CP2102
- http://www.tienda.siliceo.es/myfiles/CP2102_ArduinoSch.png
- http://cfile1.uf.tistory.com/image/22202C475104B7C918A8C1
- http://bovs.org/images/cp2102convsch(4).png
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
- 2 ifs que controlan LEFT/RIGHT, que son los que desplazan el cursor entre los segundos y minutos
- 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.
- Guardamos la opción escogida en la memoria eeprom con la funcion EEPROM.put()
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
Menu
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
[2] - Aqui info sobr evarios uC USB to UART
[3] - Explicación buena de los uC RS232 y los que ya convierten USB to UART directamente
[4] - Esquema conectando el FT234XD
[5] - tutorial instalando y conectando Arduino Pro Mini