Ubiquitous Computing Practice - Part 2(LED 제어) - Spring Semester, 2011 Ubiquitous Computing Practice - Part 2(LED 제어) - Laboratory of Intelligent Networks @ KUT (http://link.kut.ac.kr) Yong-hwan Kim
목차 1. Task를 이용한 LED 제어 2. Timer를 이용한 LED 제어 3. 조도 센서 제어 4. 온/습도 센서 제어 LED component를 사용하여 LED 제어 2. Timer를 이용한 LED 제어 Timer component를 이용하여 일정 시간마다 LED On/Off 3. 조도 센서 제어 빛의 광량을 측정하는 조도 센서의 동작 및 센싱 데이터 처리 및 확인 4. 온/습도 센서 제어 SHT11을 이용하여 온/습도를 얻고 시리얼 통신으로 확인 5. Photo 센서 제어(RF 통신) BS520 Photo 센서를 이용하여 빛과 적외선을 측정하고 그 결과를 RF 무선통신을 통해 다른 노드에 전송 Ubiquitous Computing
목차 6. 기본 무선통신 프로토콜 7. RF Power Control, Multichannel and RSSI MAC 프로토콜의 특징과 사용법을 실제 무선 송수신 예제를 통해 연습 7. RF Power Control, Multichannel and RSSI RF Power Control과 Multichannel 에 대해 이해 및 RSSI 값 활용 방법 예제 수행 8. 무선 Ad-hoc Flooding 네트워크 Multi-hop 통신 기법 9. Tree 라우팅을 이용한 멀티 홉 통신 조도, 온도, 습도, 적외선 값을 센싱한 후, Tree 라우팅으로 구성된 멀티 홉 네트워크를 통해 생성한 데이터를 Sink로 전달 10. RFID 실습 13.56MHz 태그와 리더기의 사용법과 제어 방법 Ubiquitous Computing
2. Timer를 이용한 LED 제어 Timer component를 이용하여 일정 시간마다 LED On/Off Ubiquitous Computing
Blink 예제 실습 $ cd /opt/tinyos-2.x/contrib/zigbex/BlinkTimer $ make zigbex Ubiquitous Computing
Blink 예제 실습 USB-ISP와 ZigbeX노드를 결합 USB-ISP mode는 ISP로 설정 AVR Studio에서 Tools → Program AVR → Auto Connect 메뉴를 선택 … 버튼을 눌러 BlinkTimer\build\zigbex\main.hex 선택 후 Program 버튼을 눌러 프로그램함 프로그램 직후 red LED가 1초마다 toggle 되는 것을 볼 수 있음 Ubiquitous Computing
(generic configuration) configuration BlinkTimer { } implementation { components MainC, BlinkTimerM, LedsC, new TimerMilliC (); BlinkTimerM.Boot -> MainC; BlinkTimerM.Leds -> LedsC; BlinkTimerM.Timer -> TimerMilliC; BlinkTimer.nc BlinkTimer.nc MainC (configuration) TimerMilliC (generic configuration) Boot Timer implementation startPeriodic(); startOneShot(); … BlinkTimerM (module) LedsC (configuration) Boot implementation Boot.booted(); Timer.fired(); Leds Leds implementation Leds.init(); Leds.redOn(); … Timer
기본 지식(TimerMilliC component) 경로: \opt\tinyos-2.x\tos\system\TimerMilliC.nc Timer interface 사용 Timer interface에서 제공하는 함수들 command uint32_t getdt () 설정된 타이머의 주기를 리턴 command uint32_t getNow () 현재 시간을 리턴 command uint32_t gett0 () 타이머가 호출된 시간인 t0를 리턴 command bool isOneShot () 한 번 호출로 종료되는 타이머인지 확인 command bool isRunning () 현재 타이머가 설정되어 실행중인지 확인 *command bool startOneShot (uint32_t dt) dt 시간 후에 한번 이벤트를 발생 command bool startOneShot (uint32_t t0, uint32_t dt) t0 + dt 시간 후에 이벤트를 발생 *command bool startPeriodic (uint32_t dt) dt 시간을 주기로 계속 반복하여 이벤트 발생 command bool startPeriodic (uint32_t t0, uint32_t dt) t0 시간부터 dt 주기로 반복하여 이벤트 발생 command void stop () 현재 진행중인 timer를 정지 event void fired () 정해진 타이머가 끝났음을 알림 Ubiquitous Computing
BlinkTimer.nc Timer component를 이용하여 일정 시간마다 LED On/Off 하는 예제 configuration BlinkTimer { } implementation { components MainC, BlinkTimerM, LedsC, new TimerMilliC (); BlinkTimerM.Boot -> MainC; BlinkTimerM.Leds -> LedsC; BlinkTimerM.Timer -> TimerMilliC; 중복적으로 사용될수 있는 컴포넌트를 지원하기 위한 기법 Ubiquitous Computing
BlinkTimerM.nc module BlinkTimerM { uses { interface Boot; interface Leds; interface Timer<Tmilli>; } implementation { event void Boot.booted() { call Timer.startPeriodic(1000); event void timer.fired () { call Leds.led0Toggle (); //시간단위를 ms로 함 //1초마다 Timer.fired event 함수 호출 Ubiquitous Computing
Blink 예제 실습 응용 Timer를 3개 사용하여 BlinkTimer2 작성 1000ms 마다 빨간색 led Toggle Ubiquitous Computing