Presentation is loading. Please wait.

Presentation is loading. Please wait.

Smart IoT 설계 시스템 Lecture 14. 화재경보 시스템 1.

Similar presentations


Presentation on theme: "Smart IoT 설계 시스템 Lecture 14. 화재경보 시스템 1."— Presentation transcript:

1 Smart IoT 설계 시스템 Lecture 14. 화재경보 시스템 1

2 화재경보시스템 개요 IoT 화재경보 시스템은 화재 모니터링이 필요한 학교/빌딩/가정/공장/상가 등에서 사용할 수 있는 시스템으로 화재발생시 실시간으로 센서 정보 및 영상정보를 수집하여 스마트폰으로 전송한다. Smartphone을 통해 현장을 확인하거나 시설물(Actuator)을 원격제어 및 관리할 수 있는 ARM11 Raspberry 기반의 IoT 실습용 Starter Kit 이다. ○ 스마트폰을 이용한 스마트 화재경보시스템 Actuator의 원격제어 ○ 센서에 의한 화재발생 감지 시 가청(싸이렌) 경보 알림 ○ 화재발생 감지 시 물펌프 동작 ○ 센서에 의한 화재발생 감지 시 방화벽(모터) 동작 ○ 온도, 불꽃, 가스 정보를 이용한 화재 위험도의 표시기능 ○ 원격영상을 통한 실시간 모니터링 및 Actuator의 원격제어 주요기능 센서 온도센서, 습도 센서, 불꽃센서, 가스센서 액츄에이터 부저 싸이렌, DC Motor, 워터펌프, RGB 경광등

3 화재경보시스템 소프트웨어 구성

4 화재경보시스템 하드웨어 구성

5 화재경보시스템 Software Data Flow Diagram

6 화재경보시스템 센서/액츄에이터 연결

7 IO 어댑터 보드 - old

8 IO 어댑터 보드 - new GPIO 40pin 커넥터 DC 12V 전원 12V 전원 스위치 DC 3.3V Analog
센서 커넥터 DC 12V 전원 출력커넥터 DC 3.3V 디지털 센서 커넥터 UART 커넥터 8채널 AD 컨버터 Servo 모터 초음파 센서 RGB LED

9 개발환경 – HDMI 모니터 연결 Internet 공유기 HDMI 케이블 Ethernet 케이블 USB 키보드
Gateway(R-Pi) USB 키보드 Micro USB 5V 전원 WiFi 동글 사용시 공유기 설정을 참고하여 라즈베리 파이 Wlan0 설정 필요함.

10 개발환경 – HDMI 모니터 연결 부팅 후 로그인 Raspberrypi login : pi
Password : raspberry 암호 안보임. 유/ 무선네트워크 연결 확인 $ ifconfig eth0 유선 네트워크 정보 wlan0 무선 네트워크 정보 할당받은 ip 주소 :

11 개발환경 – 노트북 연결 Micro USB 5V 전원 Internet 공유기 Ethernet 케이블 USB 키보드 USB 연결
Gateway(R-Pi) USB 키보드 USB 연결 IO Adapter 보드 + OTG 케이블 WiFi 동글 사용시 공유기 설정을 참고하여 라즈베리 파이 Wlan0 설정 필요함. 구글에서 cp2104 검색 CP2104 Mini Evaluation Kit | Silicon Labs 으로 이동 Software Downloads CP210x VCP Drivers Drivers for Windows and Mac and Linux Download 후 설치

12 MCP3208 ADC(12bit, SPI)

13 GPIO 제어와 Wiring Pi 설치 패키지 관리 서버로부터 이용 가능한 프로그램 패키지의 목록을 최신버전으로 업데이트
$sudo apt-get update 컴퓨터에 설치된 프로그램이 업데이트 되었으면 새로운 버전으로 설치하게 해주는 명령어 $sudo apt-get upgrade 1. 소스관리툴 git 를 다운로드한다. (오픈소스 의 소스를 체크아웃하기 위해서) $sudo apt-get install git-core 2. “wiringPi” 프로젝트를 통째로 받아온다. $git clone git://git.drogon.net/wiringPi 3. 빌드 및 설치를 진행한다. $cd wiringPi $./build 4. 설치가 잘 되었는지 아래의 명령어로 확인해 본다. $gpio -v $gpio readall

