segunda-feira, 30 de junho de 2014

Instalando o plugin do Java no Ubuntu 14.04

Esse micro-tutorial mostra o passo a passo para a instalação do Plugin do Java no Ubuntu 14.04. Usei a versão 64 bits.

1. Baixe a versão mais atualizada da JRE em http://java.com.
Obs: Eu prefiro sempre baixar o arquivo .tgz.
Após o download você terá o arquivo da JRE no diretório Downloads, e o nome dele será algo como jre-7u60-linux-x64.tar.gz.

2. Descompacte no diretório /usr/lib/jvm
Surgirá um subdiretório com o nome similar a jre1.7.0_60.
Obs.: Naturalmente, você precisará de permissão de root para isso.

$ sudo su -
# cd /usr/lib/jvm
# tar -zxvf /home/<usuario>/Download/jre-7u60-linux-x64.tar.gz

3. Inicie o Firefox e desabilite as extensões do Ubuntu: clique no menu "Ferramentas->Complementos" (ou use Ctrl-Shift-A), clique em "Extensões" e desabilite todas as que estejam relacionadas com Unity. No meu caso:

  • Ubuntu Firefox Modifications
  • Ubuntu Online Accounts
  • Unity Desktop Integration
  • Unity Websites Integration
4. Feche o Firefox e verifique se existe o diretório /usr/lib/mozilla/plugins. Se não existir, crie-o:

# mkdir -p /usr/lib/mozilla/plugins

5. Entre no diretório e crie o link para a biblioteca dos plugins:

# cd /usr/lib/mozilla/plugins
# ln -s /usr/lib/jvm/jre1.7.0_60/lib/amd64/libnpjp2.so

6. Inicie novamente o firefox e veja se o plugin está ativo. Para isso, clique na caixa de endereços e digite "about:plugins" (sem as aspas) e tecle enter. Deverá aparecer na página a referência ao plugin do Java:

Java(TM) Plug-in 10.60.2

Arquivo: libnpjp2.so
Caminho: /usr/lib/jvm/jre1.7.0_60/lib/amd64/libnpjp2.so
Versão: 10.60.2
Status: Ativo
Next Generation Java Plug-in 10.60.2 for Mozilla browsers

Ok, o plugin foi instalado. Ao acessar qualquer página que exija o uso do plugin, o Firefox por segurança perguntará se você deseja executá-lo. Basta permitir a execução e o plugin faz o resto.

sábado, 28 de junho de 2014

Arduino: Gerenciando Bibliotecas (parte 1)

Uma das tarefas de quem programa para Arduino é gerenciar suas bibliotecas. Normalmente é uma tarefa simples, mas nem sempre intuitiva.

Nesse mini-artigo, listo algumas tarefas e o passo-a-passo relacionado a elas.

1. Criar uma biblioteca.

Em minha opinião, a melhor forma de se criar uma biblioteca para o Arduino é usar seu editor de programas preferido. O ambiente de desenvolvimento do Arduino foi projetado para criar Sketches, e não bibliotecas.

1.1 Crie um diretório com o nome da biblioteca, por exemplo Testlib.

$ mkdir Testlib

1.2 Crie os arquivos da biblioteca dentro do diretório criado. Nomeie os arquivos como Testlib.h e Testlib.cpp.

1.3 Abra o ambiente de desenvolvimento do Arduino e importe a biblioteca recém criada: Acesse o menu Sketch -> Import Library, e escolha a sua biblioteca. Caso não a visualize, verifique se os nomes foram criados corretamente (somente arquivos .h e .cpp). Numa inclusão correta, surgirá a linha abaixo no sketch:

#include "testlib.h"


1.4 Usando o ambiente de desenvolvimento, compile a biblioteca. Caso surjam erros, volte a editar os arquivos da biblioteca com seu editor de programas.

Para maiores detalhes, ver referência abaixo.

ReferênciaWriting a Library for Arduino

2. Adicionar uma biblioteca de terceiros

Muitas vezes, temos de baixar e instalar bibliotecas de terceiros para certos projetos. Recentemente adquiri um sensor DHT11 (humidade e temperatura) e tive de baixar a biblioteca que o gerencia.

2.1 Baixando os fontes:

Acesse o link http://playground.arduino.cc/main/DHT11Lib, copie os fontes dht11.h e dht11.cpp, salvando como arquivos texto.

2.2 Crie um diretório chamado DHT11 e copie os arquivos para ele.

2.3 Mova o diretório DHT11 (e os arquivos internos) para a pasta das bibliotecas do Arduino.

2.4 Abra o ambiente de desenvolvimento do Arduino e importe a DHT11: Acesse o menu Sketch -> Import Library.

Se tudo foi feito corretamente, surgirá a linha #include <dht11.h> no sketch automaticamente.

Esse é o método manual de instalar bibliotecas. O link a seguir detalha o método automatizado de instalação: http://arduino.cc/en/Guide/Libraries.

