LusoRobótica - Robótica em Português

Robótica => Discussão geral sobre robótica => Tópico iniciado por: Junior Frota em 03 de Agosto de 2012, 01:32

Título: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 03 de Agosto de 2012, 01:32
Olá amigos!

Tenho pesquisado a respeito desse acelerômetro aqui do lusorobotica.com, mas não obtive muito êxito quanto ao que eu preciso, por isso resolvi iniciar um novo tópico.

Recentemente eu adquiri um acelerômetro ADXL345 (http://www.lctech-inc.com/Hardware/Detail.aspx?id=d39b68c5-a8a3-4dd4-ab97-76fc2f7f4b44 (http://www.lctech-inc.com/Hardware/Detail.aspx?id=d39b68c5-a8a3-4dd4-ab97-76fc2f7f4b44)) e preciso entender como o mesmo funciona e como eu o ligo no Arduino Duemilanove.

Eu tenho encontrado na net, inclusive aqui no fórum um outro ADXL345 (http://lusorobotica.com/index.php?topic=1889.msg18115#msg18115 (http://lusorobotica.com/index.php?topic=1889.msg18115#msg18115)), mas a pinagem na placa e o nome dos referidos pinos são diferentes.

Nesse que adquiri possui duas fileiras de 5 pinos (X, Y, Z, SL, OG e 5V, 3V3, GND, GS e ST).

Consegui verificar pelo site do fabricante que o módulo pode ter alimentação de 5 ou 3,3 volts, pois o mesmo possui regulador de tensão para 3,3 volts. Verifiquei, ainda, que X, Y e Z são os pinos de saídas dos respectivos eixos X, Y e Z.

Minha principal dúvida é onde conectar no Arduino esses outros pinos (SL, OG, GS, ST) e o que eles significam ou quais suas funções.

Se alguém o conhece e/ou já o utilizou e puder me ajudar, ficarei muito agradecido. Sem falar que eu não tenho a mínima ideia de um código que faça funcionar tudo isso.

Eu gostaria de receber os valores lidos nos eixos do sensor e apresentá-los na tela do Serial Monitor.

Desde já, obrigado! :D
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: senso em 03 de Agosto de 2012, 01:38
Acho que deves começar por estudar a datasheet desse sensor, porque o ADXL345 só tem interface digital.
http://www.analog.com/en/mems-sensors/mems-inertial-sensors/adxl345/products/product.html (http://www.analog.com/en/mems-sensors/mems-inertial-sensors/adxl345/products/product.html)
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 03 de Agosto de 2012, 21:38
Certo Senso, e obrigado pela prontidão em responder, mas você saberia me dizer o que significa esses pinos? Por que em diferentes módulos esses pinos também são diferentes, por exemplo SL, OG, GS, ST neste meu e CS, Int1, Int2, SDO, SDA, SCL, como neste https://www.loveelectronics.co.uk/Tutorials/12/adxl345-accelerometer-arduino-tutorial. (https://www.loveelectronics.co.uk/Tutorials/12/adxl345-accelerometer-arduino-tutorial.)

O que eu não entendo é como os pinos da board tem nomes diferentes se se tratam do mesmo chip ADXL345?
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 03 de Agosto de 2012, 23:20
Senso, dei uma lida rápida no datasheet do mesmo, mas o que mais me incomoda é que o datasheet é do chip e não da placa que eu adquiri, pois na placa tem pinos com nomes diferentes dos pinos do chip.

No datasheet eu vejo que o chip tem 14 pinos:

1 - VDD I/O
2 - GND
3 - RESERVED
4 - GND
5 - GND
6 - VS
7 - CS
8 - INT1
9 - INT2
10 - NC
11 - RESERVED
12 - SDO/ALT ADDRESS
13 - DSA/SDI/SDIO
14 - SCL/SCLK

O que eu gostaria é que alguém me dissesse qual a correspondência desses pinos com os do módulo que eu adquiri (que são X, Y, Z, SL, OG e 5V, 3V3, GND, GS e ST) e que pudesse me ensinar alguma rotina pra ler os dados via I2C para mostrá-los na janela do Serial Monitor.

Se eu souber como ler os dados do acelerômetro, vou poder aproveitar esses dados para outras aplicações.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Marvin em 03 de Agosto de 2012, 23:23
Podes confirmar que chip tem a placa? Colocar aqui a referencia? Parece-me que essa placa tem um acelarometro analogico e não digital.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 03 de Agosto de 2012, 23:31
Marvin, obrigado pela resposta!

Mas é muito difícil saber qual é o chip que tem na placa, pois a descrição é muito miúda e meio que apagada, mas no site do fabricante da placa diz que é o ADXL345.

Em todo exemplo que vi sobre esse chip (ADXL345) as saídas são ligadas em pinos analógicos do Arduino, nos que são compatíveis com I²C. Inclusive eu gostaria de saber quais são esses pinos no Arduino Duemilanove?
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Marvin em 03 de Agosto de 2012, 23:35
Marvin, obrigado pela resposta!

Mas é muito difícil saber qual é o chip que tem na placa, pois a descrição é muito miúda e meio que apagada, mas no site do fabricante da placa diz que é o ADXL345.

Em todo exemplo que vi sobre esse chip (ADXL345) as saídas são ligadas em pinos analógicos do Arduino, nos que são compatíveis com I²C. Inclusive eu gostaria de saber quais são esses pinos no Arduino Duemilanove?

os pinos I2C da Arduino são nos pinos analogicos, por isso se encontram ligados nos exemplos.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 03 de Agosto de 2012, 23:48
Então posso usar qualquer dos 6 (0 a 5), né??

Mas me diga: você saberia como ligar essa plaquinha ao arduino??

Pelo que me parece, se quero obter a leitura dos eixos X, Y, e Z, preciso de 3 portas analógicas (0, 1 e 2, por exemplo), certo?

Pelo que li sobre acelerômetros, precisamos definir a sua precisão (+/- 2g, +/- 4g, +/- 8g e +/- 16g), e essa precisão é feita colocando dois pinos em nível alto ou baixo (dois pinos com duas possibilidades = quatro estados), mas não sei quais desses pinos (SL, OG, GS e ST) devem ser utilizados para fazer essa configuração.

http://www.google.com.br/imgres?q=aceler%C3%B4metro+ADXL345&um=1&hl=pt-BR&sa=N&biw=1137&bih=741&tbm=isch&tbnid=-TgP53wlkjQZzM:&imgrefurl=http://www.robocore.net/modules.php%3Fname%3DGR_LojaVirtual%26prod%3D343&docid=NDUenNGg0i4oJM&imgurl=http://www.robocore.net/upload/lojavirtual/ADXL345.png&w=250&h=250&ei=f1IcUNTEGcbt6wGi4oHIBg&zoom=1 (http://www.google.com.br/imgres?q=aceler%C3%B4metro+ADXL345&um=1&hl=pt-BR&sa=N&biw=1137&bih=741&tbm=isch&tbnid=-TgP53wlkjQZzM:&imgrefurl=http://www.robocore.net/modules.php%3Fname%3DGR_LojaVirtual%26prod%3D343&docid=NDUenNGg0i4oJM&imgurl=http://www.robocore.net/upload/lojavirtual/ADXL345.png&w=250&h=250&ei=f1IcUNTEGcbt6wGi4oHIBg&zoom=1)

Na imagem acima, vemos que a plaquinha tem os mesmo terminais do chip, mas que na minha plaquinha, tem nomes diferentes destes. :(
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: senso em 04 de Agosto de 2012, 01:01
Acho que devias contactor o vendedor dessa placa, nem sempre o que é muito barato é bom, pois neste caso não tens ponta de documentação para onde te virares.
Olha bem para o chip com boa luz e escreve aqui todos os numeros que estão lá escritos.

O ADXL345 tem interface digital, ou SPI, que usas os pinos digital 13,12,11 e 10 ou i2c que usa os pinos analógico 4 e 5 e não são permutaveis por outros pinos por o hardware que faz o i2c está ligado internamente no chip a esses pinos.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 04 de Agosto de 2012, 16:14
Olá Senso e Marvin, estive a pesquisar pelo sensor de aceleração que eu adquiri e descobri que o mesmo não usa o chip ADXL345 mas sim o MMA7361 (http://www.freescale.com/files/sensors/doc/data_sheet/MMA7361L.pdf (http://www.freescale.com/files/sensors/doc/data_sheet/MMA7361L.pdf)), que por sinal tem saída analógica. Baixei, inclusive, o datasheet do mesmo e este me esclareceu muitas coisas, no entanto, tenho uma dúvida:

No datasheet diz: "O acelerômetro de 3 eixos fornece um Modo de Espera, que é ideal para baterias produtos operados. Sleep Mode é ativo, as saídas de dispositivos são desligados, proporcionando redução significativa da atual operação. Um sinal de entrada baixo no pino 7 (Modo Sleep) vai colocar o dispositivo neste modo e reduzir a corrente de 3 mA typ. Por menor consumo de energia, recomenda-se para definir g-Selecione o modo 1,5 g. Ao colocar um sinal de entrada de alta no pino 7, o dispositivo irá continuar para o modo normal de operação."

Além de não entender muito o que quer dizer aí, não sei o que dizer sobre nível alto ou baixo, pois se o chip é do tipo TTL, nível alto = 5V e nível baixo = 0V, certo? Mas o MMA7361 também trabalha com 3,3V, inclusive, na board do sensor vem um conversor 5V-3,3V, mas penso eu que serve apenas para o pino de alimentação (VDD). A dúvida é: nos pinos que podem ser configurados com nível alto ou baixo devo colocar 5V ou 3,3V? Esses pinos são: SL, 0G, GS e ST.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: msr em 04 de Agosto de 2012, 16:40
Junior Frota, logo na primeira página da datasheet do MMA7361 diz o seguinte:
"Low voltage operation: 2.2V - 3.6V"

Logo, não podes por nem mais nem menos do que isso. Se usas 5V arriscas-te a queimar o acelerómetro. A não ser que a placa que tens e que contém o MMA7361 inclua "level translators/shifters", aí sim poderás usar 5V.
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 04 de Agosto de 2012, 18:55
Obrigado pela resposta MSR!

Eu já havia lido sobre isso, mas na placa do sensor tem entrada para 5V, pois o mesmo tem um conversor 5V-3,3V. Mas como eu disse no outro post: acho que esse conversor se aplica apenas ao pino de alimentação.

Sendo assim, qualquer que seja o pino de configuração do chip (SL, 0G, GS e ST) deve ser usado 3,3V para nível alto, né isso?

Mas pelo que eu entendi sobre "Low voltage operation: 2.2V - 3.6V", é que isso é uma propriedade do chip, pois essa informação está listada juntamente com outras que especificam o chip, o que eu entendi sobre essa frase é que ele indica que o chip trabalha em ~3,3V e não em 5V (ou seja, consome pouca energia).

Contudo, não me arriscarei a colocar 5V nos pinos de configuração do chip, mas preciso saber como faço pra ativar a saída de 3,3V do Arduino?
Título: Re: Acelerômetro ADXL345 + Arduino Duemilanove
Enviado por: Junior Frota em 04 de Agosto de 2012, 19:48
Olá amigos, resolvi testar aqui utilizando como nível alto 3,3V, já que não queimaria o chip se o correto fosse usar 5V. O sensor até que funcionou direitinho, mas acho estranho os resultados obtidos.

Fiz a seguinte ligação aqui:

Acelerômetro --> Arduino
             pin X --> analógico 1
             pin Y --> analógico 2
             pin Z --> analógico 3
            pin SL --> power 3V3
            pin GS --> power 3V3
           
e utilizei o seguinte código:

void setup()
 {
   Serial.begin(9600);
   analogReference(EXTERNAL);
 }

 void loop()
 {
   int xaxis = analogRead(1);
   int yaxis = analogRead(2);
   int zaxis = analogRead(3);
 
   Serial.print("x-axis");
   Serial.print("\t"); 
   Serial.println(xaxis);

   Serial.print("y-axis");
   Serial.print("\t"); 
   Serial.println(yaxis);
 
   Serial.print("z-axis");
   Serial.print("\t"); 
   Serial.println(zaxis);

   Serial.println(""); 
   delay(200);
 }

E obtive no Serial Monitor apenas os valores 1023, sem nenhuma variação entre eles, por mais que eu movimentasse o sensor.

Foi então que eu resolvi comentar a linha "analogReference(EXTERNAL);" e passou-me a informar valores que estão em torno de 300, por mais que eu movimentasse o sensor, esses valores variavam bem pouco. Acho que teria que dar algo próximo de 0 até próximo de 1023 para os extremos de movimento.

O que acham??