PC조종을 이용한 MoonWalker 테스트
사전에 디지털 신호를 이용하여 RC조종기로 MoonWalker를 테스트 해보왔는데요.
이번에는 시리얼 통신 (RS232)을 이용한 PC 조종으로
MoonWalker를 테스트 해보겠습니다.
PC조종도 소형 주행로봇 NT-Command-l을 이용하였습니다.
[그림2. MoonWalker을 이용한 주행로봇]
PC와 주행로봇 간의 무선연결은 Parani-SD200 블루투스 무선 시리얼 어댑터(RS232)와 Parani-SD1000U 블루투스 USB 시리얼 (RS232)어댑터를 이용하였습니다.
SD1000U는 USB인터페이스가 달린 어댑터로 PC쪽에 연결하며
무선 시리얼 통신(RS232)이 가능합니다.
통신거리는 100m 이지만 안테나를 교환하면 최대 1Km까지 통신이 가능합니다.
4개의 딥 스위치를 이용하여 통신속도를 2400에서 115.2K 까지 설정할수 있습니다.
이번 PC조종에서는 115.2K으로 통신속도를 설정해 주었습니다.
[그림4. Parani-SD200 모듈]
SD200은 시리얼 9핀이 내장되어 있는 시리얼 통신(RS232) 모듈로써
Parani-SD1000U와 호환이 가능합니다.
통신거리는 30m 이고 이 또한 4개의 딥 스위치를 이용하여
통신속도를 2400에서 115.2K까지 설정이 가능합니다.
이번 MoonWalker 통신속도는 115.2K로 설정해 주었습니다.
해당 DC전원 케이블이 있으며 지원 전압은 최소 5V에서 최대 12V까지 가능합니다.
기존의 시리얼 9핀 포트와는 다르게 RX(수신부) , TX(송신부)가 반대로 되어 있습니다.
[그림5. MoonWalker와 무선 시리얼 SD200모듈 연결 모습]
MoonWalker에는 15핀 짜리 Male 커넥터를 SD200 모듈에는
9핀짜리 Male 커넥터를 연결해 주었습니다.
SD200은 기존의 9핀 커넥터와는 다르게 RX,TX가 반대로 연결되어 있어
사용하실 경우 RX,TX 핀맵 사항을 잘 숙지하셔야 합니다.
[그림5. SD200모듈 핀맵 ]
이번 MoonWalker PC조종에서는
속도제어 , 위치제어, 긴급정지 명령어를 이용하였습니다.
속도제어 명령어를 이용하여 주행로봇을 앞.뒤.좌.우로 이동시켜 보았으며
긴급정지 명령어를 추가하여 언덕에서도 주행로봇을 구동시켜보았습니다.
그리고 위치제어 명령어를 이용하여 정해진 거리(1M) 만
주행 후 급정지할 수 있게 구동해 보았습니다.
[그림6. Motor Control UI 프로그램을 이용한 통신속도 설정]
무선 시리얼 통신을 이용한 PC조종을 하시려면 추후 공개될 저희
Motor Control UI 프로그램을 통해서 시리얼 통신(RS232) 속도를 맞춰주셔야만 합니다.
통신속도를 맞춘후 Visual Basic을 이용하여 소스코드를 만들어
해당 명령어를 MoonWalker에 송신하여 주행로봇이 구동할 수 있게 만들어 보았습니다.
사용되어진 MoonWalker 명령어와 소스코드를 밑에 첨부해 놓겠습니다.
Visual Basic을 이용한 명령어 송신
Dim mp As Double ‘모듈내에 공용변수 선언
————————————————————–
Private Declare Sub Sleep Lib “kernel32″ (ByVal dwMilliseconds As Long) ‘프로그램 딜레이를 가능하게 하기 위한 선언
————————————————————–
Private Sub MSComm1_oncomm() ‘위치제어 명령어 ‘mpc’를 이용하여 정해진 거리를 주행하기 위하여 필요
Dim n As Integer
Static BUF As String
Static tmpBuf As String
tmpBuf = MSComm1.Input ’변수 tmpBuf에 시리얼 값 입력받음
If tmpBuf = vbCr Then ‘Chr(13) : Carriage Return값이 나오면
MSComm1.Output = “mp” & Chr(13) & Chr(10) ‘시리얼 통신으로 현재 Pulse를 알수 있는 명령어 ‘mp’를 송신
DISP.Caption = BUF ’Lable창에 ‘mp’의 BUF값 나타냄
BUF = “”
End If
BUF = BUF & tmpBuf ‘하나씩 수신되는 시리얼 통신 값을 묶어줌. 현재 Pulse 명령어 ‘mp’ 값을 받기위함
————————————————————–
Private Sub CmdGo_Click() ‘Moon Walker 앞으로 이동
Dim vel As String
MSComm1.Output = ”co1=1” ‘Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = “co2=1“ ‘Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
vel = “mvc=“ & CLng(Text1.Text) & “,” & CLng(Text1.Text) ’ Moon Walker 속도제어 명령어 “mvc”를 이용한 제어. Text창에 원하는 속도값을 입력하면 Moon Walker구동 가능
MSComm1.Output = vel
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
End Sub
————————————————————–
Private Sub CmdBack_Click() ’Moon Walker 뒤로 이동
Dim vel As String
MSComm1.Output = “co1=1” ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = ”co2=1” ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
vel = “mvc=” & -CLng(Text1.Text) & “,” & -CLng(Text1.Text) ’ Moon Walker 속도제어 명령어 “mvc”를 이용한 제어. Text창에 원하는 속도값을 입력하면 Moon Walker구동 가능
MSComm1.Output = vel
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
End Sub
————————————————————–
Private Sub CmdLeft_Click() ’Moon Walker 왼쪽으로 이동
Dim vel As String
MSComm1.Output = “co1=1” ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = ”co2=1” ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
vel = “mvc=” & CLng(Text1.Text) & “,” & -CLng(Text1.Text) ’ Moon Walker 속도제어 명령어 “mvc”를 이용한 제어 Text창에 원하는 속도값을 입력하면 Moon Walker구동 가능
MSComm1.Output = vel
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
End Sub
————————————————————–
Private Sub CmdPo_Click()
Dim vel As String
MSComm1.Output = “co1=1“ ‘Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 10
MSComm1.Output = “co2=1“ ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 10
MSComm1.Output = ”maxv1=5000″ ’Moon Walker의 최대 회전 속도를 지정해주는 명령어 ‘maxv’
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = “maxv2=5000″ ’Moon Walker의 최대 회전 속도를 지정해주는 명령어 ’maxv’
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
vel = “mpc=” & CLng(7300 + mp) & “,” & CLng(7300 + mp) ‘Moon Walker의 위치제어값을 현재 Pulse를 알수있는 명령어 ‘mp’를 입력받아 1M
주행시 필요한 Pulse값 7300( 바퀴의 둘레와 RPM를 이용하여 구할 수 있음)을 더함으로써 연속해서 1M씩 주행가능
MSComm1.Output = vel
MSComm1.Output = Chr(13) & Chr(10)
Sleep 1000
End Sub
————————————————————–
Private Sub CmdRight_Click() ‘Moon Walker 오른쪽으로 이동
Dim vel As String
MSComm1.Output = ”co1=1“ ’Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = ”co2=1“ ‘Moon Walker 전원 ON 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
vel = “mvc=” & -CLng(Text1.Text) & “,” & CLng(Text1.Text) ’ Moon Walker 속도제어 명령어 “mvc”를 이용한 제어 Text창에 원하는 속도값을 입력하면 Moon Walker구동 가능
MSComm1.Output = vel
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
End Sub
————————————————————–
Private Sub CmdStop_Click() ‘Moon Walker 구동 멈춤
MSComm1.Output = “mvc=0,0“ ’ Moon Walker 속도제어 명령어 “mvc”를 이용한 제어 속도를 0으로 주어 구동하지 못하게 함
MSComm1.Output = Chr(13) & Chr(10)
MSComm1.Output = vbCrLf & “co1=7” ’Moon Walker 긴급정지 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
MSComm1.Output = vbCrLf & “co2=7“ ’Moon Walker 긴급정지 시키는 명령어
MSComm1.Output = Chr(13) & Chr(10)
Sleep 100
End Sub
————————————————————–
( 참고 1 ) Chr(13) : Carrige return / Chr(10) : Line Feed
Chr(13) & Chr(10) -Enter값 : Moon Walker 명령어를 입력할 때마다 입력하셔야 합니다.
상수값 vbCrLf는 오류가 생성될수 있습니다. 아스키 코드값으로 송신하시는 것이 좋습니다.
( 참고 2 ) 시리얼 통신 값은 딜레이를 시키지 않을시 너무 빠르게 들어가서 중복되어 값이 들어가는 경우가 있습니다.
명령어를 송신할 경우에는 반드시 딜레이를 시켜주셔야 합니다.
MoonWalker의 속도제어 위치제어 긴급정지 명령어를 이용하여 구동시켜본 주행로봇 모습을 동영상으로 확인해 보실수 있습니다.