임베디드 관련 카테고리/Embedded System

아두이노와 Mission Planner를 이용한 윈치 제어 방법

CBJH 2024. 10. 7.
728x90
반응형

1. 아두이노에 윈치를 연결하고 코드 업로드하기

**아두이노(Arduino)**는 직렬 통신을 통해 외부 장치를 제어할 수 있는 매우 유용한 마이크로컨트롤러입니다. 여기서는 **서보 모터(윈치)**를 아두이노에 연결하고, 직렬 통신을 통해 PC에서 명령을 전송하여 윈치를 제어하는 방법을 설명하겠습니다.

1-1. 아두이노와 서보 모터(윈치) 연결

  • 아두이노 핀: 서보 모터의 제어 신호 핀을 아두이노의 디지털 핀(예: 9번 핀)에 연결합니다.
  • 서보 모터 전원: 서보 모터의 VCC(전원)와 GND(접지) 핀을 아두이노에 연결합니다.

1-2. 아두이노 코드 작성 및 업로드

서보 모터를 제어하는 간단한 코드를 아두이노에 업로드합니다. 이 코드는 직렬 통신으로 명령을 받아 서보 모터의 위치를 조정합니다.

#include <Servo.h>

Servo winch;  // 서보 모터(윈치) 객체 생성

const int WINCH_PIN = 9;  // 서보 모터가 연결된 핀 번호
int currentPosition = 90;  // 윈치 초기 위치 (90도)

void setup() {
  Serial.begin(115200);  // 직렬 통신 시작
  winch.attach(WINCH_PIN);  // 서보 모터 핀 설정
  winch.write(currentPosition);  // 초기 위치로 설정
  Serial.println("Winch is ready");
}

void loop() {
  if (Serial.available() > 0) {
    int position = Serial.parseInt();  // 직렬 통신으로 받은 값을 정수로 변환
    if (position >= 0 && position <= 180) {
      currentPosition = position;
      winch.write(currentPosition);  // 서보 모터 위치 설정
      Serial.print("Winch moved to: ");
      Serial.println(currentPosition);
    }
  }
}
  1. 아두이노 IDE를 실행하고 위 코드를 입력합니다.
  2. 아두이노 보드와 **포트(COM 포트)**를 선택한 후, 코드를 아두이노에 업로드합니다.

2. Mission Planner란?

Mission Planner는 주로 드론과 같은 임베디드 시스템을 제어하는 데 사용하는 Ground Control Station(GCS) 소프트웨어입니다. 이 소프트웨어는 드론의 비행 경로를 계획하고 제어할 수 있을 뿐만 아니라, 다양한 센서 및 장치와 통신할 수 있는 기능을 제공합니다. Mission Planner는 MAVLink 프로토콜을 사용하여 통신을 처리하며, Python 스크립트를 실행할 수 있는 기능도 내장되어 있어 아두이노 같은 장치와도 통신할 수 있습니다.

3. 서버 PC에서 Mission Planner를 사용하여 윈치 제어하기

이제 서버 PC에서 Mission Planner를 사용해 아두이노의 윈치를 제어하는 방법을 설명하겠습니다.

3-1. Mission Planner 설치

  1. Mission Planner공식 웹사이트에서 다운로드할 수 있습니다.
  2. 설치 파일을 다운로드한 후, 지시에 따라 설치를 완료합니다.

3-2. Python 스크립트를 이용한 윈치 제어

Mission Planner는 내장된 IronPython 스크립트 엔진을 사용해 Python 스크립트를 실행할 수 있습니다. 이를 통해 PC에서 아두이노와 직렬 통신으로 연결된 윈치를 제어할 수 있습니다.

3-3. 스크립트 작성

다음은 Mission Planner에서 실행할 Python 스크립트 예시입니다. 이 스크립트는 직렬 통신을 통해 아두이노에 신호를 보내 윈치의 각도를 설정하거나 멈추는 명령을 내립니다.

import clr
import System
import time
import MissionPlanner

# System.IO.Ports를 사용하여 직렬 포트 접근
clr.AddReference("System")
from System.IO.Ports import SerialPort

# 직렬 포트 설정 (포트 이름 및 통신 속도)
serial_port = SerialPort("COM3", 115200)  # COM3 포트를 사용하는 경우

# 직렬 포트 열기
serial_port.Open()

# 윈치 초기화 및 설정
def set_winch_position(position):
    if position < 0 or position > 180:
        print("Position must be between 0 and 180")
        return
    # 아두이노에 직렬 명령 전송
    command = str(position) + '\n'
    serial_port.Write(command)
    print(f"Winch moved to {position} degrees")

# 윈치를 멈추는 함수
def stop_winch():
    serial_port.Write("0\n")
    print("Winch stopped")

# 스크립트 실행 예제
print("Starting winch control...")

# 원하는 각도로 윈치를 이동
set_winch_position(90)  # 90도 위치로 이동

time.sleep(2)  # 2초 대기

set_winch_position(180)  # 180도 위치로 이동

time.sleep(2)  # 2초 대기

stop_winch()  # 윈치 정지

# 직렬 포트 닫기
serial_port.Close()
  1. 직렬 포트 설정: 아두이노가 연결된 COM 포트를 확인한 후, SerialPort("COM3", 115200) 부분의 포트 이름을 실제 포트 이름으로 수정합니다.
    • COM 포트 확인 방법: 윈도우 장치 관리자에서 확인할 수 있습니다.

3-4. Mission Planner에서 스크립트 실행

  1. Mission Planner를 실행하고, 상단 메뉴에서 "Scripts" 탭을 선택합니다.
  2. Script Console 창을 열고 (Ctrl + F → "Scripting""Script Console" 클릭), 위에서 작성한 스크립트를 붙여 넣습니다.
  3. Run 버튼을 클릭하여 스크립트를 실행합니다.

스크립트가 실행되면, 아두이노는 직렬 통신을 통해 윈치의 각도를 제어하게 됩니다.

3-5. 실행 확인

  • set_winch_position(90): 윈치가 90도 위치로 이동합니다.
  • set_winch_position(180): 윈치가 180도 위치로 이동합니다.
  • stop_winch(): 윈치가 정지합니다.

4. 결론

Mission Planner와 아두이노를 이용해 윈치를 제어하는 방법은 매우 효율적입니다. Mission Planner의 스크립트 기능을 사용하여 간단한 Python 코드를 통해 아두이노와 직렬 통신을 할 수 있으며, 이를 통해 원격으로 윈치를 제어할 수 있습니다.

댓글