GR-ADZUKI XBEE SHIELD

GR-ADZUKIのシールドを作成しました。まずは、XBeeシールドです。
シールドは、以下の材料で作成しています。
両面スルホール・ガラス・ユニバーサル基板 Cタイプ2.54mmピッチ(72x47mm)
http://akizukidenshi.com/catalog/g/gP-00189/
ピンソケット 1x14 (14P) リード長15mm
http://akizukidenshi.com/catalog/g/gC-09667/
ピンソケット 1x10 (10P) リード長15mm   2本
http://akizukidenshi.com/catalog/g/gC-07914/
ピンソケット 1x5 (5P) リード長15mm
http://akizukidenshi.com/catalog/g/gC-10397/
XBee関係は以下になります。
XBee ZB S2Cモジュール ワイヤーアンテナタイプ
http://akizukidenshi.com/catalog/g/gM-10072/
※実機は古いモジュール使用しています。
XBeeピッチ変換基板とソケットのセット
https://www.switch-science.com/catalog/100/
PC側Zigbeeコーディネータ
XStick ZB Japan
http://akizukidenshi.com/catalog/g/gM-09335/

XBeeとの通信は、Serial1を使用しています。このためデジタルコンパスは、取り外し、5ピンの連結ピンソケットとつないでいます。5ピンのソケットのうち、3V、GND、7ピン(TX1)、8ピン(RX1)の4本を使用しています。
あらかじめXBee設定ソフトXCTUでコーディネータと接続できるようにXbeeモジュールに設定しておけば、GR-AZDUKI側でのプログラムは不要です。
通信は、GR-ADZUKI SERIAL1 SAMPLEで確認しました。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Serialout/Serialout1.ino
なおXBee WiFiは、消費電力が足りなく使用できません。

 

I made a shield of GR-ADZUKI. First of all, it is XBee shield.
The shield is made with the following materials.
Double sided through hole · glass · Universal board C type 2.54 mm pitch (72 x 47 mm)
http://akizukidenshi.com/catalog/g/gP-00189/
Pin socket 1 x 14 (14 P) Lead length 15 mm
http://akizukidenshi.com/catalog/g/gC-09667/
Pin socket 1 x 10 (10 P) Lead length 15 mm    2pcs
http://akizukidenshi.com/catalog/g/gC-07914/
Pin socket 1 x 5 (5 p) Lead length 15 mm
http://akizukidenshi.com/catalog/g/gC-10397/
The XBee relationship is as follows.
XBee ZB S2C module wire antenna type
http://akizukidenshi.com/catalog/g/gM-10072/
※ The actual module uses old module.
XBee pitch conversion board and socket set
https://www.switch-science.com/catalog/100/
PC side Zigbee coordinator
XStick ZB Japan
http://akizukidenshi.com/catalog/g/gM-09335/

Communication with XBee uses Serial 1. For this reason, the digital compass is detached and connected with a 5 pin connecting pin socket. Of the 5 pin sockets, 4 V, 3 G, GND, 7 pins (TX 1), 8 pins (RX 1) are used.
If you set the Xbee module in advance so that it can be connected to the coordinator with the XBee setting software XCTU in advance, the program on the GR-AZDUKI side is unnecessary.
Communication was checked with GR-ADZUKI SERIAL1 SAMPLE.
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Serialout/Serialout1.ino
XBee WiFi can not be used because it consumes less power.

 

我做了GR-ADZUKI的盾牌。 首先,它是XBee盾牌。
屏蔽由以下材料製成。
雙面通孔·玻璃·通用板C型2.54 mm節距(72 x 47 mm)
http://akizukidenshi.com/catalog/g/gP-00189/
引腳插座1 x 14(14 P)引線長度15 mm
http://akizukidenshi.com/catalog/g/gC-09667/
引腳插座1 x 10(10 P)引線長度15 mm     2pcs
http://akizukidenshi.com/catalog/g/gC-07914/
引腳插座1 x 5(5 p)引線長度15 mm
http://akizukidenshi.com/catalog/g/gC-10397/
XBee關係如下。
XBee ZB S2C模塊導線天線類型
http://akizukidenshi.com/catalog/g/gM-10072/
※實際模塊使用舊模塊。
XBee間距轉換板和插座組
https://www.switch-science.com/catalog/100/
PC端Zigbee協調員
XStick ZB日本
http://akizukidenshi.com/catalog/g/gM-09335/

