Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Directora:
Diana Marcela Ovalle Martı́nez. PhD.
Director externo:
Jimmy Raul Bustos Benitez. Ing.
Lı́nea de Trabajo:
Automatización industrial y telemática
A todos gracias.
Resumen
Resumen IX
Lista de Figuras XV
Introducción 1
1. Generalidades 5
1.1. Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . 5
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2. Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . 6
1.3. Aportes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Cuando llego el momento de evaluar el tipo de proyecto de grado que querı́a reali-
zar lo único que tenia realmente claro era el querer aplicar lo que habı́a aprendido
a lo largo de los años en un problema del mundo real, es decir, un proyecto que
permitiera ofrecer una solución a un problema fuera del ambiente académico en el
cual se desenvuelven los años de formación de pregrado, sumado a esto, la afinidad
desarrollada con el tiempo hacia el campo de la automatización industrial y los
sistemas embebidos me permitieron encontrar en el proyecto de automatización
del observatorio astronómico de la Universidad Distrital la opción perfecta para
cumplir con estas expectativas, puesto que si bien cumplı́an con lo expresado an-
teriormente no se alejaban demasiado del mundo académico además que hacı́an
posible el retribuir en cierta forma a la Universidad por la educación recibida.
Una vez se definen los requerimientos del proyecto se parte el desarrollo en dos
lı́neas paralelas, por un lado se tiene el desarrollo de hardware y por otro el desa-
rrollo en software, no se puede hablar de uno sobre el otro pues la construcción
de uno esta justificada en el otro; para los dos casos se parte del concepto de
modularidad, es decir, entender al observatorio no como una estructura monolı́ti-
ca si no mas bien como la unión de varios componentes pequeños, esto ayuda a
la segmentación y agiliza el desarrollo de software además que permite enfocar
componentes de hardware a un problema especı́fico.
2 INTRODUCCIÓN
nas actividades desarrolladas como parte del convenio con la empresa Robótica
Colombia S.A.S., configurando ası́ el final de un proceso de cerca de un año, es-
perando claro, no faltar a los resultados esperados de un trabajo de grado de la
Universidad Distrital Francisco José de Caldas.
Capı́tulo 1
Generalidades
Lo anterior expuesto limita el acceso y el uso potencial que se puede hacer del
espacio y los equipos disponibles, lo cual permite formular la siguiente pregunta:
¿será posible la implementación de un sistema de automatización para el obser-
vatorio astronómico de la Universidad Distrital?, resolver este interrogante es el
objetivo principal de este trabajo.
1.2. Objetivos
1.2.1. Objetivo General
Implementar un sistema que permita realizar observaciones astronómicas en el
observatorio astronómico de la Universidad Distrital Francisco José de Caldas,
mediante un proceso de automatización que posibilite la operación autónoma del
mismo.
1.3. Aportes
Los aportes hacia la Universidad Distrital Francisco José de Caldas producto del
presente trabajo son los siguientes:
Este capı́tulo parte realizando una identificación del estado del observatorio mos-
trado en la Figura 2-1 al momento del inicio de ejecución del proyecto, con el fin
de definir claramente los requerimientos a satisfacer durante el tiempo de desa-
rrollo, también se ocupa de la instalación del telescopio en el observatorio, ası́
como de proponer lo básico en cuanto a diseño del esquema de automatización y
el hardware necesario para el mismo.
en la Figura 2-2.
En la etapa de montaje del telescopio se opto por una montura ecuatorial como
la que se muestra en la Figura 2-9, la cual permite realizar el seguimiento de los
objetos celestes en los ejes de ascensión recta y declinación, con el fin de garantizar
un desplazamiento del telescopio en el sentido de rotación de la tierra, la Figura
2-10 permite contemplar el montaje final para el telescopio.
La Figura 2-11 nos muestra los diferentes casos que se presentan en el arreglo
planteado, en el estado de reposo se mantiene las dos terminales del bobinado de
trabajo conectados al neutro de la linea de alimentación, en tanto que el bobinado
de magnetización se encuentra fı́sicamente desconectado de la linea, para el caso
en el cual conmuta el rele K1, el bobinado de trabajo se conecta entre lı́nea y
neutro, el bobinado de magnetización también es energizado, luego se consigue la
rotación del motor; para conseguir el giro en sentido opuesto se conmuta el rele K2,
18 2 Diseño de hardware de gestión para la cúpula del observatorio
Con el fin de garantizar que el colector del telescopio este apuntando siempre
hacia el espacio de observación, es necesario desarrollar un sistema que permita
determinar cual es la orientación del colector del telescopio y en consecuencia,
desplazar el espacio de observación hasta que el colector del telescopio sea puntado
a través de dicho espacio; el telescopio Meade LX200 permite obtener a través de
2.2 Diseño e implementación de sistema gestión de giro horizontal para cúpula 19
(a) Arquitectura
(b) Encapsulado
Para el tipo de aplicación inicial se pensó en emplear solamente las lecturas en los
ejes x y y, puesto que se tiene de acuerdo con la hoja de datos[5] del dispositivo,
cuando este se encuentra orientado hacia el norte, la lectura en el eje x tiene su
mayor valor entero, en tanto que la lectura el eje y tiene un valor de cero o una
magnitud cercana al mismo, tal como se ilustra en la Figura 2-14; es necesario
aclarar que estas gráficas se encuentran elaboradas con valores normalizados con
el fin de ilustrar de manera mas adecuada el comportamiento, en primera instan-
20 2 Diseño de hardware de gestión para la cúpula del observatorio
o −M agy
Θ( ) = tan −1
+ 180o (2-2)
M agx
El código final empleado, puede ser encontrado en el primer apéndice del docu-
mento, el montaje experimental empleado se muestra en la Figura 2.15(a), en
tanto que la salida del dispositivo se muestra en la Figura 2.15(b), resultando ası́
en una implementación satisfactoria que en inicio resuelve el problema planteado.
cos Ψ sin Ψ 0
cos ρ 0 − sin ρ
R(ρ) = 0 1 0 (2-4)
sin ρ 0 cos ρ
1 0 0
Haciendo uso de las ecuaciones 2-3, 2-4 y 2-5 es posible relacionar los valores
de posición de referencia con los valores primados de posición, en función de los
ángulos de rotación que posea el dispositivo en un momento dado haciendo uso
de la siguiente relación:
Xb′ Xb
Yb = R(Ψ)R(ρ)R(γ) Yb
′
(2-6)
Zb′ Zb
cos ρ 0 sin ρ
′′
Xb Xb
Yb = sin ρ sin γ cos γ − cos ρ sin γ Yb′′ (2-12)
Zb − sin ρ cos γ sin γ cos ρ cos γ Zb′′
Al tomar las lecturas del magnetómetro se obtienen las tres componentes [Mx
My Mz ], al normalizar este vector se obtienen los valores [Mx1 My1 Mz1 ], en este
punto, se podrı́a calcular el valor de azimut con las ecuaciones 2-1 y 2-2, y el valor
obtenido seria correcto siempre y cuando el dispositivo se encuentre sobre el plano
horizontal xy, sin embargo, en este caso se conocen los valores de los ángulos de
rotación, luego, pueden obtenerse las cifras correspondientes al equivalente en el
plano horizontal para las componentes de lectura del magnetómetro:
My2 = Mx1 sin(γ) sin(ρ) + My1 cos(γ) − Mz1 sin(γ) cos(ρ) (2-14)
Mz2 = −Mx1 cos(γ) sin(ρ) + My1 sin(γ) + Mz1 cos(γ) cos(ρ) (2-15)
Finalmente, el valor de azimut puede ser calculado:
−1 −My2
Heading = Ψ = tan (2-16)
Mx2
2.2 Diseño e implementación de sistema gestión de giro horizontal para cúpula 25
−My2
Heading = Ψ = tan −1
+ 180o (2-17)
Mx2
(a) Lecturas compensada y sin compen- (b) Lecturas compensada y sin compen-
sar en el plano sar con IMU inclinada
otros, el sensor obtendrá una lectura en un rango especifico de distancia solo para
el caso en el cual este sea apuntado, para los demás objetivos el valor de lectura
estará alejado de dicho rango; el segundo sensor cumple las veces de auxiliar para
el caso en el cual el sensor principal se encuentre ante la compuerta de observación;
cuando el sistema se enciende el primer paso es rotar la cúpula hasta la posición de
Home, posteriormente, se obtiene el valor de azimut del telescopio se determina
cual es el valor múltiplo de 5 mas cercano a este y se realiza la rotación en el
sentido que resulte en un menor desplazamiento, al igual que para el caso del
magnetómetro, se entiende que el ángulo de azimut aumenta en el sentido de las
manecillas del reloj.
cada uno de los dos desplazamientos, como ventaja del empleo de conmutadores
se puede destacar el hecho de no presentarse ningún estado de accionamiento en
el cual se ponga en corto circuito a la fuente de alimentación, para la selección de
componentes debe tomarse en cuenta que la corriente en régimen permanente que
circulara hacia los motores es de 1 A, luego, un contacto que soporte al menos el
triple de este valor es adecuado tomando en cuenta el sobrepico inicial de corriente
durante el encendido; cuando se trabaja con circuitos inversores de puente H es
recomendable agregar diodos en inverso puestos en paralelo a los interruptores,
con el fin de conducir la corriente acumulada en el bobinado de los motores cuando
se conmuta el sentido de giro, en este caso se omiten dichos diodos puesto que no
se contemplan variaciones bruscas en la dirección de giro en el funcionamiento del
sistema.
S1 S2 P1 P2 Abrir Cerrar
0 0 0 0 0 0
0 0 0 Z 0 1
0 0 Z 0 1 0
0 0 Z Z 0 0
0 Z 0 0 0 1
0 Z 0 Z 0 1
0 Z Z 0 0 0
0 Z Z Z 0 0
Z 0 0 0 1 0
Z 0 0 Z 0 0
Z 0 Z 0 1 0
Z 0 Z Z 0 0
Z Z 0 0 0 0
Z Z 0 Z 0 0
Z Z Z 0 0 0
Z Z Z Z 0 0
La energı́a requerida por los elementos que constituyen el control para los com-
puertas es suministrada por una baterı́a de 12 Voltios 7 Ah, debido a que la
rotación de la cúpula, y con ella la compuerta impiden el realizar la alimentación
del circuito empleando una conexión hacia la red domestica; es bien sabido que
el arranque de los sistemas electromecánicos genera un efecto de desestabilización
transitorio sobre la fuente de alimentación a la que estén conectados, dicha per-
turbación se manifiesta en variaciones abruptas del nivel de voltaje de la fuente
y es mayor en forma proporcional con respecto al par mecánico asociado a ellos,
esto ocasiono que durante el tiempo de desarrollo del sistema se presentaran reini-
cios del microcontrolador en cuanto este accionaba los relevadores para poner en
marcha los motores, no constituyendo un problema para el accionamiento manual,
pero si para el envı́o de instrucciones en forma inalámbrica, puesto que nunca se
completaba la orden recibida.
El método mas adecuado para solucionar este problema consiste en llevar a cabo
36 2 Diseño de hardware de gestión para la cúpula del observatorio
2.4. Iluminación
Como tarea de cierre para este capı́tulo, se muestra el mecanismo de iluminación
empleado para la cúpula en la Figura 2-29, el cual consiste en un arreglo de leds
rojos, verdes y azules, el cual permite obtener 7 colores diferentes, el accionamien-
to de cada uno se lleva a cabo empleando relevadores de baja potencia, si bien
el esquemático muestra un solo led, debe entenderse que cada una de las ramas
hace referencia a un conjunto de ellos, es también la razón del porque emplear
una fuente de 12 V para la alimentación.
Ahora bien, para la selección del elemento principal de procesamiento sobre el cual
se desea correr el software desarrollado se deben tener en cuenta las siguientes
consideraciones:
Con el fin de satisfacer los requerimientos planteados, se opta por hacer empleo de
la tarjeta Raspberry pi 3 model B, el cual en esencia es un microcomputador ca-
paz de ejecutar sistemas operativos de tiempo real cargados en una tarjeta SD, las
principales caracterı́sticas de este sistema se resumen en la tabla 3.1.1, dentro de
la oferta de sistemas operativos disponibles para esta placa se destacan Windows
10 IOT core, Risc OS y otras muchas distribuciones basadas en GNU/Linux, de
las cuales, la distribución basada en Debian, Raspbian Stretch Lite se considera
la adecuada para el presente trabajo, ya que al carecer de escritorio, evita el des-
perdicio de recursos en el procesamiento de interfaces gráficas de usuario.
3.1 Consideraciones sobre el desarrollo 39
Al respecto de las placas Raspberry Pi cabe destacar el hecho de haber sido pen-
sadas para el desarrollo de aplicaciones de IOT, por lo cual, si bien se trata de
computadores en todo el sentido de la palabra, cuentan con un GPIO con pines
disponibles para la gestión de dispositivos electrónicos convencionales, en forma
similar a como se podrı́an gestionar empleando un microcontrolador convencio-
nal, el esquemático del dispositivo, ası́ como el pinout correspondiente al GPIO
integrado en la placa se muestra en la Figura 3-1.
3.1.2. Conectividad
En las aplicaciones de IoT, resulta importante el contar con un gestor de conexión
de red, el cual debe encargarse de administrar los mensajes entre el servidor en
nube y el cliente local, para el presente desarrollo se ha decidido hacer uso del
protocolo MQTT[16], un protocolo de transporte diseñado para tolerar anchos de
banda limitados e intermitencia en las comunicaciones, esto lo hace ideal para
aplicaciones M2M(Machine to Machine) o IoT(Internet Of Things) en las cuales
se debe controlar el estado de sensores o actuadores sobre algunos procesos deter-
minados, ya que en en los mismos solo se requiere el traslado de datos u ordenes
en forma de texto plano o estructuras JSON.
40 3 Desarrollo de software de administración local
(a) Los clientes establecen una co- (b) El cliente A publica en el To-
nexión TCP con el Broker. Los pic temperatura un valor de 22,5◦ ;
clientes B y C se suscriben al To- el Broker difunde el mensaje a todos
pic temperatura[1]. los clientes que previamente se hayan
suscrito al Topic ✭✭temperatura✮✮.[1]
como propósito encargarse de un elemento especı́fico, como bien puede ser un sen-
sor, la Figura 3-3 muestra la totalidad de las clases que constituyen el software,
ası́ como la relación jerárquica existente entre ellas.
contiene una solicitud de verificación para cada uno de los componentes del soft-
ware, esta solicitud se procesa y genera un respuesta ası́ncrona por parte de cada
uno de los módulos, si un modulo no genera una respuesta válida al servidor antes
que se genere el siguiente mensaje de verificación, este procede a deshabilitar la
funcionalidad asociada al modulo que genero el error, como puede ser la rotación
de la cúpula o la apertura de compuertas.
Por el lado del servidor, se dispone de un aplicativo web que se encarga de enlazar
con el software de gestión local, sin embargo, por motivos de derechos de autor no
se puede profundizar demasiado en su arquitectura, mas adelante se dará una breve
descripción sobre su funcionalidad, el paso a seguir, es la exposición detallada de
las clases del software local ası́ como su correspondiente documentación.
Descripción
La clase iot tiene la función de servir de estructuradora para el programa, en la
medida que crea instancias de cada uno de los elementos del programa, con lo cual
se realiza la inicialización de cada uno de ellos, es necesario aclarar que las rutinas
de arranque de cada uno de los elementos de hardware que son administrados por
una clase en particular, son verificados y configurados en el constructor de cada
clase.
de instancias únicas para cada una de las clases, esto implica, que no se crea mas
de un objeto por clase, y el único es el creado por la clase iot, ası́, cuando una
clase en particular requiere un método o dato proveniente de otra clase, la clase
iot comparte con esta el objeto creado previamente.
La clase iot sirve como canal de broadcast entre el Broker y cada uno de los
clientes, lo cual implica que se encarga de enviar los mensajes provenientes de
red a todas las clases, también contiene como uno de sus atributos el tópico para
MQTT, al cual suscribe las clases una vez las instancia, su ultima caracterı́stica
es poseer un ciclo loop infinito para asegurar que el hilo principal del programa
continué su ejecución aun en la ausencia de ordenes provenientes, ya sea de una
clase en especı́fico o desde el Broker, la estructura de la clase puede verse en la
Figura 3-4.
Atributos
general topic Tópico para la publicación y suscripción de mensajes
MQTT.
port camera lpi Referencia para conexión de hardware de cámara planetaria.
buc- Nombre de Bucket para almacenamiento de imagen cámara
ket name lpi planetaria.
bucket url lpi Dirección del Bucket para almacenamiento de imagen cáma-
ra planetaria.
Puerto USB para conexión de hardware de cámara web.
port camera web
buc- Nombre de Bucket para almacenamiento de imagen cámara
ket name web web.
bucket url web Dirección del Bucket para almacenamiento de imagen cáma-
ra web.
port telescope Dispositivo USB asignado para el conversor usb-serial em-
pleado para comunicación con telescopio.
baudrate teles- Velocidad de transferencia UART para telescopio.
cope
pin rotate cw Número de pin fı́sico de GPIO para pulsador rotación hora-
ria de cúpula.
pin rotate ccw Número de pin fı́sico de GPIO para pulsador rotación anti-
horaria de cúpula.
pin led1 Número de pin fı́sico de GPIO para encender color rojo de
iluminación ambiental.
pin led2 Número de pin fı́sico de GPIO para encender color verde de
iluminación ambiental.
pin led3 Número de pin fı́sico de GPIO para encender color azul de
iluminación ambiental.
pin cw Número de pin fı́sico de GPIO para activar rotación horaria
de cúpula.
pin ccw Número de pin fı́sico de GPIO para activar rotación antiho-
raria de cúpula.
pin turn light Número de pin fı́sico de GPIO para modificar el color de
iluminación ambiental de cúpula.
pin home Número de pin fı́sico de GPIO para llevar la planta mecánica
a posición inicial.
3.2 Arquitectura y documentación 47
pin emergency Número de pin fı́sico de GPIO asociado al sensor que moni-
torea la condición de parada de emergencia del sistema.
pin rain sensor Número de pin fı́sico de GPIO asociado al sensor de lluvia
para condición de observación.
Número de pin fı́sico de GPIO asociado al sensor de sumi-
pin energy sensor nistro de red eléctrica.
rpi Objeto de tipo Rpi para obtener datos de estado de la placa
Raspberry pi 3.
camera lpi Objeto de tipo Cameralpi para toma de imágenes con cáma-
ra planetaria.
camera web Objeto de tipo Cameraweb para toma de imágenes con
cámara web conectada por USB.
iot connection Objeto de tipo Broker para el manejo de mensajes MQTT.
bucket Objeto de tipo Buckets3 para el manejo de espacios de al-
macenamiento en nube.
telescope Objeto de tipo Telescope, para la gestión del telescopio Mea-
de LX200 GPS a través de comunicación serial.
dome Objeto de tipo Dome para la gestión de la infraestructura
fı́sica de la cúpula.
instrument Objeto de tipo Instrument para los sensores encargados de
determinar las condiciones de observación.
48 3 Desarrollo de software de administración local
Métodos de clase
def broadcast channel(client,
userdata,
message)
Receptor de mensaje MQTT y reenvió de los mismos a todos los objetos de
clase instanciados en la clase iot suscritos al tópico ’astrolab/ud/#’, cada
objeto cuenta con un método de manejo de mensajes que lee el mensaje
recibido y según su contenido determina si debe ejecutar funciones propias
o no.
Tipo de retorno:
Ninguno.
def loop()
Ciclo infinito de ejecución principal
Tipo de retorno:
Ninguno.
Paquetes requeridos
import RPI.GPIO as GPIO
import json
import time
import Bluetooth
import os
import subprocess
import threading
from ST VL6180X import VL6180X
import sys
3.2 Arquitectura y documentación 49
Descripción
La clase Dome es con diferencia, la clase mas robusta en código comparada con
las demás estructuras que conforman el software desarrollado, de forma general
puede decirse que se encarga de la gestión de la mayor parte de los elementos de
hardware que constituyen la infraestructura fı́sica de la cúpula, esto se logra me-
diante la gestión del GPIO que posee la Raspberry Pi 3, luego no es de extrañar
que muchos de los métodos propios de la clase ejecuten acciones directas sobre
estos, la estructura de la clase puede verse en la Figura 3-5.
Cada uno de los hilos secundarios pueden ser iniciados tanto desde el proceso de
ejecución principal, como desde otro hilo secundario, sin embargo, no es posible
realizar un llamada a hilo antes que haya concluido un inicio anterior; solo el hilo
de Change State Dome Callback es persistente a lo largo del ciclo de vida del
hilo principal, los demás por su parte se inician y terminan cuantas veces sean
llamados durante el flujo de ejecución, también es importante mencionar que se
trata de procesos que solo terminan cuando finalice su secuencia de ejecución, esto
implica que la terminación del hilo principal no implica el fin de ellos.
La palabra reservada self se usa en Python para indicar que un atributo o método
son propios de un objeto, esto es, por cada nueva instancia u objeto que se cree
de la clase se están generando atributos y métodos reservados para la misma con
valores únicos para cada instancia.
Atributos
client Instancia de la clase Broker para manejo de mensajes
MQTT.
3.2 Arquitectura y documentación 51
Métodos de clase
def init (self, client, pin rotate cw, pin rotate ccw,
pin home, pin turn light, pin emergency,
pin led1, pin led2, pin led3, pin motor cw,
pin motor ccw, pin energy, pin rain, telescope)
Constructor de clase, inicializa todos los atributos de objeto y realiza las
tareas de configuración para el GPIO cuando un objeto de la clase Dome es
creado.
Retorno:
Ninguno.
3.2 Arquitectura y documentación 53
Retorno:
Ninguno.
Retorno:
Ninguno.
Retorno:
Ninguno
Retorno:
Ninguno
54 3 Desarrollo de software de administración local
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
def on light(self)
Encender iluminación de cúpula en color blanco, este método solo se llama
como producto de orden desde aplicativo web.
Retorno:
Ninguno
3.2 Arquitectura y documentación 55
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
56 3 Desarrollo de software de administración local
Retorno:
Ninguno
Retorno:
Boolean: True si conexión exitosa, False si conexión fallida.
Retorno:
Char: caracter de respuesta de estado si conexión exitosa, ’X’ si co-
nexión fallida.
3.2 Arquitectura y documentación 57
Retorno:
Char: caracter de respuesta de estado si conexión exitosa, ’X’ si co-
nexión fallida.
Retorno:
int: i, contador de intentos, si menor a 10 apertura exitosa, si no,
condición de fallo de compuerta.
Retorno:
Ninguno.
58 3 Desarrollo de software de administración local
Retorno:
int: i, contador de intentos, si menor a 10 cierre exitoso, si no, con-
dición de fallo de compuerta.
Retorno:
Ninguno.
Retorno:
Boolean: True si conexión exitosa, False si conexión fallida.
Retorno:
Ninguno.
3.2 Arquitectura y documentación 59
Retorno:
Ninguno.
Retorno:
Ninguno.
Paquetes requeridos
import json
import time
import serial
import subprocess
import numpy as np
60 3 Desarrollo de software de administración local
Descripción
La clase Telescope, cuyo diagrama se muestra en la Figura 3-6, es la encargada de
gestionar el movimiento del telescopio Meade LX200 GPS, asi como de obtener
datos como la hora y fecha internas, o las coordenadas espaciales de apuntamiento,
para ello se vale de una conexión UART a 9600 baudios, debido al empleo del bus
serial in-circuit de la placa Raspberry Pi 3 en otra tarea, se hizo necesario emplear
un dispositivo conversor usb-serial.
Atributos
client Instancia de la clase Broker para manejo de mensajes
MQTT.
3.2 Arquitectura y documentación 61
Métodos de clase
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
62 3 Desarrollo de software de administración local
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
3.2 Arquitectura y documentación 63
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
64 3 Desarrollo de software de administración local
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
3.2 Arquitectura y documentación 65
def initialize(self)
Rutina de inicialización, obtiene la hora y la fecha del telescopio y la compa-
ra con la hora estándar, si la diferencia entre las dos es mayor a 2 segundos
actualiza la hora del telescopio, esto se hace debido a que la posición rela-
tiva de un cuerpo celeste cambia según la hora y fecha del año; el método
también evalúa si el telescopio ha sido alineado o no, en caso afirmativo,
configura al telescopio con la última alineación exitosa.
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
A la vez que son necesarios tres elementos con el fin de realizar la comunicación
con los elementos de hardware:
INDI Clients: los clientes son los programas de software que desean conec-
tarse a los dispositivos, dentro de esta categorı́a se tienen aplicaciones como
Kstars que ofrecen un entorno gráfico para la gestión de los elementos; tam-
bién clasifican en este campo las librerı́as de desarrollo ofrecidas, para interés
del presente trabajo, se dispone de la librerı́a PyIndi Client, el cual permite
generar desarrollos con Python para el control de dispositivos astronómicos.
Descripción
La clase ZWO contiene los métodos de gestión escritos especı́ficamente para la
cámara ASI120MC-S empleando la librerı́a de INDI, su correspondiente diagrama
de clase se muestra en la Figura 3-9, la función especifica de esta clase es tomar
una fotografı́a y almacenarla en un directorio del sistema de la Raspberry pi 3
para su posterior envió al Bucket de almacenamiento en nube, esta clase emplea
un hilo de ejecución secundario para correr el servidor de INDI, el cual tiene
como caracterı́stica detener el hilo de proceso que lo haya comenzado hasta que
forzosamente este muera, justificando ası́ el empleo de un hilo reservado solo para
el, el árbol de ejecución:
Métodos de clase
def init (self, ccd name)
Constructor de clase, crea un objeto de tipo ZWO para la gestión de la
cámara.
Retorno:
Ninguno
72 3 Desarrollo de software de administración local
def server(self)
Código de hilo para el servidor de INDI, inicia cada que se requiere to-
mar una nueva imagen o durante una secuencia de ”live”, debe finalizarse
forzosamente.
Retorno:
Ninguno
Retorno:
Boolean: True si conexion exitosa, False si no.
Retorno:
Ninguno
Retorno:
Ninguno
3.2 Arquitectura y documentación 73
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
String: Lista de dispositivos.
Retorno:
Ninguno
74 3 Desarrollo de software de administración local
Retorno:
Ninguno
def is alive(self)
Realiza un llamado al metodo start connection() y emplea el retorno del
mismo para determinar si la cámara se encuentra conectada y disponible,
funciona como una verificación extra para garantizar que el servidor de INDI
sea detenido.
Retorno:
Boolean: True si cámara conectada y disponible, False si falla detec-
tada.
3.2 Arquitectura y documentación 75
Paquetes requeridos
import json
import time
import boto3
import subprocess
Descripción
La clase Cameraweb se ocupa de gestionar la captura de imágenes empleando una
cámara web estándar conectada vı́a USB a la Raspberry Pi 3 y posteriormente
subir la última imagen tomada al Bucket de AWS reservado para esta categorı́a de
imágenes, el interés en disponer de una cámara web en el interior del domo surge
en el deseo de observar fı́sicamente al telescopio y la iluminación del espacio, en
la Figura 3-10 se muestra su estructura.
Atributos
client Instancia del Broker para la conexión con AWS.
bucket Instancia de la clase Bucket para el almacenamiento de datos
en nube.
port Path asignado por Raspbian Stretch cuando la cámara se
conecta por USB, por lo general es /dev/video0.
bucket name Nombre del bucket de almacenamiento asignado para las
imágenes de la cámara web.
76 3 Desarrollo de software de administración local
Métodos de clase
def init (self, client, bucket, port, bucket name, bucket url)
Constructor de clase, recibe como parámetros la dirección web del Bucket de
almacenamiento, el nombre de este, una referencia al Broker para el manejo
de los mensajes del servidor y el path de puerto de hardware que le asigna
la Raspberry Pi 3 a la cámara, dado que se trata de un dispositivo de vı́deo
el puerto asignado siempre es el mismo, con lo que no resulta necesario una
rutina de Discovery para encontrar el identificador de puerto indicado; este
puerto tiene la dirección de sistema /dev/video0.
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
3.2 Arquitectura y documentación 77
Retorno:
Ninguno
Retorno:
Ninguno
Paquetes requeridos
import json
import time
import RPI.GPIO as GPIO
Descripción
78 3 Desarrollo de software de administración local
La clase Instrument tiene como única función realizar la lectura de los sensores de
red eléctrica y de lluvia para publicar su estado hacia el Broker cuando ocurre una
secuencia de ”live”, es importante aclarar que esta clase no posee la capacidad de
ejecutar acciones sobre el hardware del observatorio, su correspondiente diagrama
se encuentra en la Figura 3-11.
Atributos
client Instancia del Broker para la conexión con AWS.
pin rain sensor Número de pin de GPIO usado para la lectura del sensor de
lluvia.
pin ups sensor Número de pin de GPIO usado para la lectura del sensor de
alimentación por red eléctrica.
Métodos de clase
def def init (self, client, pin rain sensor, pin ups sensor)
Metodo constructor de clase, recibe como parámetros la instancia hacia el
Broker y los números de pin asociados a los sensores.
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
3.2 Arquitectura y documentación 79
Paquetes requeridos
import json
import time
import psutil
Descripción
La clase Rpi obtiene la cantidad de memoria RAM ocupada en la Raspberry Pi
3, ası́ como la carga porcentual de CPU, con el fin de controlar si la placa se
encuentra dentro de un rango de funcionamiento normal, con hasta un 70 % de
memoria RAM y una carga de CPU del 60 % como máximo, si los datos obte-
nidos superan estos limites, el programa deshabilita automáticamente todos los
demás componentes de hardware, es posiblemente la clase mas sencilla de todas,
su diagrama de clase se muestra en la Figura 3-12.
80 3 Desarrollo de software de administración local
Atributos
client Instancia del Broker para la conexión con AWS.
Métodos de clase
def init (self, client)
Constructor de clase, recibe la instancia del Broker para contar con la ca-
pacidad de recibir y enviar mensajes.
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Ninguno
Retorno:
Int: porcentaje de memoria RAM en uso.
3.2 Arquitectura y documentación 81
Retorno:
Int: porcentaje de carga en CPU en uso.
Paquetes requeridos
import boton3
Descripción
la clase Buckets3 tiene como razón de ser el administrar los Buckets de almace-
namiento de AWS para las imágenes de la cámara planetaria y la cámara web, en
este punto es necesario aclarar que la clase Broker y la clase Buckets3 emplean
caracterı́sticas diferentes sobre un mismo servidor, por esta razón, los buckets de
almacenamiento son accedidos con un id y una clave segura diferentes a los cer-
tificados del Broker, solo cuenta con un atributo referente a la conexión con el
servidor, su diagrama se muestra en la Figura 3-13.
Atributos
connection Objeto sobre el cual pueden modificarse los contenidos de
los buckets de almacenamiento.
82 3 Desarrollo de software de administración local
Métodos de clase
def connect to s3(self))
Crea el objeto connection empleando para ello las credenciales de acceso al
servicio de almacenamiento de AWS.
Retorno:
Ninguno
Retorno:
String: llave de respuesta del bucket.
Retorno:
Ninguno
Retorno:
File: último archivo cargado en el bucket.
Paquetes requeridos
3.2 Arquitectura y documentación 83
Descripción
Clase que permite la creación de una instancia de AWSIoTMQTTClient para rea-
lizar la conexión entre el aplicativo y el servidor de Amazon Web Services, puede
interpretarse como la puerta de enlace para el envió y captura de mensajes a
través de el protocolo MQTT, la Figura 3-14 permite observar que solo cuenta
con un método.
Retorno:
AWSIoTMQTTClient: instancia para comunicación con el servidor
de AWS.
84 3 Desarrollo de software de administración local
4.2. El servidor
Como ya se ha dicho con anterioridad, es necesario disponer de un servidor para
almacenar la pagina Web, a base de datos de usuarios registrados y una pequeña
tabla con los datos de algunos objetos celestes para poder realizar la ubicación del
telescopio en forma directa, en el servidor también se cuenta con la posibilidad de
ejecutar pequeños scripts sobre python 2.7 para generar algunas respuestas sobre
mensajes especı́ficos; en el servidor tambien cabe mencionar a los espacios de al-
macenamiento o ”buckets”necesarios para las imágenes captadas por las cámaras.
Al igual que en el desarrollo del esquema del servidor, la colaboración por parte
del autor de este trabajo en el desarrollo del documento es limitada, por tal razón
no es posible exponer en forma detallada el código de implementación para el mis-
mo, pero esto no significa que no pueda mostrarse en forma general el desarrollo
del mismo.
4.3.1. Login
Esta pantalla funciona como un formulario de autenticación cualquiera, es decir,
recibe un correo electrónico y una contraseña de usuario, una vez se pulsa el
botón de ingreso (ver Figura 4-2), se envı́an los datos de los cuadros de texto
hacia el servidor y se compara con la base de datos de usuarios registrados; si los
datos son correctos se carga la siguiente pagina, si no se retorna al formulario de
autenticación con un mensaje de error.
especı́ficos cada 30 segundos conocidos como secuencias de ”live”, los cuales tie-
nen como propósito determinar si cada uno de los componentes esta conectado y
funcionando apropiadamente, en caso de una respuesta negativa por parte de un
componente a estas secuencias el elemento “Card” asociado a este deshabilita sus
opciones.
Camera LPI: esta tarjeta (ver Figura 4-4) contiene un espacio para observar
la imagen capturada desde el telescopio con la cámara ZWO, la opción para
descargar la última imagen capturada, los campos para definir el tiempo de
exposición y ganancia deseados para la imagen y el botón de capturar.
Telescopio: Las opciones disponibles son para el movimiento manual del te-
lescopio en los ejes de ascensión recta y azimuth, también se cuenta con un
espacio para observar la imagen capturada por la cámara web y un botón
para refrescar la misma, un control deslizante permite elegir la velocidad de
4.3 El cliente Web 89
Figura 4-7: Tarjeta que muestra el estado de los componentes del observatorio.
4.3.3. Perfil
La última pantalla de interés en el aplicativo es la referente al perfil de usuario(ver
Figura 4-8), en ella se muestra el tipo de cuenta que posee el usuario, la opción
para cambiar la contraseña, y el decidir si la compuerta de observación debe
cerrarse si el sensor de lluvia genera una lectura positiva.
canaletas a través de las cuales debe ir el cableado entre ellos, el material de estos
tableros es aluminio recubierto de una capa de pintura aislante, un tablero debe
poseer una puerta con llave con el fin de restringir el acceso a particulares sobre
los elementos que contiene adentro, en tanto que los pulsadores e interruptores
deben colocarse sobre la superficie externa del tablero, otra buena practica es el
agregar protecciones termomagnéticas en las entradas de alimentación del circui-
to, totalizadores y paradas de emergencia para los elementos móviles que están
relacionados directamente con el tablero de control.
Este tablero tiene como objetivo alojar a la placa Raspberry Pi 3, los conmu-
tadores para el motor AC monofásico de rotación de la cúpula, las fuentes de
alimentación, los pulsadores para accionamiento de rotación positiva, rotación ne-
gativa, búsqueda de posición de inicio y conmutación de iluminación, también este
tablero debe servir como punto de inicio para toda la operación, esto es, cuando
se encienda a través de un totalizador la Raspberry debe iniciar la ejecución del
software de gestión local descrito en el capitulo 3, con lo cual se inicializan las
salidas del GPIO, se inicializa el telescopio y se revisa si el tablero secundario
es accesible a través del enlace inalámbrico, también se empiezan a ejecutar las
secuencias de ”live.a solicitud del cliente web siempre que en este halla una sesión
activa.
92 4 Integración global de componentes
Puede decirse que este tablero maneja dos circuitos de corriente alterna inde-
pendientes uno de otro, por un lado recibe la alimentación de sus componentes
electrónicos desde una lı́nea de 110 VAC generada por una UPS, en tanto que
el motor AC monofásico para la rotación horizontal debe ser alimentado directa-
mente de la red eléctrica, esto se debe a que no es recomendable conectar cargas
inductivas a elementos de respaldo de energı́a; este método de alimentación nos
indica que en caso de emergencia no es prioritario el desplazar la cúpula hasta su
posición de inicio, pero si es obligatorio el poder cerrar las compuertas del espacio
de observación, la UPS garantiza que una vez encendido el tablero, la Raspberry
Pi 3 siempre se encuentre encendida.
Componentes
Los elementos que conforman este tablero pueden agruparse según la función que
vayan a desempeñar, en este orden de ideas se tienen conmutadores, elementos
de control, fuentes de alimentación, protecciones y pulsadores de ingreso, estos
elementos han sido adquiridos en presentación para montaje sobre riel DIN. en
lista pueden enumerarse ası́:
Distribución y esquemáticos
Todos los tableros industriales tienen como caracterı́sticas comunes el poseer una
bandeja sobre la cual se sujeta el riel sobre el cual se montan los dispositivos,
también cuentan con una puerta con cerradura con el fin de restringir el acceso al
interior del tablero solo a personal capacitado en las tareas de mantenimiento; por
conveniencia se busca que los pulsadores de un tablero de control sean montados
sobre el propio tablero, sin embargo, para casos en los cuales la ubicación de los
mismos no lo permite pueden ser ubicados en otros lugares siempre y cuando los
cables de los mismos salgan por la parte inferior del tablero y se lleven hasta los
elementos haciendo uso de canaleta, lo mismo aplica para los sensores.
4.4 El hardware local 97
Las fuentes DC disponibles son alimentadas con una UPS con el fin de garantizar
que el sistema continué en funcionamiento aun durante un corte de energı́a; la Fi-
gura 4-17 muestra el diagrama de conexión de las mismas, con su correspondiente
protección termomagnética y el uso que se hace de cada una de ellas.
esto puede parecer una aplicación que no justifica por si misma la fabricación de
un tablero adicional, sin embargo hay que considerar que los motores se encuen-
tran instalados sobre la cúpula y por tanto rotan con ella, lo cual forzosamente
obliga a instalar el tablero de tal forma que rote junto con la cúpula, luego no
es posible construir una conexión cableada para la alimentación de los dos moto-
res DC de las compuertas y para las señales de activación, el enlace entonces, se
lleva a cabo empleando un modulo de comunicación Bluetooth HC-05, el tablero
también cuenta con dos pulsadores para la apertura y el cierre de la compuerta
en forma manual, ya sea para el caso en el cual el controlador electrónico no se
encuentre disponible, o simplemente se quiera hacer en forma fı́sica.
Componentes
Como cabria esperar, este tablero es considerablemente mas sencillo que el tablero
de control principal, luego la lista de elementos que lo conforman es la siguiente:
1. Tarjeta Arduino Uno R3: cumple la función de servir como controlador cen-
tral para el tablero, el microcontrolador disponible en estas placas es el
ATMEGA 328p, un dispositivo basado en una arquitectura de 8 bits con un
set de instrucciones reducido que permite una programación relativamente
sencilla.
Figura 4-19: Montaje sobre riel DIN de microncontrolador con screw shield.
6. Baterı́a de plomo 12V 7A: baterı́a para llevar a cabo la alimentación de los
elementos del tablero, ası́ como de los motores DC de la compuerta.
8. Riel DIN: el objetivo del riel es poder sujetar a los elementos que conforman
el armario de control.
10. Totalizador: Al igual que para el caso del tablero de control es necesario
102 4 Integración global de componentes
11. Pulsadores: puesto que se cuenta con la posibilidad de llevar a cabo la aper-
tura y cierre de forma manual, se usan dos pulsadores de tipo industrial en
la forma que ilustra la Figura 4-23, uno para abrir y otro para cerrar.
14. Diodo: evita que la baterı́a devuelva energı́a hacia la fuente que lleva a cabo
su carga.
Distribución y esquemáticos
En el caso de este tablero, se tiene nuevamente un bandeja con riel DIN sobre el
cual se montan los componentes en la distribución que muestra la Figura 4-24;
debe tenerse en cuenta que un buen numero de componentes se encuentran en la
parte externa del tablero, como son los motores DC y los finales de carrera, la
borneras del tablero se ubican en la parte inferior del tablero con el fin de facilitar
su acceso por parte del cableado proveniente del exterior del tablero, la baterı́a
de plomo encargada de alimentar al tablero se sujeta únicamente por la puerta
del mismo, ya que no es recomendable sujetarla empleando ganchos metálicos o
realizar perforaciones en la misma.
caucho que posee el tablero impide el acceso de humedad que pueda cristalizar el
material del cual están hechas.
La Figura 4-25 muestra el circuito esquemático de las conexiones entre los ele-
mentos del tablero de control para la apertura y cierre de compuertas.
En el circuito esquemático puede apreciarse que son necesarios dos niveles de vol-
taje para alimentar los diferentes componentes del tablero, con una única baterı́a
de 12V disponible para cumplir este objetivo y la necesidad de llevar a cabo la
carga de la misma se implementa el montaje mostrado en la Figura 4-26 para
solucionar el problema planteado.
También puede observarse el uso de marquillas para cada una de las conexiones
con el fin de llevar un registro de cual es el punto de inicio y final de un cable
determinado sin necesidad de seguir todo el recorrido del mismo, los agujeros que
pueden observarse en la parte inferior del tablero son los puntos de salida y entra-
da de conexiones, lo que asegura los cables se conoce como prensa estopa y tiene
como objetivo el evitar desconexiones al interior del tablero producto de cualquier
fuerza que pueda halar el cable desde el exterior.
’E’: Para el caso en el que se tenga una combinación diferente en los pines de
los finales de carrera diferente a los descritos para las respuestas anteriores,
se entiende un estado de error en las conexiones y se retorna dicho aviso al
tablero principal.
El código del microcontrolador puede ser consultado en el anexo B.1, donde pue-
de apreciarse que el microcontrolador funciona en la forma de una máquina de
estados, siendo estos: reposo, abriendo y cerrando, de acuerdo al caracter que se
halla recibido desde el maestro se activa una sección especı́fica de los condicio-
nales mostrados en el loop de ejecución, también se ha optado por configurar un
whatchdog timer que ejecute un “reset” del microcontrolador en caso de que este
se detenga en un solo estado dejando de evaluar los demás, con el fin de evitar la
pérdida de conexión con el tablero.
En la Figura 4-26 puede observarse como se obtienen los dos niveles de voltaje
requeridos para el funcionamiento del tablero, también puede verse como se man-
tiene la carga de la baterı́a a través de borneras que la enlazan con una de las
fuentes DC del tablero principal, estas se ubican en la posición de “home” de la
cúpula, razón por la cual es necesario desplazar la misma hasta dicha posición
para llevar a cabo la carga de la baterı́a, como protección se emplea un diodo
para restringir el paso de la corriente solo desde la fuente hacia la baterı́a y no en
sentido inverso lo que puede dañar la fuente en el caso en que esta se encuentre
apagada y la baterı́a conectada a través de las borneras.
Luego lo que resta por mostrar es el tipo de imágenes que pueden obtenerse em-
pleado todo el sistema desde el aplicativo empleando la cámara planetaria ZWO
conectada a la placa Raspberry Pi 3 empleando una conexión de servidor local
para la conexión de la cámara a un sistema embebido, estas imágenes posterior-
mente son enviadas al aplicativo Web donde puede obtenerse una vista previa de
las mismas y ser descargadas.
La Figura 4-32 muestra dos vistas de júpiter, la imagen 4.32(a) muestra la ima-
gen tal y como es capturada por la cámara con un tiempo de exposición de 80
milisegundos y una ganancia de 30, en tanto que la imagen 4.32(b) muestra un
tratamiento de mejoramiento de imagen llevado a cabo en forma local sobre la
imagen ya capturada, en las dos imágenes es posible distinguir claramente las fran-
jas en la atmósfera del planeta ası́ como el color real del mismo, sin embargo, en la
imagen tratada es posible distinguir, aunque en forma tenue a los satélites Euro-
pa y Ganimedes, justificando ası́ que aunque no se obtengan vistas de objetos en
las imágenes originales, con un mejoramiento de imagen simple pueden observarse.
e incluso es posible encontrar la división de Cassini entre los dos grupo de anillos
A y B.
La última captura que se presenta corresponde a Marte mostrado en las dos imáge-
nes generadas en la Figura 4-34, como en los casos anteriores se tiene la imagen
original tomada por la cámara y una imagen con un tratamiento de mejora básico,
en los dos casos puede distinguirse fácilmente la capa de hielo del polo norte del
planeta, el color del planeta no se distingue con facilidad debido a la naturaleza
tenue de la luz reflejada por el planeta comparada con la luz de Júpiter y Saturno;
4.5 Resultados y análisis 113
Este capitulo recoge algunas actividades adicionales que fueron realizadas durante
el tiempo de la pasantı́a, algunas tienen que ver con la instalación de equipos adi-
cionales en el observatorio astronómico de la Universidad Distrital, otras tienen
que ver con trabajos realizados para la empresa Robótica Colombia S.A.S., que si
bien no fueron desempañadas durante un periodo de tiempo largo, también mere-
cen ser consideradas en el sentido de aportar experiencia en algunas habilidades
de ensamble y depuración de circuitos electrónicos.
que solo realiza la grabación de vı́deo cuando detecta movimiento, lo cual es útil
pues hace mas eficiente el uso del espacio de almacenamiento disponible en el
disco.
Figura 5-5: Toma de energı́a para UPS y toma corrientes de salida de la misma.
118 5 Actividades adicionales
La UPS puede entregar una potencia de salida hasta de 300 VA, lo cual permite
emplear su salida no solo para las fuentes DC del tablero principal, si no que
también se conectan el DVR y el televisor de vigilancia a la misma, de manera
que se garantice la seguridad del observatorio aun cuando no halla suministro de
la red eléctrica comercial, también se alimenta con la energı́a de la UPS a la es-
tación meteorológica del observatorio y el switch de red que proporciona acceso a
internet en el sitio, y se deja abierta la opción para alimentar computadores desde
los tomas adicionales.
La consola cuenta con la opción de conectarse a internet y poner los datos leı́dos
por los instrumentos en la nube de Davis siempre y cuando se cuente con una
suscripción a la misma, también es posible embeber los datos en otros sitios web
mediante la API ofrecida por Davis.
6.1. Conclusiones
Se decidieron escribir un conjunto de conclusiones relacionada con los tres ejes
principales en cuanto a los que giró el desarrollo: el tablero de control principal,
el tablero de control secundario y el software de gestión local. Dichas conclusiones
se exponen en las subsecciones siguientes.
segundo lugar, por una condición de lluvia que pueda resultar perjudicial
para los equipos internos. Con el fin de garantizar la operación ininterrum-
pida del sistema de control del observatorio, la placa de control ası́ como el
telescopio son alimentados con energı́a proveniente de una UPS.
Tal como lo muestra la Figura 2-27, los motores de las compuertas pueden
ser accionados tanto con un microcontrolador como en forma manual. El
propósito de esta última es no tener la necesidad de abrir el aplicativo para
abrir las compuertas, hacerlo en forma gradual o, simplemente, para el caso
en el cual la electrónica del tablero falle. Como dato adicional, emplean-
do cualquier aplicación que permita el envió de caracteres hacia el módulo
interno, es posible la apertura y cierre de la compuerta desde cualquier dis-
positivo.
La Tabla 2.3 muestra que los estados de los pines del microcontrolador
asociados a los relés de accionamiento de los motores manejan un nivel bajo
o un estado de alta impedancia digital, esto con el fin de evitar un corto
circuito en el caso que un pulsador se encuentre presionado y en el mismo
instante se accionen los motores desde el microcontrolador.
6.1 Conclusiones 127
Si bien los mensajes enviados desde y hacia las clases consisten de texto
plano, los mismos deben contar con una estructura que permita identificar su
contenido en forma coherente y fácilmente identificable. Por esto, se recurre
al formato JSON, el cual es una técnica de encapsulamiento de datos fácil
de escribir y leer por humanos, y fácil de generar por parte de máquinas.
Con el objetivo de generar una directiva de evaluación del sistema, cada una
de las clases desarrolladas cuenta con la capacidad de responder a un tipo
de mensaje universal para cada una conocido como “live”, el cual en esencia
es una solicitud para que cada clase publique un estado relacionado con el
hardware que esta a cargo de gestionar. Con el fin de informar al aplicativo
web si este se encuentra conectado y en funcionando en forma apropiada,
los mensajes de “live” solo son generados cuando existe una sesión activa en
el aplicativo web, esto también es valido para todos los demás mensajes de
ejecución sobre el observatorio.
Otro aspecto a tener en cuenta es que solamente se produce tráfico entre la Rasp-
berry Pi y el servidor cuando se encuentra una sesión activa en el aplicativo web
y, puesto que solo es posible tener una sesión activa en un determinado instante
de tiempo, ası́ como el hecho de que estas sesiones no son recurrentes a lo largo
del dı́a, resulta que el tráfico neto mensual por el cual se paga la suscripción a
Amazon se desaprovecha en forma bastante evidente.
5 MB por minuto para una calidad cercana a los 480p, lo cual no va de acuerdo
al plan adquirido en AWS. Una de las actividades complementarias del proyecto
consiste en la instalación de un circuito de televisión cerrado para la seguridad
del observatorio, dentro de los equipos adquiridos para tal fin se cuenta un DVR
de HIKVISION, y un total de 6 cámaras con visión infrarroja, el DVR además de
permitir la grabación del vı́deo proveniente de cada una de las cámaras, realiza
la transmisión vı́a internet hacia los servidores del fabricante, desde donde puede
ser consultada con un usuario creado por el comprador del dispositivo.
El interruptor electrónico
Resulta evidente el tener que emplear interruptores electrónicos que cumplan la
función de los relevadores. Para el caso se sugiere el empleo del TRIAC, el cual es
un dispositivo que funciona como un interruptor para corriente alterna en forma
similar a un SCR para continua. Esto es, se mantiene apagado hasta que se le
inyecte corriente en un pin denominado gate o compuerta y circule entre sus dos
terminales principales una corriente denominada corriente de sostenimiento; la
única forma de apagar el dispositivo es hacer que la corriente que lo atraviesa sea
inferior a la corriente de sostenimiento requerida por este. Como se trabajara con
una señal sinusoidal que posee un cruce natural por cero, el dispositivo se apagará
cuando finalice cada semiciclo, será necesario enviar una señal de control para
volver a encenderlo cuando comience el siguiente semiciclo de la señal.
Control de velocidad
La velocidad de rotación de un motor depende en esencia de la cantidad de po-
tencia que se le suministre. Si se puede controlar el flujo de potencia de la red
hacia el motor, se puede controlar la velocidad de rotación del mismo; es aquı́
donde los interruptores demuestran su forma de utilización más interesante. Esto
es, controlando la cantidad de tiempo que están cerrados o abiertos a lo largo de
todo el periodo de la señal. Se puede controlar la cantidad de corriente rms que
se le suministra a los bobinados y por ende la velocidad de rotación del motor. El
objetivo es recortar la señal de entrada como se ilustra en la Figura 6-3.
Fuente DC: con el fin de alimentar todos los dispositivos que se emplearan,
es necesario construir una fuente de voltaje DC, para esto solo es necesario
un transformador, diodos y un filtro para eliminar rizado, en caso de ser
necesario se puede agregar un regulador monolı́tico.
Figura 6-8: Generador base de tiempo para control de fase y forma de onda
// Fields in registers
// CTRL_REG1 : dr2 , dr1 , dr0 os1 , os0 fr tm ac
// Sampling rate 80 Hz
# define MAG_3110_SAMPLE80 0
// DR_STATUS Register ZYXOW ZOW YOW XOW ZYXDR ZDR YDR XDR
A.1 Código de implementación magnetómetro MAG3110 143
data [0]= mag_x_offset > >7; data [1]=( mag_x_offset < <1)& 0 xFF ;
data [2]= mag_y_offset > >7; data [3]=( mag_y_offset < <1)& 0 xFF ;
data [4]= mag_z_offset > >7; data [5]=( mag_z_offset < <1)& 0 xFF ;
i2cInit ();
i2cSetBitrate (100); // try 100 kHz
delay (20);
mag_setup ();
delay (50);
}
/*
* define DEBUG 1 in SparkFunLSM303C . cpp turns on debugging statements .
* Redefine to 0 to turn them off .
*/
/*
* SPI pins defined in SparkFunLSM303C . h for Pro Mini
* D10 -> SDI / SDO
* D11 -> SCLK
* D12 -> CS_XL
* D13 -> CS_MAG
*/
LSM303C myIMU ;
void setup () {
Serial . begin (9600);
if ( myIMU . begin (
// /// Interface mode options
MODE_I2C ,
// /// Magnetometer output data rate options
MAG_DO_40_Hz ,
// /// Magnetic field full scale options
MAG_FS_16_Ga ,
// /// Magnetometer block data updating options
MAG_BDU_ENABLE ,
// /// Magnetometer X / Y axes ouput data rate
MAG_OMXY_HIGH_PERFORMANCE ,
// /// Magnetometer Z axis ouput data rate
MAG_OMZ_HIGH_PERFORMANCE ,
A.2 Código de desarrollo brújula compensada con acelerómetro LSM303C 147
void ShowValues ()
{
float value ;
{
Serial . print ( " \ nGyroscope :\ n X = " );
Serial . println ( value , 4);
Serial . print ( " Y = " );
Serial . println ( myIMU . readGyroY () , 4);
Serial . print ( " Z = " );
Serial . println ( myIMU . readGyroZ () , 4);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//
// libreria
# include < avr / wdt .h >
// otras
int i =0;
int led =13;
int sel =0;
// Caracter recibido
char Key = ’. ’;
// pines para reles
int K13 = 2;
int K24 = 3;
// int K3 = 5;
// int K4 = 6;
// pines para final de carrera
int F1 = 8;
int F2 = 9;
int F3 = 10;
int F4 = 11;
// Variable de status
char sta = ’. ’;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//
152 B Código tablero secundario para control de compuerta de observación
}
if ( digitalRead ( F4 )==0){
k +=15;
}
// evaluate
// error
if ( k ==6|| k ==24|| k ==29|| k ==15|| k ==25){
sta = ’E ’;
}
// All open
else if ( k ==14){ sta = ’O ’ ;}
// All close
else if ( k ==16){ sta = ’C ’ ;}
// Mid
else {
sta = ’M ’;
}
}
// void serialInterrupt (){
// while ( Serial . available ()==0){}
// Key = Serial . read ();
// if ( i ){ digitalWrite ( led , HIGH ); i =0;}
// else { digitalWrite ( led , LOW ); i =1;}
// }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//
void ClearBuffer (){
char w ;
for ( int i = 0; i < 50; i ++){
while ( Serial . available () > 0){
char k = Serial . read ();
w ++;
delay (1);
}
delay (1);
}
154 B Código tablero secundario para control de compuerta de observación
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//
boolean EndO (){
if ( digitalRead ( F2 )==0 || digitalRead ( F3 )==0){
wdt_reset ();
delay (200); // tiempo de antirebote
if ( digitalRead ( F2 )==0 && digitalRead ( F3 )==0){
return true ;
}
}
return false ;
}
boolean EndC (){
if ( digitalRead ( F1 )==0 || digitalRead ( F4 )==0){
wdt_reset ();
delay (200); // tiempo de antirebote
if ( digitalRead ( F1 )==0 && digitalRead ( F4 )==0){
return true ;
}
}
return false ;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//
void loop (){
// Verificar si existe un caracter disponible
if ( Serial . available () >0){
Key = Serial . read ();
digitalWrite ( led , HIGH );
delay (150);
digitalWrite ( led , LOW );
}
// Evaluar orden recibida
// Open Gate
if ( Key == ’o ’ && sel ==0){
pinMode ( K13 , OUTPUT );
digitalWrite ( K13 , LOW );
sel =1;
B.1 Código final 155
}
// Close Gate
else if ( Key == ’c ’ && sel ==0){
pinMode ( K24 , OUTPUT );
digitalWrite ( K24 , LOW );
sel =2;
}
else if ( Key == ’r ’ ){
Status ();
Serial . write ( sta );
ClearBuffer ();
}
// Evaluar casos de cierre
// Esta toalmente abierta ?
if ( sel ==1){
if ( EndO ()){
pinMode ( K13 , INPUT );
Serial . write ( ’O ’ );
// ClearBuffer ();
sel =0;
}
}
// Esta totalmente cerrada ?
else if ( sel ==2){
if ( EndC ()){
pinMode ( K24 , INPUT );
Serial . write ( ’C ’ );
// ClearBuffer ();
sel =0;
}
}
// restart char variable
Key = ’. ’;
// Restart Timer
wdt_reset ();
}
Bibliografı́a
[8] M. I. Inc., Lx200gps telescope reference manual, Meade, (2018), pp. 5–30.
BIBLIOGRAFÍA 157