quarta-feira, julho 08, 2015

Módulo GY-282: Bússola Triaxial - Ligando ao Raspberry Pi

Concluindo (por enquanto) as minhas experiências com o módulo GY-282, descrevo aqui a conexão ao Raspberry Pi.



Uma vez que tanto o raspberry Pi como o GY-282 operam a 3V, a conexão requer apenas quatro fios:


Do lado do software, primeiro é necessário habilitar o I2C e instalar os pacotes i2c-tools e python-smbus, como vimos anteriormente. Feito isto, podemos usar o i2cdetect para confirmar que a comunicação está funcionando:
pi@raspberrypi ~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi ~ $
Vamos agora fazer um programa simples em python para ler os valores brutos. Neste caso vamos precisar ler as respostas do módulo, algo que não fizemos quando ligamos o display. A documentação do python-smbus é bem sucinta, encontrei uma explicação mais detalhada no lado do kernel. O meu programa Python ficou assim:
#!/usr/bin/python

from time import sleep
import smbus

bus = smbus.SMBus(1)

DEVICE_ADDRESS = 0x1E
REG_MODE = 0x02
REG_X_HI = 0x03
REG_X_LO = 0x04
REG_Y_HI = 0x05
REG_Y_LO = 0x06
REG_Z_HI = 0x07
REG_Z_LO = 0x08

# seleciona leitura continua
bus.write_byte_data(DEVICE_ADDRESS, REG_MODE, 0x00)

while True:
    # le a bussola
    x = bus.read_byte_data(DEVICE_ADDRESS, REG_X_HI) << 8
    x = x | bus.read_byte_data(DEVICE_ADDRESS, REG_X_LO)
    y = bus.read_byte_data(DEVICE_ADDRESS, REG_Y_HI) << 8
    y = y | bus.read_byte_data(DEVICE_ADDRESS, REG_Y_LO)
    z = bus.read_byte_data(DEVICE_ADDRESS, REG_Z_HI) << 8
    z = z | bus.read_byte_data(DEVICE_ADDRESS, REG_Z_LO)

    print x, y, z

    sleep(3.0)
A partir deste ponto temos todas as informações necessárias para fazer versões em Python do outro exemplo que eu mencionei; fica como exercício para o leitor.

Nenhum comentário: