domingo, 21 de julho de 2013

Sismologia em Tempo Real - Parte 1

Desde a época da graduação, a Sismologia me chamou atenção, tanto que nos primeiros semestres comecei a construir um sismógrafo do tipo Lehman (Dados para Construção), mas por diversos motivos acabei não terminando, principalmente por ter sido convidado a participar do projeto para construção de uma Caixa de Tiro.

Recentemente, voltei a trabalhar com sismologia, principalmente no monitoramento de sismos naturais e induzidos em grandes obras de engenharia. Com isso realizei alguns estudos a fim de encontrar alguns softwares que pudessem me auxiliar nesta tarefa.

Um destes softwares foi o SeisGram, desenvolvido em JAVA por Anthony Lomax, podendo ser executado na maioria dos sistemas operacionais com suporte a JAVA. Este software pode ser utilizado para visualizar sismogramas em diferentes formatos, disponibiliza algumas ferramentas para processamento, visualização do movimento de partículas em 3D, etc. Mas uma das principais características que me chamou a atenção é a possibilidade de visualizar dados sismológicos em tempo-real através de uma ou mais conexões com servidores seedlink.

Em minhas pesquisas descobri que o Centro de Sismologia - USP disponibiliza acesso aos dados de suas estações em tempo real por meio de um servidor seedlink. Irei demonstrar como visualizar estes dados por meio do SeisGram executando-o tanto em maquinas rodando o Microsoft Windows como no Linux.


1º Passo - Preparar o Sistema:
A primeira coisa que temos que fazer é descobrir se temos o Java instalado em nossa maquina. No Windows (XP e Vista), vá em Iniciar > Executar e no Windows 7 vá em Iniciar > pesquisar. Digite "cmd" depois tecle "enter", será mostrado o "prompt do MSDOS" neste você deve digitar "java -version", se a maquina virtual Java estiver instalada deverá aparecer a versão, caso apareça algo informando que o comando ou o programa não foi encontrado, provavelmente a maquina Java não esta instalada. Instale o Java e tente novamente;

No linux abra o shell de sua preferência e digite "java -version", como no caso acima se aparecer a versão está tudo pronto, caso contrário instale o Java e tente novamente.

Também é possível verificar se o Java esta instalado diretamente do site do JAVA através do link TestJava.

2º Passo - Baixar e Preparar o SeisGram:


A última versão do SeisGram pode ser baixada neste link: Download Seisgram2K60.

Após baixar o SeisGram não descompacte o arquivo!

Irei explicar como executar o SeisGram somente no modo de visualização de dados em tempo-real, para mais informações sobre como executar o SeisGram em outros modos acesse Stand-alone and Applet Configuration.


No Windows e/ou Linux crie uma pasta dentro da sua pasta de usuário conforme exemplo:


- 1º Windows: c:\users\fulano\seisgram


- 2º Linux: /home/fulano/seisgram


O usuário "fulano" é o usuário criado em seu sistema durante a instalação do mesmo ou criado por você, já a pasta "seisgram" é a pasta que você deve criar, pode ser qualquer nome de sua escolha.


O próximo passo é copiar o SeisGram, para a pasta que você criou.




3º Passo - Selecionar a Estação:
Como eu falei, vamos usar os dados das estações disponibilizadas pelo Centro de Sismologia - USP, nada impede de você utilizar dados de outros centros sismológicos.


Acesse a Lista de Estações, procure uma de sua preferência, na coluna "Local" é dada informações da localidade onde a estação está instalada. Após escolher a estação olhe na primeira coluna "Rede.Estações[#canais]" e anote, no meu caso escolhi a de Caçapava do Sul - RS, onde na primeira coluna ela é identificada por "BL.CPSB".



4º Passo - Executar o SeisGram em Tempo-Real:

O SeisGram, pode ser executado diretamente via linha de comando (Windows-MSDOS ou Linux-shell), ou através de um arquivo em lote do Windows ou um script no Linux. Primeiro vamos executar o SeisGram diretamente via linha de comando.

- 1º Dependendo do Sistema Operacional, acesse o prompt do MSDOS ou o shell do Linux, conforme explicado no 1º passo.

- 2º Para executar o SeisGram, digite o seguinte, não esqueça de alterar os comandos abaixo a fim de adaptá-los para as pastas onde se encontra o SeisGram:

Windows - Prompt MSDOS:

