กลับไปหน้ารวมไฟล์
air-quality-analyzer-045749.md

คุณภาพอากาศที่เราหายใจเข้าไปมีความสำคัญต่อสุขภาพของเรามาก อุปกรณ์นี้จะวิเคราะห์คุณภาพอากาศภายในบ้านของเรา และบันทึกค่าลงใน SD card ด้วยการวิเคราะห์ค่าที่จัดเก็บไว้ เราจะทราบถึงการเปลี่ยนแปลงของพารามิเตอร์ต่างๆ ตลอดช่วงเวลาที่ผ่านมา

ผมจะใช้เซ็นเซอร์วัดอุณหภูมิ ความชื้น และคุณภาพอากาศที่มีราคาถูกพอที่จะนำมาใช้ในโปรเจกต์ประเภทนี้ โดยไม่ลดทอนความแม่นยำมากเกินไป แนวคิดหลักเบื้องหลังโปรเจกต์นี้คือการตรวจสอบว่าอากาศสามารถหายใจได้หรือไม่

เซ็นเซอร์ที่เลือกใช้คือ:

  • DTH11 Temperature and humidity sensor ราคาประมาณ $5.00 (ไม่แม่นยำมากนัก แต่ก็เพียงพอ);
  • CCS811 Air Quality Sensor module ราคาประมาณ $19.95

Platform:

ผมเคยใช้ Arduino Uno มาก่อน และรู้สึกว่ามีข้อจำกัดด้านหน่วยความจำ ดังนั้นผมจึงตัดสินใจใช้บอร์ดอื่นในครั้งนี้ เนื่องจากผมต้องการ SD card สำหรับบันทึกค่า Adafruit Feather M0 Adalogger จึงเป็นตัวเลือกที่สมบูรณ์แบบในราคาที่เหมาะสม ($19.95):

  • ATSAMD21G18 ARM Cortex M0 processor, ความเร็วสัญญาณนาฬิกา 48 MHz / 3.3V logic
  • FLASH 256KB + RAM 32KB
  • มีวงจรชาร์จ lipoly 100mA ในตัวพร้อมไฟ LED แสดงสถานะการชาร์จ
  • ช่องเสียบ MicroSD card
  • น้ำหนักเบา (5.3 กรัม)
  • ขนาดเล็ก (51mm x 23mm x 8mm)

การสร้าง:

ผมเริ่มต้นด้วยการดาวน์โหลด Arduino IDE เวอร์ชันล่าสุดจาก https://www.arduino.cc/en/Main/Software โดยเลือกตัวติดตั้งสำหรับ Windows หลังจากติดตั้งเสร็จสิ้น โปรดอ่านคู่มือผู้ใช้ของ Adafruit Feather M0 Adalogger อย่างละเอียด

เพื่อให้สามารถใช้ Arduino IDE กับบอร์ดนี้ได้ เราจะต้องตั้งค่า IDE ตามที่ ระบุไว้ในคู่มือผู้ใช้ Adafruit Feather M0 Adalogger จะต้องเพิ่ม URL ไปยังตัวเลือก Additional Boards Manager URLs ใหม่ มีขั้นตอนง่ายๆ อื่นๆ ที่จำเป็น ซึ่งทั้งหมดนี้มีอธิบายไว้ในคู่มือที่สามารถดูได้ที่:

เมื่อตั้งค่าทุกอย่างเรียบร้อยแล้ว (อย่าลืมเลือกบอร์ดและพอร์ตที่ถูกต้องใน IDE) เรามาทดสอบง่ายๆ เพื่อตรวจสอบว่าทุกอย่างทำงานหรือไม่ ผมใช้โค้ดนี้:

void setup() {
pinMode(13, OUTPUT);// initialize digital pin 13 as an output.
}
void loop() {
digitalWrite(13, !digitalRead(13)); // flash the LED with inverse value
delay(500); // wait for a half a second
}

หลังจากส่งโค้ดนี้ไปยัง FEATHER M0 ADALOGGER ผมก็ไม่พบข้อผิดพลาดใดๆ และ LED สีแดงบนบอร์ด (ที่เชื่อมต่อกับพอร์ต 13) ก็เริ่มกะพริบ ทุกอย่างทำงานได้ปกติ

การเชื่อมต่อจอแสดงผล:

สิ่งแรกที่ผมเชื่อมต่อเข้ากับบอร์ดคือ OLED display ผมขอแนะนำอย่างยิ่งให้คุณอ่านเอกสารประกอบของจอแสดงผลที่มีอยู่ที่ https://cdn-learn.adafruit.com/downloads/pdf/monochrome-oled-breakouts.pdf

ผมเชื่อมต่อขาของจอแสดงผลเข้ากับบอร์ดประมวลผลด้วยวิธีนี้:

  • จอแสดงผล -> บอร์ด
  • GND เชื่อมต่อกับ ground
  • Vin เชื่อมต่อกับ 3V
  • DATA เชื่อมต่อกับ digital 6
  • CLK เชื่อมต่อกับ digital 10
  • D/C เชื่อมต่อกับ digital 11
  • RST เชื่อมต่อกับ digital 5
  • CS เชื่อมต่อกับ digital 12

ใช้เอกสารประกอบของ OLED Display ติดตั้ง Adafruit SSD1306 และ Adafruit GFX Libraries จากนั้นรีสตาร์ท Arduino IDE

