Grove - Acelerômetro Digital de 3 Eixos (±16g)

O Acelerômetro Digital de 3 Eixos é a parte-chave em projetos como detecção de orientação, detecção de gestos e detecção de movimento. Este Acelerômetro Digital de 3 Eixos (±16g) é baseado no CI de baixo consumo de energia ADXL345. Ele apresenta até 10.000g de alta capacidade de suportar choques e taxa configurável de amostras por segundo. Para aplicações gerais que não exigem uma faixa de medição muito grande, esta é uma ótima escolha porque é durável, economiza energia e é econômica.
Especificações
- Tensão de operação: 3,0 - 5,5 V
- Faixa de teste: ±16
- Sensibilidade: 3,9 mg / LSB
- Corrente em standby: 0,1 μA (em modo de espera Vcc = 2,5 V (típico))
- 10000 g de alta capacidade de suportar choques
- ECOPACK® compatível com RoHS e “Verde”
- Biblioteca compatível com Suli
- Para mais detalhes sobre módulos Grove, consulte o Grove System
Demonstração
Com Arduino
Cada acelerômetro foi testado individualmente antes de ser enviado para você. Mas, em casos raros, talvez você precise redefinir o deslocamento de zero por conta própria. Abaixo mostramos como ler os dados brutos e obter dados na unidade de g, também conhecida como força g, deste acelerômetro.
- Passo 1: Conecte-o à porta I2C do seu Grove - Base Shield.
- Passo 2: Baixe o arquivo .zip da Biblioteca Digital Accelerometer(±16g) e descompacte-o em arduino-1.0\libraries na pasta de instalação do Arduino. Se você não sabe como instalar uma biblioteca para Arduino, siga o tutorial How to install an Arduino library
- Passo 3: Se você já tiver a biblioteca instalada, abra o código de demonstração diretamente pelo caminho: ** File(文件) -> Example(示例) ->DigitalAccelerometer_ADXL345->ADXL345_demo_code. **
- Passo 4: Faça o upload do código e abra o monitor serial (geralmente ele fica no canto superior direito). Consulte o tutorial Upload code se você não souber como fazer o upload.
- Passo 5: O resultado será mostrado no formato da imagem abaixo, agite o Grove e você verá os números mudando.

As saídas deste sensor consistem em duas partes: dados brutos e informação de aceleração de 3 eixos convertida na unidade de gravidade, "g".
Brincar com o Codecraft
Hardware
Passo 1. Use um cabo Grove para conectar o Grove - Acelerômetro Digital de 3 Eixos (±16g) à porta I2C do Seeeduino. Se você estiver usando um Arduino, aproveite um Base Shield.
Passo 2. Conecte o Seeeduino/Arduino ao seu PC por meio de um cabo USB.
Software
Passo 1. Abra o Codecraft, adicione o suporte a Arduino e arraste um procedimento principal para a área de trabalho.
If this is your first time using Codecraft, see also Guide for Codecraft using Arduino.
Passo 2. Arraste blocos como na imagem abaixo ou abra o arquivo cdc que pode ser baixado no final desta página.

Carregue o programa no seu Arduino/Seeeduino.
Quando o código terminar de ser carregado, você verá a aceleração exibida no Serial Monitor.
Com Raspberry Pi
-
Passo 1: Você deve ter um Raspberry Pi e um GrovePi ou GrovePi+.
-
Passo 2: Você deve ter concluído a configuração do ambiente de desenvolvimento, caso contrário siga as instruções aqui.


