ภาพรวมบทเรียน
จากสไลด์บทที่ 5 ผู้เรียนจะได้ฝึกการนำ Arduino ไปเชื่อมต่อกับอุปกรณ์ที่ใช้จริงในงาน IoT โดยเฉพาะการใช้ จอ LCD 1602 พร้อม I2C Interface สำหรับแสดงผล, การใช้ เซ็นเซอร์ Ultrasonic HC-SR04 เพื่อวัดระยะทาง, การใช้ DHT22 เพื่อวัดอุณหภูมิและความชื้น และการใช้ DS3231 RTC Module เพื่อจัดการเวลาในระบบอัตโนมัติ
บทนี้เป็นบทต่อยอดจากบทที่ 4 เพราะไม่ได้เพียงอ่านค่าเซ็นเซอร์ แต่ยังนำข้อมูลมาแสดงผลบนหน้าจอ และใช้เวลาในการควบคุมอุปกรณ์ตามเงื่อนไขต่าง ๆ
Learning Objectives
เมื่อเรียนจบบทนี้ ผู้เรียนควรสามารถเชื่อมต่อ LCD และเซ็นเซอร์กับ Arduino พร้อมเขียนโปรแกรมควบคุมระบบแสดงผลและระบบตั้งเวลาได้
ภาพรวมการเชื่อมโยงอุปกรณ์ในบทที่ 5
5.1 แนะนำอุปกรณ์
ในสไลด์มีการแนะนำอุปกรณ์สำคัญหลายชนิดที่ใช้ประกอบการทดลองและสร้างโครงงาน IoT ในบทนี้ โดยอุปกรณ์ที่ปรากฏมีทั้งอุปกรณ์พื้นฐานและอุปกรณ์เฉพาะสำหรับการแสดงผลหรือการอ่านค่าเซ็นเซอร์
Arduino UNO R3
บอร์ดไมโครคอนโทรลเลอร์หลัก ใช้ควบคุมการทำงานทั้งหมดของวงจร
หลอด LED
ใช้แสดงสถานะการทำงานและใช้ในตัวอย่างระบบตั้งเวลาเปิด-ปิด
ตัวต้านทาน
ใช้จำกัดกระแสไฟหรือช่วยในวงจร pull-up / pull-down ตามชนิดของวงจร
Breadboard
บอร์ดทดลองสำหรับต่อวงจรโดยไม่ต้องบัดกรี
สาย Jumper
ใช้เชื่อมต่ออุปกรณ์ต่าง ๆ ทั้งแบบผู้-ผู้ และผู้-เมีย
Ultrasonic HC-SR04
เซ็นเซอร์วัดระยะทางด้วยคลื่นอัลตราโซนิก
LCD 1602 + I2C
จอแสดงผล 16 คอลัมน์ 2 แถว ใช้ I2C เพื่อลดจำนวนสายในการเชื่อมต่อ
DHT22 / DHT11
เซ็นเซอร์วัดอุณหภูมิและความชื้น สำหรับนำมาแสดงผลบนจอ LCD
DS3231 Module
โมดูลนาฬิกาแบบ Real-Time Clock ใช้เก็บเวลาและวันที่อย่างแม่นยำ
5.2 โปรแกรมวัดระยะทางด้วย Ultrasonic Module HC-SR04
HC-SR04 เป็นเซ็นเซอร์ที่ใช้วัดระยะทางโดยส่งคลื่นเสียงความถี่สูงออกไปแล้วจับเวลาการสะท้อนกลับมา จึงเหมาะกับงานที่ต้องการทราบระยะห่างของวัตถุ เช่น การหลบสิ่งกีดขวางของหุ่นยนต์ ระบบจอดรถอัจฉริยะ หรือเครื่องวัดระดับน้ำ
ภาพประกอบ: หลักการวัดระยะของ HC-SR04
5.3 โปรแกรมแสดงข้อความบนหน้าจอ LCD 1602 พร้อม I2C Interface
สไลด์ส่วนนี้มุ่งเน้นการใช้ LCD 1602 เพื่อแสดงข้อความ โดยอาศัย I2C Interface ซึ่งช่วยลดการใช้ขา GPIO ของ Arduino เมื่อเทียบกับการต่อ LCD แบบปกติ
จอ LCD 1602 มีขนาด 16 คอลัมน์ 2 แถว (16x2) และเมื่อใช้โมดูล I2C จะเชื่อมต่อกับ Arduino เพียง 4 จุดหลัก ได้แก่ GND, VCC, SDA และ SCL
5.3.1 อุปกรณ์ที่ต้องใช้
- Arduino UNO R3 พร้อมสาย USB
- LCD 1602 (Blue Screen) 16x2
- โมดูลจอ LCD พร้อม I2C Interface
- สาย Jumper และ Breadboard (ถ้าจำเป็น)
5.3.3 วิธีการต่ออุปกรณ์
ตามสไลด์ การต่อ LCD 1602 แบบ I2C กับ Arduino UNO R3 มีรายละเอียดดังนี้
| ขาของ LCD I2C | ต่อกับ Arduino UNO R3 |
|---|---|
| GND | GND |
| VCC | 5V |
| SDA | A4 |
| SCL | A5 |
ภาพประกอบการต่อ LCD 1602 แบบ I2C
5.3.5 Code โปรแกรมแสดงข้อความบน LCD
ตัวอย่างโค้ดต่อไปนี้สรุปจากสไลด์เรื่องการแสดงข้อความบนหน้าจอ LCD 1602 พร้อม I2C Interface
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor(2, 0);
lcd.print("IoT");
lcd.setCursor(0, 1);
lcd.print("www.siam2dev.com");
}
void loop() {
}5.4 โปรแกรมแสดงอุณหภูมิ และความชื้นออกทางหน้าจอ LCD 1602
หัวข้อนี้นำเซ็นเซอร์ DHT22 มาเชื่อมต่อกับ Arduino และแสดงค่าที่อ่านได้ออกทางจอ LCD 1602 โดยใช้ I2C Interface ซึ่งช่วยให้มองเห็นผลลัพธ์ได้ชัดเจนกว่าการดูผ่าน Serial Monitor เพียงอย่างเดียว
5.4.1 อุปกรณ์ที่ต้องใช้
- Arduino UNO R3 พร้อมสาย USB
- เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT22
- LCD 1602 (Blue Screen) 16x2
- โมดูลจอ LCD พร้อม I2C Interface
- บอร์ดทดลอง Breadboard
- Resistor ตัวต้านทาน 1 ตัว
- สายไฟ Jumper ผู้-ผู้ และผู้-เมีย
5.4.2 ติดตั้ง Libraries
ก่อนใช้งานโค้ด ต้องติดตั้งไลบรารีสำหรับหน้าจอ LCD และ DHT ให้เรียบร้อย โดยในทางปฏิบัติแนะนำให้ใช้ Library Manager ของ Arduino IDE เพื่อความสะดวก
- LiquidCrystal_I2C สำหรับจอ LCD 1602 แบบ I2C
- DHT sensor library และ Adafruit Unified Sensor สำหรับ DHT22
5.4.3 วิธีการต่ออุปกรณ์
จากสไลด์มีการต่อวงจรดังนี้
| อุปกรณ์ | ขาอุปกรณ์ | ต่อกับ Arduino UNO R3 |
|---|---|---|
| LCD 1602 I2C | GND | GND |
| LCD 1602 I2C | VCC | 5V |
| LCD 1602 I2C | SDA | A4 |
| LCD 1602 I2C | SCL | A5 |
| DHT22 | GND | GND |
| DHT22 | VCC | 5V |
| DHT22 | OUT / DATA | ขา 2 |
ภาพประกอบการต่อ DHT22 + LCD 1602
5.4.5 Code โปรแกรมแสดงอุณหภูมิและความชื้นบน LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
lcd.begin();
lcd.backlight();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Tem: ");
lcd.print(temperature);
lcd.print("C");
delay(500);
}สิ่งที่ควรเข้าใจจากโค้ด
LiquidCrystal_I2C lcd(0x27, 16, 2)กำหนดที่อยู่ I2C และขนาดจอ 16x2dht.readHumidity()และdht.readTemperature()ใช้อ่านค่าจาก DHT22- ใช้
lcd.setCursor()เพื่อกำหนดตำแหน่งก่อนพิมพ์ค่าลงจอ - หากจอไม่แสดงผล อาจเกิดจาก I2C address ไม่ตรง เช่น บางรุ่นอาจใช้ 0x3F แทน 0x27
5.5 โปรแกรมตั้งเวลา เปิด-ปิด หลอด LED
สไลด์ส่วนนี้ประยุกต์ใช้ DS3231 RTC Module เพื่อให้ Arduino รู้วันและเวลาจริง แล้วนำเวลาไปใช้ควบคุมการเปิด-ปิดอุปกรณ์ เช่น หลอด LED ซึ่งต่อยอดไปใช้ได้กับระบบรดน้ำอัตโนมัติ ระบบเปิดไฟหน้าบ้าน หรือระบบบันทึกข้อมูลตามเวลา
5.5.1 อุปกรณ์ที่ต้องใช้
- Arduino UNO R3 พร้อมสาย USB
- DS3231 Module
- LED 1 ดวง
- Resistor 1 ตัว
- สาย Jumper และ Breadboard
5.5.3 ตัวอย่างการใช้งาน DS3231
- นาฬิกาตั้งโต๊ะและระบบแสดงเวลา
- Data Logger สำหรับบันทึกเวลาร่วมกับข้อมูลเซ็นเซอร์
- ระบบเตือนความจำหรือแจ้งเตือน
- ระบบควบคุมอัตโนมัติ เช่น เปิด-ปิดไฟตามเวลา
- ระบบบันทึกเวลาเข้าเรียนหรือเวลาการทำงาน
5.5.4 วิธีการต่ออุปกรณ์
| อุปกรณ์ | ขาอุปกรณ์ | ต่อกับ Arduino UNO R3 |
|---|---|---|
| LED | ขาบวก | ขา 2 (ผ่านตัวต้านทาน) |
| LED | ขาลบ | GND |
| DS3231 | SDA | A4 |
| DS3231 | SCL | A5 |
| DS3231 | VCC | 5V |
| DS3231 | GND | GND |
ภาพประกอบการต่อ DS3231 + LED
5.5.6 Code โปรแกรม RTC
โค้ดต่อไปนี้ประยุกต์แนวคิดจากสไลด์ โดยใช้ RTC ตรวจสอบเวลา แล้วสั่งเปิด-ปิด LED ตามเวลาที่กำหนด ตัวอย่างด้านล่างกำหนดให้เปิดเวลา 08:00 และปิดเวลา 18:00
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
int ledPin1 = 2;
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
pinMode(ledPin1, OUTPUT);
// ใช้เฉพาะครั้งแรกเมื่อต้องการตั้งเวลาให้ RTC
// rtc.adjust(DateTime(__DATE__, __TIME__));
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.println(now.minute(), DEC);
if (now.hour() == 8 && now.minute() == 0) {
digitalWrite(ledPin1, HIGH);
Serial.println("LED ON");
} else if (now.hour() == 18 && now.minute() == 0) {
digitalWrite(ledPin1, LOW);
Serial.println("LED OFF");
}
delay(1000);
}ต้องการพัฒนาระบบ IoT ที่มีหน้าจอและเซ็นเซอร์ใช้งานจริง?
Siam2Dev ช่วยออกแบบระบบเซ็นเซอร์, หน้าจอแสดงผล, Data Logger, Dashboard และระบบอัตโนมัติสำหรับโครงงาน การเรียนการสอน และงานวิจัย
สรุปบทเรียน
บทที่ 5 แสดงให้เห็นว่าการประยุกต์ใช้ Arduino ในงาน IoT ไม่ได้มีแค่การอ่านค่าจากเซ็นเซอร์ แต่ยังสามารถนำข้อมูลไปแสดงผลบน LCD และใช้โมดูลเวลาในการควบคุมอุปกรณ์แบบอัตโนมัติได้ ซึ่งเป็นพื้นฐานสำคัญของระบบ Smart Home, Smart Farm และระบบบันทึกข้อมูลจริง
แบบฝึกหัดท้ายบท
- อธิบายข้อดีของการใช้ LCD 1602 ร่วมกับ I2C Interface เมื่อเทียบกับการต่อแบบปกติ
- เขียนตารางการต่อขาของ LCD 1602 I2C กับ Arduino UNO R3 ให้ครบถ้วน
- เขียนโปรแกรมให้จอ LCD แสดงชื่อผู้เรียนในบรรทัดแรก และแสดงรหัสนักศึกษาในบรรทัดที่สอง
- ออกแบบวงจรแสดงอุณหภูมิและความชื้นจาก DHT22 บน LCD พร้อมวาดภาพการเชื่อมต่อ
- อธิบายหน้าที่ของไลบรารี
LiquidCrystal_I2CและDHT.h - ให้เขียนโปรแกรมเปิด LED เมื่ออุณหภูมิสูงกว่า 30°C และแสดงสถานะบนจอ LCD
- อธิบายบทบาทของ DS3231 ในระบบ IoT และยกตัวอย่างการใช้งาน 3 กรณี
- ให้ปรับโค้ด RTC เพื่อเปิดไฟเวลา 18:30 และปิดไฟเวลา 22:00
- ลองออกแบบโครงงาน “วัดอุณหภูมิและความชื้นทุก ๆ 1 นาที แล้วแสดงบน LCD” พร้อมเขียนแนวทางการทำงาน