14 GPIO Pin 과 wiringPi Pin 할당 – $gpio readall

15 폴링 과 인터럽트 방식 Polling Interrupt
#define LIGHTSEN_OUT 2 //gpio27 - J13 connect pinMode(LIGHTSEN_OUT, INPUT); if(digitalRead(LIGHTSEN_OUT) == 0) printf("light full ! \n"); if(digitalRead(LIGHTSEN_OUT) == 1) printf("dark \n"); Interrupt #define Man_Detect 0 //gpio17 // myInterrupt: called every time an event occurs void myInterrupt(void) { alert_flag = 1; } //main if ( wiringPiISR (Man_Detect , INT_EDGE_RISING, &myInterrupt) < 0 ) fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno)); return 1; while ( 1 ) { if(alert_flag ==1) alert_flag=0; }

16 온도 / 습도 센서 특징 전기적 특성 1. 모델명 : AM2302 2. 정밀도 및 해상도 : 0.1
3. 습도 측정 범위 : 0-100%RH 4. 온도 측정 범위 : -40~80℃ 5. 습도 측정 오차 : ±2%RH 6. 온도 측정 오차 : ±0.5℃ 7. 저전력소모 8. 부가회로가 불필요 - 사용 전압 : 3.3-6V DC - 싱글핀 디지털 데이터 출력 - 측정 응답 시간 : min 2초 - 측정 조건 VDD = 5V , T = 25 ℃ - Pin Connection Pin 1 – 전원 VCC 3.5~5.5V DC Pin 2 - DATA (시리얼 양방향) Pin 3 – 사용안함(No Connection) Pin 4 - GND

17 온도 습도 센서 소스코드 온도데이터 : get_temperature.c 파일 습도데이터 : get_humidity.c 파일
#include <wiringPi.h> ~ static int DHTPIN = 11; //GPIO Port static uint8_t sizecvt(const int read) { ~ } int read_dht22_dat() { ~ } int main (void) { DHTPIN = 11; while (read_dht22_dat() == 0) delay(500); // wait to refresh } received_temp = ret_temp ; printf("Temperature = %d\n", received_temp); return 0;

18 컴파일 – 실행 - 코드수정 작업 폴더 변경 pi@raspberrypi ~ $ cd smartfarm
GNU Compiler Collection 처리과정 작업 폴더 변경 ~ $ cd smartfarm ~/smartfarm $ 소스코드 편집 : $nano get_temperature.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o get_temperature temperature.c –l wiringPi 실행 : $sudo ./get_temperature 소스코드 편집 : $nano get_humidity.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o get_humidity get_humidity.c –l wiringPi 실행 : $sudo ./get_humidity

19 Analog to Digital – ADC 컨버터 사용
ADC 컨버터 MCP3208 사용 MCP3208 Pin Description MCP3208 Pin Map SPI 연결 회로 (CD 첨부 파일 참고)

20 불꽃 센서 불꽃의 파장(주파수) 760nm ~ 1100nm 대역을 감지하는 센서 동작전압 3.3V to 5V 감지 범위
불꽃 센서 불꽃의 파장(주파수) 760nm ~ 1100nm 대역을 감지하는 센서 동작전압 3.3V to 5V 감지 범위 20cm (4.8V) ~ 100cm (1V) 감지 대역(파장) 760nm ~ 1100nm 응답 시간 : 15usec 인터페이스 : 아날로그/디지탈 크기 : 22x30mm

21 불꽃 센서 실습 컴파일 명령 $gcc –o flamedetect flamedetect.c –lwiringPi 실행명령
$sudo ./flamedetect 편집 명령 $nano flamedetect.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴

22 불꽃 센서 실습 소스코드 소스코드 #include <wiringPi.h>
#include <wiringPiSPI.h> #define CS_MCP //GPIO 8 #define SPI_CHANNEL 0 #define FLAME_IN 11 //gpio7 if ( wiringPiISR (FLAME_IN, INT_EDGE_FALLING, &myInterrupt) < 0 ) { fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno)); return 1; } int main(void) { while ( 1 ) printf( "%d\n", eventCounter );

