<4D F736F F F696E74202D205BBDC7BDC0345DC1B6B5B5BCBEBCADC1A6BEEE2E BC8A3C8AF20B8F0B5E55D>

Similar documents
<283130C1D6294C454420B9D720BCBEBCAD20C1A6BEEE2E687770>

Microsoft PowerPoint - [이론4]TinyOS와NesC [호환 모드]

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - Java7.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

ISP and CodeVisionAVR C Compiler.hwp

순서 기본개념 USN 핵심기술 USN 적용사례 ZigbeX 소개 ZigbeX 개발환경구축 TinyOS 개요 nesc 구문이해 기본예제를이용한실습 WSN 프로그래밍실습 p.2

Microsoft PowerPoint - additional01.ppt [호환 모드]

C 언어 프로그래밊 과제 풀이

슬라이드 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

쉽게 풀어쓴 C 프로그래밍

Chapter #01 Subject

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

Lab 3. 실습문제 (Single linked list)_해답.hwp

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap06-5 [호환 모드]

TinyOS_programming.hwp

11장 포인터

Frama-C/JESSIS 사용법 소개

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

쉽게 풀어쓴 C 프로그래밍

API 매뉴얼

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

제1장 Unix란 무엇인가?

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

중간고사

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

untitled

<30352D30312D3120BFB5B9AEB0E8BEE0C0C720C0CCC7D82E687770>

歯mp3사용설명서

282서비스업관리-마트

OCW_C언어 기초

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

UI TASK & KEY EVENT

17장 클래스와 메소드

KARAAUTO_4¿ù.qxd-ÀÌÆå.ps, page Normalize

설계란 무엇인가?

UI TASK & KEY EVENT

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<C6F7C6AEB6F5B1B3C0E72E687770>

Microsoft PowerPoint - 제11장 포인터(강의)

Data Structure

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

chap 5: Trees

쉽게

Microsoft PowerPoint - C++ 5 .pptx

<B8C5B4BABEF320BFCFBCBABABB2E687770>

쉽게 풀어쓴 C 프로그래밍

MTM-CM5000-MSP_Manual_ver1.0.hwp

게시판 스팸 실시간 차단 시스템

Microsoft Word - LKP-RTD 사용자 설명서

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

슬라이드 1

PowerPoint 프레젠테이션

MTM-CM2000-MSP_Manual_ver1.3.hwp

설계란 무엇인가?

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

(SW3704) Gingerbread Source Build & Working Guide

RVC Robot Vaccum Cleaner

PowerPoint 프레젠테이션

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - Chapter 6.ppt

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

고급 프로그래밍 설계

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

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

PowerPoint Presentation

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

C 프로그래밊 개요

Microsoft PowerPoint - Chapter8.pptx

실험 5

PowerPoint Presentation

API 매뉴얼

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

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

PowerPoint 프레젠테이션

1장. 유닉스 시스템 프로그래밍 개요

정보보안 개론과 실습:네트워크

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint 프레젠테이션

OCW_C언어 기초

슬라이드 1

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

Transcription:

조도센서제어 이번장에서는 ZigbeX 에장치되어있는센서들중에서조도센서에대해공부하고, TinyOS의 Oscilloscope 프로그램을통해측정된조도값을확인하는방법에대해알아보도록하겠다. 한백전자

ZigbeX 의조도센서 2

ZigbeX 의조도센서 조도센서 CDS ZigbeX에장치되어있는조도센서 CDS는 Atmega 128(ZigbeX의 8bit CPU) 의 INT0 과 ADC0 사이에연결되어있다. 조도센서인 CDS는주변의광량에따라자신의저항이변하게된다. 결국, 출력포트인 ADC0에서는변화된전압의양에의해광량을감지할수있다. 조도센서제어컴포넌트 TinyOS에서는조도센서를제어하기위해 Photo 컴포넌트라는것을제공하고있다. 3

