본문 바로가기 주메뉴 바로가기

1. 개요


어렵게 느껴지던 로봇암의 관절을 줄여 손쉽게 조립하고 제어할 수 있습니다.

서보를 3개 제어할 수 있는 모든 제어기를 사용할 수 있습니다. 제일 처음 아두이노 우노를 시작으로 마이크로 비트, 헥사보드, 코드위즈 등 다양한 보드를 이용해 보도록 하겠습니다. 

기본 제어, 조이스틱 등 다양한 센서 모듈 제어, 인공지능 제어 등을 교육할 수 있습니다.


2. 기본 조립 방법






2.1. 조립하기 전에


1. 전선의 색상


    케이블 색상에 대한 의미를 알고 있으면 조금 더 쉽게 입출력 장치를 연결할 수 있습니다.



  예시) 디지털 6번핀에 서보모터 케이블 및 조이스틱 연



 


2. 서보모터의 영점 (필수!!)


 서보모터는 0~180도를 움직이며, 보통 90도를 영점이라고 합니다. 쉽게 말하면 움직일 수 있는 각도의 중심입니다. 처음 개봉하는 서보모터의 경우 대부분 90도이지만 아닌 경우도 제법 되기 때문에 조립하기 전 꼭 영점으로 정렬를 해 주어야 합니다. 다른 각도로 정렬하는 제품도 있으나 중요한 것은 조립 전 원하는 각도로 정렬 후 조립해야 된다는 것이지요. 아래처럼 Arduino IDE와 mBlock5 로 각도를 제어하는 프로그램 작성하여 우노 보드에 업로드 후 서보모터를 연결하여 각도를 정렬합니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <Servo.h>
 
Servo SV_1;
 
void setup()  {
 
  SV_1.attach(4);
 
}
 
void loop()  {
 
  SV_1.write(90);
 
}
cs




 

3. 나사의 종류



  ① 작은 나사 : 서보혼과 서보모터의 축 연결 (서보모터팩에 동봉)
  ② 와샤머리 나사 : 서보모터와 MDF 부품의 연결 (서보모터팩에 동봉)
  ③ 접시머리 나사 : 서보혼과 MDF 부품의 연결 (드라이버&나사 팩에 동봉)
  ④ 플라스틱 스프링클립 : 로봇암, 전자부 고정 (드라이버&나사 팩에 동봉)

2.2. 조립하기


조이스틱을 사용하지 않는 경우 조립하지 않아도 됩니다^^


[영상으로 보기]



1. 그리퍼 조립







2. 그리퍼와 암 조립












 
3. 몸체 조립












 
4. 로봇암 전체 조립






 
5. 베이스 조립






 
6. 보드  조립











 
7. 배선



[ 추가활동 : 조이스틱 제어]

1. 조이스틱 조립





 
2. 배선

 

3. 아두이노 우노 - IDE





3.1. 로봇암 기초 동작


서보를 기본 각도만 주어 이동하는 방법과 목표 각도까지 +1도씩 부드럽게 움직이는 방법을 알아봅니다.


3.2. 티처블머신과 연동


웹캠을 활용하여 티처블머신으로 이미지 학습 후 P5를 이용하여 로봇암에 전달하여 분류 동작을 합니다.

기본 형식은 아래 사진과 같습니다.

티처블 머신은 계속하여 시리얼을 통해 분류 결과를 전송하기 때문에 전달되고 있는 데이터를 지우는 것이 포인트입니다.


3.3. 조이스틱 제어


조이스틱으로 로봇암을 조종합니다.


왼쪽 조이스틱 Y축 -> 몸체 좌우회전

                   Z축 -> 그리퍼 벌리기

오른쪽 조이스틱 X축 -> 로봇암 올리고 내리기
                      Z축 -> 그리퍼 닫기



동작 소스입니다.


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
// 조이스틱으로 공 옮기기
// 왼쪽 조이스틱 좌우를 움직이면 로봇암 몸체가 좌우로
// 오른 조이스틱 앞뒤로 움직이면 로봇암 팔이 앞뒤로 기울어짐
// 왼쪽 버튼 누르면 물건 놓기, 오른쪽 버튼 누르면 물건 잡기
#include <Servo.h>
 
Servo grip;      // 그리퍼서보
Servo arm;       // 암 서보   
Servo bottom;    // 몸통 서보
 