-
Passo 3: Conexão
- Conecte o sensor ao soquete grovepi i2c-x(1~3) usando um cabo Grove.
-
Passo 4: Navegue até o diretório de demonstrações:
cd yourpath/GrovePi/Software/Python/
Para ver o código
nano grovepi_tilt_switch.py # "Ctrl+x" to exit #
import smbus
from time import sleep
# select the correct i2c bus for this revision of Raspberry Pi
revision = ([l[12:-1] for l in open('/proc/cpuinfo','r').readlines() if l[:8]=="Revision"]+['0000'])[0]
bus = smbus.SMBus(1 if int(revision, 16) >= 4 else 0)
# ADXL345 constants
EARTH_GRAVITY_MS2 = 9.80665
SCALE_MULTIPLIER = 0.004
DATA_FORMAT = 0x31
BW_RATE = 0x2C
POWER_CTL = 0x2D
BW_RATE_1600HZ = 0x0F
BW_RATE_800HZ = 0x0E
BW_RATE_400HZ = 0x0D
BW_RATE_200HZ = 0x0C
BW_RATE_100HZ = 0x0B
BW_RATE_50HZ = 0x0A
BW_RATE_25HZ = 0x09
RANGE_2G = 0x00
RANGE_4G = 0x01
RANGE_8G = 0x02
RANGE_16G = 0x03
MEASURE = 0x08
AXES_DATA = 0x32
class ADXL345:
address = None
def __init__(self, address = 0x53):
self.address = address
self.setBandwidthRate(BW_RATE_100HZ)
self.setRange(RANGE_2G)
self.enableMeasurement()
def enableMeasurement(self):
bus.write_byte_data(self.address, POWER_CTL, MEASURE)
def setBandwidthRate(self, rate_flag):
bus.write_byte_data(self.address, BW_RATE, rate_flag)
# set the measurement range for 10-bit readings
def setRange(self, range_flag):
value = bus.read_byte_data(self.address, DATA_FORMAT)
value &= ~0x0F;
value |= range_flag;
value |= 0x08;
bus.write_byte_data(self.address, DATA_FORMAT, value)
# returns the current reading from the sensor for each axis
#
# parameter gforce:
# False (default): result is returned in m/s^2
# True : result is returned in gs
def getAxes(self, gforce = False):
bytes = bus.read_i2c_block_data(self.address, AXES_DATA, 6)
x = bytes[0] | (bytes[1] << 8)
if(x & (1 << 16 - 1)):
x = x - (1<<16)
y = bytes[2] | (bytes[3] << 8)
if(y & (1 << 16 - 1)):
y = y - (1<<16)
z = bytes[4] | (bytes[5] << 8)
if(z & (1 << 16 - 1)):
z = z - (1<<16)
x = x * SCALE_MULTIPLIER
y = y * SCALE_MULTIPLIER
z = z * SCALE_MULTIPLIER
if gforce == False:
x = x * EARTH_GRAVITY_MS2
y = y * EARTH_GRAVITY_MS2
z = z * EARTH_GRAVITY_MS2
x = round(x, 4)
y = round(y, 4)
z = round(z, 4)
return {"x": x, "y": y, "z": z}
if __name__ == "__main__":
# if run directly we'll just create an instance of the class and output
# the current readings
adxl345 = ADXL345()
axes = adxl345.getAxes(True)
print "ADXL345 on address 0x%x:" % (adxl345.address)
print " x = %.3fG" % ( axes['x'] )
print " y = %.3fG" % ( axes['y'] )
print " z = %.3fG" % ( axes['z'] )
- Execute a demonstração.
sudo python grove_tilt_switch.py
Com Beaglebone Green
Para começar a editar programas que estão no BBG, você pode usar o Cloud9 IDE. Como um exercício simples para se familiarizar com o Cloud9 IDE, criar uma aplicação simples para piscar um dos 4 LEDs programáveis pelo usuário no BeagleBone é um bom começo.
Se esta é a sua primeira vez usando o Cloud9 IDE, siga este link.
-
Passo 1: Defina o soquete Grove - UART como um soquete Grove - GPIO, basta seguir este link.
-
Passo 2: Clique no "+" no canto superior direito para criar um novo arquivo.
-
Passo 3: Copie e cole o seguinte código na nova aba.
import smbus
import time
bus = smbus.SMBus(1)
# ADXL345 device address
ADXL345_DEVICE = 0x53
# ADXL345 constants
EARTH_GRAVITY_MS2 = 9.80665
SCALE_MULTIPLIER = 0.004
DATA_FORMAT = 0x31
BW_RATE = 0x2C
POWER_CTL = 0x2D
BW_RATE_1600HZ = 0x0F
BW_RATE_800HZ = 0x0E
BW_RATE_400HZ = 0x0D
BW_RATE_200HZ = 0x0C
BW_RATE_100HZ = 0x0B
BW_RATE_50HZ = 0x0A
BW_RATE_25HZ = 0x09
RANGE_2G = 0x00
RANGE_4G = 0x01
RANGE_8G = 0x02
RANGE_16G = 0x03
MEASURE = 0x08
AXES_DATA = 0x32
class ADXL345:
address = None
def __init__(self, address = ADXL345_DEVICE):
self.address = address
self.setBandwidthRate(BW_RATE_100HZ)
self.setRange(RANGE_2G)
self.enableMeasurement()
def enableMeasurement(self):
bus.write_byte_data(self.address, POWER_CTL, MEASURE)
def setBandwidthRate(self, rate_flag):
bus.write_byte_data(self.address, BW_RATE, rate_flag)
# set the measurement range for 10-bit readings
def setRange(self, range_flag):
value = bus.read_byte_data(self.address, DATA_FORMAT)
value &= ~0x0F;
value |= range_flag;
value |= 0x08;
bus.write_byte_data(self.address, DATA_FORMAT, value)
# returns the current reading from the sensor for each axis
#
# parameter gforce:
# False (default): result is returned in m/s^2
# True : result is returned in gs
def getAxes(self, gforce = False):
bytes = bus.read_i2c_block_data(self.address, AXES_DATA, 6)
x = bytes[0] | (bytes[1] << 8)
if(x & (1 << 16 - 1)):
x = x - (1<<16)
y = bytes[2] | (bytes[3] << 8)
if(y & (1 << 16 - 1)):
y = y - (1<<16)
z = bytes[4] | (bytes[5] << 8)
if(z & (1 << 16 - 1)):
z = z - (1<<16)
x = x * SCALE_MULTIPLIER
y = y * SCALE_MULTIPLIER
z = z * SCALE_MULTIPLIER
if gforce == False:
x = x * EARTH_GRAVITY_MS2
y = y * EARTH_GRAVITY_MS2
z = z * EARTH_GRAVITY_MS2
x = round(x, 4)
y = round(y, 4)
z = round(z, 4)
return {"x": x, "y": y, "z": z}
if __name__ == "__main__":
# if run directly we'll just create an instance of the class and output
# the current readings
adxl345 = ADXL345()
while True:
axes = adxl345.getAxes(True)
print "ADXL345 on address 0x%x:" % (adxl345.address)
print " x = %.3fG" % ( axes['x'] )
print " y = %.3fG" % ( axes['y'] )
print " z = %.3fG" % ( axes['z'] )
time.sleep(2)
-
Passo 4: Salve o arquivo clicando no ícone de disco com a extensão .py.
-
Passo 5: Conecte o Grove - 3-Axis Digital Accelerometer(±16g) ao soquete Grove I2C no BBG.
-
Passo 6: Execute o código. Você verá que o terminal exibe informações de gravidade a cada 2 segundos.
Visualizador de Esquemático Online
Recursos
- Arquivo Eagle.zip
- Biblioteca compatível com Suli
- Folha de dados ADXL345.pdf
- Repositório do GitHub para 3-Axis Digital Accelerometer(±16g)
- Grove - 3-Axis Digital Accelerometer(±16g)
- Arquivo CDC do Codecraft
Projetos
Grove - Introdução ao 3-Axis Digital Accelerometer: Como usar um acelerômetro digital de 3 eixos.
Suporte Técnico e Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.
