กลับไปหน้ารวมไฟล์
remote-controlled-fan-147ad7.md

เหมือนหลายๆ คนแหละ พี่ก็นอนกับเสียงพัดลมสบายใจดี แต่บ่อยครั้งทีเดียวที่พี่นอนลงเตียงแล้วดันลืมเปิดพัดลมซะงั้น! เลยต้องมานั่งคิดวนไปวนมาว่า "จะลุกไปเปิดดีมั้ยวะ?" ฮึบ! เลยคิดว่าไหนๆ ก็มีเวลามีอะไหล่แล้ว ทำไมไม่ทำพัดลมควบคุมด้วย Arduino ซะเลยล่ะ โปรเจคนี้เล่นกับไฟแรงสูงนะน้อง! (ระวังตัวด้วย!!) หลักการคือใช้ตัวรับสัญญาณอินฟราเรด (IR Receiver) กับรีเลย์มาควบคุมความเร็วพัดลมนั่นเอง มาดูคลิปประกอบกันเลยดีกว่า!

สั่งงานด้วยอินฟราเรด: พัดลมรีโมทคอนโทรล

พัดลมรีโมทคอนโทรล เนี่ยแหละ ที่จะเปลี่ยนของบ้านๆ ให้กลายเป็นสมาร์ทดีไวซ์! โดยใช้เทคโนโลยีอินฟราเรด (IR) อันเดียวกับที่รีโมททีวีใช้มาตั้งแต่ยุค 80s นั่นแหละ เราจะสร้างตัวรับสัญญาณขึ้นมาเองเพื่อสั่งงานมอเตอร์จากอีกฝั่งห้องได้สบายๆ

ถอดรหัสโปรโตคอลอินฟราเรด

ในอากาศเนี่ยมีสัญญาณรบกวนจากแสงอาทิตย์กับหลอดไฟเต็มไปหมด รีโมททั่วไปเลยใช้การมอดูเลตที่ 38kHz เพื่อให้สัญญาณของมันโดดเด่นออกมา

  1. ฮาร์ดแวร์: ไดโอดรับสัญญาณอินฟราเรด (IR Receiver Diode - TSOP38238) จะทำหน้าที่กรองคลื่นพาห์ 38kHz ออก แล้วส่งข้อมูลไบนารีดิบๆ ไปให้ Arduino
  2. รหัส Hex: ลองชี้รีโมททีวี Sony เฒ่าๆ ของคุณไปที่ไดโอด แล้วกดปุ่ม "Volume Up" ดู ไลบรารี IRremote.h จะถอดรหัสพัลส์ที่มองไม่เห็นนั้นออกมาเป็นสตริงเลขฐานสิบหกเฉพาะตัว เช่น 0xFFA25D
  3. ลอจิกในซอฟต์แวร์: เราใช้คำสั่ง switch/case:
    • case 0xFFA25D: ให้สั่ง analogWrite(fanPin, 128); (ความเร็วปานกลาง)
    • case 0xFFE01F (ปุ่ม Mute): ให้สั่ง digitalWrite(fanPin, LOW); (ปิด)

จัดการกับกระแสสูง (เรื่องของรีเลย์/MOSFET)

มอเตอร์พัดลมกินกระแสประมาณ 1 ถึง 3 แอมป์ แต่พินของ Arduino จ่ายได้แค่ 0.04 แอมป์เอง ถ้าคุณขับพัดลม DC ขนาดเล็ก เช่น พัดลมคอม 12V คุณต้องใช้ ทรานซิสเตอร์กำลังสูงอย่าง TIP120 หรือ IRLZ44N ทำหน้าที่เป็นวาล์วเปิดปิดดิจิทัล แต่ถ้าคุณจะไปแฮกพัดลมตัวใหญ่ 110V/220V AC แบบส่ายหัวในห้องล่ะก็ คุณต้องใช้โมดูลรีเลย์ 5V เพื่อสวิตช์ไฟบ้านอย่างปลอดภัย! อย่าลืมว่าอันตรายนะตัวนี้

อะไหล่ที่ต้องใช้

  • Arduino Uno/Nano: ตัวถอดรหัสหลัก
  • ไดโอดรับสัญญาณอินฟราเรด (1838 หรือ TSOP38238)
  • รีโมททีวี/DVD เก่าๆ สักอัน
  • พัดลม DC + MOSFET (ปลอดภัย) หรือ พัดลม AC + Solid State Relay (อันตราย!).

ขั้นตอนที่ 1: กำหนดปุ่ม

หาว่ารีโมทของคุณส่งรหัสอะไรเวลากดปุ่มไหน รีโมทแต่ละยี่ห้อจะมีรหัสเฉพาะของมันสำหรับแต่ละปุ่ม ตัวอย่างเช่น เวลาคุณกดปุ่มลดเสียง รีโมทจะส่งรหัสหนึ่งไปที่ทีวี แล้วทีวีก็จะประมวลผลรหัสนั้นเพื่อลดเสียงลง

