2012년 6월 24일 일요일

RC(radio control) + 아두이노 1


RC(radio control) + 아두이노 

프로그램 버전 : Arduino - 1.0

일단 준비물은 서로 바인딩 된 RC송수신기가 필요함.

이전 글에서 키보드 또는 센서에게서 입력을 받아
서보 모터를 작동시켜 보았다.

이번에는 센서나 키보드가 아닌
취미생활로 많이들 즐기는 RC 송신기로 신호를 보내고
RC수신기와 아두이노를 연결하여 신호를 받아
서보모터를 작동시켜 보자.
(RC송수신기의 송수신거리는 1Km 이상이라고 한다
어떤 이의 실험에 의하면 전파의 방해를 받지 않는 넓은 벌판에서
4km까지도 신호를 받는다고 하지만....
고가의 비행기나 헬기를 1km이상 거리에 두고 조정하기에는 분실의 부담이
또 보이지도 않아 조정이 어렵다.)

일단 취미로 비행기나 헬기, 배, 자동차 등을 무선 조정 할수 있는
송수신장치의 작동에 대한 이해가 필요하다.

송신기(조정기)사진을 보면

가운데 두개의 조정스틱이 있는데
이 스틱은 각각 수직방향, 수평방향  총 4채널 조정이 가능하다.
(가변저항으로 말하면 총 4개의 가변저항이 달려 있고
그 위치에 따라 저항값이 다르듯이....이렇게 비교를 해도 되나??)
한번에 4개의 장치를 조정할수 있는 신호를 보낼 수 있다. 
(물론 다른 스위치들을 사용하면 6채널 7채널... 로 늘어난다.)
두 스틱의 위치값을 매 20ms 간격으로 계속 수신기로 신호를 날린다.

조금 더 설명을 붙이면
오른쪽 스틱하나를 위 아래 방향으로 조정할때
아래에서 위로 조금씩 스틱을 올리면
스틱의 위치마다 펄스가 LOW에서 HIGH로 신호가 올라가 HIGH를 유지하는 시간이 다르다.
예로 스틱이 중앙에 있고 중앙에서 펄스를 HIGH로 유지하는 시간이 1500마이크로 초라면
20밀리초에서 1500마이크로 초동안 HIGH로 신호를 보내고
나머지 시간은 LOW를 유지한다.
스틱이 움직임이 없더라도
그 다음 20밀리초에서 또 1500마이크로 초동안 HIGH로 신호를 보내고
나머지시간은 LOW를 유지하며 반복한다.
(작동이 그렇다는 이야기다. 시간값이나 HIGH인지 LOW인지 여타 다른 것들의 정확성에 대해서는 패스...)

수신기와 아두이노의 연결은

수신기에는 각 채널마다 3개의 핀이 있는데 그중 하나는 신호 나머지는 전원이다.


실제 연결 사진



 이신호 값을 확인하기 위해 스케치 해보면
-----------------------------------------------------------------
/*rc송신기(조정기)에거 보낸 신호를 rc수신기를 통해 아두이노에서 받기*/
int ch1,ch2,ch3,ch4;
void setup(){
  Serial.begin(9600);
  pinMode(7,INPUT);  //rc수신기와 아두이노와 연결된 핀 총 4개 4채널
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  pinMode(4,INPUT);
}
void loop(){
  ch1 = pulseIn(7,HIGH);  //수신기를 통해 11번 핀으로 들어오는 신호의 HIGH펄스 폭을 마이크로 초 단위로 저장
  ch2 = pulseIn(6,HIGH);
  ch3 = pulseIn(5,1);    //HIGH나 1이나 같음
  ch4 = pulseIn(4,1);
  Serial.print(ch1);Serial.print("    ");  //HIGH펄스 폭을 출력
  Serial.print(ch2);Serial.print("    ");
  Serial.print(ch3);Serial.print("    ");
  Serial.println(ch4);
}
-------------------------------------------------------------


시리얼 모니터로 값을 확인하면


왼쪽 부터 1번 2번 3번 4번 채널에서 들어온 HIGH신호의 폭이다
1번은 스틱을 가장 아래 최소값으로 조정했고
2번은 가장 위로, 3번과 4번은 중앙 값이다.

이 신호를 받아 처리 하면 모터나 서보모터를 작동 시킬수 있다


댓글 없음:

댓글 쓰기