Diferencia entre revisiones de «Insoladora»

De Proyectos
Ir a la navegación Ir a la búsqueda
Línea 173: Línea 173:
Archivo código: [http://wiki.erikcrane.net/images/c/cd/Insoladora.ino Insoladora.ino]<br>
Archivo código: [http://wiki.erikcrane.net/images/c/cd/Insoladora.ino Insoladora.ino]<br>
<br>
<br>
=== Bloque 01 ===
<b>Bloque 01 - Defines</b><br>
<b>Bloque 01 - Defines</b><br>
*Utilizo el define para dar un nombre más intuitivo a los pines de los botones, joystick y reles (Seccion Definicion pin arduino)
*Utilizo el define para dar un nombre más intuitivo a los pines de los botones, joystick y reles (Seccion Definicion pin arduino)

Revisión del 10:57 5 jul 2015

Propósito

Explicación de que va el proyecto

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

Mecánica

Fluorescentes y reactancias

Caja de la insoladora

  • Fotografia de la caja con medidas
  • Archivos de las piezas impresas
  • Render de solidworks de la caja

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


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

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 03 - 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 04 - 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 05 - 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 06 - 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 07 - 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()
  • cargaMemoria()
  • caraGuardar()


Bloque 08 - 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



Montaje todo lo que pueda SMD
Lo que sea PTH utilizare los eyelets para conectar la capa inferior con la superior

Los componentes SMD de 0603 y 0805 dicen que son fáciles de soldar. Yo creo que como no tengo una placa complicada con los 0805 tendria de sobras, pero tengo que mirar cuanto miden exactamente para hacerme una idea


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