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

python-sensors-modules

ESP8266/ESP32 Sensors and Modules - MicroPython
ESP8266/ESP32 센서(Sensors)와 제어모듈 - MicroPython


  • 센서에 입력되는 신호가 임계값을 넘으면 Low/High를 출력하는 센서 모듈
    • Low/High를 출력하는 센서 모듈 예
    • 아래 사진은 자주 자용하는 Low/High를 출력하는 센서 모듈의 예 이다. 아래 예 센서는 입력 신호가 미리 정해진 임계치를 넘으면 Low 상태에서 High 상태(or High 상태에서 Low 상태)로 천이(Rising edge or Falling edge)하기 때문에 External Interrupt 처리 방식으로 제어 할 수 있다.

      PIR 센서모듈(HC-SR501)

      Sound 센서모듈(SZH-EK033)

      홀 센서(WSH131)


    • Low/High를 출력하는 센서 모듈을 사용하는 구성도
    • Low/High를 출력하는 센서 모듈을 제어하는 프로그램 예
      • 윗 예의 센서 모듈은 모두 입력 신호가 임계치를 넘기면 Low 상태에서 High 상태로 천이하기 때문에 모두 아래와 같은 External interrupt 방식의 프로그램으로 구현 할 수 있다.

      • Low/High를 출력하는 센서 모듈을 제어하는 프로그램 예: sensor_event_handler.py
      • 실험을 위한 준비
        • ESP32 개발보드와 센서 모듈 연결
          • ESP32 개발보드 Event input pin(GPIO14) <-> 센서의 Output pin
          • ESP32 개발보드 VDD <-> 센서 Vdd pin
          • 주: 센서에 따라 전원 전압은 5V 또는 3.3V 일 수 있으니 확인 바람.

          • ESP32 개발보드 GND <-> 센서 GND
      • 실험 방법
        • 위 "sensor_event_handler.py" 프로그램 파일을 Download하여 저장한다.
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 python_wev_server_STA_led_basic.py 파일을 Open 한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 "sensor_event_handler.py"를 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • 로그램이 실행되면 센서에 임계치 이상의 신호를 인가 한다. 센서에 임계치 이상의 신호를 인가되면 LED가 지정된 시간(2Sec) 동안 Turn on 된다.
          • 센서에 임계치 이상의 신호를 인가하는 방법 예
            • PIR(인체 감지) 센서모듈(HC-SR501): 센서 앞에 손(인체)을 가까이 접근 시킨다.
            • Sound 센서모듈(SZH-EK033): 센서에 큰 소음이나 진동(입으로 후하고 마이크에 진동)을 가한다.
            • 홀 센서(Hall Sensor) WSH131: 먼저 홀 센서 회로를 구성하고 홀 센서 앞에 자성체(자석)를 접근 시킨다.
            • 참고자료: 홀 센서 회로 예


  • Analog 전압을 출력하는 센서 모듈
    • ADC(Analog to Digital Conversion) object(class ADC)
      • ESP32의 ADC 기능은 핀 32-39에서 사용할 수 있다. 기본 구성인 경우 ADC 핀의 입력 전압은 0.0v와 1.0v 사이(1.0v 이상이면 4095로 읽음)이어야 한다. 사용 가능한 전압 범위를 늘리려면 감쇠(Attenuation)를 적용하여야 한다.

        주: ESP8266은 별도의 ADC0 입력 핀을 갖고 있다. ADC0 만 사용가능 함

      • ADC object 생성자(Constructors): classmachine.ADC(id)
        • id: Pin 객체. Pin 번호는 32-39 까지 사용할 수 있다.
      • Method
        • ADC.atten(attenuation): DC 입력의 감쇠량을 설정한다. 이는 정확도를 희생하면서 가능한 더 넓은 입력 전압 범위(동일한 비트 수가 더 넓은 범위를 나타냄)를 허용한다. 가능한 감쇠 옵션은 다음과 같다.
          • ADC.ATTN_0DB: 0dB 감쇠. 최대 입력 전압 1.0v(Default configuration)
          • ADC.ATTN_2_5DB: 2.5dB 감쇠. 최대 입력 전압 1.34v
          • ADC.ATTN_6DB: 6dB 감쇠. 최대 입력 전압 2.0v
          • ADC.ATTN_11DB: 11dB 감쇠. 최대 입력 전압 3.6v
        • ADC.width(width): ADC 결과 반환되는 비트 수를 설정한다. 가능한 비트 수는 다음과 같습니다.
          • ADC.WIDTH_9BIT: 9 bit data
          • ADC.WIDTH_10BIT: 10 bit data
          • ADC.WIDTH_11BIT: 11 bit data
          • ADC.WIDTH_12BIT: 12 bit data(Default configuration)
      • ADC class 사용 예
        • from machine import ADC

          adc = ADC(Pin(32))   # create ADC object on ADC pin

          adc.atten(ADC.ATTN_11DB)    #voltage range roughly 0.0v - 3.6v

          adc.width(ADC.WIDTH_9BIT)  # set 9 bit return values (returned range 0-511)

          adc.read()    # read value using the newly configured attenuation and width

    • Analog 전압을 출력하는 센서 모듈 예
    • 아래 사진은 자주 자용하는 Analog 전압을 출력하는 센서 모듈의 예 이다. 아래 예 센서는 입력 신호의 크기에 따라 출력 전압이 변동하기 때문에 센서 모듈의 출력 전압을 디지털 값으로 변환하는 A/D 변환기를 사용하여야 한다.

      수위 센서(Water Sensor)

      포토 센서(GL5516)

      온도 센서(LM35DZ)


    • Analog voltage를 출력하는 센서 모듈을 사용하는 구성도
    • Analog voltage를 출력하는 센서 모듈을 사용하는 프로그램 예
      • 윗 예의 센서 모듈은 모두 Analog voltage 신호를 출력하기 때문에 ADC를 사용하여야 한다.

      • ESP32를 사용하여 Analog voltage를 주기적으로 측정하여 출력하는 프로그램 예: sensor_analog_voltage_esp32.py
      • 윗 프로그램을 복사하여 File name "sensor_analog_voltage_esp32.py"로 저장 한다.

      • ESP8266를 사용하여 Analog voltage를 주기적으로 측정하여 출력하는 프로그램 예: sensor_analog_voltage_esp8266.py
      • 윗 프로그램을 복사하여 File name "sensor_analog_voltage_esp8266.py"로 저장 한다.

      • 실험을 위한 준비
        • 개발보드와 센서 모듈 연결
          • 신호선: ESP32인 경우 개발보드 ADC input pin(GPIO36) <-> 센서의 Output pin
            • ESP32인 경우: 개발보드 ADC input pin(GPIO36) <-> 센서의 Output pin
            • ESP8266인 경우: 개발보드 ADC input pin(ADC0) <-> 센서의 Output pin

            포토 센서(GL5516)를 사용하는 경우: 전원(Vdd) <-> 10K 저항 <-> GL5516 <-> GND를 연결한다. 여기서 10K 저항과 GL5516를 연결한 점이 신호 출력(센서의 Output pin에 해당)이다.

          • 전원: 개발보드 VDD(3.3V) <-> 센서 Vdd pin.
          • GND: 개발보드 GND <-> 센서 GND
      • 실험 방법
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 프로그램 파일(sensor_analog_voltage_esp32.py or sensor_analog_voltage_esp8266.py)을 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • 프로그램이 실행되면 센서 출력 전압을 디지털 값으로 변환한 결과가 출력된다.


  • 펄스폭(Pulse width) 출력 모듈
    • 초음파 거리 센서(HC-SR04)
    • 초음파 거리 센서(HC-SR04) 모듈을 사용하는 구성도 예

    • 초음파 거리 센서(HC-SR04) 모듈을 제어하는 프로그램 예
      • 초음파 거리 센서(HC-SR04) 모듈은 초음파를 반사하는 물체까지의 거리에 비례한 Pulse 폭을 출력한다.

      • 초음파 거리 센서(HC-SR04) 모듈을 제어하는 프로그램 예:
      • 윗 프로그램을 File name "sensor_pulse_width_HC_SR04.py"로 저장 한다.
      • 실험을 위한 준비
        • ESP32 개발보드와 센서 모듈 연결
          • ESP32 개발보드 Pulse input pin(GPIO4) <-> 센서의 echo pin
          • ESP32 개발보드 Trigger output pin(GPIO5) <-> 센서의 Trig pin
          • ESP32 개발보드 VDD(3.3V) <-> 센서 Vdd pin(센서에 따라 5V 전원을 사용하는 것도 있음)
          • ESP32 개발보드 GND <-> 센서 GND
      • 실험 방법
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 프로그램 파일 "sensor_pulse_width_HC_SR04.py"를 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • 프로그램이 실행되면 2초 간격으로 초음파 거리 센서와 물체와의 거리가 출력된다. 센서 앞 물체의 거리를 변동시키며 출력 값과 비교한다.


  • Single-Wire 통신을 사용하는 센서
    • 온도/습도 센서(DHT11/DHT22) 모듈
    • DHT11/DHT22 센서 모듈을 사용하는 구성도 예

    • 온도/습도 센서(DHT11/DHT22) 모듈을 제어하는 프로그램 예
      • 온도/습도 센서(DHT11/DHT22) 모듈은 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.

      • 온도/습도 센서(DHT11/DHT22) 모듈을 제어하는 프로그램 예:
      • 윗 프로그램을 File name "sensor_single_wire_comm_DHT11.py"로 저장 한다.
      • 실험을 위한 준비
        • ESP32 개발보드와 센서 모듈 연결
          • ESP32 개발보드 Data input pin(GPIO14) <-> 센서의 data pin
          • Data input line Pull up 저항(1K - 10K): DHT11/DHT22 모듈에 Pull up 저항이 내장된 경우 생략하여도됨.
          • ESP32 개발보드 VDD(3.3V) <-> 센서 Vcc pin
          • ESP32 개발보드 GND <-> 센서 GND
      • 실험 방법
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 프로그램 파일 "sensor_single_wire_comm_DHT11.py"를 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • 프로그램이 실행되면 2초 간격으로 측정된 온도와 습도 값이 출력된다. 센서에 손가락을 대고 있으면 습도가 변동한다. 유사한 방법으로 온도를 변동 시키며 측정 결과와 비교한다.


  • I2C 통신을 사용하는 모듈