Smart IoT 설계 시스템 Lecture 09. 스마트 팜 실습 1.

Slides:



Advertisements
Similar presentations
Hamster Manual 정보통신과 이우형. 목차 세팅 햄스터 하드웨어 - Model - I/O -Sensor 센서별 예제.
Advertisements

제어기 활용 -GPIO Ch.05 RaspberryPi Sejin Oh. Raspberry Pi 제어기 활용 -GPIO  GPIO (General Purpose Input Output)  마이크로프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력 포트 
을지대학교 무선 네트워크 사용 방법 2010 년 06 월 01 일. 을지대학교 무선 네트워크 사용 방법 1. PC 무선랜 카드 활성화 및 체크 1 단계 : 시작 -> 설정 -> 네트워크 설정 2 단계 : 무선 네트워크 설정 선택 -> 마우스 버튼 오른쪽 클릭 -> 사용.
1 08 시스템 구성도 고려사항 * 웹 서버 클러스터 구성  클러스터 구축은 ㈜ 클루닉스의 Encluster 로 구축 (KT 인증,IT 인증 획득, 실제 클러스터 구축 사이트 200 여곳 )  웹 서버 클러스터는 Dynamic, Static, Image.
1 강. 안드로이드 개요 및 개발 환경 구축 - 안드로이드 개요 -JDK 설치 -Path 설정 - 이클립스 설치 -ADT, SDK 설치 Lecturer Kim Myoung-Ho Nickname 블스
ReadyNAS Surveillance for x86 platform (Version ) NETGEAR.
Smart IoT 설계 시스템 Lecture 09. Smart IoT 시스템 소개. Smart IoT 설계 시스템 2.
산딸기 (RASPBERRY PI) 에 관심이 계신분 있으신가요 ?. 라즈베리 파이에 관심을 가지게 된 이유.
XQ-EHT800 Specifications 8ch EX-SDI DVR EX-SDI, HD-SDI 자동 인식 입력
EHT-800 Specifications 8ch EX-SDI 하이브리드 DVR
Smart IoT 설계 시스템 Lecture 14. 화재경보 시스템 1.
Progress Report YoonMo Yeon
앱인벤터 기초과정 (1차시) ㈜헬로앱스 강사: 김영준 목원대학교 겸임교수.
난이도 : 초급 제1장 앱 인벤터 소개 및 준비.
2016 유성환 Hybrid MOBILE.
IHXP-1648 Specifications Plug & Display (ITX카메라 자동 연결)
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
                                  9장 컴퓨터 기반 데이터 수집의 기초.