23 Gas 센서 MQ시리즈 가스 센서는 종류마다 다른 가스를 센싱하기도 한다. 시험에서는 MQ135를 사용하여 LPG 가스나 부탄등을 검출하였는데 정상적으로 작동하였다 스펙에 적힌 용도의 센서를 쓰면 가장 좋지만 만약 없다면 다른 종류의 가스를 써서 시험을 진행한다. MQ2 : Combustible Gas, Smoke MQ5 : LPG, Natural Gas, Town Gas MQ9 : Carbon Monoxide, Coal Gas, Liguefied Gas MQ135 : Ammonia, Aromatics, Sulfer, Benzene vapor, other harmful 데이터북 참고

24 Gas 센서 실습 컴파일 명령 $gcc –o gasdetect gasdetect.c –lwiringPi 실행명령
$sudo ./gasdetect 편집 명령 $nano gasdetect.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴

25 Gas 센서 실습 소스코드 소스코드 #include <wiringPi.h>
#include <wiringPiSPI.h> #define CS_MCP //GPIO 8 #define SPI_CHANNEL 0 #define GAS_IN 11 //gpio17 if ( wiringPiISR (FLAME_IN, INT_EDGE_FALLING, &myInterrupt) < 0 ) { fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno)); return 1; } int main(void) { while ( 1 ) printf( "%d\n", eventCounter );

26 액츄에이터 Smart IoT 화재경보 시스템의 액츄에이터는 싸이렌 역할을 하는 부저와 물을 공급하는 워터펌프, 차단문을 닫는 기능을 하는 DC 모터, 경광등 효과를 내는 RGB led로 구성된다. 4종의 액츄에이터에 공급되는 전원 사양과 신호선을 테이블로 나타내었다. 워터펌프 부저 DC Motor 경광등 LED 5V, 12V 구동회로 RGB Led 구동회로

27 액츄에이터 연결도

28 워터펌프 구동 소스 – pumpon.c #include <signal.h> //Signal 사용 헤더파일
#include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #define PUMP 21 // BCM_GPIO 5 void sig_handler(int signo); // 마지막 종료 함수 int main (void){ signal(SIGINT, (void *)sig_handler); //시그널 핸들러 함수 if (wiringPiSetup () == -1) { fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } pinMode (PUMP, OUTPUT) ; for (;;) printf("here - pump on\n"); digitalWrite (PUMP, 1) ; // On delay (2000) ; // ms digitalWrite (PUMP, 0) ; // Off delay (2000) ; return 0 ; void sig_handler(int signo) { printf("process stop\n"); digitalWrite (PUMP, 0) ; // Off exit(0); }

29 워터 펌프 구동 소스 컴파일 – 실행 -- 편집 소스코드 편집 : $nano pumpon.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o pumpon pumpon.c –l wiringPi 실행 : $sudo ./ pumpon 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키 + c 키)

30 부저 소스코드 – buzcontrol.c #include <signal.h> //Signal 사용 헤더파일
#include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h>#define FAN 22 // BCM_GPIO 6 void sig_handler(int signo); // 마지막 종료 함수 int main (void) { signal(SIGINT, (void *)sig_handler); //시그널 핸들러 함수 if (wiringPiSetup () == -1) fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } pinMode (FAN, OUTPUT) ; for (;;) digitalWrite (FAN, 1) ; // On return 0 ; void sig_handler(int signo) { printf("process stop\n"); digitalWrite (FAN, 0) ; // Off exit(0); }

31 부저 구동 소스 컴파일 – 실행 -- 편집 소스코드 편집 : $nano buzcontrol.c편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o buzcontrol buzcontrol.c–l wiringPi 실행 : $sudo ./buzcontrol.c 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. )

32 DC Motor 소스코드 – dcmotoron.c
#include <signal.h> //Signal 사용 헤더파일 #include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #define DCMOTOR 23 // BCM_GPIO 13 void sig_handler(int signo); // SIGINT 사용 마지막 종료 함수 int main (void) { signal(SIGINT, (void *)sig_handler); //시그널 핸들러 함수 if (wiringPiSetup () == -1) fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } pinMode (DCMOTOR, OUTPUT) ; for (;;) //printf("here - DCMOTOR on\n"); digitalWrite (DCMOTOR, 1) ; // On return 0 ; void sig_handler(int signo) { printf("process stop\n"); digitalWrite (DCMOTOR, 0) ; // Off exit(0); }

