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.


28
maio 10

Program-ME vs Arduino – Fight!

A idéia de fazer esse post surgiu a partir de uma pergunta no forum da comunidade do Program-ME no Ning. Um companheiro queria saber a diferença entre um Arduino padrão e o Program-ME antes de investir em um produto.

Nosso companheiro José Luiz respondeu muito bem a dúvida, mas achei que a resposta merecia um complemento. Decidi então dar meus 10 centavos, e dei a opinião de quem está começando nessa cachaça de eletrônica 😉 e encontrou no Program-ME um dispositivo pronto pra briga. Minha resposta foi mais ou menos assim:

Posso te afirmar que isso tudo de bom que o Luiz escreveu para mim se resume em uma coisa: Muita coisa pronta para colocar a mão na massa 😉

Já fiz vários testes e brincadeiras só com o Program-ME. Sem precisar comprar nenhum componente extra.

Daí me veio a idéia de comparar os dois produtos em alguns testes básicos. Existem muitos tutoriais de como testar o Arduino com LED, PWM, LDR e outras coisas. Todos também se aplicam ao Program-ME, já que ele é 100% compatível com o Arduino. Mas a diferença que o produto da Globalcode foi pensado para ser o mais didático e fácil possível no ensino da computação física e na criação de experimentos em eletrônica. Então vamos ao que interessa.

Usando LDR

Nesse primeiro FIGHT eu vou comparar os dois dispositivos numa implementação usando um LDR.

Como eu não tenho um Arduino eu decidi colocar aqui um post bem didático do blog do Andre, que demonstra como usar o Arduino com um LDR. O post está bem legal. Muito bem explicado. Possui a lista de materiais necessários, detalhes do circuito que será criado, o programa para executar o teste, e como fazer o upload do programa e executar o teste. Show de bola! Mas percebam a quantidade de coisas que devem ser feitas para o programa funcionar.

O programa (abaixo) foi bem comentado pelo autor, e basicamente acende ou apaga o LED, se o LDR receber pouca ou mais luz, respectivamente (linhas 17 a 21).

/*# PROGRAMA ELABORADO POR ANDRED. #*/

int valor = 0;    // Variavel onde e guardado o valor lido do LDR
int led_pin = 13;  // Pino onde vamos ligar o LED
int analogin = 5; // Pino onde vamos ligar a LDR

void setup(){
  Serial.begin(9600); // Inicia A comunicação da porta Serial para que possamos ver o valor do LDR
}

void loop(){
  valor = analogRead(analogin); // O valor que irá ser lido na porta analogica numero 6 irá ser guardado na variavel “valor”
  Serial.print("O valor Da LDR e igual a: ");  // Mostrar na consola a frase “O valor Da LDR e igual a: “
  Serial.println(valor); // Mostras no Serial Monitor o valor da variavel “valor”
  delay(25); // Faz uma pequena pausa de 25 Mili Segundos

  if (valor < 300) { // Se a variavel valor for menor que 300
    digitalWrite(led_pin, HIGH); // acende o led da porta 8
  } else {
    digitalWrite(led_pin, LOW);
  } // se for maior mantem o led da porta 8 apagado

}

Agora pergunto. E se você não tem toda a lista de materiais e está doido para brincar? Quanto tempo ele gastou para finalizar esse experimento só para ver se o programa funcionava? Ou outro impeditivo qualquer. No caso do Arduino você terá, quase que necessáriamente, que seguir os passos que o André indicou, pois essas são as etapas básicas para brincar com Arduíno + LDR.

Agooooora, se você tem um Program-ME faça assim:

Viram a diferença?

Usando o Program-ME eu concluí o mesmo teste em menos de 1 minuto.

Eu só precisei fazer o upload do programa dele para o Program-ME e pronto. A plaquinha vem preparada para a batalha!! Já vem com 9 leds, 1 speaker, 2 entradas para conectar servo motores, 2 entradas para conectar pontenciometros, sensores de distância analógicos, 1 botão, e o já conhecido sensor de luminosidade (LDR), e etc..

Isso facilita muito, pois tudo já está soldado e testado, e economiza nossa grana e nosso tempo, pois já está comprado e nenhum investimento adicioal é necessário.

Claro que se vamos criar nosso próprios projetos e inventar trapizongas, então mexer com solda, protoboard, e etc é necessário, e até muito legal 😉 Mas eu acho muito legal poder fazer vários testes e brincadeiras (principalmente para estudar a linguagem de programação) sem precisar estar à volta com fios, solda, e outras coisas só para fazer uma brincadeirinha.

Program-ME WINS

Não quero dizer que o Program-ME é melhor que “x” ou “y”, até porque não ganho comissão, nem nada. Essa é a opinião de uma pessoal que encontrou tudo que precisava em um produto, e até agora está muito satisfeita com tudo. A qualidade do dispositivo é excelente e o atendimento da GC é ótimo.

