terça-feira, 9 de março de 2010

Bússola Digital com sensor de temperatura e umidade utilizando o Program-Me da Globalcode.


Neste post descrevo como é simples conectar sensores tipo bússola, temperatura e umidade ao Program-Me utilizando a interface I2C, e construir uma interessante bússola digital com display LCD gráfico.

O chip ATMEGA utilizado em todos os Arduinos possui uma interface muito interessante chamada I2C . Essa interface permite a conexão de diversos sensores, memórias EEPROM e inclusive outros Arduinos utilizando apenas dois fios além do terra (GND). Essa interface funciona como um barramento onde cada dispositivo tem um endereço e o dispositivo mestre, neste caso o ATMEGA, controla o acesso aos demais dispositivos denominados escravos.

Para aprender mais sobre esta interface recomendo os links abaixo:

http://www.arduino.cc/playground/Learning/I2C

http://www.nxp.com/acrobat_download2/literature/9398/39340011.pdf (especificação da interface)

Neste projeto utilizei dois sensores, um magnético que utiliza o chip HMC6352 da Honeywell e um sensor de temperatura e umidade que utiliza o chip SHT-15 da Sensirion, sendo que ambos são compatíveis com a interface I2C, apesar de que o SHT-15 não é endereçável por esta interface, porém pode conviver com os outros dispositivos no barramento I2C desde que isso seja gerenciado pelo software.





Para exibir as informações dos sensores foi utilizado um display LCD gráfico de 128x64 pixels em conjunto com a biblioteca KS0108.

O interessante da biblioteca KS0108, é que podemos transferir imagens para o display com apenas uma linha de comando.
Para isso a imagem .BMP deve ser convertida por um sketch de Processing chamado glcdBitmap, em um arquivo hexadecimal que será utilizado pela biblioteca para identificar quais são os pixels do display que devem ou não ser ativados.
Ai é só incluir o arquivo gerado no seu programa e utilizar quando necessário.

Existe um programa chamado FASTLCD que ajuda muito na construção das telas gráficas.
Na figura abaixo temos o layout da tela deste projeto sendo construída no FASTLCD.



Após construir a tela no FASTLCD devemos salvar o arquivo .BMP no diretório “..\hardware\libraries\ks0108\Processing\glcdBitmap\data” que fica dentro do diretório da IDE do Arduino.

Com o arquivo BMP salvo no diretório acima, abrimos na IDE de Processing o arquivo “..\hardware\libraries\ks0108\Processing\glcdBitmap\glcdBitmap.pde”



Então é só editar a linha abaixo colocando o nome do seu arquivo .BMP no lugar de “ArduinoIcon.bmp”

String sourceImage = "ArduinoIcon.bmp"; // mude esta linha para o nome do seu BMP

Ao executar este Processing, será gerado um arquivo nomedoseuBMP.h no diretório “..\hardware\libraries\ks0108\Processing\glcdBitmap” correspondente a imagem.

Então basta no inicio do seu programa incluir a figura com o comando do exemplo abaixo:

#include "Layout_bussola.h"

E depois para exibir a figura no display basta dar o seguinte comando:

GLCD.DrawBitmap(Layout_bussola, 0,0, BLACK); //desenha layout básico do display para bussola.

IMPORTANTE: Caso apresente falha na compilação do seu programa, será necessário copiar o arquivo .h do diretório “..\hardware\libraries\ks0108\Processing\glcdBitmap” para o diretório “..\hardware\libraries\ks0108”

O método GLCD.DrawBitmap permite especificar a partir de qual pixel será carregada a imagem, então para alterar as direções da bússola, criei 8 bitmaps diferentes (figuras abaixo) com resolução 64x64, ou seja, somente a metade direita do display e carrego elas a partir do pixel 64,0 conforme o valor recebido do sensor magnético HMC6352.















Com isso o trecho do programa que atualiza a indicação da bussola no display fica bem simples.

Na foto abaixo temos todo o conjunto montado em um protoboard e mais abaixo temos dois vídeos demonstrando o funcionamento do circuito.



