5/4/62

วัดระยะทาง และ หรี่ไฟ LED อัตโนมัติ ด้วย SRF05

มินิโปรเจค Arduino วัดระยะทาง และ หรี่ไฟ LED อัตโนมัติ ด้วย SRF05





เป้าหมายและหลักการทำงานของโปรเจค





ให้เซ็นเซอร์วัดระยะทาง SRF05 
(input) อ่านค่าระยะทางที่ห่างจากวัตถุหน่วยเป็น เซนติเมตร ส่งให้ บอร์ด Arduino สั่งให้แสดงค่าที่วัดได้ ที่บรรทัดที่ 1 ของหน้าจอ LCD Display จากนั้น ตรวจสอบเอาระยะทางที่ต่ำกว่า 101 เซนติเมตร แล้วแปลงค่าจากระยะทาง เป็น ค่า PWM ค่าอยู่ระหว่าง 0- 255 โดยให้แสดงที่บรรทัดที่ 2 ของหน้าจอ LCD Display

โดยเมื่อได้ค่า PWM มาแล้ว  Arduino จะไปสั่งงาน (output) คือ ให้ Pin 5 ส่งค่า 
PWM ออกไปที่ ทรานซิสเตอร์ BD139 เพื่อให้ทรานซิสเตอร์ควบคุมการจ่ายไฟ จากรางถ่าน 12V ไปยัง LED 12V ที่มีคุณสมบัติหรี่ไฟได้ โดย LED จะสว่างตามค่า PWM ที่รับเข้ามา โดย PWM 255 จะสว่างที่สุด และ PWM 0 ก็จะสว่างน้อยที่สุด


ประโยชน์และการนำโปรเจคไปพัฒนาต่อ


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

การควบคุม pulse width modulation (PWM) เป็นการควบคุมแบบ Digital ที่มีการนำมาใช้กันมาก โดยส่วนมากเพื่อเป็นการประหยัดพลังงาน เช่น... ช่วยในการประหยัดพลังงานไฟฟ้า โดยเมื่อวัตถุหรือสิ่งของไม่มีก็จะไม่ใช้
พลังงานไฟฟ้าเลย และเมื่ออยู่ไกลจะใช้พลังงานน้อยที่สุด แต่ถ้าวัตถุหรือสิ่งของเข้ามาใกล้ จะค่อยๆใช้พลังงานไฟฟ้าเพิ่มขึ้นหรือสว่างมากขึ้น (สามารถใช้ทำงานกับคนได้ ในกรณี ที่ใส่เสื้อที่มีแผ่นสะท้อนแสงกลับมาได้)

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






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


รู้จัก เซ็นเซอร์วัดระยะทาง SRF05

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



การทำงานเริ่มจากเมื่อทริกสัญญาณเข้าที่ขา Trig ให้เป็น HIGH จะทำให้โมดูลเริ่มวัดระยะ แล้วส่งค่าที่วัดได้ออกมาเป็นความกว้างพัลส์ที่ขา Echo นำค่าเวลาความกว้างพัลส์ที่ส่งมาจากขา Echo เมื่อนำมาหาร 29 / 2 จะได้ค่าระยะออกมาเป็นเซ็นติเมตร โดยสามารถวัดระยะได้ตั้งแต่ 2 เซ็นติเมตร ไปจนถึง 4.5 เมตร ความผิดพลาดขึ้นอยู่กับระยะทางที่วัด


รู้จัก PWM(Pulse Width Modulation)

PWM คือเทคนิดการส่งสัญญาณแบบสวิต หรือ ส่งค่าดิจิตอล 0-1 โดยให้สัญญาณความถี่คงที่ การควบคุมระยะเวลาสัญญาณสูงและสัญญาณต่ำ ที่ต่างกัน ก็จะทำให้ค่าแรงดันเฉลี่ยของสัญญาณสวิต ต่างกันด้วย







สำหรับโมดุล PWM ของ Arduino มีความละเอียด 8 bit หรือ ปรับได้ 255 ระดับ ดังนั้นค่าสัญญาณ 0 โวลต์ถึง 5 โวลต์ จะถูกแสดงเป็นสัญญาณแบบดิจิตอล จะได้ 0 ถึง 255 ซึ่งเราสามารถเทียบสัดส่วนคำนวนจากเลขจริง เป็น เลขทางดิจิตอลได้




อุปกรณ์ที่ใช้ในโปรเจค



5. HY-SRF05 SRF05 Ultrasonic Distance Sensor 

6. Mini Breadboard 170 holes

7. Jumper (F2M) cable wire 20cm Female to Male

8. SMD LED Lighting G4 AC DC 12V 6W

9. BD139 NPN Power Transistor

10. รีซิสเตอร์ 10K Ohm 1/4W 5%

11. รางถ่าน AA 8 ก้อน 12 โวลต์

12. แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno

13. สายไฟแดงดำ ขนาด 22AWG



ขั้นตอนการทำโปรเจค

1. ต่อใช้งาน จอ LCD กับ Arduino




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. เชื่อมต่อ SRF05