33 DC Motor - PWM 제어 모터 (PWM: Pulse Width Modulation) 제어
모터 구동전원을 일정 주기로 On/Off 하는 펄스 형상으로 하고, 그 펄스의 duty비(On 시간과 Off 시간의 비)를 바꿈으로써 속도를 제어한다. 이것은 DC 모터가 빠른 주파수의 변화에는 기계 반응을 하지 않는다는 것을 이용하는 방법이다. #include <softPwm.h> //pwm 헤더파일 추가 #define MOTORCONTROL 23 //GPIO 13 - Motor void sig_handler(int signo); // SIGINT 핸들러 함수 int main (void) { ~ softPwmCreate(MOTORCONTROL, 0, 100); int i; int delaytime = 100; while(1) { printf("here \n"); softPwmWrite(MOTORCONTROL, 5); // 5를 0부터 100까지 가변 속도조절 delay(delaytime); } return 0 ; 컴파일 $ gcc -o motorsoftpwm motorsoftpwm.c –lwiringPi 실행하면 낮은 속도로 회전하는 모터를 보게 된다. $ sudo ./motorsoftpwm

34 DC Motor 구동 소스 컴파일 – 실행 -- 편집
소스코드 편집 : $nano dcmotoron.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o dcmotoron dcmotoron.c –l wiringPi 실행 : $sudo ./dcmotoron 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. ) 소스코드 편집 : $nano motorsoftpwm.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o motorsoftpwm motorsoftpwm.c –l wiringPi 실행 : $sudo ./ motorsoftpwm 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. )

35 RGB Led 제어 – rgbtest.c RED, GREEN, BLUE 순서로 LED on/off
#include <signal.h> //Signal 사용 헤더파일 #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #define RGBLEDPOWER //BCM_GPIO 19 #define RED 27 #define GREEN 28 #define BLUE 29 int main (void) { pinMode(RGBLEDPOWER, OUTPUT); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); int i; return 0 ; } for (i =0; i<10 ;i++) { digitalWrite(RGBLEDPOWER, 1); digitalWrite(RED, 1); digitalWrite(BLUE, 0); digitalWrite(GREEN, 0); delay(1000); digitalWrite(RED, 0); digitalWrite(BLUE, 1); digitalWrite(GREEN, 1); }

36 RGB Led PWM 제어 – allrgbcolor.c
int i; digitalWrite(RGBLEDPOWER, 1); while(1) { int i = 0, j = 0, k=0; printf("RGB LED Various Color"); softPwmCreate(RED, 0, 255); softPwmCreate(GREEN, 0, 255); softPwmCreate(BLUE, 0, 255); for (i = 0; i <= 250; i=i+10){ for (j = 0; j <= 250; j=j+10){ for (k = 0; k <= 250; k=k+10){ setRGB(i,j,k); delay(50); printf("R:%d G:%d B:%d\n", i, j, k); } } } setRGB(0,0,0);//clear LED delay(50); } return 0 ; } #include <signal.h> //Signal 사용 헤더파일 #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #include <softPwm.h> #define RGBLEDPOWER 24 //BCM_GPIO 19 #define RED 29 // BCM_GPIO 16 - OUT #define GREEN 28 // BCM_GPIO 20 - OUT #define BLUE 27 // BCM_GPIO 21 - OUT void Bpluspinmodeset(void); void setRGB(int r, int g, int b); void sig_handler(int signo); // SIGINT 핸들러 함수 int main (void) { if(wiringPicheck()) printf("Fail"); Bpluspinmodeset(); signal(SIGINT, (void *)sig_handler);

37 RGB Led PWM 제어 – allrgbcolor.c
int wiringPicheck(void) { if (wiringPiSetup () == -1) fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } void Bpluspinmodeset(void) pinMode(RGBLEDPOWER, OUTPUT); pinMode (RED, OUTPUT); pinMode (GREEN, OUTPUT); pinMode (BLUE, OUTPUT); void sig_handler(int signo) // ctrl-c 로 종료시 실행되는 함수 { printf("process stop\n"); digitalWrite(RED, 0); digitalWrite(GREEN, 0); digitalWrite(BLUE, 0); digitalWrite(RGBLEDPOWER, 0); //Off exit(0); } void setRGB(int r, int g, int b){ softPwmWrite(RED, 255-r); softPwmWrite(GREEN, 255-g); softPwmWrite(BLUE, 255-b);

38 RGB LED 구동 소스 컴파일 – 실행 -- 편집
소스코드 편집 : $nano rgbtest.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o rgbtest rgbtest.c –l wiringPi 실행 : $sudo ./rgbtest 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. ) 소스코드 편집 : $nano allrgbcolor.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o allrgbcolor allrgbcolor.c –l wiringPi 실행 : $sudo ./ allrgbcolor 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. )