IoT(사물인터넷) 보안 2016년 2학기 4. 라즈베리파이 카메라.
자바실험실 이동준 우리 곁으로 다가온 사물 컴퓨팅 자바실험실 이동준.
Image & Video processing
IoT(사물인터넷) 보안 2016년 2학기 2. 라즈베리파이 준비.
Smart IoT 설계 시스템 Lecture 07. 센서와 액츄에이터 실습.
Consumer PC & AIO PC DMI Refresh 방법 설명 (UEFI DMI Ver)
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Cross Compiler를이용한 커널 컴파일 및 포팅
Tizen RT on Quail Board 2017년 3월 2일 삼성전자 소프트웨어센터.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
아두이노 기반 펌웨어 개발 FUTURE INNOVATOR 강사: 김 영 준 ㈜헬로앱스
뇌를 자극하는 Windows Server 2012 R2
임베디드 프로그래밍 Lecture #
GPIO RaspberryPi Sejin Oh.
GPIO RaspberryPi Sejin Oh.
네트워크 프로그래밍 및 실습.
임베디드 프로그래밍 Lecture #
갤럭시 S를 이용한 자동차 원격 제어 시스템 담당교수 : 진현욱 교수님
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
DVR eDVR MS400 preliminary Key Features MPEG4 4ch Stand Alone DVR
독립형 모션제어기 사양 - Catalog (optional) XMC-PO04-MOD
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
AP 모드 활용하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
Root Filesystem Porting
FTP 프로그램 채계화 박재은 박수민.
Root Filesystem Porting
컴퓨터정보공학부 서버 안내 [ IBM x3500 ] it.sangji.ac.kr ict.sangji.ac.kr 혹은
DK-128 ADC 실습 아이티즌 기술연구소
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
Cross Compiler 설치.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
4. LAN의 배선체계 (3장. LAN: Local Area Network)
Microprocessor I/O Port & CLCD Noh Jin-Seok.
Cross Compiler를이용한 커널 컴파일 및 포팅
SSH, VNC Mobile Engineering, Kyungwoon Univ. Embedded System Design.
IPython Notebook + Spark + TensorFlow on MacOS
임베디드 시스템 개론 임베디드 타겟 보드 포팅 및 H/W 제어 3일차 강의 자료 Embedded System Lab.
483(W) x 88(H) x 260(D) / 19(W) x 3.5(H) x 10.2(D)
Tiny OS와 NesC Tiny OS Part1. Won Mi Sun – 17 지능제어 연구실.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
리눅스 커널 프로그래밍 환경 구축 IT EXPERT 리눅스 커널 프로그래밍 Author : Byungki Kim
웹서버 기능으로 데이터 읽기 및 제어하기 WiFi 시리얼 보드 활용가이드 김영준
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
MEGA8_XBee CPUPLAZA
DK-128 개발환경 설정 아이티즌 기술연구소
DK-128 직렬통신 실습 아이티즌 기술연구소
농구 로봇 따라해 보기.
JDC-200/400/600 1CH DIGITAL P.A POWER AMPLIFIER
IO-Link 통신 기술 소개 산업 Ethernet 필드버스 게이트웨이 접속 IO-Link 마스터 IO-Link 통신
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
Presentation transcript:

Smart IoT 설계 시스템 Lecture 09. 스마트 팜 실습 1

스마트 농장 개요 IoT 스마트 농장관리 시스템은 Gateway시스템과 모바일 프로그램으로 구성된다. 농장관리 Gateway는 온습도 센서와 조도 센서에서 수집한 데이터를 Database에 저장하고, 센서 데이터를 판단하여 다양한 액츄에이터(워터펌프, 팬, DC모터, 식물 LED)를 구동한다. 또한 안드로이드 폰과의 연동을 통해 원격지의 사용자 요청이 발생할 경우 Ehernet이나 Wi-Fi를 통해 센서데이터나 영상 정보를 송신한다. 사용자는 실제 농장이나 화분 등에 실제와 거의 유사하게 구현할 수 있다. Gateways에는 라즈베리파이 기반으로 리눅스 운영체제를 최적화한 Rasbian이 설치되어 있다. 특히 다양한 액츄에이터의 하나인 워터 펌프는 실제 화분이나 농작물에 물을 줄 수 있도록 튜브로 연결되어 있다. 시험은 가능한 한 실제 현장에서 발생하는 상황과 유사하게 설계하여 실습한다. ○ 스마트폰을 이용한 스마트 식물농장시스템 Actuator의 원격제어 ○ 토양의 온도와 습도를 감지하여 워터펌프를 가동하여 물주기 ○ 온도와 습도를 감지하여 환기 팬 동작 및 외부 창문제어(모터) ○ 조도 상태를 통한 식물용 LED 작동제어 ○ 원격영상을 통한 실시간 모니터링 및 Actuator의 원격제어 주요기능 센서 온도센서, 습도 센서, 조도센서 액츄에이터 워터펌프, 팬, DC Motor, RGB Led

스마트 농장 소프트웨어 구성 Internet Gateway System TCP/IP 서버 실행 안드로이드 앱 워터 펌프제어 온도 센서 데이터 수집 센서데이터 조회 Gateway System 팬 제어 습도 센서 데이터 수집 액츄에이터 제어 DC 모터 제어 카메라 영상 확인 조도센서 데이터 수집 RGB Led 제어 이벤트 수신 카메라 영상 Database 조회/저장 이벤트 DB 기후 DB 농장기후DB 사진 DB