java -cp c:\users\fulano\seisgram\SeisGram2K60.jar net.alomax.seisgram2k.SeisGram2K -seedlink "seisrequest.iag.usp.br:18000#BL_CPSB:HH?#1200"


Linux - Shell:

java -cp /home/fulano/seisgram/SeisGram2K60.jar net.alomax.seisgram2k.SeisGram2K -seedlink "seisrequest.iag.usp.br:18000#BL_CPSB:HH?#1200"


Se não deu nenhum erro, após alguns segundos a janela do SeisGram deve aparecer e em breves segundos os dados devem começar a aparecer conforme demonstram as figuras 1 e 2:

Figura 1: SeisGram em funcionamento.

Figura 2: GAP nos dados.

Caso ocorra algum problema verifique se o caminho onde encontra-se o SeisGram esta correto!! Vale ressaltar, que mesmo o Windows não diferenciando letras maiúscula e minusculas o Java diferencia, então tanto no Windows como no Linux, digite exatamente como acima.


Segue as explicações de cada uma das seções do comando:


1. java -cp: chama o interpretador java e informa para chamar a classe principal do programa;

2. /home/fulano/seisgram/SeisGram2K60.jar: localização do programa;

3. net.alomax.seisgram2k.SeisGram2K: nome da classe principal, este deve ser digitado exatamente como demonstrei acima e como é demonstrado no site SeisGram - SeedLink;

4. -seedlink "seisrequest.iag.usp.br:18000: endereço do servidor seedlink o qual disponibiliza os dados em tempo real;

5. #BL_CPSB:HH?: Indica a rede "BL", a estação "CPSB" e os canais "HH?" (HHZ=vertical, HHN=horizontal1, HHE=horizontal2 e HH?=todos os canais), a qual o servidor seedlink deve enviar os dados. Altere este parâmetro conforme a estação que você escolheu no site, não esqueça que no site aparece "BL.CPSB" mas no programa você deve usar "BL_CPSB".

6. #1200: Janela de tempo máximo em segundos, influência na taxa de download dos dados.





5º Passo - Executar SeisGram via Lote ou Script:

Uma maneira de facilitar a execução de programas executados via linha de comando é a execução destes por meio de arquivos que contenham os comandos a serem executados em sequência:

1º - No Windows utilize o notepad, cole o comando utilizado acima e salve o arquivo com o nome de sua preferência mas com a extensão ".bat", no meu caso salvei como "seisgram.bat". Assim toda vez que for necessário executar o programa basta dar dois cliques neste, caso necessite alterar algum parâmetro, basta abrir o arquivo alterar e salvar;

2º - No Linux a criação de scripts é muito comum a fim de automatizar algumas tarefas. Para criar o script basta utilizar qualquer editor de texto disponível em sua distribuição Linux, no meu caso como utilizo o Ubuntu utilizo o gedit (modo gráfico) e o VI (modo texto). Abra o editor de texto e na primeira linha coloque "#!/bin/bash" que indica qual interpretador irá executar os comandos, se necessário altere para o interpretador que você utiliza, após cole o comando conforme descrito no 4º passo para execução em Linux, salve o arquivo com o nome de sua preferência, no meu caso salvei como "scriptSeisGram", no Linux não é necessário colocar uma extensão no arquivo.

Feito isto, você deve dar a permissão de execução para o arquivo que você criou, por meio do console entre na pasta onde salvou o arquivo e digite o comando "chmod +x nomedoseuscript", não esquecer que o Linux diferencia maiúscula de minuscula.

> chmod +x scriptSeisGram

Para executar basta digitar a localização do script, ou se estiver na pasta basta fazer:

> ./scriptSeisGram






Espero ter ajudado, assim que possível irei postar informações de outro software que estou testando, que além de demonstrar os dados em tempo real, reconhece quando houve um sismo e salva os dados automaticamente disponibilizando para um pós-processamento.


Qualquer dúvida não exite em entrar em contato!
  


 


domingo, 2 de junho de 2013

Processamento de Dados Sismológicos com Python e Obspy - Parte 1

Mesmo antes da época da graduação em geofísica eu já trabalhava com programação (Delphi, Basic, C/C++, etc). Porém foi nesta época que aperfeiçoei meus conhecimentos e por ventura ouvi falar de uma tal linguagem "Python".

