ADXL362 は Analog Devices 製のSPI接続の3軸加速度センサICです。 DIP変換モジュールを ストロベリーリナックスが販売しています。 電源電圧範囲は 1.6[V]〜3.5[V]ですので、3.3[V]動作のArduinoに 直接つないで使うことが出来ます。 次のように配線して試しています。
ピン番号 | 名称 | Arduinoのピン | 備考 |
1 | GND | GND | 1, 8はモジュール内で接続されている |
2 | SCLK | SCK (D13) | |
3 | MOSI | MOSI (D11) | |
4 | MISO | MISO (D12) | |
5 | ~CS | SS (D10) | |
6 | INT2 | - | |
7 | INT1 | - | |
8 | GND | GND | 1, 8はモジュール内で接続されている |
9 | VS | 3.3[V] (3V3) | |
10 | VDD_IO | 3.3[V] (3V3) |
簡単な動作確認用のスケッチを作ってみました。 このスケッチは、読んだ加速度をそのままの値(単位は[mg])でシリアルへ出力します。
#include <SPI.h> //const int SS = 10; // 必ず 10 番を出力にすること //const int MOSI = 11; //const int MISO = 12; //const int SCK = 13; const int ADXL362_CS = SS; const byte ADXL362_XDATA_L = 0x0e; const byte ADXL362_XDATA_H = 0x0f; const byte ADXL362_YDATA_L = 0x10; const byte ADXL362_YDATA_H = 0x11; const byte ADXL362_ZDATA_L = 0x12; const byte ADXL362_ZDATA_H = 0x13; const byte ADXL362_FILTER = 0x2c; const byte ADXL362_POWER_CTL = 0x2d; const byte WRITE = 0xa; const byte READ =0xb; const byte READ_FIFO = 0xd; byte regWrite(byte reg, byte val) { digitalWrite(ADXL362_CS, LOW); SPI.transfer(WRITE); SPI.transfer(reg); SPI.transfer(val); digitalWrite(ADXL362_CS, HIGH); } byte regRead(byte reg) { byte ret; digitalWrite(ADXL362_CS, LOW); SPI.transfer(READ); SPI.transfer(reg); ret = SPI.transfer(0); digitalWrite(ADXL362_CS, HIGH); return ret; } void setup() { digitalWrite(SS, HIGH); pinMode(SS, OUTPUT); SPI.begin(); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); // 8MHz/8 = 1MHz Serial.begin(9600); while (!Serial) {} // should show "AD 1D F2 X" // X colud be 1, 2,... Serial.print(regRead(0x00), HEX); Serial.print(" "); Serial.print(regRead(0x01), HEX); Serial.print(" "); Serial.print(regRead(0x02), HEX); Serial.print(" "); Serial.println(regRead(0x03), HEX); regWrite(ADXL362_FILTER, 0x13); // +-2g range, 100Hz regWrite(ADXL362_POWER_CTL, 0x02); // normal operation, measurement mode } void loop() { short X, Y, Z; X = regRead(ADXL362_XDATA_H); X = (X << 8) | regRead(ADXL362_XDATA_L); Y = regRead(ADXL362_YDATA_H); Y = (Y << 8) | regRead(ADXL362_YDATA_L); Z = regRead(ADXL362_ZDATA_H); Z = (Z << 8) | regRead(ADXL362_ZDATA_L); Serial.print(X); Serial.print("\t"); Serial.print(Y); Serial.print("\t"); Serial.println(Z); delay(100); }
上記のスケッチです