10
jun 12

[Tutorial] Usando a biblioteca Twitter Library for Arduino com OAuth

Nesse tutorial vou mostar como usar a Twitter Library for Arduino, uma biblioteca muito legal para tuitar usando somente um Arduino e um Ethernet Shield.

Esse projeto é MUITO útil e facilitou demais minha vida. Ele possibilita o envio de tweets pelo Arduino sem a necessidade de nenhum desenvolvimento extra para comunicação com a API do Twitter. Bem legal, pois depois que o Twitter adotou o OAuth como protocolo de autenticação, não era mais possível enviar tweets do Arduino somente informando usuário e senha. 🙁

Twitter Library  envia seu tweet à um site (http://arduino-tweet.appspot.com/) hospedado no meu querido Google App Engine (mais detalhes do GAE com Arduino aqui e aqui). Esse site é que é o responsável por enviar o tweet por você. O serviço do site é uma ponte de acesso facilitado a API do Twitter.

Arduino tuitando em 3 passos:

Dar autorização e obter a chave de acesso

Acesse http://arduino-tweet.appspot.com/ e clique no link Step 1 : Get a token to post a message using OAuth.

Esse link abrirá a página do Twitter para você permitir o acesso da aplicação aos recursos da sua conta.

Depois de autorizar você será redirecionado para uma página informando a sua chave de acesso para essa aplicação (como abaixo). É através desta chave de acesso que você utilizará a Twitter Library. Copie essa chave, mas se perde-la basta repetir o processo e copiá-la novamente.

Your token : XXcv3513-qoiw9hSEDnILynutcIqKXx0IZCP44mWm3pgZfM9dH

Instalar a biblioteca na sua IDE Arduino

Baixe o zip da biblioteca aqui, descompacte o zip e copie a pasta Twitter para dentro de ~/Documents/Arduino/libraries (Mac ou Linux) ou para Meus Documentos\Arduino\libraries\ (Windows). Em alguns casos a pasta libraries ainda não está criada, mas a do Arduino, sim. Nesse caso basta criar a pasta libraries no caminho informado e copiar a Twitter lá para dentro.

Se sua IDE estiver aberta, então a feche e abra novamente. Deverá aparecer um menu como mostrado na imagem abaixo.

Criar um programa, configurar e rodar

Para testar basta acessar os menus File > Examples > Twitter > SimplePost. Um exemplo de uso será criado. Inserira sua chave de acesso (obtida lá em cima) no lugar do texto YOUR-TOKEN-HERE.

Importante: Informe um IP válido da sua rede interna. A linha abaixo é o exemplo da lib, e pode não funcionar na sua rede.

byte ip[] = { 192, 168, 2, 250 };

Faça o Upload  (File > Upload) do programa para o Arduino (com a Ethernet Shield conectada, claro! duhhhh). Ao final do upload abra o monitor da porta serial (Tools > Serial Monitor). Se tudo der certo o resultado ficará assim:

Simples, não?

Obs. 1: O Twitter adotou o protocolo OAuth para autenticação das requisições em sua API. Isto permite que terceiros sejam autorizados a acessar determinadas contas do twitter, com permissão do usuário e sem que o mesmo precise saber sua senha ou dados pessoais. Isso mesmo! Nenhuma informação sua será armazenada por esse serviço. Objetivo deste serviço é ser apenas um autenticador e um atalho para a API do Twitter. Assim fica MUITO fácil comunicar o Arduino com o Twitter, não?

Obs. 2: A qualquer momento você pode revogar a permissão de acesso a essa aplicação pela URL http://twitter.com/settings/connections.

Obs. 3: Se você enviar o mesmo tweet mais de uma vez o Twitter irá responder como a mensagem 403. Ele não permite mensagens duplicadas em um curto espaço de tempo, nem que você envie diversas mensagens seguidas. Isso é para evitar spam de tweet 😉

Conclusão

Gostei muito de usar essa lib, principalmente pela possibilidade de enviar um tweet “diretamente” pelo Arduino de maneira bem transparente e simples. Se você já programou alguma integração com a API do Twitter sabe que não é nada complicado, mas dá um certo trabalho inicial. Além disso é preciso manter uma aplicação fora do Arduino para se comunicar. Com a Twitter Library você não precisa se preocupar com isso. Pode dedicar mais tempo somente ao projeto Arduino 😉

Levando em conta que é um projeto apresentado no próprio site do Arduino eu fico bem tranquilo quanto a confiabilidade dessa solução. Agora vou brincar mais um pouco e crio novo post se achar algo interessante.

Espero que tenham gostado.

Abs. Marco.


27
fev 11

Controlando motor DC com Ponte H (L293D) com arduino via porta serial

Preparei esse post para documentar um teste que eu fiz com CI L293D (Ponte H) para controlar um motor DC com arduino, mandando comandos pela porta serial do computador.

O L293D é uma ponte H dupla, isto é, controla até dois motores e faz com que estes rodem nas duas direções. Mas para esse teste eu usei apenas um motor. 😉

Os motores DC são motores de corrente contínua utilizados em brinquedos e pequenos dispositivos, e funcionam a pilha ou baterias. O bom desse tipo de motores é que são muito baratos. Mais em conta que servo-motores, e são facilmente encontrados em brinquedos. Então qualquer brinquedinho velho que tenha motor e funcione a pilha (ou bateria) tem um motor DC dentro. Basta abrir e retirar. 😀 Claro, claro. Espere o brinquedinho do seu filho quebrar, né. Ou ele perder o interesse e não se lembrar mais daquele carrinho 😉

Mas se seu filho não larga do carrinho ou sua filha não desgruda da boneca, não se incomode. Qualquer boa loja de 1,99 tem vários brinquedinhos legais bem baratinhos prontos para desmontar.

Aí você pode me perguntar. — Porque não comprar logo motores DC em uma loja de eletrônica? É uma ótima opção se você sabe o quer fazer, esse não é o meu caso.

Eu estou fazendo várias experiências e não sei bem o que vou precisar. Sendo assim um brinquedo desses me facilita muito a vida. Os motores DC tem um giro muito alto, e os carrinhos têm sempre caixas de redução com engrenagens para fazer com que os motores entreguem mais força e menos velocidade. Outra coisa boa são as rodas.

Por exemplo: Com R$ 25,00 eu comprei dois carrinhos no supermercado Extra. Com esse valor consegui quatro motores DC, duas caixas de redução para os motores, dois compartimentos para três pilhas, dois eixos para fazer curvas (não sei o nome disso :/ ), oito rodas de borracha de bom tamanho, e mais um monte de componentes eletrônicos que posso reaproveitar. Foi ou não, um bom negócio?

O maior problema de um motor DC é fazê-lo girar para os dois lados. Para isso se usam pontes H. Nos carrinhos elas vem todas soldadas junto com gambiarras chinesas. Não dá para usar. Então temos basicamente duas opções: Construir uma ponte H na unha com transistores e diodos de protecção, e fazer várias ligações, bla bla bla o que é bem complicado. Ou usar um CI que já é uma ponte H completinha, pronta pra uso. Como eu sou um grande preguiçoso escolhi usar o CI L293D que é bem barato (no eBay é ainda mais barato). O L293D dispensa o uso de diodos para tensão reversa dos motores. Basta ligar aos motores. Show!

Eu segui esse tutorial do site Makebits. Tinha pensado em fazer um parecido nesse post, mas o deles está realmente bem explicado. Nada a melhorar.

Vale ressaltar que o circuito só funciona bem com o arduino ligado a uma fonte externa de alimentação. Se estiver ligado somente pela alimentação via USB o motor não gira bem, ou o programa não funciona corretamente. Eu usei uma bateria de 9v.

Para testar o circuito eu fiz um programa para fazer o motor girar para a esquerda e para direita quando eu digitasse no teclado “d” e “e”, respectivamente. Qualquer outra letra faz o motor para de girar.

Eu gravei o motor em ação com a colaboração da minha filhota Gabriela. Ela explica tudo direitinho. Tá! Eu sou babão mesmo, eu sei :p

Segue o programa:

int motorPin1 = 5;
int motorPin2 = 6;
int entrada = 0;

void setup() {
 Serial.begin(9600);
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
}

void loop() {

 // testa se a porta serial está disponível
 if (Serial.available() > 0) {
 // le os dados da porta serial armazena na variavel 'entrada'
 entrada = Serial.read();
 if (entrada == 'e'){
 esquerda();

 } else if (entrada == 'd'){
 direita();

 } else {
 parar();

 }
 }
}

void esquerda(){
 digitalWrite(motorPin1, 1);   // Motor para a esquerda
 digitalWrite(motorPin2, 0);   //
}

void direita(){
 digitalWrite(motorPin1, 0);   // Motor para a esquerda
 digitalWrite(motorPin2, 1);   //
}

void parar(){
 digitalWrite(motorPin1, 0);   // para o motor
 digitalWrite(motorPin2, 0);   //
} 

Bom é isso. Quando fizer o teste com dois motores eu faço outro post.

Espero que esse post tenha sido útil.

Abs.


08
ago 10

Comunicação Serial com Ruby e Program-ME (Arduino) no Ubuntu

Nesse post eu vou demonstrar como usar Ruby para fazer a comunicação entre um Arduino e um computador através da porta serial. No meu caso eu vou usar um Program-ME, que é o Arduino-Like da Globalcode. Mais detalhes do Program-ME podem ser vistos aqui, aqui, aqui, aqui e aqui. Tá bom, né? :p

Vou partir da premissa que você já tem o Ruby instalado e atualizado. Com as gems (RubyGems) e tudo, ok? O objetivo desse post não é ensinar a instalar e configurar o Ruby, e sim usá-lo com a porta serial do seu computador. Mais informações sobre como instalar o Ruby podem ser obtidas aqui, e as ruby gems aqui. Caso tenha tenha alguma dúvida ou problema nessa parte pode me enviar sua dúvida que vou tentar ajudá-lo.

Instalar SerialPort

Ruby-SerialPort é uma biblioteca que fornece facilidades para utilização das portas seriais do computador (padrão RS-232) usando Ruby.

Existem outras formas de acessar as portas seriais como JARs para aplicações Java, DLL para Windows, e várias outras maneiras. Mas para aplicações Ruby essa biblioteca é a mais usada e a que possuí melhor documentação, então fiquemos com ela.

Abra o terminal (Crt+Alt+T) e execute o comando abaixo para atualizar as gems:

sudo gem update

Para instalar a biblioteca SerialPort execute o seguinte comando.

 sudo gem install serialport

Vamos testar a instalação da biblioteca fazendo o seguinte:

Execute o irb.

Agora execute os comandos abaixo no console do “irb”. Se a resposta for “true”, então a biblioteca foi instalada corretamente.

require 'rubygems'
requile 'serialport'

Comunicação com o Program-ME / Arduino

Com a biblioteca instalada e testada vamos ver seu funcionamento com o Program-ME.
Vou fazer um teste usando os LEDs do Program-ME que estão nas portas digitais 7 e 8.
Um programa bem simples que irá tratar as informações recebidas através da porta serial. Irá acender os LEDs 7 e 8, se a porta serial receber ‘A’ ou ‘B’, respectivamente e apagar se a porta receber ‘a’ ou ‘b’.
int led_A = 7;
int led_B = 8;

void setup() {
  Serial.begin(9600);
  // define as portas como saida
  pinMode(led_A, OUTPUT);
  pinMode(led_B, OUTPUT);

}
void loop() {
  // testa se a porta serial está disponível
  if (Serial.available() > 0) {
    // le os dados da porta serial armazena na variavel 'entrada'
    int entrada = Serial.read();
    switch (entrada) {
    case 'A':
      digitalWrite(led_A, HIGH); //acende led_A
      break;
    case 'B':
      digitalWrite(led_B, HIGH); //acende led_B
      break;
    case 'a':
      digitalWrite(led_A, LOW); // apaga led_A
      break;
    case 'b':
      digitalWrite(led_B, LOW); // apaga led_B
      break;
    }
  }
}

Agora vamos ao programa Ruby.

require 'rubygems'
require 'serialport'

sp = SerialPort.new "/dev/ttyUSB0"

# use "while true do" se quiser executar sem parar
for i in 1..10 do
	sp.write "A"
	sp.write "b"
	sleep 1
	sp.write "a"
	sp.write "B"
	sleep 1
end

Para executar o programa execute a seguinte na linha de comando: ruby <nome_do_arquivo>.rb. No meu caso ficou assim.

ruby envia_dados_serial.rb

O programa vai apagar e acender alternadamente os dois LEDs por 10 vezes. Tudo muito simples, mas vamos a algumas explicações.

Na linha “4” a classe “SerialPort” irá criar o objeto responsável pela comunicação serial e passamos o endereço da porta serial como parâmetro. No meu caso é a “/dev/ttyUSB0”, mas poderia ser “/dev/ttyS1” ou até mesmo “COM7” no caso do Windows (Sim. Funciona no Win). Nessa linha também podemos definir a taxa de dados (rate)  por segundo para transmissão de dados serial. Por padrão o “SerialPort” utiliza “9600”, por isso não precisamos declarar explicitamente, mas poderia fazer algo assim: sp = SerialPort.new “/dev/ttyUSB0”, 9600. Mas deve ser a mesma que o programa do Program-ME/Arduino está configurada.

Já o comando “write” envia o texto para a porta serial configurada.

Você pode dizer: Pô! Mas porque testar com dois leds? O Arduino só tem um.

Bom! Por dois motivos: Primeiro. Eu achei o efeito com os dois LEDs mais legal. Mas é claro que você pode usar somente o LED na porta 13 do Arduino apagando as linhas desnecessárias, ou até mesmo usar duas portas digitais e fazer igual. Fica à seu critério. Segundo. Para mostrar, de novo, como esse Program-ME é bacana e facilita muito esse tipo de teste.  (Fight! Program-ME Wins) rsrsrsrsrs

Esse mesmo teste pode ser feito usando o “irb” diretamente. Como exemplificado abaixo.

Pretendo fazer um vídeo para demonstrar esse programa. Aguardem…

Conclusão

Tudo muito fácil. Bem a cara do Ruby, né?

Fiz o mesmo teste usando Java, e deu um “pouco” mais de trabalho. ;). Eu também pretendo fazer um post parecido mostrando como fazer a configuração da porta serial e a comunicação, só que usando Java. Mas vai ficar pra um mais tarde.

Espero que o post tenha sido útil

Abs.


08
jul 09

Introdução a API JAXB 2

Segue um pequeno artigo que fiz para o Portal Java.

Ele mostra com trabalhar com a API JAXB.

A JAXB é uma das APIs da plataforma Java EE que fornece suporte à manipulação de objetos Java e XML.

Sua principal característica é a capacidade de vincular XML a objetos Java e vice-versa.

http://www.devmedia.com.br/articles/viewcomp.asp?comp=11547

Espero que aproveitem.

Abs,  Marco.