코드론아두이노프로그래밍 로보링크주식회사
목차 1. 스마트인벤터보드 ( 제어보드 ) 와코드론 (CoDrone) 연결 2. 코드론을위한아두이노프로그래밍 1) 기초프로그래밍 2) 예제프로그래밍 3. 코드론을위한아두이노프로그래밍예제 페어링 1) 가장가까이에있는코드론에페어링 (NearbyDrone) 2) 최근에페어링한코드론에페어링 (ConnectedDrone) 3) 코드론주소로페어링 (AddressInputDrone) 4) 코드론주소확인하기 (PrintDroneAddress) 컨트롤 1) 이 / 착륙 (TakeOff-Landing) 2) 상승 / 하강 (ThrottleUp) 3) 전진 / 후진 (PitchUp) 4) 좌이동 / 우이동 (RollUp) 5) 좌회전 / 우회전 (YawUp) 6) 터틀턴 (Turn_Over) 7) 비행조종 (Controller_Flight) 8) 주행조종 (Controller_drive) 9) 배틀 (Controller_Flight_Battle) 10) 비행조종조이스틱멈춤 (Controller_Flight_joyStop) LED 컨트롤 1) LED컨트롤 1 (LED_Color_01) 2) LED컨트롤 2 (LED_Color_02) 3) LED컨트롤 3 (LED_Color_03) 4) LED 기본값설정 (LedColorDefault) 상태체크 1) 배터리레벨체크 (LowBatteryCheck) 2) 드론자세체크 (Serial Print Attitude) 3) RSSI 신호세기 (RSSI_Polling) 4) 고도값표시 (DisplayLEDRangeSensor) : 코드론프로 (CoDrone Pro) 전용 5) 고도값표시 (SerialPrintRangeSensor) : 코드론프로 (CoDrone Pro) 전용응용 1) 부메랑턴 (V_Turn) 2) 원돌기 (Circle_Turn) 3) 손바닥으로점프 (hand_on) 4) 장애물점프 (hurdle_jump) 5) 아날로그센서컨트롤 (Analog_Control) 6) 디지털센서컨트롤 (Button_Control) 4. 코드론컨트롤러 (Controller) 조립 2 3
Drone Software 1. 스마트인벤터보드 ( 제어보드 ) 와코드론 (CoDrone) 연결 robolinksw.com 의아두이노페이지에서아두이노와관련된프로그램을다운로드한다. 1) 스마트인벤터보드에 BLE 보드를연결하여코드론과페어링및구동을준비한다. 1. 왜 SW( 소프트웨어 ) 코딩교육이중요할까? 필요부품 과학기술의시대에머릿속무언가를세상에보여주는단계에서 SW는가장기본적인수단이되며, 이것은생각하며일을처리하는컴퓨팅적사고능력을함양할수있다. 2. SW 드론제어? SW 코딩을통한알고리즘능력은전천후서비스로봇인드론을제어가능하게함으로써드론을활용한다양한아이디어및 * HW 제어능력을배양한다. HW( 하드웨어, Hardware) : 로봇의구성물중전자장치, 기계장치와같이형체가있어눈에보이는것 스마트인벤터보드 ( 제어보드 ) BLE 보드 4 핀케이블마이크로 USB 케이블 목표 : SW 코딩학습과알고리즘을통해드론을자유롭게제어하는능력개발 SW 개념과이해 2) 프로그래밍을할때에는코드론의상태와호버링, 트림등을체크한다. 스마트인벤터보드에전원넣기 코딩의시작 : Scratch 코딩의제어 : Arduino 드론제어 SW : Android / IOS / Drone Simulator USB 케이블 - PC 건전지케이스 하드웨어제어 SW : Rokit Simulator * 스마트인벤터보드에건전지나 PC 전원을이용하여전원을넣는다. 4 5
1. 스마트인벤터보드 ( 제어보드 ) 와코드론 (CoDrone) 연결 * 스마트인벤터보드연결하여실행파일넣기 2. 코드론을위한아두이노프로그래밍 1) 기초프로그래밍 스마트인벤터보드 < 접속명령 > 1 1 3 4 페어링을위한명령 - CoDrone.AutoConnect(NearbyDrone); 2 2 5 < 이동명령 > 각이동명령의원하는범위내의값을입력하고 어떤상황에서든지멈추고싶을때에는 CoDrone.FlightEvent(Stop); 이름 형식 범위 설명 BLE 보드 5 ROLL sbyte -100 ~ 100 좌우이동 (-) 값은좌측, (+) 값은우측으로이동 PITCH sbyte -100 ~ 100 전후이동 (-) 값은후방, (+) 값은전방으로이동 프로그램업로드스마트인벤터보드 ( 제어보드 ) 1 딥스위치 1번을위로올린다. BLE 보드 5 스위치를눌러모드를전환한다. YAW THROTTLE sbyte sbyte -100 ~ 100-100 ~ 100 좌우회전 (-) 값은반시계, (+) 값은시계방향으로이동 상승 하강 (-) 값은하강, (+) 값은상승 2 리셋버튼을누른다. 업로드모드 : 스위치를한번누른다. EVENT byte 0 ~ 255 이벤트 3 파란 LED 가깜빡이는지확인한다. 노란색불빛이깜박인다. 4 만약파란 LED가깜빡인다면 " 대기상태 " 이다. 이때스마트인벤터보드에예제를업로드한다. 프로그램실행 만약불빛이빨간색으로바뀐다면스위치를다시한번눌러서노란색불빛으로바꿔준다. 빨간색불빛은 " 페어링대기모드 ( 드론연결모드 )" 로로킷브릭이나드론시뮬레이터와같이 PC로조작하는경우에사용한다. 각이동명령의원하는범위내의값을입력하고 THROTTLE 상승 하강 ROLL 좌이동 우이동 PITCH 전진 후진 YAW 좌회전 우회전 1 2 업로드완료후딥스위치 1 번을내린다. 리셋버튼이나 On/Off 스위치로스마트인벤터보드를리부트하여보드에업로드한프로그램을실행한다. 6 7
2) 예제프로그래밍 byte bt1 = digitalread(11); // 밑면적외선센서를입력으로사용 byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 3. 코드론을위한아두이노프로그래밍예제 프로그램부분 에대한부분만설명페어링 1) 가장가까이에있는코드론에페어링 (NearbyDrone) 다운로드후실행하면바로페어링구동 2) 최근에페어링한코드론에페어링 (ConnectedDrone) CoDrone.AutoConnect(ConnectedDrone); // 최근에연결한드론과같은어드레스주소의드론을연결 3) 코드론주소로페어링 (AddressInputDrone) 확인한어드레스주소를입력할시에페어링이된다 CoDrone.PrintDroneAddress(); // 최근에연결한드론의어드레스주소를모니터로출력한다. int analogvalue0 = analogread(a0); // 자기가원하는것과연결가능 int analogvalue1 = analogread(a1); // 자기가원하는것과연결가능 int analogvalue2 = analogread(a2); // 자기가원하는것과연결가능 int analogvalue3 = analogread(a3); // pitch 상하 int analogvalue4 = analogread(a4); // yaw 좌우 int analogvalue5 = analogread(a5); // throttle 위아래 int analogvalue6 = analogread(a6); // roll 회전 /////////////////////////// 프로그램부분 /////////////////////////////// byte droneaddress[6] = 0xFC, 0xA6, 0x61, 0x78, 0xD5, 0xA4; // 어드레스주소를입력 - PrintDroneAddress() 명령으로확인 ) CoDrone.AutoConnect(AddressInputDrone, droneaddress); // 입력한어드레스주소와같은드론과연결 4) 코드론주소확인하기 (PrintDroneAddress) CoDrone.PrintDroneAddress(); // 최근에연결한드론의어드레스주소를시리얼모니터로출력 // 이부분에본인이원하는드론프로그래밍 //////////////////////////////////////////////////////////////////////////// 8 9
컨트롤 1) 이 / 착륙 (TakeOff-Landing) 다운로드후실행하면바로구동 CoDrone.FlightEvent(TakeOff); // 이륙 3) 전진 / 후진 (PitchUp) 사용하는드론의상태에따라 Throttle 과 delay 값을수정한다 CoDrone.FlightEvent(TakeOff); // 이륙 delay(2000); delay(2000); CoDrone.FlightEvent(Landing); // 서서히착륙 PITCH = 100; delay(500); // PITCH 값입력 // 조종값전송 2) 상승 / 하강 (ThrottleUp) 사용하는드론의상태에따라 Throttle 과 delay 값을수정한다 CoDrone.FlightEvent(Landing); // 서서히착륙 CoDrone.AutoConnect(NearbyDrone); // 가장가까운드론과연결 THROTTLE = 100; // THROTTLE 값입력 100 상승 100 하강 // 조종값전송 delay(2000); 입력 4) 좌이동 / 우이동 (RollUp) 사용하는드론의상태에따라 Throttle 과 delay 값을수정한다 CoDrone.FlightEvent(TakeOff); // 이륙 CoDrone.FlightEvent(Stop); // 정지 delay(2000); ROLL = 100; // Roll 값입력 // 조종값전송 10 11
6) 터틀턴 (Turn_Over) CoDrone.FlightEvent(Landing); // 서서히착륙 5) 좌회전 / 우회전 (YawUp) 사용하는드론의상태에따라 Throttle 과 delay 값을수정한다시계방향 (Yaw 양수 ) : 1 ~ 100 반시계방향 (Yaw 음수 ) : -1 ~ -100 코드론이뒤집어져있는상태에서만작동 delay(300); CoDrone.FlightEvent(TurnOver); delay(4000); // 뒤집기 // 실행시간 CoDrone.FlightEvent(TakeOff); // 이륙 CoDrone.FlightEvent(Stop); // 멈춤 delay(2000); 7) 비행조종 (Controller_Flight) 아날로그조이스틱으로드론을조종하는예제 YAW = 100; // Yaw 값입력 // 조종값전송 비행조종과주행조종, 배틀예제의경우스마트보드를조종기형태로조립해서사용한다. CoDrone.FlightEvent(Landing); // 서서히착륙 byte bt1 = digitalread(11); byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 // 밑면적외선센서를입력으로사용 12 13
// 제어신호를보낸다. 통신이안정하게가도록시간을두고보냄 ( 최소 50ms) 8) 주행조종 (Controller_drive) 주의! 바퀴형태의로버킷 ( 드라이브키트 ) 을별도로장착해야한다 byte bt1 = digitalread(11); byte bt4 = digitalread(14); byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 // 밑면적외선센서를입력으로사용 // 밑면적외선센서를입력으로사용 CoDrone.DroneModeChange(Drive); // 드론을드라이브모드로설정한다. ( 바퀴주행형 ) if (bt1 &&!bt4 &&!bt8) // 밑면센서가장끝 11번센서에손을대면실행한다. CoDrone.FlightEvent(Stop); // 드론을정지시킨다. if (!bt1 &&!bt4 && bt8) // 밑면센서가장끝 18번센서에손을대면실행한다. CoDrone.FlightEvent(Landing); // 드론을착륙시킨다. YAW = -1 * CoDrone.AnalogScaleChange(analogRead(A3)); // 아날로그 3번핀의값을 YAW 값으로사용한다. - 좌우회전 byte bt1 = digitalread(11); // 밑면적외선센서를입력으로사용 byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); // 아날로그 4번핀의값을 THROTTLE 값으로사용한다. - 전후이동 ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5)); // 아날로그 5번핀의값을 ROLL 값으로사용한다. - 좌우이동 THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); // 아날로그 4번핀의값을 THROTTLE 값으로사용한다. - 승 하강 ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5)); // 아날로그 5번핀의값을 ROLL 값으로사용한다. - 좌우이동 CoDrone.Control(SEND_INTERVAL); // 제어신호를보낸다. 통신이안정하게가도록시간을두고보냄 ( 최소 50ms) PITCH = CoDrone.AnalogScaleChange(analogRead(A6)); // 아날로그 6번핀의값을 PITCH 값으로사용한다. - 전 후진 CoDrone.Control(SEND_INTERVAL); 14 15
9) 배틀 (Controller_Flight_Battle) 아날로그조이스틱으로드론을조종하고다른드론들과적외선을발사하며배틀할수있는예제 CoDrone.DroneModeChange(Flight); // 드론을플라이트모드로설정 ( 비행형태 ) CoDrone.BattleBegin(FREE_PLAY); // 팀선택 : TEAM_RED/TEAM_BLUE/TEAM_GREEN/TEAM_YELLOW/FREE_PLAY CoDrone.BattleReceive(); // IR-Data 수신 byte bt1 = digitalread(11); // 밑면적외선센서를입력으로사용 byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 if (bt1 &&!bt4 &&!bt8) // 밑면센서가장끝 11번센서에손을대면실행한다. CoDrone.FlightEvent(Stop); // 드론을긴급정지시킨다. if (!bt1 &&!bt4 && bt8) // 밑면센서가장끝 18번센서에손을대면실행한다. CoDrone.BattleShooting(); // 무기를발사한다. CoDrone.ButtonPreesHoldWait(18); // 버튼을뗄때까지기다린다. ( 연속적인발사를막는다.) if (!bt1 && bt4 &&!bt8) // 밑면가운데센서에손을대면실행한다. CoDrone.FlightEvent(Landing); // 드론을서서히착륙시킨다. YAW = -1 * CoDrone.AnalogScaleChange(analogRead(A3)); // 아날로그 3번핀의값을 YAW 값으로사용한다. - 좌우회전 THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); // 아날로그 4번핀의값을 THROTTLE 값으로사용한다. - 승 하강 ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5)); // 아날로그 5번핀의값을 ROLL 값으로사용한다. - 좌우이동 PITCH = CoDrone.AnalogScaleChange(analogRead(A6)); // 아날로그 6번핀의값을 PITCH 값으로사용한다. - 전 후진 CoDrone.Control(SEND_INTERVAL); // 제어신호를보낸다. 통신이안정하게가도록시간을두고보냄 ( 최소 50ms) 10) 비행조종조이스틱멈춤 (Controller_Flight_joyStop) CoDrone.DroneModeChange(Drive); // 드론을드라이브모드로설정한다. ( 바퀴주행형 ) byte bt1 = digitalread(11); // 밑면적외선센서를입력으로사용 byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 if ((analogread(a4) < 50) && (analogread(a6) < 50)) // 조이스틱양쪽을아래로내리면실행한다. CoDrone.FlightEvent(Stop); // 드론을정지시킨다. ( 긴급정지 ) // CoDrone.FlightEvent(Landing); // 드론을정지시킨다. ( 서서히착륙 ) YAW = -1 * CoDrone.AnalogScaleChange(analogRead(A3)); // 아날로그 3번핀의값을 YAW 값으로사용한다. - 좌우회전 16 17
THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); // 아날로그 4번핀의값을 THROTTLE 값으로사용한다. - 승 하강 ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5)); // 아날로그 5번핀의값을 ROLL 값으로사용한다. - 좌우이동 PITCH = CoDrone.AnalogScaleChange(analogRead(A6)); // 아날로그 6번핀의값을 PITCH 값으로사용한다. - 전 후진 CoDrone.Control(SEND_INTERVAL); // 제어신호를보낸다. 통신이안정하게가도록시간을두고보냄 ( 최소 50ms) LED 컨트롤 1) LED컨트롤 1 (LED_Color_01) 드론이 LED를컨트롤하는예제 LedColor (Mode, Color, Time) ; 모드, 색상, 시간의형식으로입력한다. byte modetime = 7; // 모드시간변수 int delaytime = 1000; 변수 2) LED컨트롤 2 (LED_Color_02) 드론의 LED를컨트롤하는예제 LedColor (Mode,R,G,B,Time) ; 모드, R,G,B, 시간의형식으로입력한다. byte modetime = 7; // 모드시간변수 int delaytime = 1000; 변수 CoDrone.LedColor(ArmDimming, 255, 0, 0, modetime); // 입력된 R,G,B 색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, Yellow, modetime); // 노랑색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, 0, 255, 0, modetime); // 입력된 R,G,B 색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, 0, 0, 255, modetime); // 입력된 R,G,B 색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, 0, 0, 0, modetime); // 입력된 R,G,B 색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, Cyan, modetime); // 하늘색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 18 19
3) LED컨트롤 3 (LED_Color_03) 드론의 LED를컨트롤하는예제 LedColor (Mode,color[],Time) ; 모드, 색상배열, 시간의형식으로입력한다. 4) LED 기본값설정 (LedColorDefault) 드론의 LED를컨트롤하는예제 ( 전원이꺼져도유지된다 ) 코드론의눈과날개 : 두군데의 LED를동시에설정할수있습니다. LedColorDefault (Mode1,color[]1,Time1, Mode2,color[]2,Time2) : 모드1, 색상배열1, 시간 1, 모드2, 색상배열2, 시간2의형식으로입력한다. byte modetime = 7; // 모드시간변수 int delaytime = 1000; 변수 byte color0[] = 255, 0, 0; // color0 색상배열 (R,G,B) byte color1[] = 0, 255, 0; // color1 색상배열 (R,G,B) byte color2[] = 0, 0, 255; // color2 색상배열 (R,G,B) byte color3[] = 0, 0, 0; // color3 색상배열 (R,G,B) CoDrone.LedColor(ArmDimming, color0, modetime); // color0에입력된색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, color1, modetime); // color1에입력된색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 CoDrone.LedColor(ArmDimming, color2, modetime); // color2에입력된색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 byte mode1 = ArmHold; // 모드1 byte color1[] = 0, 0, 255; // color1 색상배열 (R,G,B) byte modetime1 = 255; // 모드1 시간변수 byte mode2 = EyeHold; // 모드2 byte color2[] = 255, 255, 0; // color2 색상배열 (R,G,B) byte modetime2 = 255; // 모드2 시간변수 // BLE 보드의통신개시 (115200bps) CoDrone.LedColorDefault(mode1, color1, modetime2, mode2, color2, modetime2); // color에입력된색, mode와 modetime에따라동작 상태체크 1) 배터리레벨체크 (LowBatteryCheck) 배터리잔량에따라부저를울리는예제배터리값 : 0 ~ 100 CoDrone.LedColor(ArmDimming, color3, modetime); // color3에입력된색으로밝기제어하여천천히깜빡이며 modetime 따라동작한다. delay(delaytime); 입력 byte level = 50; // 이곳에서설정한값이배터리기준값이됨 // BLE보드의기능개시 20 21
CoDrone.LowBatteryCheck(level); // 만약배터리가입력한기준값보다작다면부저를울려서알려줌 2) 드론자세체크 (Serial Print Attitude) 드론의현재자세정보 (ROLL, PITCH, YAW) 값을시리얼모니터창에표시 Serial.println(AttitudeROLL); Serial.print("PITCH\t"); Serial.println(AttitudePITCH); Serial.print("YAW\t"); Serial.println(AttitudeYAW); // BLE보드의기능개시 delay(500); AttitudeToSerialMonitor(); // 자세시리얼모니터 void AttitudeToSerialMonitor() CoDrone.Send_LinkModeBroadcast(LinkBroadcast_Active); // 링크모듈모드를엑티브로변경 CoDrone.Request_DroneAttitude(); while (CoDrone.receiveAttitudeSuccess == 0) // 받은자세값이성공적으로체크되었을때 CoDrone.Receive(); CoDrone.receiveAttitudeSuccess = 0; //receiveattitudesuccess flag init 3) RSSI 신호세기 (RSSI_Polling) 드론의 RSSI( 신호세기 ) 값을인벤터보드의 LED 불빛으로표시 CoDrone.Send_LinkModeBroadcast(LinkModeMute); // 링크모듈모드를뮤트로변경 delay(10); Serial.println(""); Serial.println("--------- Now attitude -----------"); Serial.print("ROLL\t"); // BLE보드의기능개시 CoDrone.DisplayRSSI(); // 연결된드론의 RSSI( 신호세기 ) 값을 LED 불빛으로표시 22 23
4) 고도값표시 (DisplayLEDRangeSensor) : 코드론프로 (CoDrone Pro) 전용연결된드론의고도값을 LED로표시 ( 고도값은 mm) int scale = 200; // LED 불빛한개의기준고도 200mm int firstledpin = 11; // 스마트보드의 LED 핀시작번호 // BLE보드의기능개시 delay(500); for (int thispin = 11; thispin <= 18; thispin++) pinmode(thispin, OUTPUT); // LED를모두출력을설정 for (int thispin = 11; thispin <= 18; thispin++) digitalwrite(thispin, LOW); // LED를모두끄기로설정 CoDrone.Request_Range(); long oldtime = millis(); while (CoDrone.receiveRangeSuccess == true) // 받은고도값이성공적으로체크되었을때 CoDrone.Receive(); // 데이터받기 if (oldtime + 1000 < millis()) break; 이길어지면빠져나옴 if (CoDrone.receiveRangeSuccess == true) // 고도값을성공적으로받았는지확인 int _sensor = CoDrone.sensorRange[5] / scale; // 고도값을설정한스케일값으로변환 if (_sensor < 0 )_sensor = 0; // LED 불빛의최소값체크 if (_sensor > 7) _sensor = 7; // LED 불빛의최대값체크 for (int thispin = 11; thispin <= 18; thispin++) digitalwrite(thispin, LOW); // LED를모두끄기로설정 digitalwrite(firstledpin, HIGH); // 첫번째 LED 핀을켬 for (int i = 1; i < _sensor ; i++) digitalwrite(++firstledpin, HIGH); // 센서값에따라 LED 핀을켬 5) 고도값표시 (SerialPrintRangeSensor) : 코드론프로 (CoDrone Pro) 전용연결된드론의고도값을 LED로표시 ( 고도값은 mm) // BLE보드의기능개시 delay(500); RangeSensorToSerialMonitor(); // 고도값을시리얼모니터로출력하는함수실행 void RangeSensorToSerialMonitor() // 고도값을시리얼모니터로출력하는함수 CoDrone.Send_LinkModeBroadcast(LinkBroadcast_Active); // 링크모듈모드를엑티브로변경 delay(100); CoDrone.Request_Range(); long oldtime = millis(); 24 25
while (CoDrone.receiveRangeSuccess == true) // 받은고도값이성공적으로체크되었을때 CoDrone.Receive(); // 데이터받기 if (oldtime + 1000 < millis()) break; 이길어지면빠져나옴 if (CoDrone.receiveRangeSuccess == true) // 고도값을성공적으로받았는지확인 CoDrone.Send_LinkModeBroadcast(LinkModeMute); // 링크모듈모드를뮤트로변경 delay(300); // --------------------------- 센서값출력 --------------------------- // 응용 1) 부메랑턴 (V_Turn) 부메랑처럼한바퀴를돌고다시원점으로돌아오는예제 ( 사용하는드론의상태에따라 Roll, Pitch 와 delay 값을수정한다 ) Serial.println(""); delay(300); Serial.println("--------------- Sensor ---------------"); Serial.print("range tt"); Serial.print(CoDrone.sensorRange[5]); Serial.println(" mm"); CoDrone.FlightEvent(TakeOff); // 이륙 Serial.println("-------------------------------------- "); delay(500); PITCH = 50; ROLL = 50; // PITCH 값입력 // ROLL 값입력 // 입력된값으로드론동작 PITCH = 50; // PITCH 값입력 ROLL = -50; // ROLL 값입력 // 입력된값으로드론동작 PITCH = -50; // PITCH 값입력 ROLL = -50; // ROLL 값입력 // 입력된값으로드론동작 26 27
PITCH = -50; ROLL = 50; // PITCH 값입력 // ROLL 값입력 // 입력된값으로드론동작 3) 손바닥으로점프 (hand_on) 드론이짧게이륙과전진을하여사용자의손에떨어지는예제 ( 사용하는드론의상태에따라 PITCH 와 delay 값을수정한다 ) CoDrone.FlightEvent(Landing); 2) 원돌기 (Circle_Turn) // 서서히착륙 드론의전면이중심을바라보며원을한바퀴를돌고다시원점으로돌아오는예제 ( 사용하는드론의상태에따라 THROTTLE, PITCH, ROLL, YAW 와 delay 값을수정한다 ) CoDrone.FlightEvent(TakeOff); // 이륙 PITCH = 30; delay(300); // PITCH 값입력 // 조종값전송 delay(300); CoDrone.FlightEvent(TakeOff); // 이륙 CoDrone.FlightEvent(Stop); // 서서히착륙 THROTTLE = 60; for(int i=0;i<4;i++) THROTTLE = THROTTLE - 10; YAW = -80; ROLL = 50; delay(1500); CoDrone.FlightEvent(Stop); // THROTTLE 값입력 // 90도반원회전 4번반복 // THROTTLE 값입력 // YAW 값입력 // ROLL 값입력 // 조종값전송 // 멈춤 28 29
4) 장애물점프 (hurdle_jump) 드론이이륙과전진을하여장애물을넘어착륙하는예제 ( 사용하는드론의상태에따라 THROTTLE, PITCH, ROLL 과 delay 값을수정한다 ) 5) 아날로그센서컨트롤 (Analog_Control) 3 개의아날로그센서로드론을조종하는예제 A0 A1 A2 앞면 delay(400); 18 17 16 15 14 13 12 11 CoDrone.FlightEvent(TakeOff); THROTTLE = 20; delay(500); THROTTLE = 0; PITCH = 100; ROLL = -10; delay(300); THROTTLE = 0; PITCH = 0; ROLL = 0; delay(500); // 이륙 // 상승 // THROTTLE 값입력 // 조종값전송 // 전진 // THROTTLE 전송 // PITCH 전송 // ROLL 전송 // 조종값전송 // 제자리비행 // THROTTLE 전송 // PITCH 전송 // ROLL 전송 // 조종값전송 뒷면 - 인벤터보드의아날로그센서 3개와디지털센서 3개를이용한조종예제 - bt4 (14,15) 를누르면 A1은높이조절 A0, A2는좌우이동 - bt8 (18) 을누르면 A1은높이조절 A0, A2는전 후진 - bt1 (11) 을누르면드론정지 byte bt1 = digitalread(11); // 밑면적외선센서를입력으로사용 byte bt4 = digitalread(14); // 밑면적외선센서를입력으로사용 byte bt8 = digitalread(18); // 밑면적외선센서를입력으로사용 CoDrone.FlightEvent(Landing); // 착륙 int analogvalue0 = analogread(a0); // 자기가원하는것과연결가능 int analogvalue1 = analogread(a1); // 자기가원하는것과연결가능 30 31
int analogvalue2 = analogread(a2); // 자기가원하는것과연결가능 if (bt1 &&!bt4 &&!bt8) // 밑면센서가장끝 11번센서에손을대면실행한다. CoDrone.FlightEvent(Stop); // 드론을정지시킨다. if (bt4) // 밑면센서중앙 14번센서에손을대면실행한다. THROTTLE = map(analogvalue1, 0, 1023, -50, 200); // 상승 하강 ROLL = map(analogvalue0, 0, 1023, 100, 0) + map(analogvalue2, 0, 1023, -100, 0); // 좌우이동 CoDrone.Control(SEND_INTERVAL); // 제어신호를보낸다. 시간을두고보냄 ( 최소 50ms) if (bt8) // 밑면센서가장끝 18번센서에손을대면실행한다. THROTTLE = map(analogvalue1, 0, 1023, -50, 200); // 상승 하강 PITCH = map(analogvalue0, 0, 1023, -100, 0) + map(analogvalue2, 0, 1023, 100, 0); // 전진 후진 CoDrone.Control(SEND_INTERVAL); // 제어신호를보낸다. 시간을두고보냄 ( 최소 50ms) 6) 디지털센서컨트롤 (Button_Control) 7개의디지털센서로드론을조종하는프로그램 int slowup = 80; // 천천히올라가는정도의호버링값 int slowdown = -100; // 천천히내려가는정도의호버링값 int slowtime = 10; // 천천히움직이는속도조절 : 커지면천천히올라감 CoDrone.AutoConnect(NearbyDrone); // 가장가까운드론과연결 delay(300); // 밑면센서모두입력으로사용 pinmode(11, INPUT); pinmode(12, INPUT); pinmode(13, INPUT); pinmode(14, INPUT); pinmode(15, INPUT); pinmode(16, INPUT); pinmode(17, INPUT); pinmode(18, INPUT); delay(100); byte bt1 = digitalread(11); byte bt2 = digitalread(12); byte bt3 = digitalread(13); byte bt4 = digitalread(14); //14 & 15 byte bt6 = digitalread(16); byte bt7 = digitalread(17); byte bt8 = digitalread(18); //*************************** Slow Up ***************************// // 1 번째센서에손대면천천히상승 if (bt8 &&!bt7 &&!bt6 &&!bt4 &&!bt3 &&!bt2 &&!bt1) THROTTLE = slowup; delay(slowtime); THROTTLE = 0; //*************************** Slow Down ***************************// // 7 번째센서에손대면천천히하강 else if (!bt8 &&!bt7 &&!bt6 &&!bt4 &&!bt3 &&!bt2 && bt1) THROTTLE = slowdown; delay(slowtime); 32 33
THROTTLE = 0; 4. 코드론컨트롤러 (Controller) 조립 1) 제어보드 ( 스마트인벤터보드 ) 와피트조립하기 //**************************** STOP ******************************// 제어보드의조립부분에맞게 피트의양모서리와제어보드를 // 밑몉센서 4번째감지시 Stop 피트를올려준다. 긴볼트로조립한다. else if (bt4) 보드조립위치 : CoDrone.FlightEvent(Stop); //**************************** Control ******************************// // 밑면 2 번째센서감지시전진 //Forward else if (!bt8 && bt7 &&!bt6 &&!bt4 &&!bt3 &&!bt2 &&!bt1) PITCH = 40; // 밑면 6 번째센서감지시후진 // Back * 보드뒷면에너트를먼저맞춰놓으면 else if (!bt8 &&!bt7 &&!bt6 &&!bt4 &&!bt3 && bt2 &&!bt1) 앞면볼트체결이더욱수월하다! PITCH = -40; 2) 피트에 BLE 보드장착을위한지지대조립하기 // 밑면 3 번째센서감지시왼쪽 짧은지지대와일반볼트를 짧은지지대의꼬리부분이위를 // Left 각각 2개씩준비한다. 향하도록아래사진위치에조립한다. else if (!bt8 &&!bt7 && bt6 &&!bt4 &&!bt3 &&!bt2 &&!bt1) ROLL = -40; // 밑면 5 번째센서감지시오른쪽 // Right else if (!bt8 &&!bt7 &&!bt6 &&!bt4 && bt3 &&!bt2 &&!bt1) ROLL = 40; delay(10); 34 35
4. 코드론컨트롤러 (Controller) 조립 3) 조이스틱모듈조립하기 4. 코드론컨트롤러 (Controller) 조립 5) 건전지케이스와 BLE 보드조립하기 조이스틱모듈 2 개, 일반볼트 4 개, 너트 4 개를준비한다. 아래의사진처럼조이스틱모듈을 피트에조립한다. 4) 번까지조립한컨트롤러와 BLE 보드 1개, 너트 2개를준비한다. 1) 번에서조립한지지대위에 BLE 보드를올려너트로조립한다. 4) 건전지케이스조립하기 ( 뒷면조립 ) 6) 제어보드 ( 스마트인벤터보드 ) 배선하기 3) 번까지조립한컨트롤러와건전지케이스 1개, 긴볼트 2개, 너트 2개를준비한다. 짧은지지대의꼬리부분이위를 향하도록아래사진위치에조립한다. 1, 2, 3, 4 번호에맞게순서대로연결한다. 건전지케이스조립위치 : 1 2 3 1 2 3 4 4 앞면 전선방향 - 노랑 : S / 빨강 : V / 검정 : G 36 37
MEMO MEMO 38 39
RobolinkSW.com 온라인사이트를통해매뉴얼과프로그램다운로드, 교육자료등을확인해주세요. 로보링크 SW / Scratch / Arduino 등이오픈소스로제공됩니다.