코드론아두이노프로그래밍 로보링크주식회사

Similar documents
슬라이드 1

RVC Robot Vaccum Cleaner

Microsoft PowerPoint - es-arduino-lecture-03

슬라이드 1

PowerPoint 프레젠테이션

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

1

슬라이드 1

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Microsoft PowerPoint - polling.pptx

Phanto 4 Pro DJI PHANTOMTM 4 Pro는 스마트한 프로슈머를 위한 비행 카메라로, 최대 100bps에서 60fps 4K 동영상을 촬영하고 0메가픽셀 스틸 사진을 촬영할 수 있습니다. 4방향 장애물 회피 기능으로 비행 중에 장애물을 지능적으로 회피합니

슬라이드 제목 없음

chap 5: Trees

실험 5

PowerPoint 프레젠테이션


<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

MakerSprit_MPack제안서

금오공대 컴퓨터공학전공 강의자료

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

EBhostW_SerialOutputProtocol_rev10b_ (2002).hwp

ISP and CodeVisionAVR C Compiler.hwp

윈도우즈프로그래밍(1)

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft Word - PLC제어응용-2차시.doc

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

BY-FDP-4-70.hwp

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

CAN-fly Quick Manual

PowerPoint Presentation

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

PowerPoint Template

SMT Kor.indd

Example: LED flashlight

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

MY19 power meter user manual KO

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1

Xcrypt 내장형 X211SCI 수신기 KBS World 채널 설정법

PowerPoint 프레젠테이션

중간고사

Phantom 4 DJI Phantom 4은(는) 별도의 장치 없이 물체를 지능적으로 추적하고 장애물을 피하면서 손가락으로 탭하여 비행할 수 있는 아주 스마트한 비행 카메라입니다. 비행 중에 4K 비디오 또는 12메가픽셀 정지 화상을 촬영합니다. TapFly와 Acti

온습도 판넬미터(JTH-05) 사양서V1.0

Microsoft Word MetOne237Bmanual

Microsoft PowerPoint - Java7.pptx

Ver. DS-2012.T3.DWS.STR-1.0 System Test Report for Digital Watch System Test Cases Specification Test Summary Report Project Team 이동아 Latest update on

UI TASK & KEY EVENT

161117_EX Phone stick_manual

< > 1 2 '.... BLDC ESC GPS GPS.,.

BC6HP Korean.ai

EX BAND

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

Index 1. Intro Install Connect Scratch 1.4 (Offline Editor) Scratch 2.0 (Online Editor) Connect f

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

ez-md+_manual01

SBR-100S User Manual

Microsoft Word - PEB08_USER_GUIDE.doc

ePapyrus PDF Document

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

설계란 무엇인가?

PowerPoint Presentation

쓰리 핸드(삼침) 요일 및 2405 요일 시간, 및 요일 설정 1. 용두를 2의 위치로 당기고 반시계방향으로 돌려 전날로 를 설정합니다. 2. 용두를 시계방향으로 돌려 전날로 요일을 설정합니다. 3. 용두를 3의 위치로 당기고 오늘 와 요일이 표시될 때까지 시계방향으로

JARDUINO-UNO-BT 커넥터 / 스위치기능 종류 USB 커넥터리셋스위치 DC 전원잭업로드선택스위치 ISP 모드선택점퍼블루투스시리얼모듈전원 / 디지털포트 / 아날로그포트커넥터및 ISP 커넥터 기능 +5V 전원공급, 유선업로드기능누른상태에서전원을공급하면부트로더프로그

GBF-1257B 카스블루투스체지방계앱사용매뉴얼

(01~64)550지학-정답(1~5단원)


Q172DS

Install stm32cubemx and st-link utility

고객 카드

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint Template

140109_다본다 레전드 매뉴얼

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

Visual Basic 반복문

PowerPoint Template

FlightGear 2.10

TES_1353.hwp

UI TASK & KEY EVENT

(SW3704) Gingerbread Source Build & Working Guide

Musique(002~095).indd

슬라이드 1

< Xcrypt 내장형 S211XT 수신기 KBS World 채널 설정법 >

MotionGear S Series manual book_ko

OCW_C언어 기초

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

S A S D 발표 : 구태환

차례 2 랩퀘스트2 인터페이스를 사용하기전에 : 1 배터리를 삽입한다. 2 전원 어댑터를 연결한다. 3 최소 8시간 충전한다. 4 안전사항과 사용설명서를 숙지한다. 더 많은 정보는 네이버 MBL 카페를 참조하시기 바랍니다.

차시 AS_02 대상 교육주제아두이노 LED 및버튼제어프로젝트교육시간 120 분 1. 아두이노를이용하여 LED 를제어할수있다. 교육목표 2. 아두이노를이용하여삼색 LED 를제어할수있다. 3. 아두이노에서버튼입력을수행하여프로그램에연동할수있다. 장비류는미리배분하고, 재료는

슬라이드 1

슬라이드 1

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

SMV Vending Machine Implementation and Verification 김성민 정혁준 손영석

Microsoft PowerPoint - chap06-2pointer.ppt

Transcription:

코드론아두이노프로그래밍 로보링크주식회사

목차 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 등이오픈소스로제공됩니다.