개발 능력을 키우기 위하여는 실제 시스템을 개발하여 보는 것이 효과적 이다. 이 페이지에서는 비교적 여러가지 기술을 사용하면서도 이해 하기 쉬운 농장제어 시스템(DC모터 제어, AC 제어, 센서 등의 기술을 포함 함)을 예로 하여 여러 가지 기술을 설명 한다.
- HTML: Web pages 작성에 필요한 Markup language
- JavaScript: HTML과 Web의 Programming language
- Node.js: 원격제어를 가능하게 하는 Web server를 구성하고 JavaScript 언어를 사용 할 수 있게 한다.
- Linux OS: Raspberry Pi의 OS 가 Linux 이다.
- 기타 지식으로 디지털회로와 전자회로에 대한 지식이 있으면 좋다.
- 원격제어 시스템 구성
- 전체적인 시스템 구성은 아래와 같다.
- Raspberry Pi
- 산업용으로 사용 할 수 있는 Linux 기반의 컴퓨터 이다.
- Internet 통신(유선, WiFi) 환경을 제공 한다.
- GPIO(General Purpose Input Output)를 이용하여 직접 On, Off 제어를 할 수 있다.
- I2C: I2c 통신을 지원하는 각종 센서, 장치와 정보 교환 및 제어에 이용 한다.
- 필요한 Software 환경
- Node.js
- Express Module
- onoff Module
- i2c-bus Module
- Interface circuits과 제어 장치
- DC Motor Interface circuit(DC Motor Driver): Raspberry Pi의 GPIO 신호를 이용하여 DC Motor를 제어(순 방향 회전과 역 방향 회전) 하기 위한 전자회로(예: SKU DRI0018) 이다. 24V DC Motor를 제어 한다.
- AC Power control Interface circuit: Raspberry Pi의 GPIO 신호를 이용하여 AC 전력을 제어하기 위한 전자회로 이다. AC 24V 전자 밸브와 전자개폐기(AC 220V 펌프 제어를 위한)를 제어 한다.
- Water pump: 물 탱크로 부터 살수 장치에 고압으로 물을 공급하기 위한 펌프(AC 220V) 이다.
- 온도 측정과 I2C 통신
- I2C: I2c 통신을 지원하는 각종 센서, 장치와 정보 교환 및 제어에 이용 한다.
- 온도 측정 Device: 온도센서와 I2C 통신을 지원하는 IC Device 이다.
- 예: Digital Thermometer DS1621(Pin은 아래 사진 참고)
- Interface Board와 제어 장치 예
- 실험 환경 만들기
- Raspberry Pi의 GPIO 출력을 LED로 확인 할 수 있는 회로 예
Raspberry Pi 3 b+ 사진
다음과 같은 Software가 설치되어 있어야 한다.
참고자료: Raspberry Pi에 Node.js 설치하기
참고자료: Node.js를 이용한 Raspberry Pi Webserver - Express 설치 하기
참고자료: onoff Module 설치 하기
AC 전력 제어회로 예
윗 회로는 컴퓨터 GPIO 측에 광 결합 Triac(MOC3063)을 사용하여 부하 측에서 발생 할 수 있는 높은 순간 전압으로 부터 컴퓨터를 안전하개 보호 한다. 출력 측은 큰 전류를 제어 할 수 있는 전력 제어용 Triac(B1A16-600B)을 사용하여 다양한 교류 부하를 제어 할 수 있도록 하였다.
DC Motor 제어보드 예 |
창 개폐용 DC Motor 예 |
농업용 전자밸브 예 |
농업용 펌프 예 |
전자개폐기 예 |
제작된 농장제어 장치 예
실제 장치를 책상위에 올려 놓고 프로그램 개발과 테스트를 할 수 없기 때문에 실제 장치와 동일한 입출력 환경을 제공하는 실험용 보오드를 제작 하였다.
아래 회로는 LED Array(한 모듈에 8개 LED)와 Array 저항(330옴 8개 핀과 공통 연결 핀 1개)을 사용한 회로 이다. 아래 실험용 보오드에는 이 회로를 3개 제작 하여 24개의 GPIO 신호를 볼 수 있도록 하였다.
제작한 실험용 보오드 사진
이 보오드는 창제어 모터 제어 신호와 급수 밸브 제어 신호의 동작을 확인 하는데 이용 하였다. 실제 제작된 제어반에는 이 보오드에 밸브 제어 회로 4개(별도 보오드에 8개 총 12개의 밸브 제어 회로), I2C 통신 연결 단자, DC Motor 제어 보오드를 함께 실장 하였다.
- 시스템 구성
- 전체적인 시스템 구성은 아래와 같다.
- DC Motor Interface circuit(DC Motor Driver)
- 입력 신호
- Dir0, Dir1 : Motor 0(남측 창 제어 모터)와 Motor 1(북측 창 제어 모터)의 회전 방향을 결정하는 신호
- En0, En1 : Motor 0(남측 창 제어 모터)와 Motor 1(북측 창 제어 모터)의 Enable 신호
- En0 = 0 : Motor 0 정지, En1 = 0 : Motor 1 정지
- Dir0 = 0, En0 = 1 : Motor 0 Down(남측 창 닫기)
- Dir0 = 1, En0 = 1 : Motor 0 Up(남측 창 열기)
- Dir1 = 0, En1 = 1 : Motor 1 Down(북측 창 닫기)
- Dir1 = 1, En1 = 1 : Motor 1 Up(북측 창 열기)
- 출력 신호
- Motor 0 출력 단자 +, - : +24V 남측창 열림, -24V 남측창 닫침
- Motor 1 출력 단자 +, - : +24V 북측창 열림, -24V 북측창 닫침
- Raspberry Pi GPIO와 창제어 DC Motor Driver 연결
- En0 : Raspberry Pi GPIO(Pin17) <-> DC Motor Driver En0
- Dir0: Raspberry Pi GPIO(Pin04) <-> DC Motor Driver Dir0
- En1 : Raspberry Pi GPIO(Pin27) <-> DC Motor Driver En1
- Dir1: Raspberry Pi GPIO(Pin18) <-> DC Motor Driver Dir1
- Raspberry Pi와 온도 센서(DS1621)의 I2C 통신선 연결
- Raspberry Pi SDA1(Pin3) <-> DS1621 SDA(Pin1) : 2-wire serial 통신을 위한 Data input/output pin.
- Raspberry Pi SCL1(Pin5) <-> DS1621 SCL(Pin2) : 2-wire serial 통신을 위한 Clock input/output pin.
- Raspberry Pi 3.3V(Pin1) <-> DS1621 VDD(Pin8) : VDD pin.
- Raspberry Pi GND(Pin9) <-> DS1621 GND(Pin4) : Ground pin.
- 이 장치에서는 비닐하우스 내부와 외부에 2개의 온도 센서를 사용한다.
- 내부 센서 Chip Adress 설정: A0, A1, A2 모두 GND에 접속한다. 이 경우 센서 Address는 0x48 번지가 된다.
- 외부 센서 Chip Adress 설정: A0 <- 3.3V, A1, A2는 GND에 접속한다. 이 경우 센서 Address는 0x49 번지가 된다.
- 원격 비닐하우스 창 개폐와 급수제어를 위한 Web server: ras-farm.js
- 비닐하우스 창제어 Web Page 예
- 비닐하우스 창제어 Web Page와 창제어에 필요한 Parameter 설정을 위한 Web Page는 아래와 같다.
- 원격 비닐하우스 창를 위한 Web page Code
- 창제어를 위한 Web page: ras-farm-window.html
- 창제어 Parameter 설정을 위한 Web Page: ras-farm-window-setup.html
Node.js에 기반한 Web sever 이다. 선택된 Web page를 Web browser에 전송 하는 일과, Web page와 필요한 정보를 주고 받으며 필요한 제어를 수행 한다. 비닐하우스 창 개폐와 급수제어 기능을 하나의 Server에 통합하여 설계 하였다. 프로그램이 크기 때문에 이 곳에서 프로그램에 사용된 세부 기술을 설명 할 수 없기 때문에 별도 페이지(Node.js를 이용한 Coding 예 )에서 설명 한다.
비닐하우스 창제어 Web Page |
창제어에 필요한 Parameter 설정을 위한 Web Page |
창 제어를 위한 Web page로 Web sever에 필요한 정보를 전송하고, 결과를 받아 Web browser에 출력(표시) 한다.
- 시스템 구성
- 전체적인 시스템 구성은 아래와 같다.
- Raspberry Pi GPIO와 급수 제어 회로(AC 24V 전자 밸브 제어를 위한 AC 전력 제어회로) 연결
- VAL1 : Raspberry Pi GPIO(Pin09) <-> AC 전력 제어회로 VAL1
- VAL2 : Raspberry Pi GPIO(Pin25) <-> AC 전력 제어회로 VAL2
- VAL3 : Raspberry Pi GPIO(Pin11) <-> AC 전력 제어회로 VAL3
- VAL4 : Raspberry Pi GPIO(Pin08) <-> AC 전력 제어회로 VAL4
- VAL5 : Raspberry Pi GPIO(Pin07) <-> AC 전력 제어회로 VAL5
- VAL6 : Raspberry Pi GPIO(Pin05) <-> AC 전력 제어회로 VAL6
- VAL7 : Raspberry Pi GPIO(Pin06) <-> AC 전력 제어회로 VAL7
- VAL8 : Raspberry Pi GPIO(Pin12) <-> AC 전력 제어회로 VAL8
- VAL9 : Raspberry Pi GPIO(Pin13) <-> AC 전력 제어회로 VAL9
- VAL10: Raspberry Pi GPIO(Pin19) <-> AC 전력 제어회로 VAL10
- VAL11: Raspberry Pi GPIO(Pin16) <-> AC 전력 제어회로 VAL11
- VAL12: Raspberry Pi GPIO(Pin26) <-> AC 전력 제어회로 VAL12
- GND: Raspberry Pi GND(Pin20) <-> AC 전력 제어회로 GND
- 원격 급수제어를 위한 Web page 예
- 원격 급수제어를 위한 Web page Code
- 급수제어 Web Page: ras-farm-water.html
급수제어(ras-farm-water.html) Web Page는 아래와 같다.
- 전체 프로그램: ras-farm.zip
- 개발 완료된 프로그램 실행하기
- Booting 시 명령 또는 프로그램을 자동으로 실행하게 하기
- Background에서 실행 중인 Process를 확인 하고 정지 하기
Code를 이해 하는데 필요한 설명과 프로그램 예는 "Node.js를 이용한 Coding 예" 를 참고 할 것.
장치를 제어하는 프로그램은 개발이 왼료된 후 실행 시 에는 전원이 인가 되면 별도의 명령 없이 자동으로 실행(Booting 시 백그라운드에서 실행) 되어야 한다.
참고자료: rc.local: Booting 시 명령 또는 프로그램을 실행하게 하기
참고자료: rc.local: Booting 시 명령 또는 프로그램을 실행하게 하기
주: 개발 완료되어 Background에서 실행 중인 프로그램을 변경하여야 하는 경우에는 Process를 정지한 다음 프로그램을 변경하고, 다시 백그라운드에서 실행하도록 하여야 한다.