스마트 농장관리 시스템 하드웨어 구성

스마트 농장 소프트웨어 기능 I 구 분 기능블록 규 격 구동 Software OS 구 분 기능블록 규 격 구동 Software   OS RASPBIAN - Debian Wheezy. Release date:2014-09-09 Android Jelly Bean 4.3 Compiler GCC Compiler – 리눅스 커널 기반 센서 프로그램 C, C++, Python, Java Actuator 프로그램 Gateway CPU Board ARM/Linux 기반 싱글보드컴퓨터로 센서어댑터, 액츄에이터 어댑터 와 연동하고 인터넷에 연결되어 Gateway 역할을 수행. 센서로부터 수집한 정보를 저장하고 원격지의 사용자에게 전송하거나 제어 신호 에 따라 해당 액츄에이터를 On/Off 기능 Camera Module Gateway에 CSI 인터페이스 및 커넥터로 연결되는 카메라 모듈로 주 요기능은 설치 장소의 환경과 액츄에이터가 동작하는 상황을 사진이 나 동영상으로 촬영하여 사용자에게 제공 SD Card Gateway의 부팅과 Linux기반의 운영 체제가 저장된 저장장치이며 G ateway의 실행 application Software 탑재

스마트 농장 소프트웨어 기능 II 구 분 규 격 센서 S/W 센서에서 다양한 데이터를 수집하고, 분석하는 소프트웨어 구 분 규 격 센서 S/W 센서에서 다양한 데이터를 수집하고, 분석하는 소프트웨어 액츄에이터 S/W 센서 입력 정보 및 사용자의 요구에 따라 모터, 팬, 펌프와 같은 동작 장치를 제어하는 소 프트웨어 Web Software Ethernet을 통해 스마트 농장 서버에 접속하고, 웹 서버와 데이터 베이스를 이용하여 Gate way가 수집한 센서데이터를 조회하고, 현장 환경을 영상을 통해 확인하고 설치된 시설을 직접 제어 Smart Phone Application Android 기반으로 하는 Mobile Application Software를 통하여 사용자는 스마트폰으로 G ateway의 센서에서 수집된 데이터 및 영상정보를 수신하여 적절한 액츄에이터를 구동 제 어. 사용자는 스마트폰을 통해 이미지나 동영상 Play기능, Gateway에 저장된 이벤트와 lo g기록 확인 가능.

스마트 농장 Software Data Flow Diagram

스마트 농장 센서/액츄에이터 연결

IO 어댑터 보드 - old

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

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

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

개발환경 – 노트북 연결 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 후 설치

제어판 – 장치관리자에서 COM 포트 확인 COM14

씨리얼 포트로 부팅 후 $ifconfig 부팅 후 로그인 Raspberrypi login : pi Password : raspberry $ifconfig 명령어로 아이피 주소 적어둔다. 라즈베리 파이 IP 주소 :

윈도우 환경에서 개발 \\192.168.1.주소\ 위치 : pi 아이디 : pi 패스워드 : raspberry

MCP3208 ADC(12bit, SPI)

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

GPIO Pin 과 wiringPi Pin 할당 – $gpio readall

폴링 과 인터럽트 방식 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; }

온도 / 습도 센서 특징 전기적 특성 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

온도 습도 센서 소스코드 온도데이터 : 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;

컴파일 – 실행 - 코드수정 작업 폴더 변경 pi@raspberrypi ~ $ cd smartfarm GNU Compiler Collection 처리과정 작업 폴더 변경 pi@raspberrypi ~ $ cd smartfarm pi@raspberrypi ~/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

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