3. Incluindo uma biblioteca dentro de outra

Falamos até agora um pouco sobre a criação e instalação de bibliotecas para o Arduino. Agora descreveremos um "arremedo técnico" para que possamos referenciar elementos de uma certa biblioteca dentro de outra.

Esclarecendo o problema: recentemente, trabalhando num projeto de hexápode, tentei incluir a biblioteca "Servo" dentro de uma biblioteca que criei. Minha surpresa foi verificar que não era possível fazer isso. O ambiente de desenvolvimento do Arduino não traz facilidades para incluir uma biblioteca para dentro de outra. Tentei várias formas de include: referenciamento global, local etc. Nada deu jeito.

Então, pesquisando um pouco nos fóruns, encontrei uma dica que resolvel facilmente o problema. Basta escrever a biblioteca conforme o item 1. No Sketch criado, apenas inclua ambas as bibliotecas criadas, tendo o cuidado de colocar primeiro a biblioteca base. Por exemplo, se a biblioteca Testlib que criamos precisa acessar elementos da biblioteca Servo e da DHT11, nós simplesmente incluímos no sketch, na seguinte ordem:


# include <servo.h>
# include <dht11.h>
# include <testlib.h> 


sábado, 21 de junho de 2014

Arduino + Servo + Fonte Externa

Faz cerca de um mês que estou lidando com o Arduino. Adquiri um adquiri um Mega 2560 e, desde então tenho realizado algumas experiências. Hoje completei uma que acho digna de colocar nesse blog, pois poderá ajudar outras pessoas que estejam iniciando. Trata-se de um controlador de servo motor que usa um Arduino e uma fonte externa.

Por que usar uma fonte externa?

Alguns projetos utilizam servos que estão acima da capacidade dos pinos de força do Arduino e este fica resetando. Pode ocorrer também de seu projeto precisar de mais de um servo e o arduino não conseguirá gerar energia a todos.

Dessa forma, muitas vezes existe a necessidade de usar fontes externas para a alimentação do(s) servo(s).

Bom. Antes de seguirmos adiante, um aviso importante:

ATENÇÃO: Esse projeto não tem qualquer garantia de funcionar corretamente. Lembre-se que qualquer erro poderá levar a queimar os componentes usados, e até mesmo a placa Arduino. Eu faço meus projetos correndo esse risco. O que mostro aqui, é o que eu fiz e deu certo comigo, mas não posso dar garantias que funcionará com você.

No meu caso, comprei um servo que é potente demais para ser controlado sem fonte externa. É um servo um pouco maior que os comuns que se usam para robótica e o arduino ficava resetando direto. Ao usar a fonte, o sistema funcionou perfeitamente.

O servo usado foi um motorsat, normalmente usado em antenas parabólicas para alterar a polarização. Segundo o site, as especificações desse motor são:

Frequência de sinal: 60HZ(20ms)
Controle de pulso: 0.8 to 2.2ms
Voltagem: DC 5.0v
Ângulo de operação: 180 +10
Corrente: 180 to 200 mA
Velocidade: 0.3 (60/sec.)
Saída máxima de torque: 2.2 to 2.8 kg/cm
Corrente máxima: 580 to 600ma
Funciona com PWM, (modulação por largura de pulso).
Fio vermelho: alimentação 5 v DC.
Fio branco: Pulso
Fio preto: GND terra
Rotação do servo= 40 Rpm.
PESO: 500 Gramas


Dica: Um servo adequado a pequenos projetos em robótica é menor e pode ser alimentado direto pelo Arduino. Esse que utilizei não é o ideal, mas foi o que pude encontrar no mercado local em minha cidade.

Segue abaixo figura mostrando as ligações realizadas:




Nota: Essa figura foi feita com o Fritzing.

Basicamente:

  1. Ligamos os pinos GND e 5V (nesse caso, 4,8V) da fonte externa no servo;
  2. O GND (ground) do Arquino está interligado ao GND da fonte. Isso é necessário para permitir o controle do servo;
  3. Ligamos o pino 9 do Arduino no cabo de controle do motor. É importante usar um pino que tenha capacidade PWM (Pulse Wave Modulation).

Segue abaixo o código utilizado:

#include <Servo.h>

Servo servo1;
int pos = 0;

void setup() {
  servo1.attach (9);
}

void loop() {
  for (pos=0; pos<180; pos++) {
    servo1.write (pos);
    delay(15);
  }
  for (pos=180; pos>=1; pos--) {
    servo1.write (pos);
    delay(15);
  }
}


Esse código implementa apenas uma rotina de Sweep (gira o eixo do servo em 180 graus e retorna 180 graus, indefinidamente). O mesmo foi descaradamente copiado de: http://arduino.cc/en/Tutorial/Sweep

Ligue a fonte externa e carregue o código de teste no arduino. O servo começará a girar 180 graus, em ida e volta.

Os servo-motores são um dos componentes essenciais a inúmeros projetos em robótica. O que foi exposto nesse texto é uma forma extremamente simples de iniciar os estudos com servo-motores e Arduino.

