Copyright (C) 커널연구회 (www.kernel.bz)문서작업: 정재준(rgbi3307 골뱅이 nate.com)문서위치 메인(출처): http://www.kernel.bz/SmartPrince아래 내용은 누구나 사용할 수 있습니다.단, 저자정보는 지우지 말고 공유하시고 출처를 기입해 주시기 바랍니다. 커널연구회에서 설계하여 제작한 SmartSensor 모듈의 외형은 아래 사진과 같다. 이 모듈의 모델명은 B05_SmartSensor_V02이다. 이 보드는 SmartPower 모듈에서 라즈베리파이 40핀 I/O핀에 장착할 수 있고, 아두이노 헤더핀과도 호환된다. Cortex-M0(STM32F0) MCU가 내장되어 있어 모듈 독립적으로 센서들로부터 데이터를 수집할 수 있다. SmartSensor 모듈 외형 사진 SmartSensor에서 수집하고 있는 센서 데이터들은 다음과 같다. Accelerometer 센서: 3축(X, Y, Z축) 방향별로 이동속도 데이터를 수집할 수 있다. Gyroscope 센서: 3축(X, Y, Z축) 방향별로 기울기 데이터를 수집할 수 있다. Magnetic 센서: 3축(X, Y, Z축) 방향별로 지구 자기장(나침반) 데이터를 수집할 수 있다. 온도, 습도, 조도 센서: 온도, 습도, 빛의 밝기 데이터를 수집할 수 있다. ADC 센서: 각종 ADC 센서(초음파, 적외선)를 연결하여 데이터를 수집할 수 있다. SmartSensor 모듈에 있는 마이크로 USB 포트를 PC에 연결하고 PC에서 시리얼통신 터미널을 실행하여 AT 명령어로 센서 데이터를 쉽게 수집할 수 있다. 또한 라즈베리파이와 아두이노와 결합하여 이동형 로봇의 센서 모듈로 사용할 수도 있다. 좀더 자세한 내용들은 아래부터 설명된다. 하드웨어 제원 및 기능 먼저, B05_SmartSensor_V02의 하드웨어 제원 및 기능에 대해서 알아보도록 하자. 아래 사진은 이 모듈의 제원을 부품 위치별로 설명하는 것이다. B05_SmartSensor 상단부 설명 B05_SmartSensor 모듈 제원 및 기능요약 보드 크기는 가로 53mm, 세로 75mm (아두이노 헤더핀 호환) Cortex-M0(STM32F0) MCU 내장 센서(3축 속도, 기울기, 방향), 온도, 습도, 조도 센서 외부 확장 헤더핀(20핀) 제공하여 ADC 센서 4개, 외부 GPIO 4개 연결가능 RS232 외부 시리얼 통신 고휘도 LED를 색상별(Red, Green, Blue, White) 내장 마이크로 USB포트에 PC의 시리얼통신 터미널을 연결하여 AT 명령어로 동작 제어 SmartSensor 소개 동영상 윈도우 PC에 연결방법 아래 사진처럼, SmartSensor 모듈에 있는 마이크로 USB 포트를 윈도우가 설치되어 있는 PC에 연결한다. USB연결선을 PC에 장착만 하면, USB로부터 5V 전원이 공급되므로 SmartSensor 모듈 하나는 충분히 동작된다. 마이크로 USB 포트를 윈도우PC에 연결 윈도우의 장치 관리자를 확인해 보면 아래와 같이 SmartSensor의 시리얼 장치가 자동 인식된다. 커널연구회는 SmartSensor 모듈에 USB 시리얼(UART) 장치로 Silicon Labs사의 CP2102 IC를 사용했다. 이 장치는 PC에 기본적으로 드라이버가 설치되어 있으므로 별도로 드라이버를 설치하지 않아도 자동으로 인식된다. PC의 장치관리자에서 USB 시리얼(UART) 통신 장치의 포트 번호를 확인한다. 위의 그림에서는 COM4 포트이다. (포트 번호는 PC마다 달라질 수 있다.) PC에서 시리얼 터미널 프로그램을 실행한다. 윈도우 시리얼 터미널이나 Putty, SecureCRT등 사용하기 편한 시리얼 터미널 프로그램을 실행하면 된다. 실행한 시리얼 터미널 프로그램의 시리얼 통신 설정(옵션) 메뉴에서 시리얼 옵션들을 다음과 같이 설정한다. 시리얼 통신 옵션 설정 시리얼 Baud rate는 115200, Data bits는 8, Parity는 None, Stop bits는 1로 설정하고, Flow control는 모두 체크하지 않는다.위와 같이 시리얼통신 옵션들을 설정한후, SmartSensor 보드의 리셋 버턴을 한번 눌러주면 시리얼 터미널 화면에 아래와 같은 메시지들이 출력되면서 동작을 시작한다. 부팅 로그 메시지 user_uart_init(USART1): [OK] user_uart_init(USART2): [OK] user_uart_init(USART3): [OK] user_timer6_init(): [OK] user_timer7_init(): [OK] user_spi_init(SPI2): [OK] user_i2c_init(I2C1): [OK] user_i2c2_init(I2C2): [OK] usr_adc_dma_init(): [OK] (c)www.kernel.bz B05_SmartSensor_V02 Started Sensor[0]:LSM, Addr:D6, ID:68==68 [OK] Sensor[1]:LIS, Addr:3C, ID:3D==3D [OK]Sensor[2]:HTS, Addr:BE, ID:BC==BC [OK] ADC user1 = 1997 ADC user2 = 2119 ADC user3 = 2037 ADC user4 = 2245ADC user5 = 2700 시리얼 터미널에 키보드로부터 AT? 라고 명령을 입력하면 다음과 같은 AT 명령어 사용법(도움말)이 출력된다. 이 명령어들의 자세한 사용법은 다음절부터 자세히 설명한다. AT 명령어 도움말 AT?-------- Module Version ----------------------------------------- B05_SmartSensor_V02 (c)www.kernel.bz-------- Sensor Control Command -------------------------------- AT+SLSM?n Getting Accelerometer/Gyroscope(LSM) Data AT+SLIS?n Getting Magnetic(LIS) Data AT+SHTS?n Getting Humidity/Temperature(HTS) Data-------- ADC Data Command -------------------------------------- AT+SADC?n Getting ADC Data(n:0=ALL, 1=ADC1, 2=ADC2, 3=ADC3, 4=ADC4, 5=ADC5)-------- LED Control Command ----------------------------------- AT+SLED=n,0 LED OFF(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL) AT+SLED=n,1 LED ON(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL)OK 리눅스 PC에 연결방법 아래 사진처럼, SmartSensor 모듈에 있는 마이크로 USB 포트를 리눅스가 설치되어 있는 PC에 연결한다. USB연결선을 PC에 장착만 하면, USB로부터 5V 전원이 공급되므로 SmartSensor 모듈 하나는 충분히 동작된다. 마이크로 USB 포트를 리눅스 PC에 연결 위와 같이 연결했다면, 리눅스 터미널에서 다음과 같은 리눅스 명령어를 입력하여 SmartSensor 모듈의 USB 시리얼통신 장치가 연결되었는지 확인한다. (별도로 설정하지 않아도 자동으로 연결된다) $ dmesg | grep tty[ 0.000000] console [tty0] enabled [ 247.957798] usb 2-2: cp210x converter now attached to ttyUSB0 아래 명령어로 SmartMotor 모듈의 USB 시리얼 장치가 /dev/ttyUSB0 노드에 연결되어 있음을 확인할 수 있다. $ ll /dev/ttyUSB*crw-rw---- 1 root dialout 188, 0 Mar 31 18:44 /dev/ttyUSB0 이제, 리눅스 명령창에서 시리얼 터미널 프로그램을 실행한다. 리눅스에서는 minicom을 시리얼 터미널 프로그램으로 많이 사용한다. 이 프로그램이 설치되어 있지 않다면, 다음과 같이 설치한다. $ sudo apt-get install minicom 이제 minicom을 다음과 같이 실행한다. (루트 권한으로 실행) $ sudo minicom 실행 메시지가 다음과 같이 화면에 출력된다. Welcome to minicom 2.6.1OPTIONS: I18n Port /dev/ttyUSB0Press CTRL-A Z for help on special keys 시리얼통신 포트가 위와 같이 /dev/ttyUSB0로 설정되어 있지 않고, 통신 속도(baud rate)도 115200으로 설정되어 있지 않다면, 키보드에서 Ctrl-A를 누른후 O 키를 눌러서 다음과 같이 옵션 설정 메뉴로 진입한다. +-----[configuration]------+ | Filenames and paths | | File transfer protocols | | Serial port setup | | Modem and dialing | | Screen and keyboard | | Save setup as dfl | | Save setup as.. | | Exit | +-------------------------------+ 화살표를 아래로 눌러서 세번째 메뉴인 Serial port setup을 선택한후 엔터하면 아래와 같이 설정 옵션 메뉴가 나타난다. +-----------------------------------------------------------------------+ | A - Serial Device : /dev/ttyUSB0 | | B - Lockfile Location : /var/lock | | C - Callin Program : | | D - Callout Program : | | E - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : No | | G - Software Flow Control : No | | | | Change which setting? | +-----------------------------------------------------------------------+ 화면에 나타난 옵션들을 위와 같이 맞추어 준다. 그런다음 다시 상위 메뉴로 돌아가서 Save Setup as dfl 메뉴를 엔터하여 설정내용을 저장하고 Exit하여 빠져 나온다. +-----[configuration]------+ | Filenames and paths | | File transfer protocols | | Serial port setup | | Modem and dialing | | Screen and keyboard | | Save setup as dfl | | Save setup as.. | | Exit | +-------------------------------+ 위와 같이 시리얼통신 옵션들을 설정한후, SmartSensor 보드의 리셋 버턴을 한번 눌러주면 minicom 시리얼 터미널 화면에 아래와 같은 메시지들이 출력되면서 동작을 시작한다. 부팅 로그 메시지 user_uart_init(USART1): [OK] user_uart_init(USART2): [OK] user_uart_init(USART3): [OK] user_timer6_init(): [OK] user_timer7_init(): [OK] user_spi_init(SPI2): [OK] user_i2c_init(I2C1): [OK] user_i2c2_init(I2C2): [OK] usr_adc_dma_init(): [OK] (c)www.kernel.bz B05_SmartSensor_V02 Started Sensor[0]:LSM, Addr:D6, ID:68==68 [OK] Sensor[1]:LIS, Addr:3C, ID:3D==3D [OK]Sensor[2]:HTS, Addr:BE, ID:BC==BC [OK] ADC user1 = 1997 ADC user2 = 2119 ADC user3 = 2037 ADC user4 = 2245ADC user5 = 2700 시리얼 터미널에 키보드로부터 AT? 라고 명령을 입력하면 다음과 같은 AT 명령어 사용법(도움말)이 출력된다. 이 명령어들의 자세한 사용법은 다음절부터 자세히 설명한다. AT 명령어 도움말 AT?-------- Module Version ----------------------------------------- B05_SmartSensor_V02 (c)www.kernel.bz-------- Sensor Control Command -------------------------------- AT+SLSM?n Getting Accelerometer/Gyroscope(LSM) Data AT+SLIS?n Getting Magnetic(LIS) Data AT+SHTS?n Getting Humidity/Temperature(HTS) Data-------- ADC Data Command -------------------------------------- AT+SADC?n Getting ADC Data(n:0=ALL, 1=ADC1, 2=ADC2, 3=ADC3, 4=ADC4, 5=ADC5)-------- LED Control Command ----------------------------------- AT+SLED=n,0 LED OFF(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL) AT+SLED=n,1 LED ON(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL)OK AT 명령어 사용법SmartSensor 모듈과 PC간에 USB 시리얼 라인이 연결되고 옵션들이 정상적으로 설정되었다면 AT 명령어들을 사용하여 SmartSensor 모듈에 프로그램되어 있는 펌웨어 기능들을 동작시킬 수 있다. (혹시 동작하지 않는다면 앞의 연결과정을 다시한번 점검해 주기 바란다)참고로, AT 명령어들은 소문자/대문자 구분없이 입력하면 되고, SmartSensor 모듈 내부에서는 모두 대문자로 변환하여 동작된다. 도움말 확인하기 시리얼 터미널 창에서 키보드로부터 AT? 을 입력하고 엔터하면 다음과 같은 도움말이 화면에 출력된다. B05_SmartSensor_V02는 모듈의 모델명과 버전이다. 명령어들은 크게 3가지로 나누어져 있다. 첫째는 센서들의 데이터를 가져오는 명령들이고, 둘째는 외부 확장핀에 연결되어 있는 ADC 센서들의 데이터를 가져오는 명령어들(AT+SADC?)이고, 셋째는 고휘도 LED를 on/off하는 명령어들(AT+SLED=) 이다. 이것들에 대해서 아래부터 자세히 사용법을 설명한다. AT 명령어 도움말 AT?-------- Module Version ----------------------------------------- B05_SmartSensor_V02 (c)www.kernel.bz-------- Sensor Control Command -------------------------------- AT+SLSM?n Getting Accelerometer/Gyroscope(LSM) Data AT+SLIS?n Getting Magnetic(LIS) Data AT+SHTS?n Getting Humidity/Temperature(HTS) Data-------- ADC Data Command -------------------------------------- AT+SADC?n Getting ADC Data(n:0=ALL, 1=ADC1, 2=ADC2, 3=ADC3, 4=ADC4, 5=ADC5)-------- LED Control Command ----------------------------------- AT+SLED=n,0 LED OFF(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL) AT+SLED=n,1 LED ON(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL)OK 센서 데이터 가져오기 센서들의 데이터를 가져오는 AT 명령어는 다음과 같이 세가지 종류가 있다. 첫째로 AT+SLSM?n 명령어는 3축 가속도와 3축 기울기 데이터를 가져온다. 두번째 AT+SLIS?n 명령어는 지구 자기장(지자계) 센서로부터 방향 정보를 가져온다. 세번째 AT+SHTS?n 명령어는 온도와 습도 센서로부터 데이터를 가져온다. 센서 데이터 수집 명령어 -------- Sensor Control Command -------------------------------- AT+SLSM?n Getting Accelerometer/Gyroscope(LSM) Data AT+SLIS?n Getting Magnetic(LIS) Data AT+SHTS?n Getting Humidity/Temperature(HTS) Data 먼저 AT+SLSM? 명령어를 시리얼 터미널에 입력하면 다음과 같은 데이터를 출력한다. AT+SLSM?n에서 n은 생략가능하다. 하지만 n에 숫자를 입력하면 그 숫자만큼 데이터를 반복 수집하여 평균값을 출력한다. 예를들어 n에 6을 입력하면, 내부적으로 센서 데이터를 6번 반복 수집하여 합산한후 6으로 나눈 평균값을 출력한다. 이렇게 하면 오차가 줄어든다. acc_x=-35866, acc_y=3355, acc_z=1464671, roll=15067500, pitch=126236248, yaw=-103459999 위의 데이터는 SmartSensor 보드에 있는 3축 가속도와 3축 기울기 센서인 LSM6DS0 칩으로부터 데이터를 수집하여 출력한 것이다. acc_x는 X축 방향으로 이동할 때 발생하는 가속도 데이터이고, acc_y는 Y축 방향으로 이동할 때 발생하는 가속도 데이터이고, acc_z는 Z축 방향으로 이동할 때 발생하는 가속도 데이터이다. 아래 그림은 이것을 설명하는 것이다. 3축 가속도 roll은 X축을 기준으로 기울어진 기울기 데이터이고, pitch는 Y축 기준의 기울기 데이터이고, yaw는 Z축 기준의 기울기 데이터이다. 아래 그림은 이것을 설명하는 것이다. 3축 기울기 다음으로 AT+SLIS? 명령어를 시리얼 터미널에 입력하면 다음과 같은 데이터를 출력한다. AT+SLIS?n에서 n은 생략가능하다. n은 데이터를 내부적으로 반복 수집하는 회수이다. mag_x=146146, mag_y=-866362, mag_z=-1402036 위의 데이터는 SmartSensor 보드에 있는 3축 지자계 센서인 LIS3MDL 칩으로부터 지구 자기장을 기준으로 이 칩이 놓여진 방향 데이터를 출력한 것이다. mag_x는 X축 기준의 방향 데이터이고, mag_y는 Y축 기준의 방향 데이터이고, mag_z는 Z축 기준의 방향 데이터이다. 아래 그림은 이것을 설명하고 있는 것이다. 3축 방향 센서 다음으로 AT+SHTS? 명령어를 시리얼 터미널에 입력하면 다음과 같은 데이터를 출력한다. AT+ SHTS?n에서 n은 생략가능하다. n은 데이터를 내부적으로 반복 수집하는 회수이다. temper=21353, humty=58543 위의 데이터는 SmartSensor 보드에 있는 온도 습도 센서인 HTS221 칩으로부터 온도와 습도 데이터를 가져와서 출력한 것이다. 온도 습도 센서 temper는 온도 데이터이고 humty는 습도 데이터이다. ADC 센서들의 데이터 가져오기 ADC 센서들은 아래 그림과 같이 SmartSensor 보드의 하단부에 있는 외부 확장 헤더핀(2열 40핀)에 연결할 수 있다. ADC 센서들의 데이터에 해당하는 ADC1, 2, 3, 4는 외부 확장 헤더핀번호 1, 2, 7, 8에 각각 연결하고 전원(5V)은 5, 6, 11, 12번 핀에 연결하고 0V 그라운드는 3, 4, 9, 10번 핀에 각각 연결하면 된다. 특별히 ADC5는 SmartSensor 보드에서 조도(빛의 밝기)센서에 연결되어 있다.(내장) ADC 센서들로부터 데이터를 가져오는 명령어는 다음과 같다. -------- ADC Data Command -------------------------------------- AT+SADC?n Getting ADC Data(n:0=ALL, 1=ADC1, 2=ADC2, 3=ADC3, 4=ADC4, 5=ADC5) AT+SADC? 를 시리얼 터미널에 입력하면 다음과 같이 ADC 센서 번호별로 각각의 데이터가 출력된다. AT+SADC?n에서 n은 생략가능하다. n은 데이터를 내부적으로 반복 수집하는 회수이다. adc1=2195, adc2=1978, adc3=2071, adc4=2320, adc5=2846 adc1은 ADC1 센서의 데이터이고 adc2은 ADC2 센서의 데이터이고 adc3은 ADC3 센서의 데이터이고 adc4은 ADC4 센서의 데이터이고 adc5은 ADC5 센서의 데이터이다. 특별히 adc5는 SmartSensor 보드에 내장되어 있는 조도센서 데이터 값이다. 이값은 최소 0부터 최대 4095 사이에서 출력된다. 빛이 밝을수록 큰값이 출력되고 빛이 어두어질수록 작은값이 출력된다. 고휘도 LED 스위칭 고휘도 LED는 아주 밝은 빛을 출력한다. SmartSensor 보드 상단에 색상별로 4개가 내장되어 있다. 첫번째 고휘도 LED는 적색(red) 빛을 출력하고 두번째는 녹색(green), 세번째는 푸른색(blue), 네번째는 흰색(white) 빛을 출력한다. 고휘도 LED를 색상별로 출력하는 AT 명령어는 다음과 같다. -------- LED Control Command ----------------------------------- AT+SLED=n,0 LED OFF(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL) AT+SLED=n,1 LED ON(n:1=(RED), 2=(GREEN), 3=(BLUE), 4=(WHITE), 5=ALL) AT+SLED=n,1 명령어는 LED을 켜는(On) 것이고 AT+SLED=n,0 명령어는 LED를 크는(Off) 명령어이다. 여기서 n은 LED를 선택하는 번호이다. n에 1을 입력하면 첫번째 적색 LED이고 2는 두번째 녹색, 3은 세번째 푸른색, 4는 네번째 흰색 LED을 선택하는 것이다. 외부확장핀(20핀) SmartSensor 보드의 하단부에 외부 확장핀(20핀: 2열 10핀)을 제공하여 ADC 센서 4개, 외부 GPIO 4개, RS232 시리얼 통신을 연결할 수 있다. 외부확장 핀번호 및 회로도 감사합니다.궁금한 사항은 댓글 남겨주시기 바랍니다.