與XBee的通信使用Serial 1。 出於這個原因,數字羅盤是分離的,並與一個5針連接針插座連接。 在5個引腳插座中,使用4 V,3G,GND,7個引腳(TX 1),8個引腳(RX 1)。
如果事先設置了Xbee模塊,以便可以事先使用XBee設置軟件XCTU連接到協調器,則GR-AZDUKI一側的程序是不必要的。
通訊與GR-ADZUKI SERIAL1 SAMPLE進行了檢查。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Serialout/Serialout1.ino
XBee WiFi無法使用,因為它消耗更少的電力。

GR-ADZUKI SERVO MOTOR

GR-ADZUKIにはサーボモーター用ピンヘッダがあります。
小型のサーボモータが使用できます。
マイクロサーボ9g SG-90を使用します。
http://akizukidenshi.com/catalog/g/gM-08761/
3ピンコネクトはどちらの向きにもさせるので、ケーブルをさす向きに注意してください。
サーボモータ制御ピンは、4ピンが割り当てられています。
プログラムは、SERVOのSWEEPが利用できます。
https://www.arduino.cc/en/Tutorial/Sweep

左ボタンを押すとサーボホーンを180度往復させるプログラムを作成しました。
プログラムの説明をします。

#include <Servo.h>
サーボを使用するのでヘッダファイルをインクルードします。
サーボとボタンのピンを宣言します。
Servo myservo; // create servo object to control a servo
const int L_button = 3; // the number of the pushbutton pin

サーボ位置とボタン状態を宣言します。
int pos = 0; // variable to store the servo position
int L_buttonState = 0; // variable for reading the pushbutton status

setup()関数では、サーボモータの制御ピンに4ピンを割り当てます。
myservo.attach(4); // attaches the servo on pin 4 to the servo object
サーボの初期値を書き込みます。
myservo.write(pos); // tell servo to go to position in variable ‘pos’

左ボタンを入力に設定します。
pinMode(L_buttonState, INPUT_PULLUP);

loop()関数では、まず左ボタンの状態を読み込みます。
L_buttonState = digitalRead(L_button);

ボタンが押されているとき1度ずつ10ms毎に動かします。
if (L_buttonState == LOW)
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 105ms for the servo to reach the position
}
180度まで行くと反転し、0度まで10ms毎に動かします。
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 10ms for the servo to reach the position
}
}

サンプルプログラムは以下にあります。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Servo/Servo.ino

GR-ADZUKI has pin headers for servo motors.
A compact servo motor can be used.

Micro servo 9 g SG-90 is used.
http://akizukidenshi.com/catalog/g/gM-08761/
Pay attention to the direction that the cable is pointing, because 3-pin connect is made in either direction.
The servomotor control pin has 4 pins assigned.
SWEEP of SERVO is available for the program.
https://www.arduino.cc/en/Tutorial/Sweep

Pressing the left button created a program that reciprocates the servo horn 180 degrees.
I will explain the program.

#include <Servo.h>
Because we use servo, include header file.
Declare servo and button pins.
Servo myservo; // create servo object to control a servo
const int L_button = 3; // the number of the pushbutton pin

Declare servo position and button state.
int pos = 0; // variable to store the servo position
int L_buttonState = 0; // variable for reading the pushbutton status

The setup() function assigns pin 4 to the control pin of the servomotor.
myservo.attach(4); // attaches the servo on pin 4 to the servo object
Write initial value of servo.
myservo.write(pos); // tell servo to go to position in variable ‘pos’

