이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Raspberry Pi와 Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560), WiFi 모듈을 사용 합니다.

farm-remote-control

Farm remote control
농장 원격제어 시스템(Farm remote control system) 개발 예

    개발 능력을 키우기 위하여는 실제 시스템을 개발하여 보는 것이 효과적 이다. 이 페이지에서는 비교적 여러가지 기술을 사용하면서도 이해 하기 쉬운 농장제어 시스템(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 통신을 지원하는 각종 센서, 장치와 정보 교환 및 제어에 이용 한다.
        • Raspberry Pi 3 b+ 사진

      • 필요한 Software 환경
      • 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 펌프 제어를 위한)를 제어 한다.
        • AC 전력 제어회로 예

          윗 회로는 컴퓨터 GPIO 측에 광 결합 Triac(MOC3063)을 사용하여 부하 측에서 발생 할 수 있는 높은 순간 전압으로 부터 컴퓨터를 안전하개 보호 한다. 출력 측은 큰 전류를 제어 할 수 있는 전력 제어용 Triac(B1A16-600B)을 사용하여 다양한 교류 부하를 제어 할 수 있도록 하였다.

        • Water pump: 물 탱크로 부터 살수 장치에 고압으로 물을 공급하기 위한 펌프(AC 220V) 이다.
        • 온도 측정과 I2C 통신
          • I2C: I2c 통신을 지원하는 각종 센서, 장치와 정보 교환 및 제어에 이용 한다.
          • 온도 측정 Device: 온도센서와 I2C 통신을 지원하는 IC Device 이다.
          • 예: Digital Thermometer DS1621(Pin은 아래 사진 참고)
        • Interface Board와 제어 장치 예
        • DC Motor 제어보드 예

          창 개폐용 DC Motor 예

          농업용 전자밸브 예

          농업용 펌프 예

          전자개폐기 예


          제작된 농장제어 장치 예

    • 실험 환경 만들기
      • 실제 장치를 책상위에 올려 놓고 프로그램 개발과 테스트를 할 수 없기 때문에 실제 장치와 동일한 입출력 환경을 제공하는 실험용 보오드를 제작 하였다.

      • Raspberry Pi의 GPIO 출력을 LED로 확인 할 수 있는 회로 예
      • 아래 회로는 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 번지가 된다.
          • 참고자료: I2C 통신을 이용한 온도 측정(DS1621) 예

    • 원격 비닐하우스 창 개폐와 급수제어를 위한 Web server: ras-farm.js
      • Node.js에 기반한 Web sever 이다. 선택된 Web page를 Web browser에 전송 하는 일과, Web page와 필요한 정보를 주고 받으며 필요한 제어를 수행 한다. 비닐하우스 창 개폐와 급수제어 기능을 하나의 Server에 통합하여 설계 하였다. 프로그램이 크기 때문에 이 곳에서 프로그램에 사용된 세부 기술을 설명 할 수 없기 때문에 별도 페이지(Node.js를 이용한 Coding 예 )에서 설명 한다.

    • 비닐하우스 창제어 Web Page 예
      • 비닐하우스 창제어 Web Page와 창제어에 필요한 Parameter 설정을 위한 Web Page는 아래와 같다.
      • 비닐하우스 창제어 Web Page

        창제어에 필요한 Parameter 설정을 위한 Web Page


    • 원격 비닐하우스 창를 위한 Web page Code
      • 창제어를 위한 Web page: ras-farm-window.html
      • 창 제어를 위한 Web page로 Web sever에 필요한 정보를 전송하고, 결과를 받아 Web browser에 출력(표시) 한다.

      • 창제어 Parameter 설정을 위한 Web Page: ras-farm-window-setup.html
  • 원격 급수제어 시스템
    • 시스템 구성
      • 전체적인 시스템 구성은 아래와 같다.

    • 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 예
      • 급수제어(ras-farm-water.html) Web Page는 아래와 같다.

    • 원격 급수제어를 위한 Web page Code
  • 농장 제어 시스템 프로그램과 개발 완료된 프로그램 실행하기