2020年12月6日 星期日

類比實作Part5 –負溫度係數熱敏電阻(NTC)感測器

 

類比實作Part5 –負溫度係數熱敏電阻(NTC)感測器

模組簡介

 

KY-013 Analog temperature sensor module
(
參考https://easyeda.com/adrirobot/KY-013-Analog-temperature-sensor-module)

 

電路圖

 

程式列表

 

Blockly

 

 

Python

"""

 ePy_ADC_NTC.py

 # execfile("ePy_ADC_NTC.py")

 

 EPY           NTC(KY-013 Temperature-Sensor module)

 -----------------

 P0            S

 3V3           VCC

 GND           GND

 

"""

 

from machine import KEY  #獲取按鍵KEY

from machine import ADC

from machine import LED

# import needed modules

import math

import utime

 

# initialise variables

BALANCE_RESISTOR   = 10000.0;  # Measured value of on-board divider resistor

AbsoluteZero = 273.15

MAX_ADC = 4095.0

delayTime = 50 # in Sekunden

 

ADCVal = None

ledRgb = None

sensor = None

key_c = None

 

# temperature calculation function

def calcTemp(voltage):

  temperature = math.log(BALANCE_RESISTOR * ((MAX_ADC / voltage - 1)));

  temperature = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * temperature * temperature)) * temperature);

  temperature = temperature - AbsoluteZero;  # convert kelvin to celsius

  return temperature

 

# Start Function

if __name__ == '__main__':

  ledRgb = LED(LED.RGB)

  sensor = ADC(0)     #創建ADC物件

  key_c = KEY(KEY.KEYC)    #創建按鍵C

  temp0=0

  count=0

  ADCValSum=0

 

  while True:

    ADCVal = sensor.read()

    ADCValSum=ADCValSum+ADCVal

    count=count+1

 

    if(count>=16):

      ADCValAvg=ADCValSum>>2

      #read voltage-value and calculate temperature

      temp0 = round(calcTemp(MAX_ADC-ADCValAvg), 1)

      # print to console

      print ("Current temperature is:", temp0, "'C")

 

      if temp0 > 30:

        ledRgb.rgb_write(1,255,0,0)

      elif temp0 < 20:

        ledRgb.rgb_write(1,0,0,255)

      else:

        ledRgb.rgb_write(1,0,255,0)

 

      count=0

      ADCValSum=0

 

    if (key_c.value()) == 0:

      break

 

    utime.sleep_ms(delayTime)

 

  sensor.deinit()

  key_c.deinit()

  ledRgb.off()

 

執行結果

常溫

 

高溫