int left_Y = A1;     // 왼쪽 조이스틱 Y축(좌우) A1번핀 연결
int right_X = A2;    // 오른쪽 조이스틱 X축(위아래) A2번핀 연결
int bottom_i = 90;     // 몸통 회전 각도
int arm_i = 90;        // 암 회전 각도
int left_B = 8;       // 왼쪽 조이스틱 z축(누름) 디지털 8번핀  
int right_B = 9;      // 오른쪽 조이스틱 z축(누름) 디지털 9번핀
 
void setup() {
  Serial.begin(9600);
  pinMode(left_B, INPUT_PULLUP);    //왼쪽 조이스틱 누름 인풋 풀업
  pinMode(right_B, INPUT_PULLUP);   //오른쪽 조이스틱 누름 인풋 풀업
  bottom.attach(4);     // 몸통 서보 디지털 4번핀 연결
  arm.attach(5);        // 암 서보 디지털 5번핀 연결
  grip.attach(6);       // 그리퍼 서보 디지털 6번핀 연결
 
 
  // 서보모터 영점 및 각도는 업로드후 세부조정할 것
  bottom.write(90);  //<=방향 180 , =>방향 0  왼쪽 135,가운데 95, 오른쪽 55
  arm.write(90);     //팔 올리는 각도:90도, 내리는 각도:175도 
  grip.write(90);    //집게 잡는 각도:90도, 놓는 각도:50도
 
}
 
void loop() {
 
  //좌우로 이동
  if (analogRead(left_Y) > 700) {
    bottom_i++;
    bottom.write(bottom_i);
    delay(10);
    if (bottom_i > 135) bottom_i = 135;
  }
  if (analogRead(left_Y) < 300) {
    bottom_i--;
    bottom.write(bottom_i);
    delay(10);
    if (bottom_i < 55) bottom_i = 55;
  }
 
  //앞뒤로 이동
  if (analogRead(right_X) < 300) {
    arm_i++;
    arm.write(arm_i);
    delay(20);
    if (arm_i > 175) arm_i = 175;
  }
  if (analogRead(right_X) > 700) {
    arm_i--;
    arm.write(arm_i);
    delay(20);
    if (arm_i < 90) arm_i = 90;
  }
 
  //집게
  if (digitalRead(right_B) == 0) {  //잡기
    grip.write(90);
  }
  if (digitalRead(left_B) == 0) {  //놓기
    grip.write(45);
  }
}
cs

3.4. 허스키렌즈와 연동


허스키렌즈에 이미지 학습하여 물체를 분류할 수 있습니다.

아래 영상은 녹색공과 빨간색공을 학습하여 분류하는 영상입니다.


동작의 정확성을 위해 ID1,2는 빈 모습, 가져다 놓고 있는 모습(손가락이 보이는 모습)으로 하고 ID 3,4번을 각각 녹색, 빨강으로 하였습니다.


※ 허스키렌즈 사용법 보러가기 -> 링크 클릭!! 


4. 아두이노 우노 - 엠블록5


엠블록5는 아두이노 우노를 제어하는 블록형 코딩 중 가장 편리한 것 같습니다. 실시간 동작(라이브)와 업로드 2가지 모두 지원하고, 업로드 후에도 '업로드 모드 브로드 캐스트'라는 확장기능을 이용해 스프라이트와 소통할 수도 있습니다.




 

소스코드의 각도는 각 로봇암의 조립 각도에 맞추어 적절히 수정하여 사용합니다.

4.1. 우노와 mBlock5 연결


1. 장치 추가


 Arduino Uno를 검색하여 장치를 추가합니다. ar만 검색해도 나옵니다^^.




2. 업로드 모드

  

 그냥 사용하면 됩니다. 프로그램 작성 후 '업로드 모드'를 클릭하면 프로그램이 업로드 됩니다. 

프로그램 작성 중에는 라이브로, 완성되면 업로드 모드로 하는 것을 권장드립니다. 프로그램 수정하는 중에 로봇암이 계속 움직이니까요^^;;




 


3. 라이브 모드


 라이브로 제어하기 위해서는 엔트리처럼 연결 후 펌웨어를 업데이트 하면 됩니다. 단, 프로그램을 업로드를 한 뒤 다시 라이브를 이용하려면 또 다시 펌웨어를 업데이트 하면 됩니다.

업데이트 후 다시 연결합니다.


로봇암의 적당한 각도를 찾기 위해 프로그램을 계속 수정해야 하는 경우에 라이브모드로 하면 좋습니다. 

라이브 모드는 컴퓨터와 계속 통신하며 동작을 하기 때문에 동작이 느려질 수도 있습니다.



당연히, 업로드 모드와 라이브 모드에 사용할 수 있는 이벤트 블록의 차이가 있습니다.