Set the left button to input.
pinMode(L_buttonState, INPUT_PULLUP);

In the loop() function, first read the state of the left button.
L_buttonState = digitalRead(L_button);

When the button is pressed, move it by 1 degree every 10 ms.
if (L_buttonState == LOW)
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 105ms for the servo to reach the position
}
When it goes to 180 degrees it flips and it moves every 10 ms to 0 °.
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 10ms for the servo to reach the position
}
}

The sample program is below.
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Servo/Servo.ino

GR-ADZUKI具有用於伺服電機的引腳。
一個緊湊的伺服電機可以使用。

使用微型伺服9克SG-90。
http://akizukidenshi.com/catalog/g/gM-08761/

注意電纜指向的方向,因為3針連接是在任一方向上進行的。
伺服電機控制引腳有4個引腳分配。
SERVO SWEEP可用於該程序。
https://www.arduino.cc/en/Tutorial/Sweep

按下左按鈕創建一個程序,使伺服喇叭往復180度。
我會解釋一下這個程序。

#include <Servo.h>
因為我們使用伺服,所以包含頭文件。
聲明伺服和按鈕引腳。
Servo myservo; // create servo object to control a servo
const int L_button = 3; // the number of the pushbutton pin

聲明伺服位置和按鈕狀態。
int pos = 0; // variable to store the servo position
int L_buttonState = 0; // variable for reading the pushbutton status

setup()函數將引腳4分配給伺服電機的控制引腳。
myservo.attach(4); // attaches the servo on pin 4 to the servo object
寫伺服的初始值。
myservo.write(pos); // tell servo to go to position in variable ‘pos’

設置左鍵進行輸入。
pinMode(L_buttonState, INPUT_PULLUP);

在loop()函數中,首先讀取左邊按鈕的狀態。
L_buttonState = digitalRead(L_button);

當按下按鈕時,每10毫秒移動1度。
if (L_buttonState == LOW)
{
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 105ms for the servo to reach the position
}
當它達到180度時,它會翻轉,每10毫秒移動一次,直到0度。
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(10); // waits 10ms for the servo to reach the position
}
}

示例程序如下。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/Servo/Servo.ino

GR-ADZUKI MAGNETOMETER

GR-ADZUKIには、基板上に加速度センサー(アナログ出力)、デジタルコンパス(I2C通信)用DIPピンソケットが装備されています。
今回は、デジタルコンパスを使用してみます。

3軸ディジタルコンパスモジュール HMC5883L
http://akizukidenshi.com/catalog/g/gM-06820/
(デジタルコンパスは、販売終了か、今取扱いできない商品です。)

データシート
https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf#search=%27HMC5338L%27

2つのソケットのうち照度センサ側のソケットが磁気センサーのソケットになります。
磁気センサモジュールは、ピンのはんだ付け必要です。
ピンのはんだ付けが済んだら、向きを間違えないように差し込みます。
ソケットの凹みがある側とモジュール基板上の凹みの絵がある側を揃えて差し込みます。
今回はI2C通信を使用します。
ピン配置は、
7ピン SCL クロック
8ピン SDA データ
となっています。

プログラムの説明をします。
まずI2Cライブラリを使用するために
#include <Wire.h> //I2C Arduino Library
を宣言します。

setup()関数でシリアル通信の開始を行っています。
Serial.begin(9600); // start serial for output
次にI2C通信の開始を行います。
Wire.begin(); // join i2c bus (address optional for master)

続いて初期化を行います。
Wire.beginTransmission(address)
これでセンサーのアドレスを設定ます。
レジスタ0x02を0x00に設定します。この設定で連続測定モードになります。
//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(0x1E); //open communication with HMC5883
Wire.write(0x02); //select mode register
Wire.write(0x00); //continuous measurement mode
Wire.endTransmission();

