TELESCÓPIO ROBÓTICO PARA LOCALIZAÇÃO DE CORPOS CELESTES Israel Pinhero de Siqueira1, Amanda de Souza de Almeida1, Witenberg Rodrigues Souza1, Li Exequiel E. López2 1 CENTRO UNIVERSITÁRIO INSTITUTO DE EDUCAÇÃO SUPERIOR DE BRASÍLIA - IESB SGAS 613/614, Lotes 97 e 98 70.200-730 – Brasília – DF 2 PROJETO WIKITECA - CENTRO UNIVERSITÁRIO IESB SGAS 613/614, Lotes 97 e 98 70.200-730 – Brasília – DF Resumo: O artigo mostra o procedimento de criação de um sistema de automação e controle, que será instalado junto a um telescópio, com o objetivo de apontar para o ponto de localização de um corpo celeste. São apresentados detalhes de seu desenvolvimento, a construção da plataforma, os métodos de localização por satélite, a programação da placa de desenvolvimento Intel Galileu e a montagem dos motores responsáveis pelo movimento do telescópio a partir da hora e das coordenadas determinadas pela posição do telescópio no globo terrestre. Um algoritmo foi desenvolvido pelos autores do trabalho para calcular a posição exata do telescópio num ponto do globo terrestre através de um módulo GPS e enviar as coordenadas para os webservices das instituições onde serão processadas e calculadas em tempo real, devolvendo para este a localização precisa do corpo celeste, são usados os dados do planetário virtual Stellarium. O algoritmo desenvolvido também é capaz de processar os dados recebidos e controlar dessa forma os movimentos dos motores de passo interconectados ao telescópio que lhe permitam apontar de forma precisa para o corpo celeste. Palavras Chaves: Telescópio Robótico, Automação e Controle, Astronomia. Programação, Abstract: The article shows the creation of an automation and control system procedure, which will be installed next to a telescope, in order to point to the point of location of a celestial body. Details of their development are presented, platform construction, satellite positioning methods, the programming of the Intel Galileo development board and the assembly of engines responsible for telescope movement from the time and coordinates determined by the telescope position globe. An algorithm was developed by the authors of work to calculate the exact position of the telescope at a point of the globe through a GPS module and send the coordinates to the web services of the institutions where they will be processed and calculated in real time by returning to this location needs celestial body, are used virtual planetary data Stellarium. This algorithm is also able to process the data received in this way and controlling the movements of stepper motors interconnected to the telescope to enable it to point precisely to the celestial body. Keywords: Robotic Telescope, Programming, Automation and Control, Astronomy. 1 INTRODUÇÃO Determinar de forma precisa a posição de um corpo celeste não é um processo simples. O trabalho pretende responder à pergunta: É possível automatizar um telescópio amador de tal forma de transformá-lo num sistema autônomo para localização exata de corpos celestes? O desafio do projeto foi levar uma solução de alta precisão e baixo custo com uma interface de alto nível e usabilidade para facilitar o acesso ao estudo das leis da Física Gravitacional e Astronomia especialmente aos alunos das escolas de ensino fundamental e médio, para crianças, amadores e público em geral, fomentando e incentivando a pesquisa científica. O trabalho da construção do telescópio automatizado para localização exata de corpos celestes usa a necessidade inerente ao ser humano de entender sua origem e a origem do universo [Gleisser, 2008], para incentivar alunos dos diferentes níveis de ensino a ficarem mais próximos das ciências exatas, a engenharia e áreas tecnológicas. O objetivo do trabalho é construir uma base eletromecânica automatizada para um telescópio de baixo custo e alta precisão, integrada com motores de passo, o microcontrolador Intel Galileo e um sistema de localização e transmissão de dados completo, para interpretação da posição do telescópio no globo terrestre, enviando os dados de referência para webservices realizarem cálculos, retornando para o Galileo as coordenadas espaciais da posição exata do corpo celeste a ser observado, que responderá através dos motores de passo e permitirá ao telescópio apontar exatamente para o corpo celeste escolhido. Para determinar corretamente as coordenadas da localização do corpo celeste para onde o telescópio deve apontar, alguns cálculos precisam ser feitos como, por exemplo, determinar a velocidade da rotação da terra no dia e horário e a trajetória do corpo que se deseja observar. Para dar precisão ao movimento do telescópio, dois motores de passo serão utilizados, um executando o movimento num plano horizontal e o outro efetuando o movimento num plano vertical, criando uma rotação angular do telescópio de 360º. Esses motores são controlados pela placa Intel Galileo que terá uma conexão com um computador, onde o software necessário para escolha da localização desejada estará instalado. Os dados de localização do corpo celeste no sistema solar são adquiridos por meio do Mostra Nacional de Robótica (MNR) 1 Jet Propulsion Laboratory da NASA (JPL) através do departamento JPL Solar System Dynamics e do Institut de Mécanique Céleste et de Calcul des Éphémerides (IMCCE), na França, para localizar corpos fora do sistema solar, através de um módulo GPS e de webservices específicos, concretamente será usada a interface Stellarium. economizar na montagem necessária. Existem vários tipos de telescópios e ópticas utilizadas para observação astronômica, entre eles se destacam: (i) Refletor (ou Newtoniano), (ii) Refrator e (iii) Catadióptrico (Cassegrain). O telescópio escolhido para ser usado no projeto é o Skywatcher MaksutovCassegrain 90 mm com tripé EQ1 (Figura 1). O projeto envolve áreas da Engenharia de Computação, Engenharia Eletrônica, Engenharia Mecânica Física e Astronomia. A Engenharia de Computação é necessária na implementação da linguagem de programação para execução de rotinas e cálculos de localização e controle do telescópio. Da Engenharia Eletrônica são usados controladores de drivers para efetuarem tarefas definidas por algoritmos. Por fim, fundamentos de Engenharia Mecânica são usados para a composição dos materiais e movimentos mecânicos empregados como o movimento rotacional dos motores, eixos de direção e eixos de sustentação e equilíbrio do telescópio. O artigo está organizado da seguinte forma: a seção 2 apresenta uma descrição do trabalho, a escolha do telescópio, a modelagem da nova base, a escolha do sistema de coordenadas e a interface Stellarium. A seção 3 descreve os materiais e métodos utilizados no trabalho. Os resultados, os desafios e a solução dos problemas são apresentados na seção 4, e as conclusões do trabalho são apresentadas na seção 5. 2 O TELESCÓPIO ROBÓTICO O telescópio robótico consiste na construção de uma base eletromecânica de automação e controle para um telescópio de baixo custo e alta precisão, integrada com motores de passo, um microcontrolador Intel Galileo e um sistema de localização e transmissão de dados completo para receber os valores via GPS e interpretar a posição do telescópio no globo terrestre, enviando os dados de referência para webservices realizarem cálculos, retornando para o microcontrolador as coordenadas espaciais da posição exata do corpo celeste a ser observado, este responderá através dos motores de passo, o que permitirá ao telescópio alguns movimentos para apontar exatamente para o corpo celeste escolhido (planetas do sistema solar, satélites, e outros). Figura 1 – Telescópio Skywatcher Maksutov-Cassegrain. 2.2 A Estrutura da Base do Telescópio O telescópio com a ótica Cassegrain foi escolhido pelo seu tamanho reduzido, a portabilidade e excelente qualidade nas observações. As Especificações do telescópio são: (i) Abertura: 90 mm; (ii) Distância focal: 1250 mm (iii) Razão focal: 13.8 (iv) Maior Ampliação Útil: 200×. O único ponto negativo é que o telescópio vem com uma montagem equatorial e torna-se necessário fazer uma adaptação, construir uma base, para uso em coordenadas azimutais. Na Figura 2 pode-se observar a planta da nova base para o telescópio. Associada às tarefas definidas neste trabalho, está a de proporcionar ao público uma visão ampla das possibilidades e influências que a tecnologia oferece à sociedade na forma de experiências reais e demonstrações. Toda a movimentação do telescópio é proporcional a sua massa e aos componentes nele instalado, é leve para uma fácil movimentação e uma resposta mais rápida, de baixo custo, móvel e poderá ser usado em qualquer ponto geográfico terrestre. O trabalho foi realizado em três etapas: (i) pesquisa do telescópio e do sistema de coordenadas a serem usados, assim como da plataforma Stellarium, (ii) criação dos algoritmos e programação Phyton da placa Intel Galileo e (iii) montagem da nova base a ser acoplada ao telescópio. O desenvolvimento do trabalho constituiu uma prática pedagógica de caráter técnico e acadêmico-científico que poderá incentivar aos alunos do ensino fundamental e médio e público em geral a se aproximar da astronomia, engenharia e a tecnologia, em geral. 2.1 A Escolha do Telescópio Um dos desafios do projeto foi escolher um telescópio de qualidade, com uma montagem fácil e preço acessível. Porém, se tratando de lentes e telescópios a qualidade esta diretamente relacionada ao preço. Foi decidido adquirir um telescópio para iniciantes em astronomia, com uma boa abertura, procurando Mostra Nacional de Robótica (MNR) Figura 2 – Planta para a construção da base do Telescópio. 2.3 A Escolha do Sistema de Coordenadas Existem no mercado três tipos de montagem de um telescópio: Equatorial, Azimutal e Dobsoniana. Cada uma com suas características definidas pelo sistema de coordenadas usado. O sistema Equatorial é muito usado em astronomia (Inclusive pela interface Stellarium) porque tem como plano fundamental o plano da eclíptica (uma linha reta passando entre o sol e o plano do sistema solar) sendo capaz de mapear astros suficientemente distantes da terra de forma igual para qualquer observador localizado no planeta. O grande desafio da montagem equatorial (pensando em alunos e iniciantes em observações astronômicas) é a dificuldade de montar e preparar o equipamento para observação. É preciso um estudo prévio das coordenadas celestes além de certa precisão na montagem e uso do telescópio; muitas vezes esse fato desestimula os alunos e amadores. Já o sistema de coordenadas Azimutal e o Dobsoniano (uma variação do Azimutal), ambos são medidos em termos de coordenadas terrestres, sendo fixos na terra e não nas estrelas; isto significa que os astros não têm posição fixa por causa do movimento terrestre. O mesmo corpo celeste terá valores de coordenadas diferentes para cada observador em pontos diferentes na terra. No desenvolvimento do trabalho foi escolhido o sistema de coordenadas azimutal pela facilidade de estudo e compreensão pelos alunos e iniciantes em observações astronômicas. Para usar este sistema foi preciso a elaboração de um algoritmo de conversão de coordenadas em tempo real que recebe do Stellarium as coordenadas celestes do objeto e as converte a coordenadas azimutais, de acordo com a latitude, longitude e hora do observador e transmite para os motores de passo o movimento para o posicionamento correto do telescópio, tornando tudo mais simples. As equações de transformação serão elucidadas na seção de desenvolvimento do algoritmo. 2.4 A Interface Stellarium Stellarium é um planetário virtual (Figura 3) de código aberto para computador [Planetário Virtual, 2014]. Ele mostra um céu realista em três dimensões, igual ao que se vê a olho nu, com binóculos ou telescópio. Por ser multiplataforma (pode ser instalado em Windows, Linux e MacOs), tornou-se a escolha ideal para constituir a interface do projeto. servidor de comunicação e realizar os cálculos complexos das transformações de coordenadas em tempo real, ele precisava controlar toda a eletrônica do projeto. Foi escolhida a placa Intel Galileo (Figura 4) que dispõe de um processador Intel® Quark SoC X1000 de 32 bits (mais rápido que todas as outras placas de desenvolvimento existente no mercado). Figura 4 – Placa Intel Galileo. Essa plataforma oferece a facilidade de desenvolvimento da arquitetura Intel por meio de suporte para os sistemas operacionais Microsoft Windows*, Mac OS* e Linux* possibilitando programar em qualquer linguagem de programação, inclusive Python que é uma linguagem extremamente rápida e versátil para trabalhar com sockets e transferência de dados, controle de motores, entre outras vantagens. 3.2 Motor de Passo e Driver Para a execução do projeto foi escolhido o motor de passo 28BYJ-48 (Figura 5), que possui ótimo torque, unipolar, alimentação de 5V e redução de 1/64, isto significa que é possível dar uma volta completa com 4096 passos, ou seja, apenas ~0,088° por passo. Outras especificações do motor incluem: (i) Caixa de Redução: 1/64; (ii) Diâmetro do eixo: 3mm; (iii) Ângulo do Passo: 5,625°/64 ~ 0,088°; (iv) Frequência: 100Hz; (v) Resistência DC: 50 Ω ± 7% (25℃); (vi) Torque: 34,3 mN.m; (vii) Peso: 40 g. O driver ULN2003 é um driver de corrente que permite o Galileo controlar motores com correntes superiores a 50 mA, neste caso até 500 mA. Este módulo possui LEDs que indicam o acionamento das bobinas e opera com tensões de 5-12 V. Figura 3 – Mapa celeste (Fonte: stellarium.org). 3 MATERIAIS E MÉTODOS Dentre os materiais para o desenvolvimento do telescópio robótico estão: Telescópio Skywatcher Maksutov-Cassegrain, a Placa microcontroladora Intel Galileo, Motores de Passo e Drivers. 3.1 A Placa Intel Galileo Figura 5 – Motor de passo + driver. Para o desenvolvimento do trabalho foi preciso um microcontrolador potente e versátil, além de atuar como Mostra Nacional de Robótica (MNR) 3 3.3 Firmware A Figura 6 é um fluxograma mostrando o funcionamento da lógica de programação (conjunto de instruções operacionais programadas diretamente no hardware do equipamento eletrônico) executada pelo microcontrolador Galileo. feito exatamente ao receber os dados, antes de qualquer cálculo. (iii) Neste trecho do código recebem-se os dados enviados pelo Stellarium e são salvos na variável data0, depois é feita a conversão dos dados usando o método ConstBitStream e seus dados são lidos nas variáveis ra, ra_uint, dec e dec_uint. Figura 7 – Stellarium mostrando as coordenadas de localização do planeta Saturno. Figura 6 – Fluxograma das instruções operacionais na placa Calileo. 4 4.1 RESULTADOS E DISCUSSÃO Desenvolvimento do Servidor Galileo No desenvolvimento do Servidor Galileo/Linux para comunicação com o Stellarium, foi escolhido Python como linguagem de programação para o sistema, por diversos motivos. Um deles é que Python é de acesso livre e de código aberto o que vai de acordo com os ideais do projeto, multiplataforma (roda em Linux, Windows, Mac), uma linguagem simples e de desenvolvimento rápido. Definido o Python como linguagem de programação da placa Galileo, continuou-se para a análise e integração do Servidor (Galileo) com a Interface (Stellarium), feita através de uma comunicação Ciente > Servidor em TCP/IP. Foi preciso estabelecer um socket que é uma conexão assíncrona entre Stellarium e Galileo, para isso foi usada uma biblioteca nativa do python chamada asyncore para gerenciar as requisições. A classe Telescope_Server é responsável por gerenciar a conexão e os sockets de comunicação entre o servidor Galileo e o Stellarium, nela foi definido o IP do Galileo na rede para conexão. É uma classe estática que gerencia as conexões, a cada nova mensagem de dados do Stellarium (quando o usuário pressionar crtl+1 para enviar os dados do corpo celeste selecionado) essa classe recebe e redireciona para a classe Telescope_Channel. 4.2 Recepção de dados do Stellarium O protocolo usará apenas um tipo de mensagem entre o servidor (Galileo) e o cliente (Stellarium), definido da seguinte forma: (i) A Classe responsável por fazer o gerenciamento dos dados e das mensagens recebidas é a Telescope_Channel. O método que recebe estes dados está especificado como handle_read nesta mesma classe. (ii) Os dados são transmitidos em Bytes o que trouxe a necessidade de usar uma biblioteca do python chamada bitstream que converte os dados em binário para String (texto simples). Este tratamento deve ser Mostra Nacional de Robótica (MNR) 4.3 Algoritmo de Conversão de unidades e coordenadas Os dados recebidos dos satélites vêm todos em coordenadas equatoriais, que para uma construção automatizada, a dificuldade de implementação é muito maior. Por este motivo, a conversão para coordenadas azimutais torna-se necessária. Este algoritimo esta implementando na classe transformar_coordenadas no arquivo coords.py (mostrado no Anexo I). Ao executar, o algoritmo de conversão recebe os dados originais em coordenadas equatoriais. Neste formato, os dados vêm com a medida de hora (10h57m35.16s). Para localização do astro, são identificados dois dados principais: hora angular (alfa) e declinação. Pelo fato desses valores serem globais, o algoritmo não pode aplicá-los diretamente para o movimento do telescópio. Para isso, é necessário receber também os dados de latitude, longitude e tempo sideral da localização do telescópio. O formato recebido é String, pois os dados possuem identificadores de horas, minutos e graus. Para o algoritmo poder trabalhar com esses dados, primeiramente executa uma conversão, passando esses valores em String para Double, convertendo já para radianos. Para facilitar essa conversão, um método foi criado, recebendo cada dado por separado e retornando seu valor em radiano. Com todos os dados prontos (hora angular aplicada, declinação, latitude e longitude), a conversão de coordenadas equatoriais para coordenadas azimutais pode ser finalizada. O método que realizará as funções de conversão é baseado em senos e cossenos, recebendo alguns dos dados supracitados e retornando o azimute (movimento horizontal angular) e a altura (movimento vertical angular). Após a função de senos e cossenos, aplica-se a função inversa do valor final para retornar ambos os valores de azimute e altura. Com esses dados, é possível executar um movimento livre do telescópio, nos três eixos. Com essa classe escrita é possível de se converter as unidades logo após os dados do Stellarium serem recebidos, assim como converter os dados em String e salvar nas variáveis az (azimute) e alt (altitude). A Figura 8 mostra um dos códigos desenvolvidos nesta parte. class transformar_coordenadas: def __init__(self, dec, ra): self.today = datetime.utcnow() self.lgt = -0.8299860897981474 self.lat = -0.2699099153798746 self.dec = radians(dec) self.ra = radians(ra * 15) def get_azi_alt(self): return (transformar_coordenadas.get_horizontal_angle(self), transformar_coordenadas.get_vertical_angle(self)) telescópio de volta para o Stellarium, para o usuário saber com facilidade exatamente para onde o telescópio está apontando. Para enviar os dados, novamente é preciso converter todos eles para o sistema binário usando o método ConstBitStream. Desta forma o telescópio sempre terá sua ultima coordenada salva, para uma melhor visualização do usuário no Stellarium e um melhor posicionamento do primeiro no espaço. A Figura 9 mostra um dos testes realizados com a interface Stellarium, a placa Galileo e os motores de passo. # restorna angulo horizontal/azimute def get_horizontal_angle(self): dec = self.dec lat = self.lat hra = transformar_coordenadas.hour_angle(self) alt = transformar_coordenadas.get_vertical_angle(self) hra = radians(hra) alt = radians(alt) res = acos ( ( sin(dec) - sin(lat) * sin(alt) ) / ( cos(lat) * cos(alt) ) ) if sin(hra) > 0.0: res = 2.0 * pi - res return degrees(res) # retorna angulo vertical/altura def get_vertical_angle(self): lat = self.lat dec = self.dec hra = transformar_coordenadas.hour_angle(self) hra = radians(hra) res = asin ( sin(dec) * sin(lat) + cos(dec) * cos(lat) * cos(hra) ) return degrees(res) x = transformar_coordenadas(dec, ra) az, alt = x.get_azi_alt() Figura 8 – Um dos códigos de programação elaborados. 4.4 Envio dos Sinais para os Motores Para o controle dos motores de passo foi usada uma biblioteca auxiliar do Stephen C. Phillips [Stephen's Home Page, 2015] com algumas alterações para se adequarem à necessidade do projeto, nele a biblioteca está localizada no arquivo motor.py (mostrado no Anexo II). Figura 9 – Stellarium, Galileu e motores de passo, prontos para um teste. 4.6 Desafios e Solução de Problemas Uma das dificuldades encontradas aconteceu após a montagem e programação da placa Galileo, no início dos testes com os motores do telescópio. A Galileo recebeu uma atualização online da Intel que trocou o número das portas de saída e entrada (GPIO). Posteriormente a essa atualização e ao realizar outros testes, a placa travou e alguns dos seus componentes queimaram. Além do custo para a aquisição de uma placa nova houve um problema com a disponibilidade da placa no Brasil, o que atrasou em aproximadamente um mês a continuidade do trabalho. Posteriormente a placa foi adquirida e o sistema inteiro foi programado novamente. 5 CONCLUSÕES O trabalho está praticamente finalizado. Todo o desenvolvimento do sistema de conversão de coordenadas, a programação do servidor, a integração do Galileo com o Stellarium e o controle dos motores foram testados e concluídos, faltando apenas a construção da base do telescópio para otimização dos movimentos deste. Um protótipo em menor escala com uma caneta laser está sendo concluído para demonstrar o funcionamento e mapear os objetos no céu. Com o azimute e a altitude já em graus foi criada uma instância para os motores e definidos os pinos aos quais eles estão conectados. Foi definida a velocidade dos motores (escolhou-se 5 rpm por ser uma velocidade segura para preservar a placa Galileo) e foi usado o método move da classe Motor para posicionar o telescópio no angulo desejado. A conclusão prevista para as próximas semanas do protótipo permitirá o funcionamento integral do telescópio e a precisão deste na localização dos corpos celestes, que deverá estar pronto para apresentação na Mostra Nacional de Robótica 2015 a ser realizada no mês de outubro. Foi tomado o cuidado de salvar a posição anterior do telescópio para este não precisar voltar para a posição original todas as vezes que um sinal fosse enviado com uma coordenada nova. Assim, o telescópio deverá continuar seu movimento a partir de onde parou. O projeto proporcionou um grande conhecimento nas diversas áreas de engenharia, transmitindo uma experiência ampla em circuitos elétricos, programação, transmissão, eletrônica e montagem mecânica, conhecimentos que os alunos autores do artigo esperavam aprender unicamente ao final do curso, porém, que foram aplicados no desenvolvimento do telescópio robótico ao longo de seu processo de automação e controle. 4.5 Envio das Coordenadas do Telescópio para o Stellarium Após os cálculos de posicionamento, os métodos act_pos e move deverão cuidar da atualização da posição real do Mostra Nacional de Robótica (MNR) 5 AGRADECIMENTOS Ao Programa Institucional de Bolsas de Iniciação em Desenvolvimento Tecnológico e Inovação (PIBITICNPq) pela bolsa concedida e ao Programa de Iniciação Científica do Centro Universitário IESB pela oportunidade. REFERÊNCIAS BIBLIOGRÁFICAS COUPER, Heather e HENBEST, Nigel. Big Bang: A História do Universo. Editora Moderna. São Paulo. 2008. FEYNMAN, RICHARD, P., Lições de Física, volumes 1, 2 e 3, Ed. Bookman, Porto Alegre. 2008. Galileo and Einstein. Disponível em: http://galileoandeinstein.physics.virginia.edu/lectures/ne wton.html. Acesso em 10 de maio de 2014. GLEISSER, Marcelo. A dança do Universo. Editora Schwarcz Ltda. São Paulo. 2008. HAWKING, Stephen. O Universo numa Casca de Noz. Editora Arx. São Paulo. 2010. Institut de Mécanique Céleste et de Calcul des Éphémerides (IMCCE). Disponível em: http://www.imcce.fr/langues/en/. Acesso em 30 de abril. Intel do Brasil. Disponível em: http://www.intel.com.br/content/www/br/pt/homepage.h tml. Acesso em: 21 de maio de 2014. NASA - Jet Propulsion Laboratory. Disponível em: http://ssd.jpl.nasa.gov/. Acesso em 30 de março de 2014. Planetário Virtual Stellarium. Disponível em: http://www.stellarium.org/. Acesso em: 30 de abril de 2014. Plans to buid a sidewalk telescope: Disponível em: http://www.cdcc.usp.br/cda/telescopios/tie-jplnasa/index.html. Acesso em 10 de abril de 2014. Stephen's Home Page: Disponível em: http://scphillips.com/. Acesso em 05 de março de 2015. ANEXOS I: coords.py Mostra Nacional de Robótica (MNR) II: motor.py Mostra Nacional de Robótica (MNR) 7