No final do ano passado adquiri um mini-computador chamado de  Raspberrypi e assim comecei a procurar formas de programar esta fantástica ferramenta, onde para minha surpresa uma das linguagens usadas era "Python" então comecei a ler uma publicação on-line sobre a Raspberrypi chamada de TheMagPi e assim vi a necessidade de apreender mais sobre esta fantástica linguagem de programação. 

Para minha surpresa descobri um curso totalmente gratuito de Python do MIT (Massachusetts Institute of Technology), disponibilizado pelo portal EDX. Como comecei com nove semanas de atraso no curso, resolvi comprar o livro texto utilizado em todas as aulas do curso para facilitar o aprendizado, para quem quiser adquirir é só acessar o site MITPress.

Após adquirir algum conhecimento nesta linguagem e pensando em possíveis aplicações desta na geofísica, em uma conversa com o pessoal da área de sismologia do IAG-USP fui apresentado a uma biblioteca para Python chamada "ObsPy", a qual provê um "framework" para leitura e escrita em vários formatos de arquivos, acesso a centros de armazenamento de dados sismológicos e rotinas de processamentos de sinais as quais permitem manipulações de séries temporais sismológicas, deste modo provendo um desenvolvimento rápido de aplicações para sismologia. 

Mas chega de blá-blá-blá e vamos ao que interessa. Neste primeiro artigo irei demonstrar como instalar esta biblioteca em um sistema Linux baseado na distribuição Debian.

Na maior parte das distribuições do Linux, o Python já vem instalado por "default". Para verificar a existência deste no sistema, basta digitar python no shell, se o mesmo estiver instalado no sistema deverá aparecer a seguinte mensagem:


celso@Android:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>


Caso não esteja instalado, basta fazer como segue, mas não esqueça que necessitarás a senha de "root" :

celso@Android:~$ sudo apt-get update
celso@Android:~$ sudo apt-get install python

Após o python ser instalado, teste novamente para verificar se está tudo certo. Após estes passos básicos, vamos instalar a biblioteca "Obspy" via repositório, mas para isso a primeira coisa que devemos fazer é identificar qual versão do sistema operacional está instalada em nosso PC, em distribuições baseadas em Debiam digite: lsb_release -cs.

celso@Android:~$ lsb_release -cs
precise

No meu caso como tenho o Ubuntu instalado a versão que estou utilizando é a "Precise", conforme demonstra a saída do comando acima. O próximo passo é inserir o endereço correto do repositório onde se encontra o "Obspy" na lista de fontes em nossa máquina, para isto utilize um editor de texto de sua preferência (vi, vim, gedit, etc) e acesse como "root" o arquivo "sources.list" que se encontra em "/etc/apt/" e insira no final do arquivo a seguinte linha:  

deb http://deb.obspy.org CODENAME main

 Não esqueça de substituir "CODENAME" pela versão do seu sistema, no meu caso ficou assim:
 
deb http://deb.obspy.org precise main

Salve e feche o arquivo. O próximo passo é inserir a chave que testa a integridade dos pacotes baixados do repositório do "obspy", para isso digite o comando abaixo:

celso@Android:~$ wget --quiet -O - https://raw.github.com/obspy/obspy/master/misc/debian/public.key | sudo apt-key add -

Para instalar a "Obspy" com todas as dependências digite:

celso@Android:~$ sudo apt-get update
celso@Android:~$ sudo apt-get install python-obspy

 
Espero que tenham conseguido instalar esta fantástica ferramenta, qualquer dúvida não exitem em perguntar. No próximo artigo irei mostrar como implementar um simples programa em python utilizando a biblioteca "obspy".

Até lá!

Celso B. Varella Varella Neto
 
 


 



segunda-feira, 27 de maio de 2013

Beaglebone Black - Acesso via Terminal

Depois de muito tempo sem publicar, resolvi apresentar um simples teste que realizei na nova Beaglebone Black da Texas Instruments, para mais detalhes: 

Blog do Sergio Prado - beaglebone-black

beaglebone.org 


Primeiramente, localizei os pinos que dão acesso a porta serial da beaglebone black, veja a figura abaixo:  

Beaglebone Black System manual: Gerald Coley


Conforme o manual do SITARA AM335x, a tensão nestes pinos não pode ultrapassar os 3,3V, caso contrário poderá danifica-lo permanentemente. Para isso utilizei o BusPirate  e para mais informações acesse Blog do Sergio Prado - Buspirate.