loop()関数でデータを読み込みます。
X軸レジスタxを設定します。
//Tell the HMC5883 where to begin reading data
Wire.beginTransmission(0x1E);
Wire.write(0x03); //select register 3, X MSB register
Wire.endTransmission();

6バイト読み出します。
//Read data from each axis, 2 registers per axis
Wire.requestFrom(0x1E, 6);
if(6<=Wire.available())
{
x = Wire.read()<<8; //X msb
x |= Wire.read(); //X lsb
z = Wire.read()<<8; //Z msb
z |= Wire.read(); //Z lsb
y = Wire.read()<<8; //Y msb
y |= Wire.read(); //Y lsb
}

X軸とY軸の角度から方位を計算します。
float rad = atan2(y,x);

ラジアン単位を角度単位に変換します。
float degree = rad * 180 / M_PI;
if(degree <0){
degree = 360 + degree;
}

最後に結果をシリアルモニタに送ります。
//Print out values of each axis
Serial.print(“x: “);
Serial.print(x);
Serial.print(” y: “);
Serial.print(y);
Serial.print(” z: “);
Serial.print(z);
Serial.print(” degree: “);
Serial.println(degree);

250ms毎に繰り返します。
delay(250);

サンプルプログラムは以下にあります。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/compass/compass.ino

GR-ADZUKI is equipped with a DIP pin socket for acceleration sensor (analog output) and digital compass (I2C communication) on the board.
This time I will try using the digital compass.

3 Axis Digital Compass Module HMC5883L
http://akizukidenshi.com/catalog/g/gM-06820/
(The digital compass is a product that can not be handled now, because it is sold out.)

Data sheet
https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf#search=%27HMC5338L%27

Of the two sockets, the socket on the illuminance sensor side becomes the socket of the magnetic sensor.
Magnetic sensor module requires pin soldering.
After soldering the pin, insert it so as not to mistake the direction.
Insert the side where the socket is dented and the side with the indentation on the module board aligned.
This time I will use I2C communication.
The pin arrangement is as follows.
7 pin SCL clock
8-pin SDA data

I will explain the program.
First of all, in order to use the I2C library, we make the following declaration.
#include <Wire.h> // I2C Arduino Library

Serial communication is started with setup () function.
Serial.begin(9600); // start serial for output
Next, start I2C communication.
Wire.begin(); // join i2c bus (address optional for master)

Then initialize it.
Wire.beginTransmission(address)
This sets the address of the sensor.
Set register 0x02 to 0x00. With this setting, continuous measurement mode is set.
//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(0x1E); //open communication with HMC5883
Wire.write(0x02); //select mode register
Wire.write(0x00); //continuous measurement mode
Wire.endTransmission();

Read data with the loop () function.
Set X axis register x.
//Tell the HMC5883 where to begin reading data
Wire.beginTransmission(0x1E);
Wire.write(0x03); //select register 3, X MSB register
Wire.endTransmission();

Read 6 bytes.
//Read data from each axis, 2 registers per axis
Wire.requestFrom(0x1E, 6);
if(6<=Wire.available())
{
x = Wire.read()<<8; //X msb
x |= Wire.read(); //X lsb
z = Wire.read()<<8; //Z msb
z |= Wire.read(); //Z lsb
y = Wire.read()<<8; //Y msb
y |= Wire.read(); //Y lsb
}

Calculate the bearing from the angle of X axis and Y axis.
float rad = atan2(y,x);

Convert radians to angle units.
float degree = rad * 180 / M_PI;
if(degree <0){
degree = 360 + degree;
}

Finally, we send the result to the serial monitor.
//Print out values of each axis
Serial.print(“x: “);
Serial.print(x);
Serial.print(” y: “);
Serial.print(y);
Serial.print(” z: “);
Serial.print(z);
Serial.print(” degree: “);
Serial.println(degree);

Repeat every 250 ms.
delay(250);