Vou tentar colocar mais alguns “fights” entre os dois dispositivos mais para frente, mas para começar tá bom.

Fico por aqui.

Abs.


03
abr 10

Começando no mundo da eletrônica – Arduíno / Program-ME

Desde muito novo sempre me interessei por eletrônica e automação. Talvez seja por influência do meu pai, que é engenheiro, e sempre criava várias “trapizongas” para eu brincar. Nunca esqueço do dia em que ele fez uma lancha para eu brincar na piscina com um motorzinho, uma sandália de dedos velha e um pedaço de madeira. A hélice era feita com tubo de pasta de dentes (naquela época os tubos eram de metal… faz tempo 😉 ). Essa engenhoca e outras, e alguns aparatos que ele trazia do trabalho, sempre me fascinaram.
Por outro lado eu sempre gostei muito de computadores e programação, então na época de escolher uma profissão decidi estudar informática. Deixei a eletrônica de lado, mas nunca me esqueci desse meu desejo.

Conhecendo o Arduino

Ano passado “navegando” pela internet me deparei como projeto Arduino, que é uma plataforma open-source para criação de protótipos eletrônicos, criado por um professor italiano chamado Massimo Banzi. O objetivo de Banzi era incentivar a computação física, cujo conceito é aumentar as formas de interação física entre as pessoas e os computadores. Uma grande idéia!

O mundo Arduino é GIGANTE e fascinante. Tem tudo para quem gosta de eletrônica e possibilita uma infinidade de projetos. Do mais simples (para os iniciantes – meu caso), até o mais complexo (para os profissionais).

Através de suas características é possível integrá-lo com diversos dispositivos, como display LCD, sensores de luz, GPS, motores (DC, de passo, servos), leds, e por aí vai. É possível criar projetos de robôs, automação residencial, arte tecnológica, ensino e educação, e até mesmo integrá-lo com iPhone, celulares, Sun Spot, etc..

A linguagem de programação padrão é essencialmente C/C++, e sua IDE para desenvolvimento é feita em Java. Então podemos desenvolver para Arduino em qualquer plataforma. E funciona sem problemas. Não é uma IDE maravilhosa, e tal, mas é boa para o que se propõe.

Program-ME

Como todo o projeto do Arduino (hardware e software) seguem padrões open-source, existem vários fabricantes de modelos Arduino-Like em todo o mundo. No Brasil temos alguns modelos de Arduino, como: Tatuino, Severino, Modelixino, e o Program-ME da Globalcode. Esse último foi o meu escolhido para começar a brincadeira.

O Program-ME é ideal para mim, que estou iniciando, pois tem vários facilitadores já embutidos nele, por exemplo os leds, speaker, sensor de luz, etc.. Não é necessário comprar e ligar leds à plaquinha para começar a fazer umas brincaderiras, pois o Program-Me já vem com 9 delas. Bom, né?

Program-ME é:

  • Um instrumento didático criado originalmente para a Academia do Programador da Globalcode que pode ser utilizado por qualquer pessoa que queira aprender sobre Robótica, Eletrônica, Automação Residencial, Tecnologia aplicada à arte e mil outras coisas;
  • É um dispositivo de hardware baseado em Arduino, que também é aberto!
  • Tem leds, potenciômetro, sensores e outros componentes;
  • Você poderá comprar um Program-Me pronto na Globalcode ou simplesmente baixar a especificação, ir até à Santa Efigênia (ou similar) e montar o seu;
  • Tem como objetivo democratizar o conhecimento sobre eletrônica + programação + internet;
  • Utilizado para incentivar o desenvolvimento da computação física e comunidade Arduino no Brasil;

Sou fã do pessoal da Globalcode a muito tempo (eles são referência no mundo Java), e eles não decepcionaram.

Comprei um Program-ME e veio completinho. Chegou numa caixinha super bacana, com o cabo USB para comunicação e um manual de instruções encadernado. Parabéns a toda a equipe da Globalcode. O material é de primeira, e o atendimento foi super atencioso e prestativos. Recomendo!

AH! Eles também criaram um blog (Elétron Livre) para divulgar as novidades do projeto, e uma rede social no Ning (Globalcode Program-ME) para o pessoal colaborar, tirar dúvidas e divulgar seus projetos.  Show de bola!!!

Já estou brincando com ele e pretendo ir colocando minhas brincadeiras por aqui. Já tenho algumas idéias e vou tentar realizá-las com a ajuda do Program-ME. Esperem pra ver. rsrsrsr

Como diz manual do Program-ME:

Arduino é simples, fácil de programar e barato. Motivos mais que suficientes para fazer uma comunidade crescente no mundo todo.

Acho que agora eu realizo meu sonho!!! \o/