Obs: As bússolas por padrão apontam sempre para o norte, porém neste projeto configurei de forma que seja indicado pela seta o rumo que estamos seguindo sendo que o NORTE fica fixo a frente. Para operar no modo padrão, bastaria criar as imagens com o norte acompanhando a ponta da seta e rotacionar no sentido oposto ao que esta sendo feito. É possível também conectar uma chave em uma das portas do Program-Me e com isso seria possível selecionar o modo de operação da bússola.

O próximo desafio é adaptar a biblioteca KS0108 para trabalhar com display serial, assim não ocuparemos tantas portas só para o display.


Ache outros vídeos como este em Globalcode Program-ME



Ache outros vídeos como este em Globalcode Program-ME

segunda-feira, 22 de fevereiro de 2010


Mini Robô circular utilizando PROGRAM-ME 


Depois de ver alguns projetos de robôs do Vinicíus e de alguns colegas deste blog, resolvi montar um também para praticar os conceitos de robótica. Como não tenho um espaço ideal para produzir as partes mecânicas do robô, optei por utilizar um chassi já pronto.

Após algumas pesquisas pela internet, resolvi utilizar um chassi circular da Pololu (http://www.pololu.com/catalog/product/250), pois após imprimir o manual desse chassi, percebi que o Program-Me encaixaria perfeitamente nele, inclusive a furação parece até que foi feita para o Program-Me.
O diâmetro do chassi é aproximadamente o mesmo de um DVD deixando o robô bem compacto.

Nesse chassi montei também um kit de engrenagens e motores da TAMIYA (http://www.pololu.com/catalog/product/61) e como terceira roda utilizei um ball caster (http://www.pololu.com/catalog/product/66) também da TAMIYA.

Esse conjunto ficou muito bom e praticamente contempla toda a parte mecânica do robô.



Como os motores que vêm no kit TAMIYA funcionam com no máximo 6 volts e eu queria utilizar alimentação de 12 volts, substituí os dois motores por motores MABUCHI desses utilizados em carrinhos de autorama e o resultado foi muito bom.
Com apenas 30% de duty cycle no PWM já consigo uma velocidade muito boa no robô.

Para sensores de obstáculos utilizei dois sensores infravermelho da SHARP modelo GP2Y0A21YK (http://www.sparkfun.com/commerce/product_info.php?products_id=242) posicionados na parte frontal do robô e com inclinação de aproximadamente 30 graus para cada um dos lados. Dessa forma é possível detectar obstáculos, tanto na parte frontal como nas laterais da direção em que o robô se movimenta, não sendo necessário um servo para movimentar os sensores.
Esses sensores detectam obstáculos entre 10 e 80 cm sendo que conectei eles nos conectores JP6 e JP7 do PROGRAM-ME que estão associados às portas analógicas.



Após ver o post do Vinícius sobre a fita de leds RGB, tive a idéia de colocar uma ao redor do robô, como o chassi é circular imaginei que o acabamento ficaria muito bom e daria um visual interessante (vejam detalhe da fita na foto acima).

Para comandar a fita de leds permitindo várias combinações de cores, utilizei 3 dos 4 transistores existentes no PROGRAM-ME. Como apenas o transistor Q2 é normalmente associado à porta PWM, fiz um remapeamento dos jumpers do PROGRAM-ME de forma que mais 2 transistores ficassem associados às portas PWM (vejam detalhes na figura abaixo e na próxima foto).



Obs: os retângulos coloridos indicam os pontos que foram interconectados em JP8 e JP11.

Notem que além do remapeamento de TR1(transistor Q1) e TR3 (transistor Q3), foi também remapeado o primeiro led vermelho o qual utilizo para indicar um dos modos de operação do robô. Os leds AM3 e VD3 indicam os outros dois modos.

Abaixo temos uma foto que mostra como foi feito o remapeamento das portas utilizando os conjuntos de jumpers JP8 e JP11 do PROGRAM-ME.



A foto a seguir mostra o detalhe da conexão da fita RGB aos transistores do PROGRAM-ME.



Para interface entre o Program-Me e os motores , utilizei um Shield da SparkFun (http://www.sparkfun.com/commerce/product_info.php?products_id=9213) que contém duas pontes H que permitem um controle total de velocidade e direção, independente para cada um dos motores.
Esse shield utiliza as portas digitais 10 a 13 do Program-Me.



Como mencionei acima, o robô possui 3 modos de operação:

1- Autônomo : onde ele se desloca livremente detectando obstáculos e desviando automaticamente.
2- Joystick : onde controlamos seus movimentos através de um joystick .
3- Acelerômetro: os movimentos são controlados ao movimentar o controle remotos nos eixos X e Y.

Abaixo temos a foto do controle remoto que nada mais é que um arduino simples, equipado com um shield onde montei o rádio transmissor, um acelerômetro e um joystick.
Obs: O modo de operação é comutado ao pressionar a alavanca do Joystick



A interface entre o robô e o controle remoto é feita utilizando um rádio ASK de 433MHz que permite taxas de 2400bps a 19200bps (estou utilizando 9600bps).
Para enviar comandos entre o controle remoto acima e o robô, criei um protocolo simples onde cada comando é formado por 5 bytes ( um byte de flag de inicio, 3 bytes que formam o comando e um byte de finalização).

exemplo: {lfy}

onde “{“ é o flag de início, “l” indica que é um comando para o motor esquerdo, “f” indica que ele deverá gira para frente e “y” indica o dutycicle que deverá ser aplicado ao PWM associado a esse motor, sendo que varia de 0 a 100 (caracter ASCII correspondente).

Também implementei o comando para mudança do modo de operação e seu formato é :


{mdx}

onde “md” significa solicitação de mudança de modo de operação e “x” indica um dos 3 modos (autônomo [1], joystick [2] e acelerômetro [3] .

Bem, é isso pessoal, abaixo temos um vídeo do robô em ação (modo autônomo) e algumas fotos mostrando algumas cores obtidas com fita RGB.
Ela muda de cor conforme são detectados os obstáculos ou quando o robô modifica a sua trajetória.


Ache outros vídeos como este em Globalcode Program-ME








[]s

José Luiz Sanchez Lorenzo

quarta-feira, 10 de fevereiro de 2010

Yahoo! Open Hack Day 2010 no Brasil

Oba!! Acontece no final de semana dos dias 20 e 21 de março a segunda edição do evento Yahoo! Open Hack Day no Brasil, realizado no excelente espaço de eventos do SENAC (o mesmo espaço do JustJava).

Tivemos uma experiência muito legal no evento do ano passado e acredito que este ano vai ser melhor ainda. Foi um evento bem diferente, um evento de codificação, onde as pessoas ou equipes criaram seus "hacks" durante o final de semana.
No domingo à tarde muita pressa para terminar os projetos para as apresentações. Muitos projetos, muito divertido e muito interessante. Votação e premiação  seguidos de  bate-papo sobre os projetos. 

É um evento para quem gosta de codificar, ou de fazer coisas divertidas, diferentes.

A organização do evento foi impecável no ano passado, comida, espaço, limpeza, foi muito bom.

Veja a cobertura completa, fotos, nosso prêmio, equipe e muito mais!

Nosso time em 2008:  
  • Instrutores : Eder Magalhães, Rafael Nunes, Vinicius Senger e eu;
  • Alunos: Gustavo Dantas Pereira, Pedro Germano, Eduardo Veríssimo, Alexandre Loiola e Katia Matto
  • Amigos e colaboradores: Ana Abrantes e Wagner Santos. 
      Obrigada pessoal, foi show! Que bom que vai ter mais um!

Nossos projetos concluídos em 2008: 
  • SuperCrud com gerador para Flickr
  • Planning Poker para celular feito com Blueprint
  • Biblioteca de componentes JSF para renderizar aplicações Blueprint
  • Plugin Blueprint para NetBeans
      Muito trabalho para um final de semana né? 
      Eu aindo lembro a sensação de terminar os projetos.
      Comemorar a conclusão.

Mas, chega de nostalgia, vamos ao que interessa, o planejamento para este ano! 
Estamos "montando" uma equipe para colaborar durante o evento, trocar ideias, montar uma mesona...  E todo o tipo de ajuda é bem vinda, design, ideias, eletrônica...
Já temos várias pessoas "confirmadas" pensando em coisas bacanas, e super animados. Tudo "discutido" pelo twitter:

Globalcoders, dev dream team.

Como participar do time Globalcoders ?
  1. Faça a sua inscrição no evento. O time não é formalizado durante a inscrição, portanto, se você quer participar do nosso time, inscreva-se, e comente aqui no Post. 
  2. Participe da comunidade no ning http://globalcoders.ning.com; que visa facilitar a discussão sobre os projetos, ideias e tecnologias envolvidas.

É isso ai, Yahoo! Open Hack Day, aqui vamos nós!


Participe, comente, divulgue! 

[]s
Yara
http://twitter.com/yarasenger
http://blog.globalcode.com.br/search/label/Yara

segunda-feira, 8 de fevereiro de 2010

Novo minicurso Introdução a Robótica com Arduino | Program-ME

Esta semana temos mais novidade para a galera interessada em Eletrônica e Robótica :
"Novo minicurso Introdução a Robótica com Arduino | Program-ME", onde o Vinicius Senger vai apresentar diversos conceitos fundamentais para quem está iniciando no mundo da Robótica, e também vai mostrar alguns robôs e projetos desenvolvidos.

Se você já participa da comunidade do Program-ME ou já criou algum robô não deixe de  trazer o seu "filhote" para passear e conversar com outros robôs.

Se tudo der certo ele vai repetir o Show de Dança do "Gavetão" com a música "Bug Novo" apresentada na abertura do The Developer's Conference 2009 em São Paulo, Florianópolis e Rio de Janeiro.



Particpe, colabore, divulgue!

[]s
Yara
http://twitter.com/yarasenger
http://blog.globalcode.com.br

quinta-feira, 4 de fevereiro de 2010

Curso Eletrônica e Arduino para Instrutores

Foi realizado recentemente na Globalcode um curso de homologação de instrutores (Unidade São Paulo e Alphaville) para a Academia do Programador, que utiliza o Program-ME / Arduino como instrumento didático, levando conceitos de computação física para os alunos.

Muitos instrutores já tinham experiência, e foi interessante relembrar os conceitos de eletrônica, que em geral, nós cientistas da computação não tínhamos tanto interesse na faculdade. Interessante ver a teoria na prática 10 anos depois, onde estamos bem mais Open4Education do que na época da universidade.

Rodamos alguns programinhas que tocam músicas no Program-ME, como "Brilha brilha estrelhinha", uma barulheira ótima.


Edson, Eder, Marcelo, Alexandre, Renato Bellia, Vinicius, Rodrigo, Felipe, Melissa e Rafael e eu que tirei a foto!

Obrigada a todos os insturtores que além de dedicar suas "noites" e sábados as aulas na Globalcode participaram desta turma no domingo!

[]s
Yara
http://twitter.com/yarasenger

quarta-feira, 27 de janeiro de 2010

Porque a Globalcode está entrando de cabeça no mundo da Robótica?

Porque a Globalcode está entrando de cabeça no mundo da Robótica?

Recebi esta pergunta pelo Twitter, e também de algumas pessoas próximas. Achei difícil e volátil responder pelo Twitter, por isto estou postando aqui no Eletron Livre, o blog sobre Eletrônica, Automação e Robótica da Globalcode.

Não há apenas uma resposta, ou um motivo, são diversos fatores que nos levam a investir pessoalmente e corporativamente nas áreas de Eletrônica, Automação e Robótica.

Os mais atentos devem ter notado que estamos investindo em áreas distintas:
  • divulgação (eventos, blog, videos)
  • treinamento (direta e indiretamente)
  • criação e produção da placa de desenvolvimento Program-ME, que é o Arduino da Globalcode.
Considerações, razões e a nossa visão sobre Eletrônica, Automação e Robótica: 
  1. Entrar no mundo da Robótica não quer dizer abandonar ou reduzir os investimentos em Java, pelo contrário a Globalcode tem investido e vai continuar a investir cada vez mais em Java e outras tecnologias. Eu, particularmente, estou bastante otimista, como publiquei no post Muitas vagas, otimismo e sensação de reaquecimento da economia no blog colaborativo Globalcoders.
  2. Sempre trabalhamos com paixão, e a Eletrônica e Robótica foram conquistando o Vinicius pouco a pouco e consequntemente contaminando e atraindo outras pessoas. Logo, foi natural seguirmos o ciclo Open4Education: Aprender, Praticar, Compartilhar.
  3. Automação residencial e Robótica não são mais apenas o tema futurístico dos "Jetsons", é realidade e com certeza é um mercado promissor.
  4. Analisando as comunidades de desenvolvimento internacionais na internet, e na MakerFair na Califórnia, percebemos uma forte tendência e motivação em relação ao Arduino, depois confirmada pela reportagem do Valor Economico / Wall Street Journal
  5. Encontramos excelentes "gurus", o que tem facilitado muito a nossa jornada até agora. Acho que está claro para a grande maioria da comunidade que o Vinicius Senger tem liderado este projeto na Globalcode com coragem, ousadia e MUITA motivação, mas, ele não está sozinho, conta com um excelente time: Paulo Santos, Benedicto Franco Junior, Alberto Lemos (dr. Spock), José Luis Sanches e agora, toda a comunidade do Program-ME.
  6. Robótica é um assunto popular entre os alunos de "algumas" engenharias, mas a cultura não é tão forte na comunidade de desenvolvedores e cursos de computação. Através do SunSpot e outras iniciativas do James Gosling a comunidade Java ficou um pouco mais antenada em Robótica e automação.
  7. A motivação do Vinicius foi crescendo no  contato com a comunidade Academica, nas intermináveis conversas sobre Física Quantica, Computação Quantica, Cristalografia, Física Básica, Raio-X com os físicos ao nosso redor: meu pai, avós, minha mãe e outros físicos amigos.
  8. O universo de possibilidades de projetos ao redor do Arduino são infinitas: para aqueles que gostam de desafio e inovação é um prato cheio;
Como já comentei em outros posts nós somos investidores e nossa moeda é o nosso tempo. Investimos nossas horas: finais de semana ou noites em aprender novas tecnologias e APIs, escrever artigos, participar de fóruns e grupos de usuários.

Mas, como recomendam os analistas financeiros, em geral não devemos investir todas as fichas no mesmo produto (API ou tecnologia) e por isto temos que aprender as coisas novas sem esquecer (de acompanhar) as antigas. O Vinicius, o Spock e outras pessoas da comunidade tem investido parte do seu tempo nisto, como hobby e como especialização, e você, já sabe no que vai investir este ano ?

[]s
Yara
http://blog.globalcode.com.br
http://blog.globalcode.com.br/search/label/Yara
http://www.eletronlivre.com.br/search/label/Yara
http://twitter.com/yarasenger

terça-feira, 26 de janeiro de 2010

Robótica na Campus Party

Começou ontem a Campus Party, e os amigos Bruno Souza e Mauricio Leal estão participando ativamente da organização do evento, especialmente da área de Software Livre, que terá diversas palestras sobre Java, Robótica Livre e muito mais.

Vinicius Senger estará participando do evento com duas palestras:

Misturando Robotica e Desenvolvimento de Software, e tudo livre!
Terça-feira, 26 de janeiro das 20:00 as 21:00

Workshop Java
Quarta-feira, 27 de janeiro das 9:00 as 10:00

Além da participação nas palestras do evento ele também está planejando a montagem de um robô que deve nascer no meio da multidão de mais de 6000 pessoas que participam da Campus Party 2010. Para isto preparou uma chassi muito especial, e planeja recheá-lo durante o evento com trabalho colaborativo dos campuseiros e amigos do SouJava. O Robô vai utilizar a placa de desenvolvimento Program-ME, o Arduino da Globalcode. O Vinicius também vai "apresentar" alguns projetos de Robôs que usam SunSpot.













Eu estarei colaborando com a cobertura coletiva através do twitter do SouJava e da Globalcode, agregando as notícias mais interessantes para vocês, através dos diversos membros do SouJava que estão participando do Campus Party 2010 e atenta aos Twitteiros de plantão.

Acompanhe as palestras ao vivo na TV Campus Party : http://tv.campus-party.org/

[]s
Yara
http://twitter.com/yarasenger