Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 3D modeling
- 프리미어
- PCB
- Premiere#프리미어
- arduino
- 22ww.tistory.com
- 리쏘페인
- micro-bit
- 3dmodeling
- 3D 모델링
- 패턴아트
- 3Dpen
- 3D프린팅
- Premiere
- 레이저커팅
- 3D모델링
- fusion360
- 3D PRINTING
- Eagle
- TouchSensor
- 3Dprinting
- FUSION 360
- 비트브릭
- BitBrick
- 정전식 터치센서
- 3D펜
- BrainCar
- LayerCutting
- 3d
- 무드등
Archives
- Today
- Total
CodingMaker
스마트 모빌리티(Smart Mobility)_ Arduino 코딩하기 본문
DCMotor Test 해보기 - 4개의 메카넘휠을 활용한 이동하기
사용모터쉴드 링크: http://www.adafruit.com/products/1438
아두이노 실행 후 파일-예제-Adafruit_MotorShield V2 Library-DCMotorTest
1. 바퀴 하나만 전진 1초 후 2초 멈춤 후진 1초 후 2초 멈춤 반복 코드 작성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("Could not find Motor Shield. Check wiring.");
while (1);
}
Serial.println("Motor Shield found.");
myMotor->setSpeed(150);
myMotor->run(FORWARD);
myMotor->run(RELEASE);
}
void loop() {
myMotor->run(FORWARD);
myMotor->setSpeed(255);
delay(1000);
myMotor->setSpeed(100);
delay(2000);
myMotor->run(BACKWARD);
myMotor->setSpeed(100);
delay(1000);
myMotor->setSpeed(255);
delay(2000);
myMotor->run(RELEASE);
delay(1000);
}
|
2. 4개 바퀴 모두 전진 후 멈춤 반복하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(255);
myMotor2->setSpeed(255);
myMotor3->setSpeed(255);
myMotor4->setSpeed(255);
}
void loop() {
myMotor1->run(FORWARD);
myMotor2->run(FORWARD);
myMotor3->run(FORWARD);
myMotor4->run(FORWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
}
|
3. 차체가 회전하지 않고 바로 수평이동
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(255);
myMotor2->setSpeed(255);
myMotor3->setSpeed(255);
myMotor4->setSpeed(255);
}
void loop() {
myMotor1->run(FORWARD);
myMotor2->run(BACKWARD);
myMotor3->run(FORWARD);
myMotor4->run(BACKWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(BACKWARD);
myMotor2->run(FORWARD);
myMotor3->run(BACKWARD);
myMotor4->run(FORWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
}
|
4. 대각선 4방향으로 움직이기(우상단, 좌상단, 우하단, 좌하단 45도 이동)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(255);
myMotor2->setSpeed(255);
myMotor3->setSpeed(255);
myMotor4->setSpeed(255);
}
void loop() {
myMotor1->run(RELEASE);
myMotor2->run(FORWARD);
myMotor3->run(RELEASE);
myMotor4->run(FORWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(FORWARD);
myMotor2->run(RELEASE);
myMotor3->run(FORWARD);
myMotor4->run(RELEASE);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(BACKWARD);
myMotor2->run(RELEASE);
myMotor3->run(BACKWARD);
myMotor4->run(RELEASE);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(RELEASE);
myMotor2->run(BACKWARD);
myMotor3->run(RELEASE);
myMotor4->run(BACKWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
}
|
5. 대각선 이동에 회전 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(255);
myMotor2->setSpeed(255);
myMotor3->setSpeed(255);
myMotor4->setSpeed(255);
}
void loop() {
myMotor1->run(RELEASE);
myMotor2->run(FORWARD);
myMotor3->run(RELEASE);
myMotor4->run(FORWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(FORWARD);
myMotor2->run(RELEASE);
myMotor3->run(FORWARD);
myMotor4->run(RELEASE);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(BACKWARD);
myMotor2->run(RELEASE);
myMotor3->run(BACKWARD);
myMotor4->run(RELEASE);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(RELEASE);
myMotor2->run(BACKWARD);
myMotor3->run(RELEASE);
myMotor4->run(BACKWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(FORWARD);
myMotor2->run(FORWARD);
myMotor3->run(BACKWARD);
myMotor4->run(BACKWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
myMotor1->run(BACKWARD);
myMotor2->run(BACKWARD);
myMotor3->run(FORWARD);
myMotor4->run(FORWARD);
delay(1000);
myMotor1->run(RELEASE);
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(2000);
}
|
6. 전진 후진 대각선 방향 이동을 시리얼 모니터에서 제어하기(시리얼 모니터에 해당 알파벳 or 숫자 입력후 Enter)
미션
- 시리얼 통신을 통해 문자 데이터(f, l, r, b, 1, 2, 3, 4, s)를 전송받는다.
- 각 문자에 따라 다음과 같이 차체가 움직일 수 있도록 코드를 작성한다.
- 공간이 좁다면 속력을 낮추거나 차체를 뒤집어 실습한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
char data = ' ';
void setup() {
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(255);
myMotor2->setSpeed(255);
myMotor3->setSpeed(255);
myMotor4->setSpeed(255);
}
void loop() {
if(Serial.available())
{
data = Serial.read();
}
if(data == 'f')
{
myMotor1->run(FORWARD); //전진
myMotor2->run(FORWARD);
myMotor3->run(FORWARD);
myMotor4->run(FORWARD);
delay(1000);
}
if(data == 'b')
{
myMotor1->run(BACKWARD); //후진
myMotor2->run(BACKWARD);
myMotor3->run(BACKWARD);
myMotor4->run(BACKWARD);
delay(1000);
}
if(data == 'l')
{
myMotor1->run(BACKWARD); //좌측이동
myMotor2->run(FORWARD);
myMotor3->run(BACKWARD);
myMotor4->run(FORWARD);
delay(1000);
}
if(data == 'r')
{
myMotor1->run(FORWARD); //우측이동
myMotor2->run(BACKWARD);
myMotor3->run(FORWARD);
myMotor4->run(BACKWARD);
delay(1000);
}
if(data == '3')
{
myMotor1->run(BACKWARD); //좌하단
myMotor2->run(RELEASE);
myMotor3->run(BACKWARD);
myMotor4->run(RELEASE);
delay(1000);
}
if(data == '1')
{
myMotor1->run(RELEASE); //좌상단
myMotor2->run(FORWARD);
myMotor3->run(RELEASE);
myMotor4->run(FORWARD);
delay(1000);
}
if(data == '4')
{
myMotor1->run(RELEASE); //우하단
myMotor2->run(BACKWARD);
myMotor3->run(RELEASE);
myMotor4->run(BACKWARD);
delay(1000);
}
if(data == '2')
{
myMotor1->run(FORWARD); //우상단
myMotor2->run(RELEASE);
myMotor3->run(FORWARD);
myMotor4->run(RELEASE);
delay(1000);
}
if(data == 's')
{
myMotor1->run(RELEASE); //정지
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
delay(1000);
}
if(data == 't')
{
myMotor1->run(BACKWARD); //회전
myMotor2->run(BACKWARD);
myMotor3->run(FORWARD);
myMotor4->run(FORWARD);
delay(1000);
}
}
|
7. 스마트폰에서 블루투스로 제어하기: 블루투스 이름 바꾸기, nrf toolbox 어플 설치(이미지는 아이폰용)
예제-KOCOAFAB-RC카-9.블루투스-bluetooth_1 실행 후 업로드 후 시리얼 모니터에서 블루투스 이름 바꾸기(AT+NAMEmyCAR) 원하는 이름으로
어플 설치(사진은 App Store 예시)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include <Adafruit_MotorShield.h>
#include <SoftwareSerial.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor1 = AFMS.getMotor(1);
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2);
Adafruit_DCMotor *myMotor3 = AFMS.getMotor(3);
Adafruit_DCMotor *myMotor4 = AFMS.getMotor(4);
SoftwareSerial BTSerial(4, 5);
char data = ' ';
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
Serial.println("Adafruit Motorshield v2 - DC Motor test!");
if (!AFMS.begin()) {
Serial.println("fail to find Motor Shield.");
while (1);
}
myMotor1->setSpeed(150);
myMotor2->setSpeed(150);
myMotor3->setSpeed(150);
myMotor4->setSpeed(150);
}
void loop() {
if (BTSerial.available())
{
char data = BTSerial.read();
Serial.println(data);
if (data == 'f')
{
myMotor1->run(FORWARD); //전진
myMotor2->run(FORWARD);
myMotor3->run(FORWARD);
myMotor4->run(FORWARD);
}
if (data == 'b')
{
myMotor1->run(BACKWARD); //후진
myMotor2->run(BACKWARD);
myMotor3->run(BACKWARD);
myMotor4->run(BACKWARD);
}
if (data == 'l')
{
myMotor1->run(BACKWARD); //좌측이동
myMotor2->run(FORWARD);
myMotor3->run(BACKWARD);
myMotor4->run(FORWARD);
}
if (data == 'r')
{
myMotor1->run(FORWARD); //우측이동
myMotor2->run(BACKWARD);
myMotor3->run(FORWARD);
myMotor4->run(BACKWARD);
}
if (data == '3')
{
myMotor1->run(BACKWARD); //좌하단
myMotor2->run(RELEASE);
myMotor3->run(BACKWARD);
myMotor4->run(RELEASE);
}
if (data == '1')
{
myMotor1->run(RELEASE); //좌상단
myMotor2->run(FORWARD);
myMotor3->run(RELEASE);
myMotor4->run(FORWARD);
}
if (data == '4')
{
myMotor1->run(RELEASE); //우하단
myMotor2->run(BACKWARD);
myMotor3->run(RELEASE);
myMotor4->run(BACKWARD);
}
if (data == '2')
{
myMotor1->run(FORWARD); //우상단
myMotor2->run(RELEASE);
myMotor3->run(FORWARD);
myMotor4->run(RELEASE);
}
if (data == 's')
{
myMotor1->run(RELEASE); //정지
myMotor2->run(RELEASE);
myMotor3->run(RELEASE);
myMotor4->run(RELEASE);
}
}
}
|
대표이미지
'Smart Mobility' 카테고리의 다른 글
스마트 모빌리티(Smart Mobility)_조립하기, Auduino 라이브러리 추가 (0) | 2022.10.23 |
---|