#include <IRremote.h>
int RECV_PIN = 12; // the pin where you connect the output pin of IR sensor (CHANGE Depending on your Arduino)   
IRrecv irrecv(RECV_PIN);     
decode_results results;     
void setup()     
{     
Serial.begin(9600);     
irrecv.enableIRIn();     
{     
void loop()     
{     
if (irrecv.decode(&results))   
{     
int results.value = results;   
Serial.println(" ");     
Serial.print("Code: ");     
Serial.println(results.value);    
Serial.println(" ");     
irrecv.resume();     
}     

เราใช้โค้ดด้านบนเพื่อหาว่าแต่ละปุ่มส่งรหัสอะไรออกมาในรูปแบบเลขฐานสิบ (Decimal) ผ่าน Serial Monitor เก็บค่าเหล่านี้ให้ดีนะ! พี่แนะนำให้วางแผนล่วงหน้าว่าจะให้ปุ่มไหนทำอะไร แล้วทำตารางจับคู่ปุ่มกับรหัส ID ของมันไว้เลย สู้งานนะน้อง!

STEP 2: วัสดุอุปกรณ์

จัดของให้ครบก่อนเริ่มงานเลยน้อง!

พอจัดของครบแล้ว อย่าลืมว่าเรากำลังจะเล่นกับไฟแรงสูงนะ ระวังตัวให้ดี ห้ามช็อตนะตัวนี้!

STEP 3: หารหัสสายไฟของพัดลม

ก่อนอื่นต้องเข้าใจการทำงานของพัดลมก่อน:

พัดลมไฟฟ้ามีมอเตอร์ที่ใช้ไฟฟ้าในการทำงาน และเชื่อมต่อกับใบพัดผ่านเพลา มอเตอร์จะขับเพลานี้ให้หมุน ทำให้ใบพัดหมุนด้วยความเร็วต่างๆ ตามที่เราตั้งไว้ จำนวนใบพัดและรอบการหมุนของมอเตอร์ (RPM) ก็แตกต่างกันไปตามรุ่นของพัดลม

พัดลมแต่ละรุ่นมีรหัสสีสายไฟไม่เหมือนกันนะ ตัวอย่างเช่น พัดลมของพี่มีสายไฟ 4 สี คือ สีน้ำเงิน, แดง, ส้ม และเทา แต่ละสีทำหน้าที่ต่างกัน สำหรับของพี่คือ:

  • สายสีน้ำเงิน เป็นสายร่วม (Common / Neutral)
  • สายสีแดง เป็นความเร็ว 3 (ต่อกับไฟเลี้ยง / Live)
  • สายสีส้ม เป็นความเร็ว 2 (ต่อกับไฟเลี้ยง / Live)
  • สายสีเทา เป็นความเร็ว 1 (ต่อกับไฟเลี้ยง / Live)

ดูภาพประกอบได้ที่นี่:

Wire codes

หมายเหตุ: พัดลมน้องอาจจะมีสายเพิ่มมาอีกเส้นสำหรับมอเตอร์ส่ายอัตโนมัติ (Automatic Oscillation Motor) ด้วยนะ

STEP 4: การเดินสายไฟ

พอรู้รหัสสีสายไฟของพัดลมแล้ว ก็เริ่มต่อวงจรไฟฟ้าของพัดลมได้เลย ให้นำสายความเร็วของพัดลมไปต่อเข้ากับขา NO ของรีเลย์ (Relay) ตามที่เห็นในวิดีโอ ส่วนขา COM ของรีเลย์ทุกตัวให้ต่อรวมกันแล้วไปต่อกับสายไฟเลี้ยง (Live Wire)

STEP 5: วงจรอิเล็กทรอนิกส์

ต่อสายความเร็วของพัดลมเข้ากับรีเลย์ครบแล้ว ต่อไปก็มาถึงส่วนของการต่อสายกับ Arduino กัน! ต่อสายตาม Schematic ที่ให้ไว้ด้านล่างนี้เลย:

NOTE: the LCD module is optional, if you wish to not use the LCD, do not attach the potentiometer as this is no use

STEP 6: เขียนโค้ด!!

ต่อวงจรครบทุกอย่างแล้วใช่ไหม? งั้นมาเขียนโค้ดกันต่อเลย!

โค้ดอยู่ตรงนี้:

#include <LiquidCrystal.h>
#include <IRremote.h>
int RECV_PIN = 12;                 // Pin no. on Arduino (Change depending on your Arduino)
int Speed1 = 8;                    // Pin no. on Arduino (Change depending on your Arduino)
int Speed2 = 9;                    // Pin no. on Arduino (Change depending on your Arduino)
int Speed3 = 10;                    // Pin no. on Arduino (Change depending on your Arduino)
int OSC = 11;                       // Pin no. on Arduino (Change depending on your Arduino)
int relay[] = {0,0,0,0,0};         // no. of relays present / the state of the relay
const int rs = 7, en = 6, d4 = 2, d5 = 3, d6 = 4, d7 = 5;   // Pin no. on Arduino (Change depending on your Arduino)
 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

โค้ดส่วนบนนี้เป็นการประกาศไลบรารี (Library) ที่จำเป็นต้องใช้ในโปรแกรมทั้งหมด ซึ่งไลบรารีเหล่านี้สามารถหาและติดตั้งได้ผ่าน Library Manager ใน Arduino IDE ตามที่แสดงในวิดีโอด้านล่าง:

ส่วนถัดมาของโค้ดเป็นการประกาศขา (Pin) ต่างๆ ที่ใช้บน Arduino

#define speed1 ________             // button code for speed no.1  (CHANGE Depending on your Button Code)

#define speed2 ________ // รหัสปุ่มสำหรับความเร็วที่ 2 (เปลี่ยนตามรหัสปุ่มของแก) #define speed3 ________ // รหัสปุ่มสำหรับความเร็วที่ 3 (เปลี่ยนตามรหัสปุ่มของแก) #define power ________ // รหัสปุ่มสำหรับเปิด/ปิด (เปลี่ยนตามรหัสปุ่มของแก) #define Osc ________ // รหัสปุ่มสำหรับการแกว่ง (เปลี่ยนตามรหัสปุ่มของแก) IRrecv irrecv(RECV_PIN); decode_results results;


ส่วนต่อไปนี้คือการกำหนดรหัสปุ่มทั้งหมดที่เราหามาก่อนหน้านี้ เปลี่ยนขีดๆนั่นด้วยรหัสของแกเลย!

เพื่อให้รีเลย์ทำงาน เราต้องใช้คำสั่ง `switch` และ `case`:

```cpp
 if (irrecv.decode(&results)) {
   unsigned int value = results.value;
     switch(value) {
       case speed1:
         lcd.print("");             // ล้างหน้าจอ LCD
         lcd.setCursor(1, 1);       // ตั้งตำแหน่งเคอร์เซอร์
         lcd.print("# 1");           // แสดงผลความเร็ว 1
           if(relay[1] == 0) {
              digitalWrite(Speed1, HIGH);    // ตั้งค่าความเร็วเป็น 1
              digitalWrite(Speed2, LOW);     // ตรวจสอบให้แน่ใจว่าความเร็วอื่นๆ ปิดอยู่ เพื่อป้องกันไม่ให้มีแรงดันหลายตัวเข้าพัดลม
              digitalWrite(Speed3, LOW);     // ตรวจสอบให้แน่ใจว่าความเร็วอื่นๆ ปิดอยู่ เพื่อป้องกันไม่ให้มีแรงดันหลายตัวเข้าพัดลม
              relay[1] == 1;                 // เป็นตัวบ่งชี้สำหรับโปรแกรมว่าตอนนี้ความเร็ว 1 กำลังเปิดอยู่
}

จัดไปวัยรุ่น! โชคดีกับโปรเจคนะน้อง และระวังเรื่องไฟบ้านให้ดี ห้ามช็อตนะตัวนี้!

ผลงานสุดท้าย:

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

apps:
  - "1x Arduino IDE"
author: "fanele24"
category: "Home & Automation"
components:
  - "1x Fan"
  - "1x JustBoom IR Remote"
  - "1x Jumper wires (generic)"
  - "1x Multitool, Screwdriver"
  - "1x Tape, Electrical"
  - "1x 9V 1A Switching Wall Power Supply"
  - "1x IR receiver (generic)"
  - "1x Alphanumeric LCD, 16 x 2"
  - "1x Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires"
  - "1x Arduino UNO"
  - "1x Resistor 220 ohm"
  - "1x Rotary potentiometer (generic)"
description: "เปลี่ยนพัดลมบ้านให้เป็นของเทพๆ ด้วย Arduino กับรีโมท IR! ควบคุมเปิด-ปิด เปลี่ยนความเร็วแบบจัดไป ไม่ต้องลุกจากที่นอนเลย วัยรุ่นสายช่างต้องลอง ตึงๆ!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX19iB73Ngsx1xnHhR5y8KgCVUKutx394F2ekrlswSYcGQlyk+gYJkXoNvQtfDSmLpQ8Uo2xLOdkDwkoHjMZO1aiClTQxlE+5290="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/remote-controlled-fan-147ad7_cover.jpg"
lang: "en"
likes: 4
passwordHash: "95b1ca651746cd80ab284b0dcae1f06b099179ab903872c38d7d55ee4c54e534"
price: 299
seoDescription: "Control a standard AC fan using Arduino and an IR remote. Easy DIY home automation project."
tags:
  - "smart fan"
title: "พัดลมสั่งงานจากไกล งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/WlTY1FoTfso"
  - "https://www.youtube.com/embed/NdC49zP7qu8"
  - "https://www.youtube.com/embed/MzoKJzEoX4Q"
  - "https://www.youtube.com/embed/10SL1EiW0lo"
  - "https://www.youtube.com/embed/mLQLubK1ATI"
views: 16430