กลับไปหน้ารวมไฟล์
temperature-control-neo-pixels-with-arduino-nano-acd1a4.md

การทำวง NeoPixel ให้ทำงานตามอุณหภูมิจากเซ็นเซอร์ DHT11 ด้วย Arduino Nano เป็นโปรเจคที่เจ๋งมาก เพราะมันผสมผสานการวัดอุณหภูมิกับการแสดงผลแสงสีได้อย่างลงตัว มาดูกันว่าน้องจะสร้างระบบแบบนี้ได้ยังไง โปรเจคนี้ที่เราเรียกกันว่า **Temperature Control NeoPixels** จะเปลี่ยนทั้งห้องให้เป็นจอแสดงผลเลยทีเดียว ด้วยการเชื่อมโยงข้อมูลอุณหภูมิกับสี แสงในห้องจะช่วยเตือนน้องได้ทันทีว่าอุณหภูมิเปลี่ยนไปแล้ว!

ของที่ต้องเตรียม

Arduino Nano

เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT11

วง Neo Pixel Ring

สายจัมเปอร์

สั่งทำ PCB สำหรับโปรเจคของน้อง

undefined

ถ้าอยากได้ PCB ราคาดี คุณภาพจัดส่งไว ลองไปศึกษาดูได้ มีหลายบริการออนไลน์ให้เลือกใช้เลย

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

ขั้นตอนที่ 1: ต่อวงจรฮาร์ดแวร์

เริ่มต้นด้วยการต่อเซ็นเซอร์ DHT11 และวง Neo Pixel Ring เข้ากับ Arduino Nano ครับ เซ็นเซอร์ DHT11 ต่อกับขา Digital ไหนของ Arduino Nano ก็ได้ ส่วนวง Neo Pixel Ring ให้ต่อกับขา D2 ของ Arduino Nano

undefined

ขั้นตอนที่ 2: ติดตั้งไลบรารี

น้องจะต้องติดตั้งไลบรารี DHT และไลบรารี Adafruit Neo Pixel ใน Arduino IDE ของน้องก่อน ไลบรารีพวกนี้มีฟังก์ชันจำเป็นสำหรับการสื่อสารกับเซ็นเซอร์ DHT11 และวง Neo Pixel

เริ่มจากไปที่ Sketch > Include Library > Manage Libraries...

undefined

ใน Library Manager จะมีช่องค้นหา พิมพ์ “DHT sensor library” ลงไปในช่องนั้น

undefined

ในผลการค้นหา หาไลบรารีชื่อ “DHT sensor library” โดย Adafruit คลิกที่มัน แล้วกดปุ่ม “Install”

แค่นี้แหละ! น้องติดตั้งไลบรารีสำหรับเซ็นเซอร์ DHT11 ใน Arduino IDE สำเร็จแล้ว ไลบรารีนี้ก็พร้อมให้เรียกใช้ในสเก็ตช์ของน้องแล้วล่ะ

ขั้นตอนที่ 3: เขียนโปรแกรมให้ Arduino

ขั้นต่อไปคือเขียนโปรแกรมให้ Arduino Nano โปรแกรมควรอ่านค่าอุณหภูมิจากเซ็นเซอร์ DHT11 และเปลี่ยนสีของวง Neo Pixel Ring ตามอุณหภูมินั้น

ตัวอย่างเช่น น้องสามารถตั้งโปรแกรมให้วง Neo Pixel แสดงสีน้ำเงินเมื่ออุณหภูมิต่ำกว่าค่าที่กำหนด

undefined

แสดงสีเขียวเมื่ออุณหภูมิอยู่ในช่วงที่สบายๆ

undefined

และแสดงสีแดงเมื่ออุณหภูมิสูงเกินค่าที่กำหนด งานนี้จัดไปวัยรุ่น! สู้งานนะน้อง ห้ามช็อตนะตัวนี้

undefined

รายละเอียดเทคนิคแบบจัดเต็ม

แม้ว่า DHT11 จะเป็นเซ็นเซอร์ดิจิทัลแบบง่ายๆ แต่การใช้งานขั้นสูงกว่านี้สามารถใช้อุปกรณ์อย่าง **NTC 10K Thermistor (เทอร์มิสเตอร์)** เพื่อให้ได้ค่าตอบสนองแบบอนาล็อกที่เร็วกว่าได้ จุดหลักของมันคือการแปลงค่าตัวเลขอุณหภูมิให้เป็นสีที่แสดงผลออกมา

การแปลงข้อมูลตัวเลขเป็นสีแบบ HSV: แทนที่จะใช้ค่า RGB ตรงๆ วิธีที่สวยงามและแม่นยำกว่าคือการใช้สเปกตรัมสี HSV (Hue, Saturation, Value) น้องต้องกำหนดพารามิเตอร์การทำงาน เช่น 15°C อาจตั้งให้เป็นสีน้ำเงินเย็นจัด (Pure Cold Blue) และ 32°C อาจตั้งให้เป็นสีแดงร้อนระอุ (Searing Red) โดยใช้ฟังก์ชัน `map()` ในการแปลงค่าอุณหภูมิที่อ่านได้ให้เป็นค่า Hue (สี) ในไลบรารีอย่าง FastLED นั้น สีน้ำเงินมักอยู่ที่ Hue 160 และสีแดงอยู่ที่ Hue 0 ดังนั้นอุณหภูมิห้องประมาณ 23°C ก็จะถูกแมปให้เป็นสีเขียวสบายตา (Hue ~80) จากนั้น Arduino ก็จะส่งสีนี้ไปยัง LED ทั้งหมดด้วยคำสั่งอย่าง `fill_solid()` ได้เลย ง่ายมั้ยล่ะ!