The sample program is below.
https://github.com/jendo1969/GR-ADZUKI2/blob/master/compass/compass.ino

GR-ADZUKI在板上配有用於加速度傳感器(模擬輸出)和數字羅盤(I2C通信)的DIP引腳插座。
這次我會嘗試使用數字指南針。

3軸數字羅盤模塊 HMC5883L
http://akizukidenshi.com/catalog/g/gM-06820/
(數字羅盤是一種現在無法處理的產品,因為它已經售罄了。)

數據表
https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf#search=%27HMC5338L%27

在這兩個插座中,照度傳感器側的插座成為磁性傳感器的插座。
磁性傳感器模塊需要引腳焊接。
在焊接引腳之後,將其插入以免錯誤方向。
將插座凹陷的一側和模塊板上缺口的一側對齊。
這次我將使用I2C通信。
引腳排列如下。
7引腳SCL時鐘
8引腳SDA數據

我會解釋一下這個程序。
首先聲明以下使用I2C庫。

#include <Wire.h> //I2C Arduino Library

串行通信使用setup()函數啟動。
Serial.begin(9600); // start serial for output
接下來,開始I2C通信。
Wire.begin(); // join i2c bus (address optional for master)

然後初始化它。
Wire.beginTransmission(address)
這設置了傳感器的地址。
將寄存器0x02設置為0x00。 使用此設置,將設置連續測量模式。
//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(0x1E); //open communication with HMC5883
Wire.write(0x02); //select mode register
Wire.write(0x00); //continuous measurement mode
Wire.endTransmission();

用loop()函數讀取數據。
設置X軸寄存器x。
//Tell the HMC5883 where to begin reading data
Wire.beginTransmission(0x1E);
Wire.write(0x03); //select register 3, X MSB register
Wire.endTransmission();

讀取6個字節。
//Read data from each axis, 2 registers per axis
Wire.requestFrom(0x1E, 6);
if(6<=Wire.available())
{
x = Wire.read()<<8; //X msb
x |= Wire.read(); //X lsb
z = Wire.read()<<8; //Z msb
z |= Wire.read(); //Z lsb
y = Wire.read()<<8; //Y msb
y |= Wire.read(); //Y lsb
}

從X軸和Y軸的角度計算軸承。
float rad = atan2(y,x);

將弧度轉換為角度單位。
float degree = rad * 180 / M_PI;
if(degree <0){
degree = 360 + degree;
}

最後,我們將結果發送到串行監視器。
//Print out values of each axis
Serial.print(“x: “);
Serial.print(x);
Serial.print(” y: “);
Serial.print(y);
Serial.print(” z: “);
Serial.print(z);
Serial.print(” degree: “);
Serial.println(degree);

每250毫秒重複一次。
delay(250);

示例程序如下。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/compass/compass.ino

GR-ADZUKI ACCELEROMETER

GR-ADZUKIには、基板上に加速度センサー(アナログ出力)、デジタルコンパス(I2C通信)用DIPピンソケットが装備されています。
今回は、加速度センサを使用してみます。
3軸加速度センサモジュール KXSC7-2050
http://akizukidenshi.com/catalog/g/gK-07243/
データシート
http://kionixfs.kionix.com/en/datasheet/KXTC9-2050%20Specifications%20Rev%202.pdf#search=%27KXSC7+datasheet%27

2つのソケットのうちUSB側のソケットが加速度センサーのソケットになります。
加速度センサモジュールは、ピンのはんだ付け必要です。
ピンのはんだ付けが済んだら、向きを間違えないように差し込みます。
ソケットの凹みがある側とモジュール基板上の凹みの絵がある側を揃えて差し込みます。

ピン配置は、
アナログ入力A3 X軸出力
アナログ入力A4 Y軸出力
アナログ入力A5 Z軸出力
となっています。

プログラムの説明をします。

まず、ピンの定義をします。
const int X_Axis = A3;
const int Y_Axis = A4;
const int Z_Axis = A5;