39 액츄에이터 전체 구동 전체 포트 번호 설정 핀 모드 설정 구동 코드 #define PUMP 21 // BCM_GPIO 5
액츄에이터 전체 구동 전체 포트 번호 설정 핀 모드 설정 #define PUMP 21 // BCM_GPIO 5 #define FAN 22 // BCM_GPIO 6 #define DCMOTOR 23 // BCM_GPIO 13 #define RGBLEDPOWER 24 //BCM_GPIO 19 #define RED 27 //GPIO 16 #define GREEN 28 //GPIO 20 #define BLUE 29 //GPIO 21 void Bpluspinmodeset(void) { pinMode (PUMP, OUTPUT); pinMode (FAN, OUTPUT); pinMode (DCMOTOR, OUTPUT); pinMode(RGBLEDPOWER, OUTPUT); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE,OUTPUT); } 구동 코드 digitalWrite (PUMP, 1) ; // On digitalWrite (FAN, 1) ; // On digitalWrite(DCMOTOR, 1); //On digitalWrite(RGBLEDPOWER, 1);//On delay (5000) ; / / ms digitalWrite (PUMP, 0) ; // Off digitalWrite (FAN, 0) ; // Off digitalWrite(DCMOTOR, 0); //Off digitalWrite(RGBLEDPOWER, 0); //Off

40 액츄에이터 전체 구동 소스 컴파일 – 실행 -- 편집
액츄에이터 전체 구동 소스 컴파일 – 실행 -- 편집 소스코드 편집 : $nano actu_all_on.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o actu_all_on actu_all_on.c -l wiringPi -pthread 실행 : $sudo ./ actu_all_on 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. )

41 화재경보 시스템 프로그램 순서도

42 화재 경보 시스템 데이터 베이스 설계 화재감시 Database 설계 DB Name : iotfire
○ Table : tfiresensorvalue 센서값 저장 테이블 1분마다 센서값 저장한다. 날짜 day / 불꽃 int / 가스 int / 온도 float / 습도 float ○ Table : tfiresensorcheck 센서 정상/불량 저장 테이블 센서 정상 불량 확인하여 저장 10분마다. 날짜 day / 불꽃센서 (정상, 오류) / 가스센서센서 (정상, 오류) / 온도센서(정상, 오류) / 습도센서(정상, 오류) ○ Table : tfireactuoperate 액츄에이터 동작상태(동작중/정지중) 액츄 동작시 데이터베이스 업데이트 하고, 동작 끝날 때 업데이트 날짜 day / pump(on,stop) / buzzer(on, stop) / dcmotor(on, stop) / rgbled(on, stop) ○ Table : tfireactucheck 액츄에이터가 정상/불량 저장 데이블 액츄에이터 정상 불량 기록 pump(normal, fail), buzzer(normal, fail), dcmotor(normal, fail), rgbled(normal, fail) ○ Table : tfiresetting 설정값 저장 테이블 Now(), 긴급연락처, 센서작동(on, off)

43 화재 경보 시스템 서버 실행 Test pi@raspberrypi ~ $ cd iot_fireserver
~/iot_fireserver $ cd output ~/iot_fireserver/output $ ls mjpg.sh server_fire 서버실행 : $sudo ./server_fire ~/iot_farmserver/output $ sudo ./server_farm validate database... iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorvalue (id INT AUTO_INCRE ) iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorcheck (id INT AUTO_INCRE ) data: 1 validate setting data... : 1 starting server... Humidity = % Temperature = *C Humidity = 52 Temperature = 25 Temperature = 25 Data not good, skip Humidity = % Temperature = *C Humidity = 52 SensorInterruptLoop : write to DB - INSERT INTO tfarmsensorvalue values (null ,now(), now(), , , 0) iot_insert_data_from_db : query - INSERT INTO tfarmsensorvalue values (null ,now(), now(), , , 0) 실행 종료 : ctrl - x