Após conectar os fios necessários (GND, RX e TX), configurei o Buspirate para funcionar como "bridge" entre a Beaglebone Black e o PC. Com tudo perfeitamente conectado e configurado, liguei a beaglebone black e contemplei o boot do Angstron Linux, (conforme a figura abaixo) distribuição a qual vem instalada na eMMC da plaquinha com diversos recursos.


Assim que realizar mais testes, vou postando.








quarta-feira, 3 de outubro de 2012

Caixa de Tiro - Equipamento Geofísico

     Durante a minha graduação na Unipampa tive a oportunidade de pesquisar, desenvolver e montar um equipamento geofísico sob a orientação do Prof. Dr. Fábio André Perosi (Atualmente UFRJ). Sendo que o projeto foi financiado pelo CNPq e também recebeu suporte do Prof. Dr. Reinhardt Fuck (UNB) coordenador do INCT de Estudos Tectônicos.

     A idéia do projeto surgiu da necessidade de um controle preciso do tempo de detonação da fonte de energia utilizada nos ensaios de sísmica de refração profunda, pois os equipamentos utilizados na primeira fase do projeto em 2008 foram emprestados pelo programa PASSCAL (Program for the Array Seismic Studies of Continetal Lithosphere)  que é uma das facilidade oferecidas pela comunidade sismológica internacial pelo consorcio norteamericano IRIS (Incorporated Research Institutions for Seismology).

     A partir de pesquisas preliminares, decidiu-se que o protótipo do equipamento proposto seria dividido em módulos, para facilitar o desenvolvimento e a conexão destes. O aparelho é constituído de um microcontrolador, memória eeprom externa, um módulo LCD (display), uma unidade GPS, um circuito de comunicação serial/USB, teclado matricial de programação e uma fonte de alimentação dimensionada para o equipamento.






    O módulo GPS (Global Position System) tem por finalidade prover o horário UTC (universal time clock) para o microcontrolador, este por sua vez utiliza um cristal de quartzo para incrementar o horário automaticamente sem a necessidade de ficar lendo o GPS, isto é necessário, pois os registradores sísmicos são sincronizados também por GPS. 
    
Tanto o hardware como o firmware foram desenvolvidos para com que a caixa trabalhe em dois modos distintos de operação, controlando o tempo de detonação e como registrador de tempo por pulso externo. No primeiro caso a caixa recebe uma programação de no máximo 50 janelas (horários pré-determinados) de detonação via porta USB ou por teclado, quando este horário se iguala ao do relógio interno da caixa, é enviado um pulso elétrico a um circuito de potência e que por meio de um seletor possibilita ao operador escolher 11 configurações de corrente a qual mais se adequa ao tipo de arranjo detonador (cabo+espoleta elétrica) utilizado

    Para maior segurança a caixa é dotada de um gatilho onde só ocorrera a detonação se este estiver acionado, presencialmente, no horário pré-programado, após a detonação a caixa automaticamente atualiza novamente o seu relógio interno através do GPS, repetindo este processo a cada detonação.
     
     Se por algum motivo a detonação for abortada pelo operador será possível realizar uma nova detonação a partir de dois modos, primeiramente inserindo uma janela de backup para cada um dos horários de detonação pretendidos na programação inicial da caixa, ou através de uma nova programação em campo via teclado ou por USB sem afetar a seqüência das outras janelas.
    Ainda para este modo a caixa disponibiliza uma saída opto-acoplada para ser ligada diretamente ao trigger de sismógrafos, possibilitando a estes iniciar o registro no momento exato da detonação.
     O segundo modo de operação consiste em monitorar uma porta conectada a um circuito externo de detonação, na hora em que esta porta receber um pulso a caixa irá armazenar na eeprom externa o horário exato do pulso, possibilitando assim ao operador recuperar estes dados utilizando a porta USB ou visualizando-os através do display LCD.
    Em ambos os modos de operação é possível armazenar ou somente visualizar a localização dos pontos de tiro (local onde se encontra a caixa) a partir das coordenadas disponibilizadas pelo módulo GPS (Datum WGS84) incluso no circuito.
    Como foi verificado em laboratório o funcionamento adequado do protótipo, foram confeccionadas as placas de circuito impresso, possibilitando a montagem da versão final de todo o circuito eletrônico. A partir disto deu-se inicio a faze de montagem e acabamento da caixa, bem como a faze de testes em campo.  




Para mais informações entre em contato!