次に加速度と傾きの角度を保持する変数を宣言します。
double X_Value = 0;
double Y_Value = 0;
double Z_Value = 0;

double X_degree = 0;
double Y_degree = 0;
double Z_degree = 0;

setup()関数でシリアル通信の開始を行っています。
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
}

loop()関数では、各軸の加速度の値を取得しします。
void loop() {
// read the value from the sensor:
X_Value = (double)analogRead(X_Axis) – 512;
Y_Value = (double)analogRead(Y_Axis) – 512;
Z_Value = (double)analogRead(Z_Axis) – 512;
加速度の0点が512なので加速度=0の値を0にするために512を引いています。

傾きを次に計算します。逆三角関数を使用しています。
X_degree = atan(X_Value / sqrt(Y_Value*Y_Value+Z_Value*Z_Value)) * 180 / PI;
Y_degree = atan(Y_Value / sqrt(X_Value*X_Value+Z_Value*Z_Value)) * 180 / PI;
Z_degree = atan(Z_Value / sqrt(X_Value*X_Value+Y_Value*Y_Value)) * 180 / PI;
最後の*180/PIは、ラジアン単位を角度単位に変換するための物です。
PIは、円周率の定数で、値は、3.14159です。

最後に結果をシリアルモニタに送ります。
// send sensor values:
Serial.print(“(x,y,z)=(“);
Serial.print(X_Value);
Serial.print(“, “);
Serial.print(Y_Value);
Serial.print(“, “);
Serial.print(Z_Value);
Serial.print(“), Tx=”);
Serial.print(X_degree);
Serial.print(“, Ty=”);
Serial.print(Y_degree);
Serial.print(“, Tz=”);
Serial.print(Z_degree);
Serial.println();

300msecごとに処理を繰り返します。
delay(300);

サンプルプログラムは以下にあります。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/acceleration/acceleration.ino

 

GR-ADZUKI is equipped with a DIP pin socket for acceleration sensor (analog output) and digital compass (I2C communication) on the board.
This time, I will try using the acceleration sensor.
Three-axis acceleration sensor module KXSC 7-2050
http://akizukidenshi.com/catalog/g/gK-07243/
Data sheet
http://kionixfs.kionix.com/en/datasheet/KXTC9-2050%20Specifications%20Rev%202.pdf#search=%27KXSC7+datasheet%27

Among the two sockets, the socket on the USB side becomes the socket of the acceleration sensor.
For the acceleration sensor module, pin soldering is necessary.
After soldering the pin, insert it so as not to mistake the direction.
Insert the side where the socket is dented and the side with the indentation on the module board aligned.

The pin arrangement is as shown below.
analog input A3 to X axis output
Analog input A4 to Y axis output
Analog input A5 to Z axis output

I will explain the program.

First, I will define pin.
const int X_Axis = A3;
const int Y_Axis = A4;
const int Z_Axis = A5;

Next we declare variables that hold the angles of acceleration and slope.
double X_Value = 0;
double Y_Value = 0;
double Z_Value = 0;

double X_degree = 0;
double Y_degree = 0;
double Z_degree = 0;

Serial communication is started with setup() function.
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
}

