세그웨이를 자작해 보았다 ~전자 회로 조립편~
시리즈 목차
이 분야에서는 문외한의 내가 '전자제어'를 전혀 공부하지 않고
세그웨이를 만들어 보려고합니다.
배선도
기본적으로 모터 실드와 arduino는 모두 연결됩니다 (모르기 때문에)
그러나 아래 표의 핀은 자이로 센서에 연결됩니다.
arduino
자이로 센서
위 그림
3.3v
VCC
빨간 선
GND
GND
녹색선
A5
SCL
푸른 선
A4
SDA
검은 선
시작하려면
1. 배터리와 모터 실드 사이의 "코타츠 스위치"
2. 모바일 배터리 스위치
ON으로 시동합니다.
테스트
위 그림의 상태에서 arduino 에 다음 프로그램을 넣어
자이로 센서의 로그를 찍어보십시오.
자이로 센서 제어를 위해 다음 모듈을 사용합니다.
이것은 arduino에 표준으로 포함되어 있지 않으므로,
아래 URL을 참조하여 각 환경에 모듈을 추가하십시오.
MPU-6050 Accelerometer + Gyro
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
…
…
…
자이로 센서 정보
위 표의 로그에서는 짧기 때문에 이해하기 어렵습니다.
아무것도 하지 않아도 자이로 센서의 값은 움직이고 있습니다.
정지 상태의 rate_X 로그
이것을 일일이 모터에 출력 명령으로서 송출하고 있으면
모터 정지할 수 없음
(((((゚Д゚)))))
그래서 프로그램 측에서 부드럽게하는 처리가 필요하다는 것을 알았습니다.
다음에 프로그램편 에 대한 정보를 제공합니다.
Reference
이 문제에 관하여(세그웨이를 자작해 보았다 ~전자 회로 조립편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sasaco/items/b72819993790443877ec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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 로그
이것을 일일이 모터에 출력 명령으로서 송출하고 있으면
모터 정지할 수 없음
(((((゚Д゚)))))
그래서 프로그램 측에서 부드럽게하는 처리가 필요하다는 것을 알았습니다.
다음에 프로그램편 에 대한 정보를 제공합니다.
Reference
이 문제에 관하여(세그웨이를 자작해 보았다 ~전자 회로 조립편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sasaco/items/b72819993790443877ec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)