아두이노 코딩 : 시리얼 통신으로 서보 모터 SG90 제어
이전 포스트에서 Servo 라이브러리 기초 사용법에 대해 설명하였습니다. 이번 포스트에서는 응용 예제로 시리얼 통신으로 SG90 을 제어하고, 정상적인 값이 아닌 입력을 받은 경우 에러 처리하는 방법에 대해 소개합니다.Hardware준비물본 예제의 구성품은 아래와 같습니다.Arduino Uno x 1EAServo Motor SG90 x 1EA Jumper Wires회로도 및 연결
Servo Motor SG90 사용을 위해 servo 라이브러리를 사용하는 경우 서보 모터 데이터핀은 아두이노 우노 보드의 9번 또는 10번 포트에 연결되어야 합니다. SG90 과 Arduino Uno 보드의 핀 연결은 아래를 참고해주세요.SG90주황색(또는 노란색) : 데이터핀 -> Arduino Uno 9 Pin빨간색 : 전원 (5V)갈색 : 그라운드 (0V)
(adsbygoogle = window.adsbygoogle || []).push({});
시리얼 통신으로 SG90 제러
코드
PC 시리얼 모니터에서 입력된 angle 값으로 서보 모터 제어
PC 시리얼 모니터에서 0 ~ 180 이외의 값 입력시 에러 처리
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475//서보모터 라이브러리 참조#include <Servo.h>// 시리얼 통신 속도 및 서보모터 핀 설정#define BUADRATE 9600#define SERVO 9// myServo : 서보모터 클래스 변수 생성, // strAngle : 시리얼 통신으로 입력 받을 angle 각도 저장Servo myServo;String strAngle; // angle : 서보모터 제어에 사용할 실제 angle 값// flag : 시리얼 통신으로 angle 입력시 이벤트를 발생 flagint angle;boolean flag = false; void setup() { myServo.attach(SERVO); Serial.begin(BUADRATE); while(!Serial){ ; } delay(500); Serial.println("Program Start.."); Serial.print("Input Servo Angle >> ");} void loop() { // 입력된 문자열이 유효값인지 판단을 위한 temp 변수 if(flag == true){ flag = false; angle = strAngle.toInt(); strAngle = ""; // 입력된 값이 0 ~ 180 일때만 Servo 모터 제어 if (angle >= 0 && angle <= 180) { // angle 값 변경 후, read() 함수가 재대로 동작하도록 write() 함수 1회 실행 myServo.write(angle); Serial.print("Servo Angle : "); Serial.println(myServo.read()); Serial.print("Input Servo Angle >> "); } else { ErrorHadler(); } } delay(20);} // 시리얼 통신으로 문자 수신 되면 발생하는 함수// PC 에서 엔터가 눌러지면(캐리지 리턴 발생), flag 를 1 입력void serialEvent(){ char cTemp = (char)Serial.read(); if (isDigit(cTemp) || cTemp == '\b'){ strAngle += cTemp; } else if(cTemp == '\n'){ flag = true; } else if(cTemp == '\r'){ if (strAngle == "") ErrorHadler(); } else{ /* if (cTemp < '0' || cTemp > '9') */ ErrorHadler(); }} // 시리얼 모니터에서 0 ~ 180 이외의 값 입력시 안내 메세지 출력void ErrorHadler(){ Serial.println("Error! Input Angle Number 0 to 180.."); strAngle = ""; Serial.print("Input Servo Angle >> ");}Colored by Color Scriptercs
(adsbygoogle = window.adsbygoogle || []).push({});
코드 설명void loop() 문에서..myString 에 저장된 값이 0 ~ 180 사이의 유효한 값일 때만 servo 모터를 제어유효한 값이 아닐경우 ErrorHandler() 함수 호출void serialEvent() 에서..시리얼 통신으로 입력된 값이 숫자일경우에만 전역변수 myString 에 저장되도록 조건 문 설정유요한 값이 아닐 경우 ErrorHandler() 함수 호출void ErrorHandler() 에서..시리얼 통신으로 유효한 값이 아닐 경우 호출 되는 함수에러 메세지를 출력하고, myString 을 공백으로 초기화 함실행 결과
마무리이번 포스트에서는 서보 모터 SG90 사용 응용 예제로 시리얼 통신으로 서보 모터를 제어하는 코드를 소개하였습니다. SG90 제어 방법외에 시리얼 통신으로 원하지 않는 데이터 처리하는 방법도 필요시 참고해주세요. 끝까지 읽어 주셔서 감사합니다.😄
관련포스트👉 아두이노 시리얼 통신 관련글 목록 보기
👉 아두이노 SERVO MOTOR 관련글 목록 보기
👉 아두이노 모터 관련글 목록 보기
👉 아두이노 관련글 전체 목록 보기
(adsbygoogle = window.adsbygoogle || []).push({});
Lucy / Facilitate4U
2020. 8. 29. 01:12
반응형
Arduino Uno : Servo Motor Control vis Serial
이전 포스트에서 Servo 라이브러리 기초 사용법에 대해 설명하였습니다. 이번 포스트에서는 응용 예제로
Hardware
마무리
시리얼 통신으로 SG90 을 제어하고, 정상적인 값이 아닌 입력을 받은 경우 에러 처리
하는 방법에 대해 소개합니다.Hardware
준비물
본 예제의 구성품은 아래와 같습니다.
- Arduino Uno x 1EA
- Servo Motor SG90 x 1EA
- Jumper Wires
회로도 및 연결
Servo Motor SG90 사용을 위해 servo 라이브러리를 사용하는 경우 서보 모터 데이터핀은 아두이노 우노 보드의 9번 또는 10번 포트에 연결되어야 합니다. SG90 과 Arduino Uno 보드의 핀 연결은 아래를 참고해주세요.
- SG90
- 주황색(또는 노란색) : 데이터핀 -> Arduino Uno 9 Pin
- 빨간색 : 전원 (5V)
- 갈색 : 그라운드 (0V)
시리얼 통신으로 SG90 제러
코드
- PC 시리얼 모니터에서 입력된 angle 값으로 서보 모터 제어
- PC 시리얼 모니터에서 0 ~ 180 이외의 값 입력시 에러 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | //서보모터 라이브러리 참조 #include <Servo.h> // 시리얼 통신 속도 및 서보모터 핀 설정 #define BUADRATE 9600 #define SERVO 9 // myServo : 서보모터 클래스 변수 생성, // strAngle : 시리얼 통신으로 입력 받을 angle 각도 저장 Servo myServo; String strAngle; // angle : 서보모터 제어에 사용할 실제 angle 값 // flag : 시리얼 통신으로 angle 입력시 이벤트를 발생 flag int angle; boolean flag = false; void setup() { myServo.attach(SERVO); Serial.begin(BUADRATE); while(!Serial){ ; } delay(500); Serial.println("Program Start.."); Serial.print("Input Servo Angle >> "); } void loop() { // 입력된 문자열이 유효값인지 판단을 위한 temp 변수 if(flag == true){ flag = false; angle = strAngle.toInt(); strAngle = ""; // 입력된 값이 0 ~ 180 일때만 Servo 모터 제어 if (angle >= 0 && angle <= 180) { // angle 값 변경 후, read() 함수가 재대로 동작하도록 write() 함수 1회 실행 myServo.write(angle); Serial.print("Servo Angle : "); Serial.println(myServo.read()); Serial.print("Input Servo Angle >> "); } else { ErrorHadler(); } } delay(20); } // 시리얼 통신으로 문자 수신 되면 발생하는 함수 // PC 에서 엔터가 눌러지면(캐리지 리턴 발생), flag 를 1 입력 void serialEvent() { char cTemp = (char)Serial.read(); if (isDigit(cTemp) || cTemp == '\b'){ strAngle += cTemp; } else if(cTemp == '\n'){ flag = true; } else if(cTemp == '\r'){ if (strAngle == "") ErrorHadler(); } else{ /* if (cTemp < '0' || cTemp > '9') */ ErrorHadler(); } } // 시리얼 모니터에서 0 ~ 180 이외의 값 입력시 안내 메세지 출력 void ErrorHadler() { Serial.println("Error! Input Angle Number 0 to 180.."); strAngle = ""; Serial.print("Input Servo Angle >> "); } | cs |
코드 설명
- void loop() 문에서..
- myString 에 저장된 값이 0 ~ 180 사이의 유효한 값일 때만 servo 모터를 제어
- 유효한 값이 아닐경우 ErrorHandler() 함수 호출
- void serialEvent() 에서..
- 시리얼 통신으로 입력된 값이 숫자일경우에만 전역변수 myString 에 저장되도록 조건 문 설정
- 유요한 값이 아닐 경우 ErrorHandler() 함수 호출
- void ErrorHandler() 에서..
- 시리얼 통신으로 유효한 값이 아닐 경우 호출 되는 함수
- 에러 메세지를 출력하고, myString 을 공백으로 초기화 함
실행 결과
마무리
이번 포스트에서는 서보 모터 SG90 사용 응용 예제로 시리얼 통신으로 서보 모터를 제어하는 코드를 소개하였습니다.
SG90 제어 방법외에 시리얼 통신으로 원하지 않는 데이터 처리하는 방법
도 필요시 참고해주세요. 끝까지 읽어 주셔서 감사합니다.😄'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #32 스텝 모터 28BYJ-48 5V 라이브러리 없이 동작 - 여자 방식 비교 (2) | 2020.09.02 |
---|---|
아두이노 강좌 #31 Step Stepper Motor 내부 구조 동작 원리 (0) | 2020.08.30 |
아두이노 강좌 #30 Servo 라이브러리 기본 사용법 (9) | 2020.08.29 |
아두이노 강좌 #29 Servo Motor SG90 라이브러리 없이 사용 (0) | 2020.08.28 |
아두이노 강좌 #28 2차원 배열 PROGMEM 매크로 사용 방법 (0) | 2020.08.26 |