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