Photo 컴포넌트 조도센서로활성화된 ADCC 컴포넌트에서제공하는함수들 photo 컴포넌트를사용하는상위프로그램에서는조도데이터를얻기위해 ADC.getData() 함수를호출한후, 그값은 event 형태로반환되는 ADC.dataReady(uint16_t data) 함수를통해받게된다. ADCC 컴포넌트에서제공하는함수들 ADC 의값얻기 ADC.getData() - 앞에서설정된 ADC 포트로부터측정된값을얻기위해호출된다. event ADC.dataReady(uint16_t data) - ADC 가측정한값을 event 형태로반환한다. 4

조도값얻기 조도값측정예제 // 상위컴포넌트 xxx_function() { call ADC.getData() // 상위컴포넌트 event ADC.dataReady(uint16_t data) { //data -> 측정된조도값 Photo 컴포넌트 5

Oscilloscope 예제를이용하여 조도값측정 6

Oscilloscope 예제 Oscilloscope 예제프로그램 Oscilloscope 예제는 125ms 마다조도센서로부터측정값을받은후, 그내용을시리얼케이블을통해 PC 로전달하는프로그램이다. Oscilloscope 예제프로그램의위치 c: Programfiles UCB cygwin opt tinyos 1.x contrib zigbe x Osilloscope 폴더에있는 Oscilloscope.nc 와 OscilloscopeM.nc, OscopeMsg.h 파일을참조. 7

