26
jul 13

Projetos impressionantes com Raspberry Pi

Raspberry PiOi, Amigos

Comecei a brincar com o Raspberry Pi a pouco tempo e achei a plataforma fantástica. Participei do hackthon de Raspberry no TDC 2013 e lá desenvolvemos alguns projetos muito legais usando RPi (como ele é carinhosamente apelidado). Nossa equipe criou um projeto, em um dia, chamado Pet-O-Matic, que basicamente carregava de ração a vasilha do seu animalzinho recebendo comandos via Twitter. Irei criar um post com mais detalhes (fontes e vídeos) do projeto em breve.

Mas o importante é que com o RPi é possível unir o poder de processamento de um computador comum com a conectividade de um Arduino, por exemplo. Controlar periféricos usando Python e Java nativamente rodando Apache e/ou Tomcat. Ou algo mais poderoso com um Oracle Embeded Suite 8-O. E por aí vai. Um sonho para qualquer geek de plantão.

Para vocês terem uma ideia do potencial do RPi aqui vai um link com 20 projetos impressionantes feitos com ele.

Espero que curtam 😉

Abs.

Marco.


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.


05
nov 11

Robótica e PHP com Arduino @ PHPn’Rio 2011

Esse post é para divulgar o material que eu e a Desireé usamos na nossa palestra no PHP’n Rio 2011. O evento foi ótimo, com palestras interessantes 😉 , mini cursos e uma área para temas livres. Muito bom mesmo. O pessoal da organização está de parabéns. Obrigado ao Ralphael Almeida pelo convite.
Aqui está o link para o meu Github para o download dos fontes do projeto e a apresentação.
Abs, Marco

06
set 11

Palestra on-line sobre Arduino e Computação nas Nuvens

Para quem gostou do meu post sobre Robótica e Computação nas Nuvens, no qual eu disponibilizo os slides que eu usei em algumas apresentações e os fontes do projeto, segue abaixo o vídeo gravado da webinar que eu dei no site Laboratório de Garagem dia 23/08/2011. Explico bem rapidinho (por causa do tempo) como integrar o arduino com apps em cloud computing, e no fim eu mostro o braço robô funcionando ao vivo. A galera controlou o bichinho on line via internet. Foi bem legal!

Tem uma participação muito especial dos meus cachorros latindo MUITO e me aporrinhando, mas acho que ficou legal 😉

Espero que gostem.

Abs.


02
jul 11

Robótica e Computação nas Nuvens

Aí estão os arquivos da palestra que eu fiz no FISL 12 e no TDC 2011 sobre Arduino, Robótica e Computação nas Nuvens.

Update: também apresentei no CEFET Summer of Code em 29/07 😉

Abaixo da apresentação estão os fontes dos projetos que eu criei para demonstrar o uso do Google App Engine e o Arduino.

Vídeo do braço robô em ação

http://www.youtube.com/watch?v=3xjVs3T-rpk

Projeto web

Criado com criado com Google App Engine
Projeto Eclipse: Clouduino.zip
Usa o plugin do Google App Engine para eclipse.

Programa local

Programa que roda localmente e lê as informações da aplicação web..
Projeto Netbeans: ClouduinoLocal.zip
Usa a lib Jettison 1.2 para ajudar no parse do JSON.

Programa Arduino

Lê a porta serial e executa o comando enviado.

#include

Servo myservo1;
Servo myservo2;
Servo myservo3;

int pinServo1 = 10;
int pinServo2 = 11;
int pinServo3 = 9;
int velocidade = 5;
int pos;
int entrada;

void setup()
{
  myservo1.attach(pinServo1);
  myservo2.attach(pinServo2);
  myservo3.attach(pinServo3);

  myservo1.write(180);
  myservo2.write(0);
  myservo3.write(90);

  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) {
    while (Serial.available()>0) {
      entrada = Serial.read();
      Serial.print(entrada);
      delay(1);
    }
      if (entrada == '1'){
  	sobe();
      } else if (entrada == '2'){
  	desce();
      } else if (entrada == '3'){
  	esquerda();
      } else if (entrada == '4'){
  	direita();
      } else if (entrada == '5'){
  	abre();
      } else if (entrada == '6'){
          fecha();
      } else {

      }
  }
}
void desce(){
   for(pos = 0; pos < 180; pos += velocidade) {                                          	       myservo1.write(pos);         	       delay(10);                                }    }    void sobe(){          for(pos = 180; pos>=1; pos-= velocidade) {
     myservo1.write(pos);
     delay(10);
  }
}
void esquerda(){
  for(pos = 0; pos < 180; pos += velocidade) {                                          	     myservo2.write(pos);         	     delay(10);                               }    }    void direita(){       for(pos = 180; pos>=1; pos-= velocidade) {
    myservo2.write(pos);
    delay(10);
  }
}
void abre(){
  for(pos = 0; pos < 90; pos += velocidade) {                                          	      myservo3.write(pos);         	      delay(10);                               }    }    void fecha(){           for(pos = 90; pos>=1; pos-= velocidade) {
       myservo3.write(pos);
       delay(10);
  }
}