44 카메라 구동 테스트 $sudo apt-get update $sudo apt-get upgrade
카메라 모듈 사양 센서 OmniVision OV5647(8.5 x 8.5 x 5mm) PCB 크기 25 x 20 x 9 mm 무게 3 g 해상도 5 Megapixels 지원 비디오 모드 1080p30, 720p60 and 640x480p60/90 영상/스팅 지원 정지영상 캡처 2592×1944 초당 30프레임의 1080p 지원 초당 60프레임의 720p 지원 초당 90프레임의 640x480p 지원 $sudo apt-get update $sudo apt-get upgrade $sudo raspi-config - 카메라의 설정값은 disable 디폴트. Enable 시켜준다. $sudo apt-get install mplayer netcat ffmpeg gpac - 부가적인 패키지를 설치 명령을 실행하고 24M의 공간이 필요하다는 메시지가 나오면 ‘Y’ 입력하여 설치를 진행한다.

45 카메라 캡쳐 jpg 포맷으로 이미지를 캡처하려면 다음과 같이 입력한다. $raspistill -o image.jpg
$ls 명령어로 image.jpg 파일이 생성된 것을 볼 수 있다. 이번에는 h264 포맷으로 5초 동안 동영상을 캡처해 보는 명령이다. $raspivid -o video.h264 –fps 30 –t 10000 -o : 출력파일 이름 -t : 촬영시간 밀리세컨드(10000 = 10초) -fps : 초당프레임 $ls 명령어로 확인하면 video.h264 파일이 생성되었다. 10초로 늘리려면 다음과 같이 입력한다. $raspivid -o video.h264 -t 10000 라즈베리 파이 카메라 프로그램은 H264 포맷을 사용하고 있기에 별도의 프로그램으로 보거나 일반적인 동영상 파일로 변환하려면 별도로 파일을 변환시켜줘야 한다. 다음의 명령어는 ffmpeg을 이용하여 H264 포맷을 mkv 포맷으로 변환시키는 예제다. $ffmpeg –r 30 –i video.h264 –vcodec copy video.mkv 확인해 보면 video.mkv 파일이 생성되었다. 다음의 명령어로도 가능하다. $MP4Box –add video.h264 video.mp4 $raspivid | less $raspistill | less