3. เชื่อมต่ออุปกรณ์ที่เหลือ ลงใน Mini Breadboard







4. ตัดแจ๊กขั้วถ่านออก แล้วเชื่อมต่อ แจ๊ก เข้ากับ รางถ่าน แล้วจึงเสียบเข้า บอร์ด Arduino เพื่อเป็นไฟเลี้ยงบอร์ด



5. ภาพรวมการต่อโปรเจค





6. อัพโหลดโค้ด


/*
    Automatic distance measurement and dimmer with SRF05
    For more details visit:
    https://miniarduino.blogspot.com/2019/04/srf05.html

*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const unsigned int TRIG_PIN = 7;
const unsigned int ECHO_PIN = 6;
const unsigned int LED_PIN = 5;

void setup() {

  lcd.begin();
  lcd.backlight();
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

}


void loop() {

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  const unsigned long duration = pulseIn(ECHO_PIN, HIGH);

  int distance_cm = duration / 29 / 2;
  int PWM;

  lcd.setCursor(0, 0);
  lcd.print("Distance = " + String(distance_cm) + " cm  ");


  if (distance_cm < 101) {
    PWM = map(distance_cm, 0, 100, 0, 255);
    lcd.setCursor(5, 1);
    lcd.print("PWM = " + String(255 - PWM) + "    ");
    analogWrite(LED_PIN, 255 - PWM);
  }
  else {

    lcd.setCursor(5, 1);
    PWM = 255;
    lcd.print("PWM = " + String(255 - PWM) + "    ");
    analogWrite(LED_PIN, 255 - PWM);
  }

  delay(200);

}


7. อธิบายโค้ด


#include <Wire.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ Wire.h เข้ามาร่วมในการประมวลผลด้วย

#include <LiquidCrystal_I2C.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ LiquidCrystal_I2C.h เข้ามาร่วมในการประมวลผลด้วย

LiquidCrystal_I2C lcd(0x27, 16, 2); // ตั้งค่า Address ของ จอ LCD เป็น 0x27 และให้แสดงผล แบบ 16 ตัวอักษร 2 บรรทัด

const unsigned int TRIG_PIN = 7; // ประกาศให้พินดิจิตอล 7 เป็นตัวแปรชื่อ TRIG_PIN มีชนิดของข้อมูลคือ const คือ ค่าคงที่ ,  unsigned int คือ เลขจำนวนเต็ม +

const unsigned int ECHO_PIN = 6; // ประกาศให้พินดิจิตอล 6 เป็นตัวแปรชื่อ ECHO_PIN มีชนิดของข้อมูลคือ const คือ ค่าคงที่ ,  unsigned int คือ เลขจำนวนเต็ม +

const unsigned int LED_PIN = 5; // ประกาศให้พินดิจิตอล 5 เป็นตัวแปรชื่อ LED_PIN  มีชนิดของข้อมูลคือ const คือ ค่าคงที่ ,  unsigned int คือ เลขจำนวนเต็ม +

void setup() { // ฟังก์ชัน setup จะทำงานครั้งแรก เพียงครั้งเดียวเท่านั้น 

  lcd.begin(); // เริ่มการทํางาน จอ LCD

  lcd.backlight(); // ให้จอ LCD แสดงผลเป็นแบบพื้นสีดำ

  pinMode(TRIG_PIN, OUTPUT); //  ให้ TRIG_PIN เป็นพินโหมด แบบเอาท์พุท

  pinMode(ECHO_PIN, INPUT); //  ให้ ECHO_PIN เป็นพินโหมด แบบอินพุท

  pinMode(LED_PIN, OUTPUT); // ให้ LED_PIN เป็นพินโหมด แบบเอาท์พุท

} // สิ้นสุดการทำงานของฟังก์ชัน setup


void loop() {  // ฟังก์ชัน loop จะทำงานซ้ำ วนลูป ไปเรื่อยๆ

  digitalWrite(TRIG_PIN, LOW);  // ให้ขา Trig ให้เป็น LOW

  delayMicroseconds(2); // หน่วงเวลา 2 ไมโครวินาที

  digitalWrite(TRIG_PIN, HIGH); // ให้ขา Trig ให้เป็น HIGH

  delayMicroseconds(10); // หน่วงเวลา 10 ไมโครวินาที 

  digitalWrite(TRIG_PIN, LOW); // ให้ขา Trig ให้เป็น LOW

  const unsigned long duration = pulseIn(ECHO_PIN, HIGH);  // โมดูลเริ่มวัดระยะ แล้วส่งค่าที่วัดได้ออกมาเป็นความกว้างพัลส์ที่ขา Echo และเก็บค่าไว้ในตัวแปร duration

  int distance_cm = duration / 29 / 2; // วัดระยะทาง ทั้งขาไปและขากลับโดยการนำตัวแปร duration มาหารด้วย 29 จะได้หน่วยเป็นเซนติเมตร  แล้วแปลงให้เหลือขาไปอย่างเดียวโดยการหารด้วย 2 อีกครั้ง และนำค่าที่ได้เก็บไว้ในตัวแปร distance_cm

  int PWM;  // ประกาศตัวแปร PWM มีชนิดของข้อมูลคือ เลขจำนวนเต็ม

  lcd.setCursor(0, 0);  // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1

  lcd.print("Distance = " + String(distance_cm) + " cm  "); // แสดงผลคำว่า Distance = ระยะทางที่วัดได้ ตามด้วย หน่วย cm


  if (distance_cm < 101) {  //  ถ้าระยะทางที่วัดได้น้อยกว่า 101 เซนติเมตร  

    PWM = map(distance_cm, 0, 100, 0, 255);  //  แปลงค่าระยะทางที่วัดได้ จาก 0 - 100 ให้เป็น 0 - 255 แล้วเก็บค่าไว้ในตัวแปร PWM

    lcd.setCursor(5, 1);  // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 5 บรรทัดที่ 2

    lcd.print("PWM = " + String(255 - PWM) + "    "); // แสดงผลคำว่า PWM = 255 ลบด้วย ค่าตัวแปร PWM

   analogWrite(LED_PIN, 255 - PWM);  // ให้ LED_PIN ส่งค่าอนาล็อก 0 - 255 ออกไป


  }

  else {  //  อื่นๆเช่นระยะทางที่วัดได้ เท่ากับ 101 เซนติเมตร หรือมากกว่า 101 เซนติเมตร ขึ้นไป

    lcd.setCursor(5, 1);  // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 5 บรรทัดที่ 2

    PWM = 255;  // ให้ตัวแปร PWM มีค่าเท่ากับ 255

    lcd.print("PWM = " + String(255 - PWM) + "    ");  // แสดงผลคำว่า PWM = 255 ลบด้วย ค่าตัวแปร PWM

   analogWrite(LED_PIN, 255 - PWM);  // ให้ LED_PIN ส่งค่าอนาล็อก 0 - 255 ออกไป

  }

  
  delay(200); //  หน่วงเวลา 200  มิลลิวินาที

}  // สิ้นสุดการทำงานของฟังก์ชัน loop แล้วเริ่มทำงานฟังก์ชัน loop ใหม่ซ้ำไปเรื่อยๆ



3/4/62

วัดอุณหภูมิด้วย DHT22 และการแจ้งเตือนโดย Buzzer

มินิโปรเจค Arduino วัดอุณหภูมิด้วย DHT22 และการแจ้งเตือนโดย Buzzer



ประโยชน์และการนำโปรเจคไปพัฒนาต่อ

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


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

เหมาะสำหรับงานใน ห้องควบคุมอุณหภูมิความชื้น, อุตสาหกรรมอาหาร,ห้องอบ, ห้องแช่เย็น,ห้องแล็ป,ห้องควบคุมระบบคอมพิวเตอร์, Clean Room, Warehouse ที่มี ปัญหาในการควบคุมอุณหภูมิ หรือความชื้น ทำให้เกิดความเสียหายต่ออุปกรณ์ หรือวัสดุที่ต้องการควบคุมอุณหภูมิ ความชื้น เป็นต้น


เป้าหมายและหลักการทำงานของโปรเจค







ให้เซ็นเซอร์วัดอุณหภูมิ DHT22 เป็นส่วนที่รับอุณหภูมิ (Input) ส่งให้ บอร์ด Arduino สั่งให้แสดงค่าอุณหภูมิที่วัดได้ ที่บรรทัดที่ 1 ของหน้าจอ LCD Display และ ต้องการควบคุมอุณหภูมิให้ได้ตามค่าที่ได้กำหนด โดยการเขียนโค้ดกำหนดไว้ โดยให้แสดงที่บรรทัดที่ 2 ของหน้าจอ LCD Display 

โดยเมื่อ
อุณหภูมิวัดค่าได้เท่ากับหรือมากกว่าค่าที่กำหนดในตัวอย่างคือ 40 องศาเซลเซียส Arduino จะไปสั่งงาน (Output) คือ ให้ออด Buzzer แสดงการแจ้งเตือน และเมื่ออุณหภูมิวัดค่าได้น้อยกว่า 40 องศาเซลเซียส ให้ ออด Buzzer หยุดการแจ้งเตือน



อุปกรณ์ที่ใช้ในโปรเจค

5. DHT22 Temperature and Humidity Sensor + PCB

6. Keyestudio Passive Buzzer Alarm Module


*** การใช้งานแบบไม่ต้องการเชื่อมต่อสาย USB กับ คอมพิวเตอร์ ให้ใช้ Adapter DC 9V 1A Power Supply เป็นแหล่งจ่ายไฟ เสียบเข้ากับ DC Power Jack ของ  บอร์ด Arduino ***


ขั้นตอนการทำโปรเจค

1. ต่อใช้งาน จอ LCD กับ Arduino




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.1 ดาวน์โหลดไลบรารี ของเซ็นเซอร์ DHT


https://github.com/adafruit/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 ใหม่ซ้ำไปเรื่อยๆ