ข้อควรคิดสำหรับการติดตั้งในสเกลใหญ่: สำหรับโปรเจคใหญ่ๆ ที่ใช้แถบ LED แบบ WS2812B NeoPixel การจัดการไฟเลี้ยงเป็นเรื่องสำคัญมาก ต้องใช้แหล่งจ่ายไฟ 5V ขนาดใหญ่ เพราะกระแสที่ใช้เมื่อเปิด LED ทั้งแถบเต็มที่อาจเกิน 10+ แอมป์ได้ง่ายๆ ห้ามจ่ายไฟให้แถบ NeoPixel ยาวๆ โดยตรงจากขา 5V ของ Arduino Nano เป็นอันขาดนะตัวนี้! มันจะทำให้เรกูเลเตอร์บนบอร์ดทำงานหนักเกินไปและอาจพังได้ สู้งานนะน้อง

ขั้นตอนที่ 4: ทดสอบระบบ

หลังจากอัพโหลดโค้ดลง Arduino Nano แล้ว ก็ถึงเวลาทดสอบระบบแล้วว่ะ จ่ายไฟให้ Arduino แล้วสังเกตสีของ Neo Pixel ring ดู ลองเปลี่ยนอุณหภูมิรอบๆ เซ็นเซอร์ DHT11 ดู (เช่น เป่าลมร้อนหรือลมเย็นใส่เซ็นเซอร์) แล้วดูว่าสีของ Neo Pixel ring เปลี่ยนไปตามนั้นหรือเปล่า อย่าลืมดูค่าที่แสดงบน Serial Monitor ด้วยล่ะ

undefined
undefined

#include <Adafruit_NeoPixel.h>

#include <Adafruit_Sensor.h>

#include <DHT.h>

#include <DHT_U.h>

#define DHTTYPE DHT11 // DHT 11

#define DHTPIN 3

DHT_Unified dht(DHTPIN, DHTTYPE);

#define PIN 2 // Neo

Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

Serial.begin(115200);

dht.begin();

sensor_t sensor;

strip.begin();

strip.setBrightness(100);

strip.show();

}

void loop() {

sensors_event_t event;

dht.temperature().getEvent(&event);

Serial.print(F("Temperature: "));

float temp1 = event.temperature;

Serial.print(temp1);

Serial.println(F("°C"));


dht.humidity().getEvent(&event);

Serial.print(F("Humidity: "));

float hum1 = event.relative_humidity;

Serial.print(hum1);

Serial.println(F("%"));

if (temp1 >= 28 && temp1 < 31) {

strip.clear(); // Set all pixel colors to 'off'

for (int i = 0; i < 12; i++) { // For each pixel...

strip.setPixelColor(i, strip.Color(0, 150, 0));

strip.show();

}

}

else if (temp1 < 28) {

strip.clear();

for (int i = 0; i < 12; i++) { // For each pixel...

strip.setPixelColor(i, strip.Color(0, 0, 150));

strip.show();

}

}

else {

strip.clear();

for (int i = 0; i < 12; i++) { // For each pixel...

strip.setPixelColor(i, strip.Color(150, 0, 0));

strip.show();

}

}

}

สรุปแล้วน้อง

การทำวง Neo Pixel ควบคุมด้วย DHT11 กับ Arduino Nano นี่มันโปรเจคที่ทั้งสนุกและได้ความรู้เลยนะตัวดี มันเอาการวัดอุณหภูมิกับไฟสวยๆ มาผสมกันสุดๆ ด้วยระบบนี้ น้องจะสามารถเช็คอุณหภูมิในห้องได้จากสีไฟเลยว่าเดี๋ยวนี้ร้อนจัดหรือหนาวสั่น อยู่ในโซนสบายๆ รึเปล่า โปรเจคนี้สอนแก่นสำคัญเลยคือการแปลงข้อมูลจากเซนเซอร์ให้เป็นภาพที่เข้าใจง่ายๆ นี่แหละพื้นฐานที่เอาไปต่อยอดได้อีกเยอะ ไม่ว่าจะเพิ่มเซนเซอร์แบบอื่นหรือเล่นกับสีแบบขั้นสูงเพื่อทำ Ambient Display สุดเท่ในห้องก็ยังได้ เอาเลยวัยรุ่น!

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

apps:
  - "1x Arduino IDE"
author: "cetech11"
category: "Lights & LEDs"
components:
  - "1x Arduino Nano R3"
  - "1x DHT11 Temperature & Humidity Sensor (4 pins)"
  - "1x Adafruit NeoPixel Digital RGB LED Strip - Black 60 LED - BLACK PRODUCT ID: 1461"
description: "มาลุยกัน! โปรเจคนี้จะพาน้องๆ สร้างระบบไฟสุดตึงด้วย Arduino Nano ที่ใช้เซนเซอร์ DHT11 วัดอุณหภูมิมาควบคุมสีแสง Neo Pixel ให้เปลี่ยนไปตามค่าที่ตั้งไว้ วัยรุ่นสายช่างต้องจัดไป!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18AmAEZGV+OMtdjtXY80WIamH+3q5BcduHeCvzVAz3SJX1A04aNcz96P5fJ49lG4GunG3Kp7sa/3LrcWa8F/aaQYk9wZcGpKSM="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/temperature-control-neo-pixels-with-arduino-nano-acd1a4_cover.png"
lang: "en"
likes: 0
passwordHash: "9e5f7101cf6ab0d259275625f07bf1145f67d439847e47d589e6fe76562427ab"
price: 699
seoDescription: "Build a DHT11 controlled Neo Pixels lighting system with Arduino Nano to monitor and react to Temperature changes."
tags:
  - "Lights"
  - "Environmental Sensing"
  - "Embedded"
title: "ควบคุมแสง Neo Pixel ด้วย Arduino Nano แบบอิงอุณหภูมิ งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 1758