KC-TH-280 เป็น Integrated Environment sensor ใช้ BME280 จากค่าย Bosh ที่มีคุณสมบัติที่ดีข้อหนึ่งที่ผมสนใจเป็นพิเศษคือ การมี noise ในข้อมูลต่ำ noise จะถูกตีความว่าเป็นข้อมูลที่ไม่ให้ความหมาย (meaningless data) เปรียบได้กับเวลาเราสนทนากับคู่สนทนาในที่ค่อนข้างเงียบเราจะได้ความหมายมากกว่าการคุยในที่จอแจ ดังนั้นในการประมวลผลข้อมูลที่ได้จากการบันทึกข้อมูลจาก sensor ก็มักจะมีการทำให้ noise ลดลงเสียก่อน แต่หากเราได้ข้อมูลที่มีความเรียบมากมาแล้ว งานก็ง่ายขึ้น (noise data เป็นเรื่องที่เลี่ยงไม่ได้ แต่ทำให้ลดลงได้)
เนื่องจาก KC-TH-280 ใช้ interface แบบ I2C ดังนั้นก่อนใช้งานกับ Raspbian ต้องทำการ enable interface I2C เสียก่อน (ดูขั้นตอนจาก https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial#i2c-on-pi)
การเชื่อม DHT22 กับ Raspberry Pi ดูได้จากหลายแหล่งเช่น http://electronicshobbyists.com/temperature-and-humidity-sensor-dht22-raspberry-pi-interfacing/
สำหรับ GPIO control library ผมเลือกใช้ pigpio เพราะถนัดมือดี ลงตัวเดียวคุยกับ Sensor ได้หลายประเภท
เตรียมการเรื่องรอบข้างเสร็จแล้ว ก็มาเรื่อง code กัน ผมใช้ Python3.5 ที่มากับ Raspbian ครับ
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: Somchai Somphadung
"""
import pigpio
import time
import BME280
import DHT22
import asyncio
pi = pigpio.pi()
dht22 = DHT22.sensor(pi,23) # connect DHT22 to GPIO23
bme280 = BME280.sensor(pi)
start = time.time()
max_count = 600
interval = 30
def tic():
return "at {}".format(time.time()-start)
async def get_bme280():
with open('bme280.txt','wb') as f :
for _ in range(max_count) :
t_b, _, h_b = bme280.read_data()
l = "{},{:.2f},{:.2f}\n".format(time.time(),h_b, t_b)
f.write(l.encode('utf-8'))
await asyncio.sleep(interval)
async def get_dht22():
with open('dht22.txt','wb') as f :
for _ in range(max_count) :
dht22.trigger()
await asyncio.sleep(0.2)
l = "{},{:.2f},{:.2f}\n".format(time.time(), dht22.humidity(), dht22.temperature())
f.write(l.encode('utf-8'))
await asyncio.sleep(interval)
loop = asyncio.get_event_loop()
tasks = [
asyncio.ensure_future(get_bme280()),
asyncio.ensure_future(get_dht22())
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
dht22.cancel()
bme280.cancel()
pi.stop()
ผลที่ได้
ในการทดสอบอีกครั้งเพื่อจะเทียบกับค่าที่อ่านได้จาก Thermometer ชนิดที่ใช้ Alcohol แล้วจะเห็นว่า KC-TH-280 ต่างออกไปประมาณ 2 C และ DHT22 ต่างออกไปประมาณ 1.5 C (อุญหภูมิส่วนที่เพิ่มจาก Thermometer alcohol น่าจะเป็นผลมาจาก self-heating ของตัว sensor )
มาดูค่า Relative Humidity (ปริมาณของไอน้ำที่อยู่ในอากาศขณะนั้นเทียบกับปริมาณไอน้ำสูงสุดที่อากาศสามารถเก็บไว้) กันบ้าง จากรูปจะเห็นได้ว่าในภาพรวมแล้วนอกจากเรื่องการให้ค่าที่ต่างกันค่อนข้างมากราว 10 % ก็น่าจะใช้งานได้เหมือนกัน (ผมไม่มีไฮโกรมิเตอร์ให้เทียบค่า)
ปล. ที่นำมาเทียบกับ DHT 22 ไม่ได้มีวัตถุประสงค์ที่จะบอกว่าอะไรดีกว่าอะไรเพียงแต่ทำให้เห็นความต่างของข้อมูลที่จัดเก็บมาจาก sensor ที่ต่างกันเท่านั้น การจะเลือกใช้ sensor ไหนขึ้นกับดุลพินิจของผู้ใช้เอง สุดท้ายของต้องขอขอบคุณ Knowledge Centric Co.,Ltd. อีกครั้งที่ได้จัดส่งอะไรมาให้ได้ลองใช้งาน นะครับ
Sign up here with your email
ConversionConversion EmoticonEmoticon