조도(빛) 센서 Analog 출력 연결 특징 전기적 특성 1. 감도 조절 (파란색 가변저항 조정)밝기와 주 변 빛의 세기를 감지 2. 출력 : 아날로그 전압 출력, 디지털 스위치 출력 (0, 1) 3. 온도 측정 범위 : -40~80℃ 4. 습도 측정 오차 : ±2%RH 5. 온도 측정 오차 : ±0.5℃ 6. 저전력소모 7. 부가회로가 불필요 - 작동 전압 : 3.3V ~ 5V DC - 출력 : 아날로그 전압 출력, 디지털 스위치 출력 (0, 1) - lm393 칩 - 측정 조건 VDD = 5V , T = 25 ℃ - Pin Connection Pin 1 – 아날로그 출력 Pin 2 – 디지털 출력 Pin 3 - GND) Pin 4 - 전원 VCC 3.5~5.5V DC

조도(빛) 센서 Analog 실습 SPI및I2C활성화 $sudo nano /etc/modprobe.d/raspi-blacklist.conf # blacklist spi and i2c by default (many users don't need them) #blacklist spi-bcm2708 #blacklist i2c-bcm2708 blacklist snd-soc-pcm512x blacklist snd-soc-wm8804 소스코드 #include <wiringPi.h> #include <wiringPiSPI.h> #define CS_MCP3208 8 //GPIO 8 #define SPI_CHANNEL 0 int read_mcp3208_adc(unsigned char adcChannel) { ~ }   int main(void) { pinMode(CS_MCP3208, OUTPUT); adcValue_light = read_mcp3208_adc(adcChannel_light); }

조도(빛) 센서 컴파일 – 실행 -- 편집 소스코드 편집 : $nano getlightsensor.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o getlightsensor getlightsensor.c –l wiringPi 실행 : $sudo ./getlightsensor 밝음 중간 어두움 light sensor = 254 light sensor = 255 light sensor = 256 light sensor = 253 light sensor = 1262 light sensor = 1260 light sensor = 1259 light sensor = 1256 light sensor = 1255 light sensor = 1253 light sensor = 1254 light sensor = 1258 light sensor = 2324 light sensor = 2323 light sensor = 2322 light sensor = 2321 light sensor = 2319 light sensor = 2318 light sensor = 2317 light sensor = 2316 light sensor = 2315 light sensor = 2314 light sensor = 2313 light sensor = 2312

조도(빛) 센서 Digital 출력 연결 컴파일 명령 가변저항을 사용하여 밝기의 기준값을 설정하여 High, Low 신호 출력을 사용한다. #include <wiringPi.h> #define LIGHTSEN_OUT 2 //gpio27 - J13 connect int main(void) { pinMode(LIGHTSEN_OUT, INPUT); if(digitalRead(LIGHTSEN_OUT) == 0) printf("light full ! \n"); if(digitalRead(LIGHTSEN_OUT) == 1) printf("dark \n"); } 컴파일 명령 $gcc –o lightdetect lightdetect.c –lwiringPi 실행명령 $sudo ./lightdetect 편집 명령 $nano lightdetect.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 light full ! dark

액츄에이터 스마트 식물농장의 액츄에이터는 워터펌프, 팬, DC Motor, RGB Led 와 같이 4가지를 사용한다. 토양이 말라 있을 때 물을 뿌려주고, 실내 농장의 온도에 따라 환기 팬을 작동하고, 야간이나 구름이 낀 날은 청색과 적색의 식물 Led 를 켜준다. 또한 차양을 올린다거나 문을 열기 위해 DC 모터를 사용하는 것으로 가정한다. 워터펌프 FAN DC Motor 식물 LED 5V, 12V 구동회로 RGB Led 구동회로

워터펌프 – DWP2760 워터펌프 외관 워터펌프 기구도면 전기적 사양 정격전압 DC 12V 구동전압 DC 9V ~ DC15V 전류 무부하시 280mA 이하 최대입력 >14.5 PSI Water Flow ≥400(±20%)mL/Min at 90℃ 소음 65dB 용도 커피머신용, 90℃ 뜨거운 물 사용가능 수명 정격전류에서 50초 동작, 20초 멈춤이 1Cycle - 6,000번

