Controlar desconexión ascensor
Tareas
- Un calendario para poder saber que dias ha de estar desconectado todo el dia o solo en horario laboral
- Pantalla
- Para poder configurar el dia en el que estamos y la hora
- Poder ver el estado de si esta desconectado o no
- Teclado
- Introducir hora y dia
- Poder hacer una desconexion manual (aunque esto puede hacerse desde el boton rojo que ya hay) - El circuito de desconexion no tiene que anular el del boton rojo
- Antes de ponerlo hay que hacer pruebas de si es fiable estar siempre el arduino encendido, al ser esta una plataforma diseñada para pruebas
- Mirar amperios que pasan por el boton rojo y voltios
- Implementar funcion de subir el montacargas a la 4 planta
- Mirar amperios que pasan por el boton y voltios
- Bateria litio para supuesto cortan luz k siga funcionando. Aunque si cortan y vuelven a dar la pila del reloj mantiene hora i al dar otra vez el prog se ejecuta normalmnt
- Almacenar calendario n tarjeta sd para poder ajustar facilmnt
- Mirar posibilidad configurar fiestas especiales o todo cale dsd keypad
- Modo conf calendario dsd keypad, introducir primero mes y lego dias festivos separados por puntos. Hanilitar tmb introduccion periodos consecutivos
- Estudiar dias festivos para ver k siempre sean iguales
- Al introducir dias festivos, quitar el anterior o dejar anteriores y quitar permitar solo seleccionados
- Leer hora cada segundo o leer hora una vez al dia y k arduino cuente solo un dia
- Politica d lectura de dia, cada cuanto leo el dia del mes? Podria contar el arduino 28 dias que es lo minimo que tiene el mes i luego preguntar cada 24 horas la fecha al reloj durante 4 dias (para llegar al maximo de 31 dias)
- Pero no se si esto gasta mas (codigo y tiempo) que preguntar cada 24 horas el dia
- Hacer el programa teniendo en cuenta que si se resetea empieza correctamnt
- Cuando se introduzca la hora o un dia festivo tiene que salir un mensaje traduciendo los datos a entendibles y preguntando confirmacion
- Se puede utilizar shift Register para ahorrar pines para el keypad?
- Control tiempo max espera entrada datos. Para hacerlo leer milis antes del bucle y en el bucle controlar que si milos es superior a 2 min salga del bucle
Ejecución código
Proceso desconexión
- Muestro hora y fecha
- Proceso desconexion en marcha
- Leo Hora
- Leo Dia
- Si dia y hora laborables entonces //Hora desde 7.30 hasta 17.50
- Desactivo Stop
- Desactivo Led
- Sino si hora es igual a 17.50 y dias es laborable entonces //Empiezo proceso de desconexion
- Espero puertas cerrar
- Llamo planta 4
- Espero ascensor llegue
- Activo Stop
- Activo Led
- Sino //dias de fiesta o horas no laborables. Realmente este caso no se necesita porque de seri el rele de stop y el led estan activados
- Activo rele Stop
- Activo led
Proceso menu
- Si aprieto * entro en menu
- Dibujo menú
- Espero opción valida (1,2,3 o #)
- Si opcion es 1 entonces
- Muestro configuración hora
- Espero entrada de hora //hago las comprobaciones de si la hora entrada es correcta
- Muestro configuracion dia
- Espero entrada de dia //hago las comprobaciones de si el dia entrado es correcto
- Sino Si opcion es 2 entonces
- Muestro configuracion dia festivo
- Espero entrada nuevo dia festivo //hago las comprobaciones de si dia festivo es correcto
- Guardo nuevo dia en SD
- Sino Si opcion es 3 entonces
- Extraigo SD
El proceso de desconexión tiene que estar funcionando siempre, aunque entre en el menú y me ponga a configurar cosas. El caso mas desfavorable es cuando estoy en el menú y la ejecución esta parada esperando una entrada de tecla.
Incluso en este caso la ejecución de desconexión no debe pararse.
El proceso de estar atento a la entrada de la tecla *, mientras se ejecuta el proceso de desconexión, lo tengo implementado pero no se si de forma optima o no.
Soluciones a interferencia entre de los procesos desconexion y menu
- A 10 o 20 min desconexión no poder entrar en menú. Si se entra la espera de datos sera max 2 min. Problema --> si voy viajando entre menús menos de dos min por cada uno puedo pasarme de la hora de desconexión
- Debería ser que si a las 17.50 no se ha podido iniciar lo intente cada 10 min. Tiene que haber una variable que guarde si la desconexión/conexión se ha realizado. Con esto juntamente que no se puede estar esperando una entrada mas de dos min me aseguro que el p desconexión se ejecute siempre
- Interrupciones: creo que si la interrupción se encarga de la desconexión, mirando cada x tiempo la hora y si llega la hora se ejecuta el p desconexión. El p menú estaria en el principal. Pero esto no se como hacerlo
- En el bucle principal pongo condición de entrar en menú que se apriete la tecla asterisco y que no sean 10 o 20 min antes de la hora de conex/descon. En los bucles de espera de datos hago lo mismo. Si son 10 o 20 min antes se sale del bucle. Haciendo que se cierren los procesos hasta llegar al principal que entonces ira directamente al proceso desconexion
- En cada bucle que espere entrada de tecla se llama al proceso desconexion. Con esot me aseguro que aunque este en espera a que el usuario introduzca un dato el proceso de desconexion se lleva a cabo. Hay que tener en cuenta de que el proceso de desconexion sea autonomo (no haga falta que se le envien variables), porque sino se convierte en un lio tener que llevar las variables hasta el bucle de espera para pasarselas al proceso desconexion.
Elementos
- Para el reloj y calendario
- DS1307
- DS3231 (este lleva el cristal incorporado)
- Conexion via i2c
- Ocupa 2 pines
- Rele para desconexion ascensor - ocupa 1 pin
- Rele para llamar al piso 4 - ocupa 1 pin
- Interruptor para desconexion general Arduino y que siga el funcionamiento normal del ascensor
- LCD
- DFR0091
- Conexion via SPI - ocupa 3 pines
- 128x64 Liquid Crystal
- 4 lines and 12 English characters
- DFR0063
- Conexion i2c - ocupa 2 pines
- 16x2
- DFR0091
- Keypad - ocupa 7 pines
- Led para mostrar si esta desconectado el ascensor o no - ocupa 1 pin
- SD para guardar dias festivos (SPI) - ocupa 4 pines
Uso Pines Arduino Uno
- SPI (LCD y SD)- 9-13
- I2C - A4 y A5
- Keypad - 2-8
- Reles - A0 y A1
- Led - A2
Libres: A3
Uso Pines Arduino Leonardo
Si uso Leonardo en vez de Uno, los pines SPI van al ICSP y me ahorro 4 pines digitales, entonces pasariamos a tener esta configuracion:
- SPI - ICSP + 12 (SS1) + 13 (SS2)
- I2C - A4 y A5 (Hay que revisar que Leonardo tiene dos pines que ponen SDA y SCL)
- Keypad - 2-8
- Reles - 9 y 10
- Led - 11
Libres: A0, A1, A2, A3
Programacion
- Módulo Reloj/Calendario
- Funcion lectura datos reloj
- Funcion escritura datos reloj (puesta en hora del reloj)
- Módulo SD-Calendario
- Escritura en el fichero los dias festivos
- Lectura del fichero los dias festivos
- Comprobar que detecta bien la SD
- Módulo Mostrar datos en Pantalla
- Menú
- Configurar reloj
- Configurar dias festivos
- Verificar si lee correctamente SD
- Desconectar manualmente el ascensor a traves de una orden (no se si esto es necesario)
- Hora y dia
- Estado desconexion ascensor
- Menú
- Desconexión ascensor
- Llamada planta 4
Orden de programación de los diferentes módulos
- Programar proceso de desconexión integramente. Que sea funcional
- Módulo de lectura de RTC
- Módulo de lectura de SD
- Relés
- Sensores
- Led
- Módulo de mostrar en pantalla hora y fecha
- Programar proceso menú
- Módulo mostrar menú
- Módulo submenus
- Configurar Hora y Fecha
- Configurar Calendario
- Extraer SD
Documentacion
http://tronixstuff.wordpress.com/2011/05/13/tutorial-arduino-and-the-spi-bus/ http://www.instructables.com/id/Using-the-sparkfun-12-Button-keypad-with-the-ardu/?ALLSTEPS ---- Wiring keypad correcto para ejemplos arduino Keypad coocking hacks:
1 2 3 -- 2 4 5 6 -- 7 7 8 9 -- 6 * 0 # -- 4 | | | 3 1 5