4.1. 로봇암 기초 동작


[ 기본 동작 해보기 ]


업로드 후 로봇암의 동작을 테스트하고 다시 다른 프로그램을 작성하는 동안 로봇암이 계속 움직이니, 프로그램은 라이브 모드로 짜 나가고, 완성되면 업로드를 하는 것도 좋은 방법입니다.

여기에서는 적당한 각도를 찾아 계속 값을 바꾸어 봐야 하니 펌웨어 업로드하여, '라이브 모드'로 진행합니다.


1.  서보모터 기본 동작 


 로봇팔의 각도(5번핀에 연결)를 40 → 90 → 140 → 90도로 움직이는 것을 반복합니다.



 
2. 영점 잡기

 2관절 로봇암은 각각의 서보모터가 90도로 영점을 잡고 제작을 하였기 때문에 아래 처럼 초기 영점 세팅을 해줍니다.
90도로 하였을 때, 몸체의 방향이 중앙을 향하지 않으면 적절히 수정해 줍니다. 로봇암과 그리퍼의 영점은 크게 중요하지 않습니다.
4번 → 몸통, 5번 → 로봇팔, 6번 → 그리퍼 입니다.



3. 적당한 서보모터 동작 각도 찾기

 원활한 동작을 위한 적절한 각도를 찾습니다.
실제 모델에 따라 아래 사진의 각도보다 더 크거나 작을 수도 있습니다.




 ① 몸통 회전 각도

 원하는 위치에 물체를 잡고 놓을 수 있도록 좌우 회전각을 잘 찾아봅니다. 당연히 중앙에 위치하는 각도는 위 4번에 연결된 서보의 영점과 같은 값 이겠지요^^ 
각도가 커지면 왼쪽으로 회전합니다.


 ② 로봇암 각도 찾기

바닥에서 물체를 잡는 각도가 더 중요합니다. 바닥에 닿지 않고, 또 물체에 멀어서 잡지 못하는 일이 없도록 적당한 각도를 찾습니다.
각도가 커지면 로봇암이 내려갑니다.


 

 ③ 그리퍼 각도 찾기


 그리퍼가 물체를 너무 꽉 쥐면, 전류의 소모량이 많아져서 전력부족으로 리셋이 될 수도 있습니다. 적당히 살짝 잡는 각도를 찾아냅니다.

그리고 물체를 잘 놓을 수 있는 각도도 찾아봅니다. 그리퍼는 각도를 줄이면 잡고, 늘이면 벌립니다.


 


4. 가운데 물체를 왼쪽으로 이동시켜 보기


 ​순서를 잘 생각하여 로봇암의 각도를 조절하여 가운데 물체를 왼쪽으로 이동시켜 봅니다.



[ 부드럽게 움직여 보기 ] 


​ 서보모터가 너무 과격^^하게 움직이니 부드럽게 움직여 보도록 하겠습니다.

간단하게 원하는 각도에 도달할 때까지 1도씩 움직이게 하는 것입니다. 


아래 변수명과 함수명에 한글을 사용했는데, 경험 상 한글을 쓰면 간혹 오류가 있습니다. 편의상 한글로 만들었으니 매뉴얼을 보시는 분은 영어도 편하면 영어로 만드세요~^^


1. 각각의 서보모터 각도의 변수 만들기


2. 원하는 각도까지 0.02초마다 1도씩 움직이기

 내리기를 예를 들어보겠습니다.
위 동작 기본 각도를 찾아볼 때 내릴 때 적합한 각도가 170도 인 것을 알아보았습니다. (로봇암 마다 다를 수 있습니다!!)
변수 로봇암 각도가 170도가 될 때까지 +1을 하면 됩니다.

보통 이렇게 비슷한 프로그램을 작성할 때, 복제하여 많이 사용하는데, 변수의 이름 등을 올바르게 변경하는 것을 잊지 않습니다.


[ 함수를 만들어 사용해 보기 ]


각각 이동에 대한 내 블럭 생성합니다.  저는 '왼쪽, 가운데, 오른쪽, 올리기, 내리기, 잡기, 놓기' 로 만들어 봅니다.

새로 생성한 블록의 각도 값은 최초의 값이 설정되어 있지 않으니, 모든 '내 블록'의 동작 테스트는 아래 사진처럼 기본 프로그램에 추가하여 동작을 확인하여야 합니다.



1. 몸체  




 가운데의 경우는 몸체가 왼쪽에 있을 때와 오른쪽에 있을 때가 있으니 아래처럼 작성합니다.



2. 로봇팔



3. 그리퍼 