Bons estudos :)

terça-feira, 10 de junho de 2014

Um Linuxer sobre o OSX parte 1

Dia 06/06/2014

Recentemente surgiu-me a oportunidade ímpar de adquirir um Mac Mini usado que um colega estava vendendo: um i7 quad core com 6GB de RAM e 500GB de HD. Fazia algum tempo que eu cogitava comprar um Mac Mini para substituir meu desktop, que mais lembrava um KingKong em meu escritório: gabinete de excelente qualidade, mas absolutamente enorme.

O Mac veio com o RedHat instalado. Esse meu amigo trabalha para a RedHat com virtualização e havia comprado-o para esse fim. Ele disse que esquecera de colocar o HD de 500GB e ficou de trazer na semana seguinte (era uma sexta feira). Assim que cheguei em casa, liguei o MAC e percebi que a interface gráfica não estava instalada. Para poder começar a testar adequadamente, instalei o Ubuntu 14.04 64 bits Desktop. A instalação fluiu de forma absolutamente tranquila, e o sistema operacional detectou todo o hardware, inclusive a interface de rede sem fio, que não funcionava com o RedHat.

Passei o fim de semana usando o pequeno e eficiente hardware: excelente aquisição.

Dia 09/06/2014

Na segunda-feira seguinte, recebi o HD de 500GB e decidi instalar o Mavericks, pois queria ter suporte fácil ao iTunes e Netflix, e começar a testar efetivamente o uso de um MAC OS. Meus pequenos problemas começaram aí...

Round 1: Criar pendrive de boot.

Acostumado com o procedimento fácil e trivial de criar pendrives de boot no Linux, fiquei perplexo com o procedimento muito mais complexo para criar um do Mavericks. Para ter uma idéia, no Ubuntu, normalmente basta baixar a imagem (ISO), abrir o "Criador de Discos de Inicialização", inserir o pendrive e clicar OK. O sistema faz o resto.

Para o MAC, segue esse tutorialEsse outro confirma o mesmo procedimento.  O processo no Linux é inegavelmente muito mais tranquilo.

Após finalizar a criação do pendrive de boot, espetei-o no Mac e iniciei. O Mavericks deu boot corretamente. Após aceitar o contrato de licença, o sistema me mostra uma tela perguntando em que disco eu quero instalar... mas não mostra qualquer disco! Que houve? Na minha personalidade acostumada com a Lei de Murphy imaginei logo que meu colega havia cometido algum erro ao conectar o HD de 500G. Desligo o Mac, abro-o, removo o HD, limpo os contatos, monto-o novamente (após uma longa luta para encaixar a pequena grade metálica que segura o HD e interface wifi). Quando tento novamente a instalação, o mesmo problema: o sistema não encontra o disco.

Para ter certeza, coloco novamente o pendrive de boot do Ubuntu, e magicamente ele reconhece o HD: estava lá, em toda a sua glória o dispositivo /dev/sda.

Antes de continuar essa saga, cabe um pequeno parágrafo de elogios: O Mac Mini é uma pequena obra de arte da engenharia, belíssimamente montada de forma a utilizar cada espaço. Além disso, o hardware consome muito pouco e a carga térmica é extremamente baixa. Inegavelmente a Apple merece os melhores elogios nesse aspecto. Para se ter uma idéia, e deleito dos leitores, segue link para um tutorial do iFixIt, que trata da instalação de um HD no Mac Mini, cheio de imagens deslumbrantes.

Mas voltemos à narrativa..

Novamente fiquei sem entender: por que o Mac não detectava o HD? Achando que eu havia cometido algum erro na criação do pedrive, recorri à instalação via rede: reboot, tecla alt (uso o teclado ABNT), conecto à wifi e inicio a instalação. Nesse caso o Mac força a instalação do Mountain Lion. Sem problemas, se der certo, atualizo para o Mavericks depois. Mas após aceitar o contrato de licença novamente deparo-me com o mesmo problema. Cadê a #$%! do disco ?!?

Tenho de dizer que é um sofrimento ser noob num sistema operacional. Eu, acostumado com as facilidades do mundo Linux, não fazia ideia que era necessário explicitamente recorrer ao utilitário de discos para fazer um particionamento prévio no disco antes de iniciar a instalação (o Linux sugere isso automaticamente). Terminei descobrindo esse detalhe por tentativa e erro. Após isso, a instalação e posterior atualização seguiu tranquilamente. Deixei o sistema atualizando, e como já era quase 2 da madrugada, fui dormir.

Continua ...

-x-x-x-

Dicas do dia:

1. Não crie pendrives de boot. Use o netinstall;
2. Sempre particione o disco antes da instalação.

Minha opinião após essa experiência: Caso não precise de algo proprietário, como iTunes ou Netflix, continue com o Linux ;)

Nos próximos capítulos: a mudança do idioma default e batalha pelo teclado ABNT.