46 동영상 스트리밍 카메라 모듈을 이용하여 mjpg-stream 을 구현한다. 속도가 많이 느린 편이지만 현장 상황을 웹을 이용하여 모니터링 하기에는 무리가 없다. 웹스트리밍 또는 기타 외부 기기에서 라즈베리 파이 카메라 모듈을 이용한 웹스트리밍 서비스를 하기 위해선 mjpg-stream 이 가장 최적화 되어 있다. Mjpg-stream 컴파일을 위해 아래 영상관련 라이브러리 및 cmake 패키지를 설치 해 주도록 한다.  $udo apt-get install git cmake libjpeg8-dev imagemagick -y videodev2.h 헤더파일 링크gksmsep[ mjpg-streamer 를 컴파일 진행 시에는 요구하는 videodev.h 헤더파일을 변경된 videodev2.h 파일로 링크 하자. $ sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h mjpg-streamer 다운로드 및 컴파일 하기 $ git clone

47 $ pi@raspberrypi ~ $sh mjpg.sh
동영상 스트리밍 Test $cd ~/mjpg-streamer/mjpg-streamer-experimental ~/mjpg-streamer/mjpg-streamer-experimental $ make clean all 앞의 과정들을 통해 mjpg-streamer 를 실행 할 수 있는 환경이 갖추어 졌으니, 마지막으로 파이 캠에서 mjpg-streamer 를 이용 할 수 있도록 자동 스크립트를 작성하고 명령어를 입력 해 웹 스트리밍을 구현 해 보자. $ ~ $cd ~ $ ~ $sudo nano mjpg.sh export STREAMER_PATH=$HOME/mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=$STREAMER_PATH $STREAMER_PATH/mjpg_streamer -i "input_raspicam.so -d 200" -o "output_http.so -w $STREAMER_PATH/www"   CTRL-X 를 누르고 Y 누르고 Enter 저장하고 나온다. $ ~ $sh mjpg.sh $ ~ $sh mjpg.sh 확인 주소 : 아이피 :8080 종료 Ctrl -c

48 화재 경보 시스템 User Interface 설계

49 Android App 개발 이클립스 개발환경
File – Import 선택 – Existing Projects into Workspace Zip 파일 혹은 프로젝트 파일 선택 Activity_main.xml 파일 – Layout 파일 편집

50 Android App 개발 MainActivity.java 파일 스마트 폰에서 실행

51 Smart IoT 블로그 : http://smartiot.tistory.com
화재 경보 시스템 앱 다운로드 설치 Smart IoT 블로그 : 스마트 팜 앱 :

52 화재 경보 시스템 전체 실습 연결도 ssid : iptime key : 12345678 Wire Ethernet
카메라 Internet Router Gateway(R-Pi) WiFi 동글 사용시 공유기 설정을 참고하여 라즈베리 파이 Wlan0 설정 필요함. - 같은 네트워크에 접속되어야 함 할당받은 ip 주소 : 교육실 : ssid : iptime key :

53 화재 경보 시스템 실습 과 스마트 폰 앱 Test $sudo ./s-fire 으로 동영상 스트리밍 서버와 스마트 팜 서버를 동시에 실행 스마트 농장 시스템 서버실행 1. 스마트 팜 서버 실행 백그라운드 실행 ~/iot_farmserver/output $ sudo ./server_farm & 2. 동영상 스트리밍 서버 실행 $sh mjpg.sh export STREAMER_PATH=/home/pi/mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=$STREAMER_PATH $STREAMER_PATH/mjpg_streamer -i "input_raspicam.so -d 200" -o "output_http.so -$

54 화재 경보 시스템 앱 실행 1

55 화재 경보 시스템 앱 실행 2

56 참고자료 [1] (주)휴인스 : http://www.huins.com
[2] (주)휴인스 IoT Blog : smartiot.tistory.com [3] 라즈베리 파이 활용백서 : 실전 프로젝트 20 - 이재상 표윤석 지음, 비제이 퍼블릭 [4] 라즈베리 파이 산딸기 마을 카뮤니티 [5] 리눅스와 함께하는 라즈베리 파이 – 피터 멤브리, 배장열 옮김, 제이펍 [6] ITU-T Internet Report “The Internet of Things – Executive Summary”, Nov [7] 민경식, Net Term, 인터넷 & 시큐리티 이슈, “사물 인터넷 (Internet of Things)”, 2012. [8] 전자부품연구원(KETI), “IoT(Internet of Things) Presentation Design”, Nov [9] 이준섭, TTA 표준화 교육, 스마트 통신시장의 핵심열쇠 “M2M”, “M2M/IoT Standardization in ITU-T”, Oct. 23, 2012. [10] ITU-T, ITU-T SG13, “Y.WoT, Framework of Web of Things”, Oct. 10, 2011. [11] ITU-T, ITU-T SG13, “Y.2060, Overview of the Internet of Things”, July 04, 2012. [12] IETF, Draft-lee-iot-problem-statement-05.txt [13] JP Vasseur, IETF 77, Internet Area Meeting, “The Internet of Things”, March 2010. [14] Internet of Things - Feb , Yim Hyung-jun, Database Systems Lab. Dept. of Computer Engineering Chungnam National University [15] 사물인터넷(IoT)분야의 주요 임베디드 SW기술 - MDS 테크놀로지㈜ 장성균(2014/07/24) [16] 사물인터넷 글로벌 생태계 구축 및 서비스 활성화를 위한 개방형 IoT 소프트웨어 플랫폼 기술 , [17] Opensource H/W + Node js 로 IoT 따라잡기 – Circulus


Download ppt "Smart IoT 설계 시스템 Lecture 14. 화재경보 시스템 1."

Similar presentations


Ads by Google