*** การใช้งานแบบไม่ต้องการเชื่อมต่อสาย USB กับ คอมพิวเตอร์ ให้ใช้ Adapter DC 9V 1A Power Supply เป็นแหล่งจ่ายไฟ เสียบเข้ากับ DC Power Jack ของ บอร์ด Arduino *** ขั้นตอนการทำโปรเจค 1. ต่อใช้งาน จอ LCD กับ Arduino
VIDEO
1.1 ยึดบอร์ด Arduino UNO
1.2 ประกอบ Sensor Shield V 5.0
1.3 เชื่อมต่อสาย LCD
1.4 ดาวน์โหลด Arduino I2C Library สำหรับ LCD
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library 1.5 ติดตั้ง I2C Library สำหรับ LCD
1.5.1 เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino
1.5.2 เปิดโปรแกรม Arduino IDE
1.5.3 ไปที่ Skecth -> Include Library -> Add .ZIP Library...
1.5.4 ไปที่ ไลบรารี Arduino-LiquidCrystal-I2C-library-master.zip ที่เรา ดาวน์โหลด มา -> Open
1.5.5 ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี Arduino-LiquidCrystal-I2C-library-master เพิ่มเข้ามาใน Arduino IDE ของเรา
1.6 อัพโหลดโค้ด
1.6.1 เขียนโค้ดดังนี้
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.begin();
lcd.backlight();
lcd.print("Hello, world!");
}
void loop()
{
}
1.6.2 ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO
1.6.3 ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง ให้เลือกตัวอื่นที่ไม่ใช่ COM1)
ในตัวอย่างเลือกเป็น "COM6"
(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)
1.6.4 กดปุ่ม เพื่ออัพโหลด
1.6.5 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง
1.7 ปรับความสว่างหน้าจอ LCD
2. เชื่อมต่อสาย DHT22
3. เชื่อมต่อสาย Keyestudio Buzzer
4. ติดตั้ง DHT sensor library
4.2 ไปที่ Clone or download -> Download ZIP
4.3 เปิดโปรแกรม Arduino IDE
4.4
ไปที่ Skecth -> Include Library -> Add .ZIP Library...
4.5
ไปที่ ไลบรารี DHT-sensor-library-master ที่เรา ดาวน์โหลด มา -> Open
4.6 ไปที่ Tools -> Manage Libraries...
4.7 ไปที่ช่องค้นหา พิมพ์ DHT (เพื่อค้นหา DHT sensor library )
4.8 เลื่อนเมาส์ไปที่ DHT sensor library แล้ว คลิก Install
4.9 คลิก Close
4.10 ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี DHT sensor library เพิ่มเข้ามาใน Arduino IDE ของเรา
5. ติดตั้ง Adafruit Unified Sensor Library 5.1 ดาวน์โหลด Library
https://github.com/adafruit/Adafruit_Sensor 5.2 ไปที่ Clone or download -> Download ZIP
5.3
ไปที่ Skecth -> Include Library -> Add .ZIP Library...
5.4
ไปที่ ไลบรารี Adafruit_Sensor-master ที่เรา ดาวน์โหลด มา -> Open
5.5 ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี Adafruit Unified Sensor เพิ่มเข้ามาใน Arduino IDE ของเรา
6. ภาพรวมการต่อโปรเจค
7. อัพโหลดโค้ด
/*
Temperature Monitoring With DHT22 & Arduino
For more details visit:
https://miniarduino.blogspot.com/2019/04/dht22.html
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>;
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float temp;
float set_temp;
int buzzer = 8;
void setup()
{
dht.begin();
lcd.begin();
lcd.backlight();
pinMode(buzzer, OUTPUT);
set_temp = 40;
}
void loop()
{
temp = dht.readTemperature();
if (temp >= set_temp) {
lcd.setCursor(0, 0);
lcd.print("TEMP: = " + String(temp) + " C");
lcd.setCursor(0, 1);
lcd.print("SET : = " + String(set_temp) + " C");
buzzer_on();
}
else {
lcd.setCursor(0, 0);
lcd.print("TEMP: = " + String(temp) + " C");
lcd.setCursor(0, 1);
lcd.print("SET : = " + String(set_temp) + " C");
}
delay(1);
}
void buzzer_on()
{ unsigned char i, j;
{ for (i = 0; i < 80; i++)
{ digitalWrite(buzzer, HIGH);
delay(1);//delay1ms
digitalWrite(buzzer, LOW);
delay(1);//ms delay
}
for (i = 0; i < 100; i++)
{
digitalWrite(buzzer, HIGH);
digitalWrite(buzzer, LOW);
delay(2);
}
}
}
8. อธิบายโค้ด
#include <Wire.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ Wire.h เข้ามาร่วมในการประมวลผลด้วย #include <LiquidCrystal_I2C.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ LiquidCrystal_I2C.h เข้ามาร่วมในการประมวลผลด้วย #include <DHT.h>; // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ DHT.h เข้ามาร่วมในการประมวลผลด้วย #define DHTPIN 2 // ประกาศให้พินดิจิตอล 2 เป็นตัวแปรชื่อ DHTPIN #define DHTTYPE DHT22 // ประกาศประเภทการใช้งานเป็นอุปกรณ์ DHT22 DHT dht(DHTPIN, DHTTYPE); // ประกาศ ตัวแปร dht นำเข้าข้อมูลจาก พินดิจิตอล 2 และเป็นอุปกรณ์ DHT22 LiquidCrystal_I2C lcd(0x27, 16, 2); // ตั้งค่า Address ของ จอ LCD เป็น 0x27 และให้แสดงผล แบบ 16 ตัวอักษร 2 บรรทัด float temp; // ประกาศตัวแปรชื่อ temp มีชนิดของข้อมูลคือ float คือข้อมูลที่เป็นเลขทศนิยม float set_temp; // ประกาศตัวแปรชื่อ set_temp มีชนิดของข้อมูลคือ float คือข้อมูลที่เป็นเลขทศนิยม int buzzer = 8; // ประกาศให้พินดิจิตอล 8 เป็นตัวแปรชื่อ buzzer มีชนิดของข้อมูลคือ int คือ เลขจำนวนเต็ม void setup() // ฟังก์ชัน setup จะทำงานครั้งแรก เพียงครั้งเดียวเท่านั้น { dht.begin(); // เริ่มการทํางาน DHT22 lcd.begin(); // เริ่มการทํางาน จอ LCD lcd.backlight(); // ให้จอ LCD แสดงผลเป็นแบบพื้นสีดำ pinMode(buzzer, OUTPUT); // ให้ buzzer พินดิจิตอล 8 เป็นพินโหมด แบบเอาท์พุท set_temp = 40; // ให้ตัวแปร set_temp มีค่าเท่ากับ 40 เพื่อตั้งค่า อุณหภูมิ ที่ต้องการแจ้งเตือน } // สิ้นสุดการทำงานของฟังก์ชัน setup void loop() // ฟังก์ชัน loop จะทำงานซ้ำ วนลูป ไปเรื่อยๆ { temp = dht.readTemperature(); // อ่านค่าอุณภูมิที่วัดได้เก็บไว้ที่ตัวแปร temp if (temp >= set_temp) { // ถ้า temp อุณภูมิ ที่วัดได้มากกว่าหรือเท่ากับ อุณภูมิ ที่ตั้งค่าไว้ใน ตัวอย่างคือ 40 lcd.setCursor(0, 0); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1 lcd.print("TEMP: = " + String(temp) + " C"); // LCD แสดงผลคำว่า TEMP = อุณภูมิที่วัดได้ ตามด้วย หน่วย C lcd.setCursor(0, 1); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 2 lcd.print("SET : = " + String(set_temp) + " C"); // LCD แสดงผลคำว่า SET = อุณภูมิที่ตั้งค่าไว้ ตามด้วย หน่วย C buzzer_on(); // เรียกใช้ ฟังก์ชัน buzzer_on เพื่อกำเหนิดเสียงแจ้งเตือน } else { // อื่นๆเช่น อุณภูมิ ที่วัดได้น้อยกว่า อุณภูมิ ที่ตั้งค่าไว้ใน ตัวอย่างคือ 40 lcd.setCursor(0, 0); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1 lcd.print("TEMP: = " + String(temp) + " C"); // LCD แสดงผลคำว่า TEMP = อุณภูมิที่วัดได้ ตามด้วย หน่วย C lcd.setCursor(0, 1); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1 lcd.print("SET : = " + String(set_temp) + " C"); // LCD แสดงผลคำว่า SET = อุณภูมิที่ตั้งค่าไว้ ตามด้วย หน่วย C } delay(1); // หน่วงเวลา 1 มิลลิวินาที } // สิ้นสุดการทำงานของฟังก์ชัน loop แล้วเริ่มทำงานฟังก์ชัน loop ใหม่ซ้ำไปเรื่อยๆ