이 장에서는 Embedded Computer(Controller)에 장치를 연결(Interface) 하고, 장치를 제어 하는 프로그램(Device driver)을 작성 하는 능력을 배양 하기 위하여 자주 사용 되는 장치의 실제 예를 들어 설명 한다.
- DC Motor 제어를 위한 구성도와 프로그램 예
- Servo Motor 제어를 위한 구성도와 프로그램 예
- Android Bluetooth 환경을 이용한 AVR Controller 제어
- DC Motor 제어를 위한 구성도와 프로그램 예
- DC Motor 제어를 위한 구성도
- Dual Full-Bridge Driver L298 : L298.pdf
- DC Motor 제어 보오드 회로 예: DC_Motor_controller.pdf
- DC Motor 제어 프로그램 예: cho_DC_motor_control_basic_2560.zip
- 실험을 위한 회로 구성
- PC와 AVR 사이에 UART 통신선을 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Mega board의 TXD1(PD3)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Mega board의 RXD1(PD2)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Mega board의 GND를 연결한다.
- Mega board에 LCD display module의 신호를 연결한다.
- LCD 제어 신호(RS, R/W, Enable)를 연결한다.
- LCD Data 신호(Data0, Data1, Data2, Data3)를 연결한다.
- Contrast adjustment 선을 연결한다.
- GND: LCD 모듈 1번 핀
- Vdd: LCD 모듈 2번 핀
- Contrast adjustment: LCD 모듈 2번 핀. 5 에서 10K 가변저항을 사용하여 "LCD 모듈 4Bit Interface 예"와 같이 연결한다.
- Mega board에 Keypad를 연결한다.
- 위 "DC Motor 제어를 위한 구성도"를 참고하여 Motor controller와 DC Motor 연결한다.
- Mega PB5 <-> Motor controller Enable 신호를 연결한다.
- Mega PG0 <-> Motor controller Direction 신호를 연결한다.
- Mega 5V, GND <-> Motor controller 5V, GND 신호를 연결한다.
- 필요한 경우 Motor controller에 모터 구동 전원를 연결한다.
- Motor controller에 모터를 연결한다.
- 실험 방법
- cho_DC_motor_control_basic_2560.zip 파일을 Download하여 압축을 해제한다.
- cho_DC_motor_control_basic_2560.hex를 개발 보드에 Upload 한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 모니터와 LCD에 모터 제어에 필요한 명령을 설명하는 메세지와 현재 명령(Command: )과 PwmDuty(PwmDuty: )가 출력된다.
- 명령을 입력하면 실행 결과가 모니터와 LCD에 출력된다.
- 모니터 프로그램에서 명령 입력하기: gnu_sciutil.c에 있는 SCI_InChar() 함수에서 return rx0_char(); 이 실행되도록 설정한다.
- Keypad에서 명령 입력하기: gnu_sciutil.c에 있는 SCI_InChar() 함수에서 return get_key(); 이 실행되도록 설정한다.
- Servo Motor 제어를 위한 구성도와 프로그램 예
- Servo Motor 제어 구성도
- Servo Motor SG90의 제어 신호(Timming 과 Angle)
- Servo Motor 제어 프로그램 예: cho_servo_motor_control_2560.zip
- 실험을 위한 회로 구성
- PC와 Mega board 사이에 UART 통신선을 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Mega board의 TXD1(PD3)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Mega board의 RXD1(PD2)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Mega board의 GND를 연결한다.
- 위 "Servo Motor 제어를 위한 구성도"를 참고하여 Mega board와 Servo Motor를 연결한다.
- Mega PB5 <-> Servo Motor 제어 신호(보통 Orange 색 선을 사용)를 연결한다.
- Mega 5V <-> Servo Motor 5V(보통 Red 색 선을 사용)를 연결한다.
- Mega GND <-> Servo Motor GND(보통 Brown 색 선을 사용)를 연결한다.
- 실험 방법
- cho_servo_motor_control_2560.zip 파일을 Download하여 압축을 해제한다.
- cho_servo_motor_control_2560.hex를 개발 보드에 Upload 한다.
- 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
- 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
- 실험:
- 개발 보드의 Reset SW를 누르면 모니터에 Servo Motor 제어에 필요한 명령을 설명하는 메세지가 출력된다.
- 모니터 프로그램에서 명령을 입력하면 실행 결과가 모니터에 출력된다.
- Android Bluetooth 환경을 이용한 AVR Controller 제어
- Bluetooth 통신( PC <-> 휴대폰) 시스템 구성도
- Bluetooth Module 예
- 실험 환경 설정
- Android Phone에 BlueTerm(Bluetooth 통신을 지원 하는 터미널 프로그램)을 설치 한다.
- 개발 보오드에 Bluetooth 모듈 설치 하기
- 개발 보오드 VCC(5V) -> Bluetooth 모듈 VCC(5V)
- 개발 보오드 GND -> Bluetooth 모듈 GND
- 개발 보오드 RxD(PD2) <-> Bluetooth 모듈 TxD
- 개발 보오드 TxD(PD3) <-> Bluetooth 모듈 RxD
- Bluetooth 모듈 Baud rate
- 블루투스 모듈에 따라 미리 설정된 Baud rate 가 다르기 때문에 확인 하여야 한다.
- 블루투스 모듈과 통신에 사용 하는 개발 보오드 UART 모듈(여기서는 UART1을 사용 하였음)의 Baud rate는 블루투스 모듈에 미리 설정 되어 있는 Baud rate와 일치 하도록 설정 하여야 한다.
- 아래 휴대폰과 개발 보오드 사이의 문자 통신 실험인 경우 예:
- cho_uart_bluetooth_basic.zip을 다운로드 하여 cho_uart_init.c File에서 UART1(UART0는 개발 보오드에서 사용 한다.)의 Baud rate 값을 블루투스 모듈 Baud rate 값으로 설정 하여야 한다.
- 예: HC-06 모듈: 9600, JMOD-BT-1 모듈: 19200
- 휴대폰에 블루투스 모듈 등록 하기
- 개발 보오드의 전원을 연결 하면 Bluetooth 모듈의 전원 LED가 점멸 한다.
- 휴대폰에서 블루투스 -> 검색을 하면 연결 가능한 디바이스 목록에 디바이스 이름이 표시 된다.(예: HC-06 , JCNET-BT 등)
- 연결 할 디바이스을 선택(예: HC-06 , JCNET-BT 등) 하고 Pin 번호(Default: 1234 or 0000)를 입력 한다.
- 휴대폰에서 블루투스 모듈 연결 하기
- 블루투스 통신에 사용할 앱(Apps)을 선택(Blue Term) 하여 실행 한다.
- Connect device 명령을 실행 하면 연결 가능한 디이바이스가 표시 된다.
- 연결 할 디이바이스를 선택 하고, 연결에 성공 하면 Connected: Device Name(예: HC-06) 메세지가 표시 된다.
- 휴대폰과 개발 보오드 사이의 문자 통신 실험
- Board를 PC의 USB Port에 접속 한다.
- cho_uart_bluetooth_basic_2560.zip 을 다운로드 하여 .Hex File을 개발 보오드에 설치 한다.
- PC 장치관리자 -> 포트(COM & LPT) -> Silicon Labs CP210x USB to UART Bridge(장치 이름은 개발 보오드에 따라 다르게 표시 됨)의 포트 번호를 확인 한다.
- PC에서 터미널 프로그램(Tera Term or OC Console 등)을 실행 하고, 설정 -> 시리얼 포트(E)… -> 시리얼포트 설정 창에서 포트(장치 관리자에서 확인한 번호) 번호, 속도(B): 19200, 데이터(D): 8bit, 패리티(A): none, Stop bit(S): 1 bit 로 설정 한다.
- Android Phone에서 BlueTerm를 실행 하고, 메뉴 -> Connect device -> Device Name(예: HC-06)을 선택 한다.
- Connected: Device Name 메시지를 확인 한다.
- Android Phone의 BlueTerm에서 영문자를 입력 하면 PC의 터미널에 문자가 출력 된다.
- PC의 터미널 프로그램에서 영문자를 입력 하면 Android Phone의 BlueTerm에 문자가 출력 된다.
- 휴대폰을 이용한 개발 보오드의 LED 제어 실험
- 휴대폰에서 LED 제어 명령(문자)을 입력 하면 개발 보오드 상의 LED 가 명령에 따라 동작 한다.
- 실험에 필요한 설정은 윗 예와 같기 때문에 생략 한다.
- cho_bluetooth_led_basic_2560.zip 을 다운로드 하여 .Hex File을 개발 보오드에 설치 한다.
- LED 제어 명령(문자)
- S: Turn Off
- L: Shift Left
- R: Shift Right
- B: Blinking
Arduino Mega 2560를 사용하는 경우 2560 Pin name과 Mega board pin name mapping table을 참고하여 신호선을 연결한다.
참고자료: Arduino Mega 2560 PIN mapping table
주: UART1은 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. Mega board의 UART0는 개발 Tool에서 사용하기 때문에 이 예서는 UART 통신 실험에 UART1을 사용한다.
참고자료: USB - Serial 변환 모듈
주: 처음 LCD display module을 연결한 경우에는 Contrast adjustment 가변저항을 조정하여 LCD에 문자가 잘 보이도록 하여야 한다.
참고자료: LCD Module을 사용 하여 Data Bit를 4Bit만 사용한 Interfacing 예(Port A 사용)
참고자료: Keypad Interfacing
주: 모니터 프로그램과 Keypad 둘중 하나에서 명령을 수신할 수 있도록 설정하여야 한다.
주: 0°: 1500uSec, 90 ↔ 1000uSec , Duty(uSec) = 1500uSec + (angle * 125 / 90)
주: 명령을 입력하는 함수(SCI_InSDec_OP_code())는 일반적인 연산에 사용하는 함수를 사용하여 약간 복잡하다. 본인이 간단한 rx0_char() 함수를 만들어 이용하여도 된다.
이 예는 Bluetooth 통신을 이용 하여 휴대폰과 AVR Controller 사이에 Serial 통신 기능을 구현 하고, 휴대폰을 이용 하여 AVR Controller를 제어 하는 예 이다.
개발 보오드(UART1 사용)와 Bluetooth 모듈 사이에 아래와 같이 전원과 UART 통신에 필요한 신호를 연결 한다.