임베디드 프로그래밍 Lecture #03 2018. 10. 02.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
SoC 로봇워 참가자 교육.
KEY 디바이스 드라이버 Lecture #12. 2 차례 GPIO 및 Control Registers KEY 하드웨어 구성 KEY Driver 프로그램 key-driver.c 시험 응용 프로그램 key-app.c.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이 gpio.
10. 예외 처리.
임베디드 프로그래밍 Lecture #
임베디드 프로그래밍 Lecture #
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
PIC는 우리의 친구 한국정보통신대학교 디지털미디어연구소.
Smart IoT 설계 시스템 Lecture 07. 센서와 액츄에이터 실습.
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
명품 JAVA Essential.
J2ME(Java 2 Micro Edition) 무선 장치용 UI의 핵심 컴포넌트
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
제어기술 소개 목표 : 제어기의 종류, 제어 방식 등을 살펴본다. 주요내용 제어기의 종류 제어방식 : 시퀀스, 피드백, 등.
Arduino와 Led를 이용하여 Wearable Display 만들기
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
임베디드 프로그래밍 Lecture #
제7장 제어구조 I – 식과 문장.
음악 재생 프로그램 예외 처리 방법 try/catch 블록 예외 선언 방법
[ 단원 08 ] 예외처리와 스레드.
명품 JAVA Essential.
자동제어 실험(2) 라인트레이서 제어.
Power Java 제4장 자바 프로그래밍 기초.
임베디드 프로그래밍 Lecture #
8장 자바 입출력.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
임베디드 프로그래밍 Lecture #
1. 아두이노란 무엇인가? - 스마트 폰으로 제어하는 아두이노 -.
12. 아두이노와 센서를 이용한 제어 - 스마트 폰으로 제어하는 아두이노 -.
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
Arduino uno의 Hardware 구성부품의 종류와 그 용도.
실전 사운드 처리 프로그래밍 Lecture #11.
명품 Java Programming.
최용술 장 Thread 최용술
명품 JAVA Essential.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
DataScience Lab. 박사과정 김희찬 (월)
주소록 프로그램.
Network Programming(1)
6장 객체-지향 설계 ①.
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
6장 객체-지향 설계 ①.
DataScience Lab. 박사과정 김희찬 (월)
RPi2 SPI 8x8 Dot Matrix LED
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Chap10 다중 스레드 Section 1 : 스레드 개요 Section 2 : Thread 클래스와 스레드 생명주기
임베디드 프로그래밍 Lecture #
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
컴퓨터공학실습(I) 3주 인공지능연구실.
CACM 구현 public class CACM { public CACM(File file)
디지털공학 및 실험 디지털 공학: 부울대수를 기반으로 하는 논리적인 회로의 입출력에 대하여 공부하고 이를 응용한 기능을 설계하는 과목. 부울대수: 참, 거짓 두 종류의 입력(출력)데이터와 AND, OR, NOT 등의 연산자사이의 관계를 정의해 놓은 학문분야. 값의 명칭:
센서값 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
제8장 쓰레드 프로그래밍.
C# 10장. 참조형.
자바 프로그래밍 Thread를 이용한 애니메이션 서울호서전문학교 게임프로그램개발과.
아두이노 프로그래밍 Lecture #
사물인터넷(IoT) 프로그래밍 기초 5. 시리얼통신.
Progress Seminar 양승만.
Presentation transcript:

임베디드 프로그래밍 Lecture #03 2018. 10. 02

목 차 라즈베리파이의 장치 제어 디지털 출력 및 입력 테스트 디지털 입력 이벤트 처리 테스트

라즈베리파이의 장치 제어 (1) IoT 단말 장치의 구성 Sensors Communication Device Controller Sensors Actuator Communication Device

라즈베리파이의 장치 제어 (2) 라즈베리파이의 장치 제어 Communication Interface GPIO IO Digital Input(DI) 26개의 GPIO Digital Output(DO) Ethernet Analog Input(DI) WiFi PWM 지원 Analog Output(DO) Serial Comm. Bluetooth 2 채널 지원 SPI Communication Interface I2C UART Device Interface

라즈베리파이의 장치 제어 (3) 라즈베리파이의 입출력 핀 구성

디지털 출력 및 입력 테스트 (1) 버튼 입력 처리 택 스위치(Tact Switch) 버튼 입력 회로 구성 GPIO Pin GND (2) Pull-up 회로 GPIO Pin Vcc (1) Pull-down 회로 Vcc 10kΩ 10kΩ GND

Pull-up resistor  버튼을 누르면 LOW 입력 디지털 출력 및 입력 테스트 (2) Pull-up resistor  버튼을 누르면 LOW 입력 버튼 입력 테스트 회로 LED – gpio 17(11) Led Button – gpio 23(16) Exit Button – gpio 24(18) 동작: Led button 입력에 따라 LED on-off Exit button 입력 시에 프로그램 종료

디지털 출력 및 입력 테스트 (3) 버튼 입력 테스트 회로

디지털 출력 및 입력 테스트 (4) 버튼 입력 테스트 프로그램 import java.io.IOException; import jdk.dio.DeviceManager; import jdk.dio.gpio.GPIOPin; public class PushButton { private static final String LED_PIN = "GPIO17"; private static final String LED_BTN = "GPIO23"; private static final String EXIT_BTN = "GPIO24"; private GPIOPin ledPin; private GPIOPin ledBtnPin; private GPIOPin exitBtnPin; public PushButton() { super(); this.ledPin = DeviceManager.open(LED_PIN, GPIOPin.class); this.ledBtnPin = DeviceManager.open(LED_BTN, GPIOPin.class); this.exitBtnPin = DeviceManager.open(EXIT_BTN, GPIOPin.class); System.out.println("Devices successfully opened..."); } public void run() throws IOException { boolean exit = false; boolean led = false; try { while (!exit) { led = ledBtnPin.getValue(); ledPin.setValue(led); System.out.System.out.println("LED: " + (led?"ON":"OFF")); exit = exitBtnPin.getValue(); Thread.sleep(1000); } catch (InterruptedException e) {} System.out.println("Exit..."); close();

디지털 출력 및 입력 테스트 (5) 버튼 입력 테스트 프로그램 (계속) public void close() throws IOException { ledPin.close(); ledBtnPin.close(); exitBtnPin.close(); } public static void public static void main(String[] args) { PushButton pushButton = new PushButton(); pushButton.run();

장치타입 정의에 의해 장치의 기본 속성값이 결정 디지털 출력 및 입력 테스트 (6) 버튼 입력 테스트 프로그램 – 장치 레지스트리 dio.properties # RPi P3 header pins 17 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, mode:4, direction:1, predefined:true 23 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, mode:2, direction:0, predefined:true 23 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, mode:2, direction:0, predefined:true gpio.GPIOPin = initValue:0, deviceNumber:0, direction:0, mode:1, trigger:0, predefined:true 장치이름 장치번호 장치타입 정의에 의해 장치의 기본 속성값이 결정

디지털 출력 및 입력 테스트 (7) 버튼 입력 테스트 프로그램 – 장치 레지스트리 속성 장치번호 & 장치이름 – 장치 식별자 deviceType – 장치 타입 선언에 의해 장치의 기본 속성값을 정의 pinNumber – GPIO 장치 속성으로 입출력 핀의 GPIO pin 번호 mode – GPIO pin 모드 정의 pull-up input(1), pull-down input(2) push-pull output(4), open-drain output(8) direction – GPIO pin의 입출력 방향 정의 입력전용(0), 출력전용(1), 초기입력 양방향(2), 초기출력 양방향(3) predefined – 장치 속성 정보의 수정 가능 여부 true – 프로그래밍에 의해 속성 정보 수정 가능, false – 수정 불가능 initValue – 출력 GPIO pin의 초기값 trigger - GPIO pin의 입력 모드에서의 트리거 모드 지정 no-trigger(0), rising-edge(1), falling-edge(2), both-edges(3)

디지털 출력 및 입력 테스트 (8) 버튼 입력 테스트 프로그램 – 장치 보안 정책 java.policy build.xml 파일 수정 grant { permission jdk.dio.DeviceMgmtPermission "*:*", "open"; };

레지스트리 설정 및 보안 설정 파일 이름은 상황에 맞게 수정 디지털 출력 및 입력 테스트 (9) 버튼 입력 테스트 프로그램 – 실행 환경 설정 프로젝트 속성(properties) 설정 메뉴 선택 2 3 4 레지스트리 설정 및 보안 설정 파일 이름은 상황에 맞게 수정 1

디지털 출력 및 입력 테스트 (10) 버튼 입력 테스트 프로그램 – 테스트 원격 실행 원격 디버깅 버튼 입력 처리 동작의 타이밍 지연 문제 버튼 입력에 대한 1초 주기의 폴링(polling)에 의해 야기 디지털 입력에 대한 트리거 이벤트(trigger event) 처리로 해결

디지털 출력 및 입력 테스트 (11) 버튼 입력 테스트 프로그램 확장 버튼을 누를 때마다 LED blinking 동작을 토그링(toggling) 구현 고려 사항: 버튼을 누르는 시점을 식별하여 함.  디지털 입력에 대한 edge detection LED Blinking 동작과 버튼 입력 검사 동작이 비동기적으로 실행하여야 함. 해결 방법: 디지털 입력 이벤트 처리 방식을 적용 Device IO 라이브러리는 디지털 입력에 대한 이벤트 처리를 지원

디지털 입력 이벤트 처리 (1) 버튼 입력 이벤트 처리 디지털 입력 이벤트 모델 Device I/O 라이브러리는 하드웨어 인터럽트 혹은 소프트웨어 시그널을 처리하 기 위한 이벤트 모델을 제공

디지털 입력 이벤트 처리 (2) 버튼 입력 이벤트 처리 프로그램 테스트 회로는 앞의 회로를 동일하게 사용 이벤트 수신 처리 프로그램 – 교재 pp.126~126, 예제 3-9 Project Name: jiot03-buttonevent Main Class Name: jiot3.buttonevent.PushButtonEventEx

디지털 입력 이벤트 처리 (3) import java.io.IOException; import jdk.dio.DeviceManager; import jdk.dio.gpio.GPIOPin; import jdk.dio.gpio.PinEvent; import .jdk.dio.gpio.PinListener; public class PushButtonEventEx implements Runnable { public static final String LED_PIN = "GPIO17"; public static final String BTN1_PIN = "GPIO23"; public static final String BTN2_PIN = "GPIO24"; private GPIOPin ledPin = null; private GPIOPin btn1Pin = null; private GPIOPin btn2Pin = null; private volatile boolean togglingStop = false, exit = false; public PushButtonEventEx() throws IOException { ledPin = DeviceManager.open(LED_PIN, GPIOPin.class); btn1Pin = DeviceManager.open(BTN1_PIN, GPIOPin.class); btn2Pin = DeviceManager.open(BTN2_PIN, GPIOPin.class); btn1Pin.setInputListener(new PinListener() { @Override public void valueChanged(PinEvent pe) { if (!pe.getValue()) { togglingStop = !togglingStop; } }); btn2Pin.setInputListener(new PinListener() { exit = true; System.out.println("LED & Button devices successfully opened...");

디지털 입력 이벤트 처리 (4) public void close() throws IOException { ledPin.close(); btn1Pin.close(); btn2Pin.close(); System.out.println("All devices successfully closed..."); } public void run() { System.out.println("LED Toggling..."); while (!exit) { if (!togglingStop) { try { ledPin.setValue(true); Thread.sleep(500); ledPin.setValue(false); } catch (IOException | InterruptedException ex) { Logger.getLogger(PushButtonEventEx.class.getName()) .log(Level.SEVERE, null, ex); try { close(); } catch (IOException ex) { Logger.getLogger(PushButtonEventEx.class.getName()) .log(Level.SEVERE, null, ex); } public static void main(String[] args) { Thread t = new Thread(new PushButtonEventEx()); t.start();

디지털 입력 이벤트 처리 (5) 버튼 입력 이벤트 처리 프로그램 – 장치 레지스트리 # RPi P3 header pins 17 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, mode:4, direction:1, trigger:0, predefined:true 23 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, predefined:true 24 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, predefined:true gpio.GPIOPin = initValue:0, deviceNumber:0, mode:1, direction:0, trigger:3, predefined:true

디지털 입력 이벤트 처리 (6) 버튼 입력 이벤트 처리 프로그램 – 장치 보안 정책 grant { permission jdk.dio.DeviceMgmtPermission "*:*", "open"; };

디지털 입력 이벤트 처리 (7) 버튼 입력 이벤트 처리 프로그램 – 실행 환경 설정 앞 예제와 동일하게 설정

디지털 입력 이벤트 처리 (8) 버튼 입력 이벤트 처리 프로그램 – 테스트 원격 실행 원격 디버깅

디지털 입력 이벤트 처리 확장 (1) 동작 감지 센서(Passive Infrared(PIR) Motion Sensor) 개요 BISS0001 칩을 사용하는 DYP-ME003 PIR Module 작고, 저가이며, 저전력에 사용하기 쉽고, 외부에는 설치할 수 없음 적외선의 레벨을 검출할 수 있는 초전 센서로 구성 초전 센서은 덮고 있는 반구 형태의 커버를 벗기면 중앙에 사각형 크리스탈을 장착한 둥근 금속 적외선을 띈 물체의 움직임을 감지하는 센서 - 태양 빛과 같이 PIR 센서가 감지 가능한 대역의 빛이 있다면 오동작 할 수 있음 주요 특징 Input Voltage: DC 4.5-20V Trigger: High-Yes, Low-No Delay time: 5 S(default) Sentry Angle: < 110 degree Sentry Distance: 3 m(default) - max 7 m

디지털 입력 이벤트 처리 확장 (2) 동작 감지 센서(PIR Motion Sensor) 제어 방법 장치 설정 동작 센서는 110도 범위각에서 기본 3m, 최대 7m 범위의 거리에 물체의 움직임 감지 움직임이 감지되면 OUT 핀을 통하여 디지털 신호를 전송 전송된 신호를 디지털 입력핀을 통하여 값을 읽어 확인 장치 설정 1번 가변 저항은 지연 시간(Delay Time)을, 2번 가변 저항은 센싱 거리(Distance)를 조절 각각의 가변 저항을 시계방향으로 돌리면, 지연 시간이 약 5초에 서 300초까지 증가하며, 센싱 거리가 약 3m에서 7m까지 증가

디지털 입력 이벤트 처리 확장 (4) 동작 감지 센서 회로 실습 키트 회로

디지털 입력 이벤트 처리 확장 (3) 동작 감지 센서 회로 실습 키트 회로 연결 앞의 예제와 동일하며, 추가로 PIR 출력핀을 GPIO25에 연결

디지털 입력 이벤트 처리 확장 (4) 동작 감지 센서 확장 프로그램 앞 예제 프로그램에서 동작 감지 센서 입력에 따라 LED blinking 동작 을 토글링하도록 확장 앞 예제 프로그램 수정

디지털 입력 이벤트 처리 확장 (5) : public class PushButtonEventEx implements Runnable { public static final String PIR_PIN = "GPIO25"; private GPIOPin pirPin = null; public PushButtonEventEx() throws IOException { pirPin = DeviceManager.open(PIR_PIN, GPIOPin.class); pirPin.setInputListener(new PinListener() { @Override public void valueChanged(PinEvent pe) { togglingStop = !pe.getValue(); } });

디지털 입력 이벤트 처리 확장 (6) 동작 감지 센서 확장 프로그램 – 장치 레지스트리 # RPi P3 header pins 17 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, mode:4, direction:1, trigger:0, predefined:true 23 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, predefined:true 24 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, predefined:true 25 = deviceType: gpio.GPIOPin, pinNumber:25, name:GPIO25, predefined:true gpio.GPIOPin = initValue:0, deviceNumber:0, mode:1, direction:0, trigger:3, predefined:true

디지털 입력 이벤트 처리 확장 (7) 동작 감지 센서 확장 프로그램 – 실행 환경 설정 앞 예제와 동일하게 설정 동작 감지 센서 확장 프로그램 – 테스트 원격 실행 원격 디버깅