워터펌프 구동 소스 – 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); }

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

Fan – KD1205PFS1 FAN 외관 FAN 기구도면 FAN 전기적 사양 Size (㎜) 50*50*10mm 정격전압(VDC) 12 전류 (A) 0.1 기동전압(V) 10.8~13.8 속도 (RPM) 5500 풍량(㎥/min) 0.29 풍압(Pa) 36 소음(db) 28 권장사용온도(℃) 10~60 무게(g) 20

FAN 소스코드 – fanon.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); }

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

DC Motor DC Motor 기구도면 DC Motor 전기적 사양 DC Motor 외관 품명 마이크로 DC 모터 Rated Voltage(V) 12 No load speed(rpm) 9,100 No load current(mA) 60 Rated speed(rpm) 7800 Rated torque(gf.츠) 20 Rated current(mA) 350 Size 23.8Φ ⅹ 30.5mm Noise level(유) 55

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); }

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

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 키를 누른다. )

RGB Led RGB LED 외관 RGB LED 전기적 사양 RGB LED 회로도 품명 RGB LED Rated Voltage(V) 12V 표시 색 1600만 소비전류 Red=2V/20mA GREEN=3.4V/20mA Blue=3.4V/20mA 품번 IWS-506-RGB-K3 RGB LED 회로도

RGB Led 제어 – rgbtest.c RED, GREEN, BLUE 순서로 LED on/off #include <signal.h> //Signal 사용 헤더파일 #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #define RGBLEDPOWER 24 //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); }

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);

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);

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 키를 누른다. )

액츄에이터 전체 구동 전체 포트 번호 설정 핀 모드 설정 구동 코드 #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

액츄에이터 전체 구동 소스 컴파일 – 실행 -- 편집 액츄에이터 전체 구동 소스 컴파일 – 실행 -- 편집 소스코드 편집 : $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 키를 누른다. )

스마트 농장 스토리 프로그램 순서도 프로그램 : farmstory.c 참고

스마트 농장 스토리 프로그램 실행 소스코드 편집 : $nano farmstory.c 편집 후 ctrl-x 입력 y 치고 엔터로 나옴 컴파일 : $gcc –o farmstory farmstory.c –l wiringPi 실행 : $sudo ./farmstory.c 실행 종료 : Ctrl-c (컨트롤(Ctrl) 키를 누르고 c 키를 누른다. )

스마트 농장 서버 실행 Test pi@raspberrypi ~ $ cd iot_farmserver pi@raspberrypi ~/iot_farmserver $ cd output pi@raspberrypi ~/iot_farmserver/output $ ls mjpg.sh server_farm 서버실행 : $sudo ./server_farm pi@raspberrypi ~/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 = 52.90 % Temperature = 25.80 *C Humidity = 52 Temperature = 25 Temperature = 25 Data not good, skip Humidity = 52.80 % Temperature = 25.80 *C Humidity = 52 SensorInterruptLoop : write to DB - INSERT INTO tfarmsensorvalue values (null ,now(), now(), 25.000000, 52.000000, 0) iot_insert_data_from_db : query - INSERT INTO tfarmsensorvalue values (null ,now(), now(), 25.000000, 52.000000, 0) 실행 종료 : ctrl - x

카메라 구동 테스트 $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’ 입력하여 설치를 진행한다.

카메라 캡쳐 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

동영상 스트리밍 카메라 모듈을 이용하여 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 https://github.com/liamfraser/mjpg-streamer