그리퍼는 굳이 부드럽게 움직일 필요는 없습니다. 그냥 각도만 정해줍니다.^^





4. 기본 동작 해보기


 가운데 물체를 집어서 왼쪽으로 옮기고 다시 영점으로 돌아옵니다.


 


5. 응용


 다양한 나만의 블럭을 만들어 봅니다. 

예를 들어, 왼쪽으로 옮기고 돌아오기나  오른쪽으로 옮기고 돌아오기 등을 만들 수 있겠지요.





원하는 동작이 완성이 되면, 업로드 모드로 바꾸고, 이벤트 블록을 '아두이노 우노가 켜지면' 으로 바꾼 뒤 업로드를 해봅니다.

업로드하여 동작하는 것이 조금 더 원활하게 되는 것을 볼 수 있습니다. 

4.2. 기계학습과 연동


4.3. 조이스틱 제어


[ 확장 추가 ]


1. 장치에서 확장을 클릭하여 INPUT_PULLUP 을 추가하여 줍니다.




2. 장치 및 스프라이트에서 '업로드 모드 브로드캐스트' 추가

 조이스틱의 X, Y축의 이동에 대한 값과 Z축의 값을 스프라이트를 통해 알아보기 위해서입니다.

[ 조이스틱 값 알아보기 ]

1. 조이스틱 배선

 조립 시 배선을 연결했던 것을 다시 보고 기억합니다.^^

2. 조이스틱 X, Y값 읽어보기

 왼쪽 조이스틱은 Y값 (A1번 핀 연결)으로 몸체 회전
                          누름(Z값)으로 그리퍼 벌리기
 오른쪽 조이스틱은 X값 (A2번핀 연결)으로 몸체 회전
                          누름(Z값)으로 그리퍼 닫기

 왼쪽 조이스틱을 테스트해보면...

 ① 장치에서의 프로그램


 ② 스프라이트에서의 프로그램 

 
왼쪽 끝이 1023, 오른쪽 끝이 0, 중앙이 518 인 것을 알 수 있습니다. 좌우로 조금씩 이동해 가며 어느정도 움직였을 때 로봇암을 이동시킬 것인가 생각해봅니다.
저는 왼쪽은 700보다 커지면, 오른쪽은 300보다 작아지면 각각 왼쪽, 오른쪽으로 로봇암이 회전하는 것으로 결정하였습니다.

오른쪽 조이스틱의 X축은 A2번 핀에 연결되어 있으니 같은 방식으로 테스트해봅니다. 아마 비슷한 결과가 나오긴 하겠지요?^^

3. 조이스틱 누름 값 읽어보기

왼쪽 조이스틱의 Z는 D8번 핀, 오른쪽 조이스틱 Z는 D9번에 연결되어 있습니다.

왼쪽 조이스틱을 알아보면...

 ① 장치에서 프로그램


 

 ② 스프라이트에서 프로그램


누르면 0, 떼면 1인 것을 알 수 있습니다.


[ 프로그래밍 하기 ] 

1. 영점


2. 왼쪽 조이스틱 좌우 회전

 좌우로 움직이면 몸체가 좌우로 회전하도록 합니다.


3. 오른쪽 조이스틱 로봇팔 올리고 내리기

 오른쪽 조이스틱을 앞뒤로 움직이면 로봇팔을 올리고 내립니다.


4. 조이스틱 누르기로 그리퍼 제어
  
 왼쪽 조이스틱 누르면 그리퍼 열기, 오른쪽 조이스틱 누르면 그리퍼 닫기


5. 현재 서보모터의 각도 기억하기

 

5. 아두이노 우노 - 엔트리


5.1. 우노와 엔트리 연결


엔트리 하드웨어 연결 프로그램을 실행한 후 "아두이노"를 검색하여 "아두이노 확장 쉴드" 를 선택합니다. 



아두이노 우노 호환보드 SMD 타입 사용 시 드 CH340 드라이버를 설치합니다.

펌웨어도 업로드 합니다.


쉽게 활용할 수 있는 다양한 명령 블록이 있습니다.


아쉽게도 초기 서보의 각도가 0도로 세팅이 되어 있어서, 프로그램을 실행하지 않을 때는 서보의 각도가 0도에 위치하여 로봇암이 아래 사진처럼 모양을 취하고 있습니다.
프로그램을 작성 후 실행하는 것에는 전혀 문제가 없으니 놀라지 않으셔도 됩니다.^^

5.2. 로봇암 기초 동작


5.3. 기계학습과의 연동


5.4. 조이스틱 제어


TOP