1
1
// ---------------------------------------------------------------------------
2
2
// Created by Coding Array - we@CodingArray.cc
3
3
// Copyright 2012 License: GNU GPL v3 http://www.gnu.org/licenses/gpl-3.0.html
4
- // Ultrasonic Obstacle Avoidance 4WD Rubber Wheel + 4WD Mecanum Wheel
4
+ // Ultrasonic Obstacle Avoidance Example for 4WD Rubber Wheel + 4WD Mecanum Wheel
5
5
// ---------------------------------------------------------------------------
6
6
7
7
#include < CA_MotorShield.h> // 코딩어레이 모터 쉴드 라이브러리 포함
13
13
#define MAX_DISTANCE 300 // 초음파 센서가 감지할 수 있는 최대 거리 설정 (300cm)
14
14
15
15
// 모터 속도 설정
16
- #define MIN_SPEED 80 // 모터가 돌 수 있는 최소 속도( TT모터 스타트 업 토크 = PWM 값 80 )
16
+ #define MIN_SPEED 40 // 모터가 동작하기 시작하는 최소 속도, 속도 최대값을 100으로 조절할 때의 기준값
17
17
18
- #define FORWARD_SPEED 150 // 전진 최대 속도(PWM 값), 초음파 센서 감지를 위해 보다 천천히 전진
19
- #define BACKWARD_SPEED 150 // 후진 최대 속도(PWM 값)
20
- #define TURN_SPEED 180 // 좌회전, 우회전 최대 속도(PWM 값) : 속도 값을 변경하면 회전 각도 변경
18
+ #define FORWARD_SPEED 80 // 전진 시 설정 가능한 최대 속도, 속도 최대값 100 중 80으로 설정하여 안정적인 전진을 위함
19
+ #define BACKWARD_SPEED 80 // 후진 시 설정 가능한 최대 속도, 속도 최대값 100 중 80으로 설정
20
+ #define TURN_SPEED 100 // 좌회전 및 우회전 시 설정 가능한 최대 속도, 속도 최대값을 100으로 설정
21
21
22
22
#define OBSTACLE_THRESHOLD 80 // 장애물을 감지하는 거리 임계값 (80cm)
23
23
24
- // 모터 쉴드와 모터 초기화
25
- CA_MotorShield DC_Motor (0x60 ); // 모터 쉴드 객체 생성
26
- CA_DCMotor *motor1 = DC_Motor.getMotor(1 ); // 첫 번째 모터 연결
27
- CA_DCMotor *motor2 = DC_Motor.getMotor(2 ); // 두 번째 모터 연결
28
- CA_DCMotor *motor3 = DC_Motor.getMotor(3 ); // 세 번째 모터 연결
29
- CA_DCMotor *motor4 = DC_Motor.getMotor(4 ); // 네 번째 모터 연결
24
+ // 모터 쉴드 객체를 생성하고 I2C 주소를 초기화합니다.
25
+ CA_MotorShield dcMotor (0x60 );
26
+
27
+ // 각 모터에 대한 포인터를 초기화합니다.
28
+ CA_DCMotor *motor1 = dcMotor.getMotor(1 ); // 첫 번째 모터 연결
29
+ CA_DCMotor *motor2 = dcMotor.getMotor(2 ); // 두 번째 모터 연결
30
+ CA_DCMotor *motor3 = dcMotor.getMotor(3 ); // 세 번째 모터 연결
31
+ CA_DCMotor *motor4 = dcMotor.getMotor(4 ); // 네 번째 모터 연결
30
32
31
33
// 초음파 센서 객체 생성
32
34
NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // 초음파 센서 설정
33
35
34
- // RC카의 이동 방향을 나타내는 상수 정의
35
- #define C_LEFT 1 // 좌회전
36
- #define C_RIGHT 2 // 우회전
37
- #define C_FORWARD 3 // 전진
38
- #define C_BACKWARD 4 // 후진
36
+ // 코딩어레이 스마트 RC카 방향 전환 제어 상수
37
+ // 이 상수들은 메카넘 휠을 장착한 코딩어레이 스마트 RC카의 다양한 이동 및 회전 동작을 정의합니다.
38
+ // 각 상수는 RC카의 특정한 동작 모드를 나타내며, 이를 통해 RC카를 다양한 방향으로 조작할 수 있습니다.
39
+ #define CMD_RELEASE 0 // 정지: 코딩어레이 스마트 RC카를 정지시킵니다.
40
+ #define CMD_FORWARD 1 // ↑: 코딩어레이 스마트 RC카를 전진시킵니다.
41
+ #define CMD_BACKWARD 2 // ↓: 코딩어레이 스마트 RC카를 후진시킵니다.
42
+ #define CMD_LEFT 3 // ←: 코딩어레이 스마트 RC카를 좌측으로 회전시킵니다.
43
+ #define CMD_RIGHT 4 // →: 코딩어레이 스마트 RC카를 우측으로 회전시킵니다.
39
44
40
45
/* *
41
46
* @brief RC카의 초기 설정을 수행하는 함수입니다.
@@ -52,7 +57,8 @@ void setup() {
52
57
Serial.begin (9600 ); // 시리얼 통신을 9600 보드레이트로 시작합니다. 이를 통해 컴퓨터와 데이터를 주고받을 수 있습니다.
53
58
Serial.println (" ........Start........" ); // 시리얼 모니터에 "........Start........"을 출력합니다. 이는 프로그램이 시작되었음을 나타냅니다.
54
59
55
- if (!DC_Motor.begin ()) { // 모터 쉴드를 기본 주파수인 1.6KHz로 시작합니다. 만약 모터 쉴드를 찾지 못하면 오류 메시지를 출력합니다.
60
+ // 모터 쉴드를 초기화 및 모터의 동작 주파수를 1.6Khz로 설정합니다.
61
+ if (!dcMotor.begin ()) { // 모터 쉴드를 기본 주파수인 1.6KHz로 시작합니다. 만약 모터 쉴드를 찾지 못하면 오류 메시지를 출력합니다.
56
62
Serial.println (" 모터 쉴드를 찾을 수 없습니다. 배선을 확인하세요." ); // 모터 쉴드를 찾지 못했다는 메시지를 시리얼 모니터에 출력합니다.
57
63
while (1 )
58
64
; // 무한 루프에 빠져 프로그램을 멈춥니다. 이는 모터 쉴드가 제대로 연결되지 않았을 경우를 나타냅니다.
@@ -86,8 +92,9 @@ void loop() {
86
92
backwardLeftTurn (500 ); // 0.5초간 대기하여 RC카가 회전 후 안정화될 수 있도록 합니다.
87
93
} else {
88
94
// 장애물이 멀리 있을 경우, RC카는 계속 전진합니다.
89
- setMotorsDirection (C_FORWARD , FORWARD_SPEED); // RC카를 전진 방향으로 설정하고 전진합니다.
95
+ setMotorsDirection (CMD_FORWARD , FORWARD_SPEED); // RC카를 전진 방향으로 설정하고 전진합니다.
90
96
delay (500 ); // 대기시간 동안 대기하여 RC카가 회전 후 안정화될 수 있도록 합니다.
97
+ }
91
98
}
92
99
93
100
/* *
@@ -103,10 +110,10 @@ void loop() {
103
110
*/
104
111
void backwardLeftTurn (unsigned long delayTime) {
105
112
StopAllMotors (); // RC카가 정지합니다.
106
- setMotorsDirection (C_BACKWARD , BACKWARD_SPEED); // RC카를 후진 방향으로 설정하고 후진 속도로 이동을 시작합니다.
113
+ setMotorsDirection (CMD_BACKWARD , BACKWARD_SPEED); // RC카를 후진 방향으로 설정하고 후진 속도로 이동을 시작합니다.
107
114
StopAllMotors (); // RC카가 정지합니다.
108
115
delay (delayTime); // 대기시간 동안 대기하여 RC카가 회전 후 안정화될 수 있도록 합니다.
109
- setMotorsDirection (C_LEFT , TURN_SPEED); // RC카의 방향을 왼쪽으로 변경하고 회전 속도로 회전을 시작합니다.
116
+ setMotorsDirection (CMD_LEFT , TURN_SPEED); // RC카의 방향을 왼쪽으로 변경하고 회전 속도로 회전을 시작합니다.
110
117
StopAllMotors (); // RC카가 정지합니다.
111
118
delay (delayTime); // 대기시간 동안 대기하여 RC카가 회전 후 안정화될 수 있도록 합니다.
112
119
}
@@ -148,27 +155,27 @@ unsigned int measureDistance() {
148
155
* 전진, 후진 등의 방향에 따라 모터들의 회전 방향을 설정합니다. 이를 통해 RC카가
149
156
* 원하는 방향으로 움직일 수 있도록 합니다.
150
157
*
151
- * @param direction 설정할 모터의 방향. C_LEFT, C_RIGHT, C_FORWARD, C_BACKWARD 중 하나를 사용합니다.
158
+ * @param direction 설정할 모터의 방향. CMD_LEFT, CMD_RIGHT, CMD_FORWARD, CMD_BACKWARD 중 하나를 사용합니다.
152
159
* @param speed 모터가 도달할 속도. 이 속도는 감속 또는 증가됩니다.
153
160
*/
154
161
void setMotorsDirection (uint8_t direction, uint8_t speed) {
155
162
// 모터의 방향을 설정합니다.
156
- if (direction == C_LEFT ) {
163
+ if (direction == CMD_LEFT ) {
157
164
motor1->run (BACKWARD); // 1번 모터를 뒤로 돌려 왼쪽으로 회전시킵니다.
158
165
motor2->run (BACKWARD); // 2번 모터도 뒤로 돌려 왼쪽으로 회전시킵니다.
159
166
motor3->run (FORWARD); // 3번 모터를 앞으로 돌려 왼쪽으로 회전시킵니다.
160
167
motor4->run (FORWARD); // 4번 모터도 앞으로 돌려 왼쪽으로 회전시킵니다.
161
- } else if (direction == C_RIGHT ) {
168
+ } else if (direction == CMD_RIGHT ) {
162
169
motor1->run (FORWARD); // 1번 모터를 앞으로 돌려 오른쪽으로 회전시킵니다.
163
170
motor2->run (FORWARD); // 2번 모터도 앞으로 돌려 오른쪽으로 회전시킵니다.
164
171
motor3->run (BACKWARD); // 3번 모터를 뒤로 돌려 오른쪽으로 회전시킵니다.
165
172
motor4->run (BACKWARD); // 4번 모터도 뒤로 돌려 오른쪽으로 회전시킵니다.
166
- } else if (direction == C_FORWARD ) {
173
+ } else if (direction == CMD_FORWARD ) {
167
174
motor1->run (FORWARD); // 모든 모터를 앞으로 돌려 RC카가 전진하도록 합니다.
168
175
motor2->run (FORWARD);
169
176
motor3->run (FORWARD);
170
177
motor4->run (FORWARD);
171
- } else if (direction == C_BACKWARD ) {
178
+ } else if (direction == CMD_BACKWARD ) {
172
179
motor1->run (BACKWARD); // 모든 모터를 뒤로 돌려 RC카가 후진하도록 합니다.
173
180
motor2->run (BACKWARD);
174
181
motor3->run (BACKWARD);
0 commit comments