สุดท้ายคุณสามารถรันตัวอย่าง File→Sketchbook →Libraries→ Adafruit_SSD1306→ SSD1306_128x64_spi ได้

ผมเกิดข้อผิดพลาดในการคอมไพล์ โดยแจ้งว่าความสูงของจอแสดงผลไม่ถูกต้อง นี่เป็นเพราะไฟล์ไลบรารี SSD1306.h เป็นแบบทั่วไป และผมต้องแก้ไขมันเพื่อเลือกความสูงที่ถูกต้องของจอแสดงผลของผม (64) ค้นหาบรรทัดที่เกี่ยวข้องและเลือกค่าที่ถูกต้องโดยการคอมเมนต์บรรทัดที่ไม่ถูกต้อง

//   #define SSD1306_128_64
#define SSD1306_128_32
// #define SSD1306_96_16

ผมเปลี่ยนขาเริ่มต้นเนื่องจากมีความขัดแย้งบางอย่าง ดังนั้น ผมจึงต้องเปลี่ยนการกำหนดโค้ดเริ่มต้นในโค้ดตัวอย่างให้ตรงกับขาที่ผมใช้:

#define OLED_MOSI   6
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 5
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

หมายเหตุ: อย่าใช้ pin digital 9 หากคุณวางแผนที่จะใช้การตรวจสอบแรงดันไฟฟ้าของแบตเตอรี่ใน A7. Digital 9 และ A7 ใช้ pin เดียวกัน. ผมพบข้อผิดพลาดนี้ด้วยวิธีที่ยากลำบาก หลังจากหลายชั่วโมงของการอ่านค่า Vbat ที่ผิดพลาดและพฤติกรรมของจอแสดงผลที่ไม่ถูกต้อง.

D9 uses same pin as A7

เมื่อจอแสดงผลทำงานได้อย่างถูกต้อง คุณสามารถดำเนินการต่อในส่วนถัดไป:

การเชื่อมต่อเซ็นเซอร์:

เชื่อมต่อ DHT 11 ตาม แผนภาพ. (อย่า ใช้ pin D13 บนบอร์ดเพื่ออ่านข้อมูล DHT11. Pin D13 มี LED เชื่อมต่อถาวร ซึ่งมีความต้านทานต่ำและไม่เหมาะสำหรับการใช้งานประเภทนี้).

PIN D13 has a LED connected permanently

เราต้องใช้ digital pin ที่ว่างอยู่หนึ่งขา เราได้ยกเว้น D9 เพราะขัดแย้งกับ A7 ที่ใช้สำหรับอ่าน Vbat และ D13 เนื่องจากวงจร LED ผมจะใช้ D19 เพื่อเชื่อมต่อกับ DHT11 pin 2 และอ่านอุณหภูมิและความชื้นผ่านโปรโตคอล one wire ของมัน D19 ถูกทำเครื่องหมายเป็น A5 บนบอร์ด แต่ก็สามารถใช้เป็น Digital 19 ได้เช่นกัน อย่าลืมกำหนด DHTpin ในซอฟต์แวร์:

#define DHTPIN 19
Adalogger Analog pins can also be used as digital

การเชื่อมต่อ CCS811:

  • Vin เชื่อมต่อกับสาย 3.3V,
  • GND เชื่อมต่อกับสาย GND,
  • SDA เชื่อมต่อกับ Adalogger SDA
  • SCL เชื่อมต่อกับ Adalogger SCL
  • /WAKE เชื่อมต่อกับ GND

ผมใช้ไลบรารี Adafruit_CCS811 เวอร์ชัน 1.0.0 และทุกอย่างก็ทำงานได้ดี

SD Card

เพื่อให้สามารถบันทึกค่าต่างๆ ตลอดช่วงเวลา ผมใช้ uSD card ขนาด 512MB เก่าๆ บอร์ด Adalogger นี้ยอดเยี่ยมมากเพราะมีช่องเสียบ uSD Card ในตัว ผมใช้ Arduino library เวอร์ชัน 1.2.2 และ pin D4 เป็น CS pin สำหรับ SD ในรูปถัดไปผมจะแสดงรูปแบบของ d

ข้อมูล Frontmatter ดั้งเดิม

title: "Air Quality Analyzer"
description: "Analyses home air quality and records the values in a SD card."
author: "lmsousa"
category: ""
tags:
  - "air quality"
  - "environmental sensing"
views: 6185
likes: 3
price: 2450
difficulty: "Intermediate"
components:
  - "1x Soldering iron (generic)"
  - "1x ADAFRUIT FEATHER M0 ADALOGGER"
  - "2x Jumper wires (generic)"
  - "1x MONOCHROME 0.96\" 128X64 OLED GRAPHIC DISPLAY"
  - "1x ADAFRUIT CCS811 AIR QUALITY SENSOR BREAKOUT - VOC AND ECO2"
  - "1x DHT11 Temperature & Humidity Sensor (4 pins)"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "44a7aae995bff96c26423097707e71aef2e151c1e3ad02d900fc683f4a8d2806"
encryptedPayload: "U2FsdGVkX1+E1VMG6pOaySRDfJ3JEoCZ8F7qfl0a7eGC59ls0WJamA1witggMmnSz+hwXUm+AWWywOUdFcog6/iYUZ/FtD6upq0pkr1bZpo="
seoDescription: "Build an Air Quality Analyzer to monitor home air quality and log data to an SD card."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/air-quality-analyzer-045749_cover.jpg"
lang: "th"