感測器規格:
電氣性能
- Detecting Concentration: 300 to 10000 ppm
- Input Voltage: 5 VDC
- Power: 150 mA
- Digital Output Voltage: TTL digital 0 and 1 (0.1 V and 5 V)
- Analog Output Voltage (relatively clean): 0.1 V to 0.3 V
輸入電壓:DC5V 功耗(電流):150mA
DO輸出:TTL數字量0和1(0.1和5V)
AO輸出:0.1-0.3V(相對無污染),最高濃度電壓4V左右
特別提醒:感測器通電後,需要預熱20S左右,測量的資料才穩定,感測器發熱屬於正常現象,因為內部有電熱絲,如果燙手就不正常了。
此感測器使用方式很簡單,電源使用5v,然後讀取AO腳位的ADC值即可,或是讀取DO腳位的狀態判過是否超標(使用上面的可變電阻調整閥值),但如果有讀取ADC值,那就沒必要使用DO了。
接線方式:
Raspberry PI PICO | MQ4 |
ADC (2) | AO |
GND | GND |
5V | VCC |
以下是讀取MQ4並轉為ppm數值的方法。
首先需要計算R0穩定值,由一定筆數的ADC值平均後計算得出,之後再根據文件的斜率資料計算出ppm。
import math from machine import Timer, ADC # 參考來源https://honeststore.com.tw/iot-wifi-example-mq4-gas-detection-notification-line/ # MQ4感測器 mq_adc = ADC(2) # 設定ADC腳位 conversion_factor = 3.3 / 65535 # 電壓比 r0_count = 0 r0_max_count = 100 # r0最大平均筆數 r0_value = 0 r0_timer = Timer() mq_timer = Timer() # 是否進入測量氣體 tag_clac_r0 = False tag_measure_mq = False # 計算r0值 def clac_r0(): global r0_value, r0_count r0_value = r0_value + mq_adc.read_u16() r0_count = r0_count+1 if r0_count >= r0_max_count: v = (r0_value/r0_max_count) * conversion_factor rs_air = ((5.0*10.0) / v) - 10.0 r0_value = rs_air / 4.4 print("R0計算完成= " + str(r0_value)) r0_timer.deinit() # 開始量測 mq_timer.init(mode=Timer.PERIODIC, period=1000, callback=start_measure_mq) # MQ4氣體感測器計算 def measure_mq_sensor(): b = 1.17 # 感測器圖表y軸截距 m = -0.329 # 感測器圖表斜率 adc_value = mq_adc.read_u16() v_current = adc_value * conversion_factor rs_gas = ((5.0*10.0) / v_current) - 10.0 # RS電阻 ratio = rs_gas / r0_value ppm_log = (math.log10(ratio) - b) / m ppm = math.pow(10, ppm_log) # ppm大於2000可警告 print("MQ4 瓦斯濃度= " + str(ppm) + " ppm") def start_clac_r0(t): global tag_clac_r0 tag_clac_r0 = True def start_measure_mq(t): global tag_measure_mq tag_measure_mq = True def main(): global tag_measure_mq, tag_clac_r0 print("感測器準備中,需要10秒") # 計算R0初始值,共100筆10秒 r0_timer.init(mode=Timer.PERIODIC, period=100, callback=start_clac_r0) # 不斷檢查Tag是否被觸發,觸發後才去執行耗時處理,避免程式卡死 while True: if tag_clac_r0: clac_r0() tag_clac_r0 = False if tag_measure_mq: measure_mq_sensor() tag_measure_mq = False # 開始執行 main()
輸出結果:
MQ4 瓦斯濃度= 23.35297 ppm
MQ4 瓦斯濃度= 23.82965 ppm
MQ4 瓦斯濃度= 23.35297 ppm
MQ4 瓦斯濃度= 23.63808 ppm
-END-
發佈留言