$ pi@raspberrypi ~ $sh mjpg.sh 동영상 스트리밍 Test $cd ~/mjpg-streamer/mjpg-streamer-experimental pi@raspberrypi ~/mjpg-streamer/mjpg-streamer-experimental $ make clean all 앞의 과정들을 통해 mjpg-streamer 를 실행 할 수 있는 환경이 갖추어 졌으니, 마지막으로 파이 캠에서 mjpg-streamer 를 이용 할 수 있도록 자동 스크립트를 작성하고 명령어를 입력 해 웹 스트리밍을 구현 해 보자. $ pi@raspberrypi ~ $cd ~ $ pi@raspberrypi ~ $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 저장하고 나온다. $ pi@raspberrypi ~ $sh mjpg.sh $ pi@raspberrypi ~ $sh mjpg.sh 확인 주소 : http://라즈베리파이 아이피 :8080 종료 Ctrl -c

스마트 농장 Database 설계 DB Name : iotfarm   Table : tfarmsensorvalue 센서값 저장 테이블 1분마다 센서 값을 저장한다. 날짜 day / 조도 int / 온도 float / 습도 float Table : tfarmsensorcheck 센서 정상/불량 저장 테이블 센서 정상 불량 확인하여 저장 10분마다. 날짜 day / 조도센서 (정상, 오류) / 온도센서 (정상, 오류) / 습도센서(정상, 오류) Table : tfarmactuoperate 액츄에이터 동작상태(동작중/정지중) 액츄 동작시 데이터베이스 업데이트 하고, 동작 끝날 때 업데이트 날짜 day / pump(on,stop) / fan(on, stop) / dcmotor(on, stop) / rgbled(on, stop) Table : tfarmactucheck 액츄에이터가 정상/불량 저장 데이블 액츄에이터 정상 불량 기록 – 현재는 모두 정상 pump(normal, fail), fan(normal, fail), dcmotor(normal, fail), rgbled(normal, fail) Table : tfarmsetting 설정값 저장 테이블 Now(), 매일/2일/3일(0,1,2)

스마트 농장 User Interface 설계

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

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

Smart IoT 블로그 : http://smartiot.tistory.com 스마트 농장 앱 다운로드 설치 Smart IoT 블로그 : http://smartiot.tistory.com 스마트 팜 앱 : http://smartiot.tistory.com/31

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

스마트 농장 실습 과 스마트 폰 앱 Test $sudo ./s-farm 으로 동영상 스트리밍 서버와 스마트 팜 서버를 동시에 실행 스마트 농장 시스템 서버실행 1. 스마트 팜 서버 실행 백그라운드 실행 pi@raspberrypi ~/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 -$

스마트 농장 앱 실행 1

스마트 농장 앱 실행 2

참고자료 [1] (주)휴인스 : http://www.huins.com [2] (주)휴인스 IoT Blog : smartiot.tistory.com [3] 라즈베리 파이 활용백서 : 실전 프로젝트 20 - 이재상 표윤석 지음, 비제이 퍼블릭 [4] 라즈베리 파이 산딸기 마을 카뮤니티 http://www.rasplay.org/ [5] 리눅스와 함께하는 라즈베리 파이 – 피터 멤브리, 배장열 옮김, 제이펍 [6] ITU-T Internet Report “The Internet of Things – Executive Summary”, Nov. 2005. [7] 민경식, Net Term, 인터넷 & 시큐리티 이슈, “사물 인터넷 (Internet of Things)”, 2012. [8] 전자부품연구원(KETI), “IoT(Internet of Things) Presentation Design”, Nov. 2012. [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 6.2013, Yim Hyung-jun, Database Systems Lab. Dept. of Computer Engineering Chungnam National University [15] 사물인터넷(IoT)분야의 주요 임베디드 SW기술 - MDS 테크놀로지㈜ 장성균(2014/07/24) [16] 사물인터넷 글로벌 생태계 구축 및 서비스 활성화를 위한 개방형 IoT 소프트웨어 플랫폼 기술 - 2013. 10. 25, 김재호(jhkim@keti.re.kr),전자부품연구원 [17] Opensource H/W + Node js 로 IoT 따라잡기 – Circulus