In the loop() function, we obtain the acceleration vAalue of each axis.
void loop() {
// read the value from the sensor:
X_Value = (double)analogRead(X_Axis) – 512;
Y_Value = (double)analogRead(Y_Axis) – 512;
Z_Value = (double)analogRead(Z_Axis) – 512;
The 0 point of acceleration is 512. In order to set the acceleration 0 value to 0, 512 is subtracted from the value.

Then calculate the slope. Inverse trigonometric function is used.
X_degree = atan(X_Value / sqrt(Y_Value*Y_Value+Z_Value*Z_Value)) * 180 / PI;
Y_degree = atan(Y_Value / sqrt(X_Value*X_Value+Z_Value*Z_Value)) * 180 / PI;
Z_degree = atan(Z_Value / sqrt(X_Value*X_Value+Y_Value*Y_Value)) * 180 / PI;
The final * 180 / PI is for converting radian units to angular units.
PI is a constant of Pi, the value is 3.14159.

Finally, we send the result to the serial monitor.
// send sensor values:
Serial.print(“(x,y,z)=(“);
Serial.print(X_Value);
Serial.print(“, “);
Serial.print(Y_Value);
Serial.print(“, “);
Serial.print(Z_Value);
Serial.print(“), Tx=”);
Serial.print(X_degree);
Serial.print(“, Ty=”);
Serial.print(Y_degree);
Serial.print(“, Tz=”);
Serial.print(Z_degree);
Serial.println();

Repeat processing every 300 msec.
delay(300);

The sample program is below.
https://github.com/jendo1969/GR-ADZUKI2/blob/master/acceleration/acceleration.ino

 

GR-ADZUKI在板上配有用於加速度傳感器(模擬輸出)和數字羅盤(I2C通信)的DIP引腳插座。
這一次,我會嘗試使用加速度傳感器。
三軸加速度傳感器模塊KXSC 7-2050
http://akizukidenshi.com/catalog/g/gK-07243/
數據表
http://kionixfs.kionix.com/en/datasheet/KXTC9-2050%20Specifications%20Rev%202.pdf#search=%27KXSC7+datasheet%27

在這兩個插座中,USB端的插座成為加速度傳感器的插座。
對於加速度傳感器模塊,引腳焊接是必要的。
在焊接引腳之後,將其插入以免錯誤方向。
將插座凹陷的一側和模塊板上缺口的一側對齊。

引腳排列如下。
模擬輸入A3 X軸輸出
模擬輸入A4 Y軸輸出
模擬輸入A5 Z軸輸出

我會解釋一下這個程序。

首先,我將定義引腳。
const int X_Axis = A3;
const int Y_Axis = A4;
const int Z_Axis = A5;

接下來我們聲明包含加速度和斜率角度的變量。
double X_Value = 0;
double Y_Value = 0;
double Z_Value = 0;

double X_degree = 0;
double Y_degree = 0;
double Z_degree = 0;

setup()関数でシリアル通信の開始を行っています。
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
}

在loop()函數中,我們獲得每個軸的加速度值。
void loop() {
// read the value from the sensor:
X_Value = (double)analogRead(X_Axis) – 512;
Y_Value = (double)analogRead(Y_Axis) – 512;
Z_Value = (double)analogRead(Z_Axis) – 512;
加速度的0點是512。 要將加速度= 0的值減小到0,將從該值中減去512。

然後計算斜率。 使用反三角函數
X_degree = atan(X_Value / sqrt(Y_Value*Y_Value+Z_Value*Z_Value)) * 180 / PI;
Y_degree = atan(Y_Value / sqrt(X_Value*X_Value+Z_Value*Z_Value)) * 180 / PI;
Z_degree = atan(Z_Value / sqrt(X_Value*X_Value+Y_Value*Y_Value)) * 180 / PI;
最後的* 180 / PI用於將弧度單位轉換為角度單位。
PI是一個常數Pi,值是3.14159。

最後,我們將結果發送到串行監視器。
// send sensor values:
Serial.print(“(x,y,z)=(“);
Serial.print(X_Value);
Serial.print(“, “);
Serial.print(Y_Value);
Serial.print(“, “);
Serial.print(Z_Value);
Serial.print(“), Tx=”);
Serial.print(X_degree);
Serial.print(“, Ty=”);
Serial.print(Y_degree);
Serial.print(“, Tz=”);
Serial.print(Z_degree);
Serial.println();

每300毫秒重複處理一次。
delay(300);

示例程序如下。
https://github.com/jendo1969/GR-ADZUKI2/blob/master/acceleration/acceleration.ino