#シリーズ目次
- セグウェイを自作してみた ~材料編~
- セグウェイを自作してみた ~電子回路組立編~
- セグウェイを自作してみた ~プログラム編~
- セグウェイを自作してみた ~完成編~
この分野では門外漢の私が、「電子制御」をまったく勉強せずに
セグウェイを作ってみようと思います。
#配線図
基本的にモーターシールド と arduino は 全部接続する(わからないから)
ただし 下表の ピン はジャイロセンサーにつなぐ
arduino | ジャイロセンサー | 上図 |
---|---|---|
3.3v | VCC | 赤線 |
GND | GND | 緑線 |
A5 | SCL | 青線 |
A4 | SDA | 黒線 |
- モーターの動力は, 12V のバッテリー×2
- arduino の 動力は, モバイルバッテリーから供給するため
始動するには
- バッテリーとモーターシールドの間の「こたつスイッチ」と
- モバイルバッテリーのスイッチを
ON にして始動します。
#テスト
上図の状態で arduino に 以下の プログラムを 入れて
ジャイロセンサーのログを取ってみます。
ジャイロセンサーの制御のために下記のモジュールを使います。
これは、arduino に標準で入っていないので、
下記の URL を参考に 各環境に モジュールを追加してください
test.ino
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
/* MPU-6050 Accelerometer + Gyro */
MPU6050 accelgyro;
void setup() {
Wire.begin();
Serial.begin(9600);
// initialize device
accelgyro.initialize();
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}
void loop() {
int16_t ax, ay, az;
int16_t gx, gy, gz;
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
float acc_x = ax / 16384.0;
float acc_y = ay / 16384.0;
float acc_z = az / 16384.0;
float rate_X = atan2(acc_x, acc_z) * 360 / 2.0 / PI;
float rate_Y = atan2(acc_y, acc_z) * 360 / 2.0 / PI;
float rate_Z = atan2(acc_x, acc_y) * 180 / 2.0 / PI;
Serial.print(rate_X);
Serial.print("\t");
Serial.print(rate_Y);
Serial.print("\t");
Serial.print(rate_Z);
Serial.print("\t");
Serial.println("");
}
ログです。
MPU6050 connection successful
Initializing Mortor Driver digital pins...
3.80 -2.61 62.21
4.21 -2.29 59.24
3.96 -2.11 59.01
4.10 -2.42 60.26
3.86 -2.58 61.87
3.46 -2.83 64.63
4.27 -2.49 60.12
3.84 -2.40 60.95
4.26 -2.19 58.56
4.01 -2.33 60.09
3.95 -2.30 60.09
4.12 -2.50 60.62
3.65 -2.47 62.04
3.86 -2.14 59.49
3.87 -2.55 61.66
4.10 -2.40 60.14
3.74 -2.94 64.09
3.89 -2.22 59.84
3.85 -2.22 59.97
3.81 -3.00 64.11
3.96 -2.01 58.46
ジャイロセンサーを傾けてみて
ログの下表の値が思い通りに変化していたら 成功です。
rate_X | rate_Y | rate_Z |
---|---|---|
3.80 | -2.61 | 62.21 |
4.21 | -2.29 | 59.24 |
3.96 | -2.11 | 59.01 |
4.10 | -2.42 | 60.26 |
3.86 | -2.58 | 61.87 |
… | … | … |
#ジャイロセンサーについて
上表のログでは、短いので 分かりにくいですが
何もしなくても ジャイロセンサーの値は 動いています。
これを いちいちモーターに出力命令として送出していたら
モーター静止することができません
((((;゚Д゚))))ガクガクブルブル
ですので、プログラム側で、滑らかにする処理が必要であることがわかりました
次回は、プログラム編についてお届けします。