Oscilloscope.nc Oscilloscope.nc Osilloscope 예제에서사용되는컴포넌트들 PC 와의시리얼통신을위한 UART Comm 컴포넌트 조도센서값을얻기위한 DemoSensorC 컴포넌트 주기적인알람과동작여부의체크를위한 TimerC와 LedsC 컴포넌트 configuration Oscilloscope { implementation { components Main, OscilloscopeM, TimerC, LedsC, DemoSensorC as Sensor, UARTComm as Comm; Main.StdControl > OscilloscopeM; Main.StdControl > TimerC; OscilloscopeM.Timer > TimerC.Timer[unique("Timer")]; OscilloscopeM.Leds > LedsC; OscilloscopeM.ADC > Sensor; 8

시리얼통신컴포넌트 UARTComm 컴포넌트 UARTComm 컴포넌트는 PC와의시리얼통신을위해만들어진컴포넌트이다. ReceiveMsg 인터페이스와 SendMsg 인터페이스를통해다음과같은함수를제공한다. UARTComm 컴포넌트에서제공하는함수들 ReceiveMsg SendMsg event TOS_MsgPtr receive(tos_msgptr m) - 시리얼케이블을통해 PC로부터어떠한메시지를받았을경우 Event 형태로호출되는함수로, TOS_Msg 형태의포인터를반환한다. send(...) - 센서노드에서 PC로 TOS_Msg 형태의파일을보내기위해호출되는함수이다. senddone(...) - send(...) 함수를통해메시지가모두전송되었을때 Event 형태로호출되는함수이다. 9

OscilloscopeM.nc OscilloscopeM.nc 파일 (1) includes OscopeMsg; module OscilloscopeM { provides interface StdControl; uses { // 사용할여러인터페이스선언 implementation { // 사용할여러변수들선언 OscilloscopeM.nc 에서는먼저 include 명령어를통해 Oscilloscope.h 에있는내용을참조한후, module 안에 StdControl 인터페이스를 provide로선언한다. 그리고 OscilloscopeM 내에서사용할인터페이스들을 use안에기술한다. implementation 에서는위에서선언된인터페이스를이용하여실제프로그램을기술한다. command result_t t StdControl.init() { // 변수및컴포넌트초기화 return SUCCESS; Main 컴포넌트에의해제일먼저실행되는 StdControl.init() 함수에서 LED, SensorControl, CommControl 컴포넌트들및여러변수들을모두초기화한다. 10

OscilloscopeM.nc OscilloscopeM.nc 파일 (2) command result_t t StdControl.start() { call SensorControl.start(); call Timer.start(TIMER_REPEAT, 125); call CommControl.start(); return SUCCESS; command result_t t StdControl.stop() { return SUCCESS; event result_t Timer.fired() { return call ADC.getData(); StdControl.start() 에서는 SensorControl, Comm Control 를시작하고 Timer 를 125ms 마다한번씩 signal 을발생시키도록 Timer.start(TIMER_REPEAT, 125) 함수를호출한다. StdControl.stop() 에서는 SensorControl, Comm Control을정지하게하고 Timer도정지시킨다. Timer 컴포넌트에의해 125ms 마다 signal 이발생하여 Timer.fired() 가호출되어지고, 그함수내부에는 ADC.getData() 함수를호출하여 ADC[0] 에있는조도측정값을요청한다. 11

OscilloscopeM.nc OscilloscopeM.nc 파일 (3) async event result_t ADC.dataReady (uint16_t data) { struct OscopeMsg *pack; atomic { pack = (struct OscopeMsg *) msg[currentmsg].data; pack >data[packetreadingnumber++] = data; readingnumber++; dbg(dbg_usr1, "data_event n"); if (packetreadingnumber == BUFFER_SIZE) { post datatask(); if (data > 0x0300) call Leds.redOn(); else call Leds.redOff(); 조도값의측정이끝나면 result_t ADC.data Ready(uint16_t data) 함수가 event 형태로 OscilloscopeM 파일내에서호출된다. 이함수내에서는받은조도측정값을시리얼통신을통해 PC에전달하기위해 Oscope Msg.h에정의된패킷포맷형식으로데이터를변환시킨다. 그후, task로된 datatask() 함수를호출하여 ADC.dataReady (uint16_t data) 함수로부터받은측정값을 DataMsg. send() 함수를통해시리얼로 PC에게전송한다. return SUCCESS; 12

OscilloscopeM.nc OscilloscopeM.nc 파일 (4) task void datatask() { struct OscopeMsg *pack; atomic { pack = (struct OscopeMsg *)msg[currentmsg].data; packetreadingnumber = 0; pack >lastsamplenumber = readingnumber; pack >channel = 1; pack >sourcemoteid = TOS_LOCAL_ADDRESS; if (call DataMsg.send(TOS_UART_ADDR, sizeof(struct OscopeMsg), &msg[currentmsg])) { atomic { currentmsg ^= 0x1; call Leds.yellowToggle(); event result_t DataMsg.sendDone (TOS_MsgPtr sent, result_t success) { return SUCCESS; datatask() 함수에서는 ADC.dataReady (data) 함수에서설정한 msg변수를 DataMsg.send ( ) 함수를사용하여시리얼통신을통해 PC로전달한다. PC로의전송이끝나면, DataMsg.send Done 함수가 event 형식으로호출된다. 13

Oscilloscope 예제실습 준비물 : host PC, 모트 1개, ISP프로그램툴, 프린터케이블 14

Oscilloscope 예제실습방법 1 먼저 cygwin 을시작한다. 다음과같이입력하여예제폴더로이동한다. cd /opt/tinyos 1.x/contrib/zigbex cd Oscilloscope 이제 make zigbex 를입력하여컴파일을한다. 15

Oscilloscope 예제실습방법 2 ISP 프로그래머를이용하여 ZigbeX 에다운로드하기 컴파일한후, build/zigbex라는폴더가만들어지고그안에 main.hex 라는파일이생성된다. PonyProg 프로그램을실행한후 main.hex 파일을연다. main.hex의파일의경로는다음과같다. c: Programfiles UCB cygwin opt tinyos 1.x contrib zigbex Oscilloscope build zigbex 16

Oscilloscope 예제실습방법 3 main.hex 를읽은결과 프로그램하기위한풀다운메뉴의사용법 17

자바어플리케이션실행 자바어플리케이션 시리얼케이블을통해 Zigbex 노드로부터전송된데이터를확인하기위해서오실로스코프자바어플리케이션을실행시킨다. 자바어플리케이션을시작하기에앞서, 모트에연결된프린트케이블을분리시킨후, 다시시리얼케이블과시리얼젠더를이용하여 PC 와연결한다. cygwin에서 /opt/tinyos 1.x/tools/java로이동한다. 명령어는아래와같다. export MOTECOM=serial@COM1:57600 cd /opt/tinyos 1.x/tools/java java net.tinyos.oscope.oscilloscope 18

결과 Oscilloscope 예제결과 자바어플리케이션을통해아래와같이데이터가시리얼로전달되는것을확인할수있고빛의양에따라데이터를나타내는선이변화되는것을볼수있다.( 그래프가잘보이지않으면 scrolling을체크 ) 19