일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 아두이노코딩봇
- 절벽아래은둔자
- MBLOCK
- 엠블록
- 올로
- mysql4
- 효용감
- c#
- 코딩봇
- hutc
- automation
- Ollo
- TP4056
- 무명의개발자
- CM-50
- Dynamixel
- 업로드모드
- NocoDB
- ChatGPT
- Robotis
- 테스트 자동화
- arduino
- chromedriver
- testautomation
- QA
- 테스트자동화
- 로보티즈
- 다이나믹셀
- 아두이노
- 크롬드라이버
- Today
- Total
Hermit Under the Cliff
[Arduino] 아두이노 코딩봇 만들기 (5) - 아두이노로 CM-50 제어하기 본문
[Arduino] 아두이노 코딩봇 만들기 (5) - 아두이노로 CM-50 제어하기
AnonymousDeveloper 2022. 2. 21. 15:52지난번 포스트에서는 아두이노를 USB to Serial 보드로 활용하여
이미 제공되고 있는 소프트웨어를 이용해서 CM-50을 제어를 해 보았습니다.
저의 목적은 아두이노를 통해서 CM-50을 컨트롤을 하고,
이를 다시 블록코딩을 통해서 간단한 코딩봇을 만드는 것 입니다.
그러기 위해서는 PC의 소프트웨어가 아니라
아두이노에서 직접 CM-50을 컨트롤 할 수 있어야 합니다.
이에 앞서 간단한 구조를 정합니다.
제가 쓰기로 결정한 블록코딩 툴인 Mblock은 물론이고 다른 블록코딩 툴 대부분이
아두이노와 시리얼 통신으로 명령어를 전달 합니다.
이 말은 아두이노의 시리얼 포트는 이미 사용이 된다고 가정을 해야 하기 때문에
기본 시리얼 포트를 사용할 수 없다고 봐야 합니다.
제가 쓰는 아두이노 Uno 보드는 시리얼 포트가 하나만 존재하기 때문에
이 포트는 블록코딩 툴과 통신으로 사용해야 하고
CM-50과 통신을 해야하는 포트는 따로 설정을 해야 합니다.
다행히 아두이노에서는 다른 I/O 핀들을 시리얼 포트로 사용할 수 있게 만드는
SoftwareSerial 라이브러리가 존재 합니다.
이를 이용해서 CM-50과 통신을 하면 됩니다.
간단하게 아래와 같이 구성을 합니다.
가장 먼저 확인 해볼 것은 아두이노의 Software serial을 통해서 CM-50을 제어할 수 있는지 입니다.
위와 같이 연결해 준 뒤 간단한 코드를 작성해서 테스트 해봅니다.
#include "SoftwareSerial.h"
SoftwareSerial mySerial(2,3);
// 파란색 LED를 켜기위한 Instruction Packet (80번 주소에 1을 쓰기)
byte blueledOn[] = {0xFF, 0xFF, 0xFD, 0x00, 0xC8, 0x06, 0x00, 0x03, 0x50, 0x00, 0x01, 0x08, 0x22};
// | Header |ID(200)| Length |Write(0x03)|Addr| value | CRC |
// 파란색 LED를 끄기 위한 Instrunction Packet (80번 주소에 0을 쓰기)
byte blueledOff[] = {0xFF, 0xFF, 0xFD, 0x00, 0xC8, 0x06, 0x00, 0x03, 0x50, 0x00, 0x00, 0x0D, 0xA2};
// | Header |ID(200)| Length |Write(0x03)| Addr| value | CRC |
void setup() {
mySerial.begin(57600); // 57600 baud rate로 CM-50과 시리얼 통신 시작
}
void loop() {
mySerial.write(blueledOn, sizeof(blueledOn));
delay(2000);
mySerial.write(blueledOff, sizeof(blueledOff));
delay(2000);
}
위에 정적으로 선언해 놓은 blueledOn / blueledOff의 byte array는
앞 포스트에서 소개했던 다이나믹셀 위자드의 패킷 메뉴에서 가져온 값 입니다.
자동으로 CRC 값이 계산이 되어서 동작을 확인 하는데에는 아주 편합니다.
위 코드를 아두이노에 업로드해서 테스트를 해보면
정상적으로 파란색 LED가 2초 간격으로 꺼졌다 켜졌다 하는 것을 확인 할 수 있습니다.
간단하게 코드를 작성하려면 위 예제 처럼 다이나믹셀 위자드에서 패킷을 확인한 다음
원하는 명령어에 대해서 미리 instruction packet의 byte array 들을 선언해 놓고 사용을 해도 됩니다.
하지만 코드를 깔끔하고 또한 가변적으로 속도 등의 값을 조정할 수 있으려면
패킷을 직접 만들어 쓰는게 좋은 선택일 것 같습니다.
여러번 말하지만 근본 회사인 로보티즈는 아두이노에 대한 다이나믹셀 라이브러리를 제공합니다.
Dynamixel2Arduino 라는 라이브러리인데, 소스코드는 아래 GitHub에서 관리하고 있습니다.
https://github.com/ROBOTIS-GIT/Dynamixel2Arduino
GitHub - ROBOTIS-GIT/Dynamixel2Arduino: DYNAMIXEL protocol library for Arduino
DYNAMIXEL protocol library for Arduino. Contribute to ROBOTIS-GIT/Dynamixel2Arduino development by creating an account on GitHub.
github.com
이 녀석을 바로 사용할 수 있으면 좋겠지만 두 가지 큰 문제가 있습니다.
- CM-50에 대한 모델이 라이브러리에 정의되지 않아 바로 사용이 힘들다.
- 다이나믹셀과 통신을 하기 위해 SW Serial이 지원되지 않는다.
앞서 알아본바, 다이나믹셀과 마찬가지로 CM-50 역시 Dynamixel protocol 2.0을 사용하고 있으니
위 소스에서 아래 protocol 부분만 가져와서 사용하면 될 듯 합니다.
다음번 포스트에서는 이제까지 알아보고 확인해본 내용을 바탕으로
블록코딩에서 사용될 아두이노의 펌웨어를 만들어 보도록 하겠습니다.
'Personal Projects > 아두이노 코딩봇' 카테고리의 다른 글
[Arduino] 아두이노 코딩봇 만들기 (7) - mBlock Device Extension (0) | 2022.02.23 |
---|---|
[Arduino] 아두이노 코딩봇 만들기 (6) - 코딩봇 펌웨어 작성 (0) | 2022.02.22 |
[Arduino] 아두이노 코딩봇 만들기 (4) - 로보티즈 올로 CM-50 컨트롤 하기 (0) | 2022.02.20 |
[Arduino] 아두이노 코딩봇 만들기 (3) - 코딩봇 설계 with 로보티즈 올로 (0) | 2022.02.18 |
[Arduino] 아두이노 코딩봇 만들기 (2) - 블록코딩 툴 결정 (0) | 2022.02.15 |