สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
สร้างโดย: Hazel Yang
โครงการนี้เป็นสถานีตรวจอากาศที่ใช้บอร์ด Arduino UNO เพื่อควบคุมการไหลของข้อมูล เซ็นเซอร์ DHT22 เพื่อรวบรวมข้อมูล และหน้าจอ OLED เพื่อแสดงข้อมูล
ขั้นตอนที่ 1: รายการสินค้า
1. หน้าจอ: OLED, 1.3 Display SH1106, I2C สีขาว ---- PID: 18283
2. เซนเซอร์: เซนเซอร์ความชื้นและอุณหภูมิแบบดิจิตอล DHT22 ---- PID: 7375
3. การเชื่อมต่อ: สายจัมเปอร์ ---- PID: 10316 หรือ 10318 หรือ 10312 (ขึ้นอยู่กับความยาว) หรือคุณสามารถใช้ลวดแข็ง 22 AWG ---- PID: 22490
เขียงหั่นขนม ---- PID: 10686 หรือ 10698 หรือ 103142 (ขึ้นอยู่กับขนาด)
4. พลังงาน: สายเคเบิลนี้สามารถเชื่อมต่อกับพอร์ต USB ของคอมพิวเตอร์เท่านั้น และสายเคเบิลยังใช้สำหรับการถ่ายโอนข้อมูลระหว่างบอร์ด IDE และ Arduino สาย USB, A ถึง B, M/M, 0.5M (1.5FT) ---- PID: 29862
หรือคุณสามารถใช้สิ่งนี้เพื่อจ่ายไฟให้กับบอร์ด: อะแดปเตอร์ AC/DC 5V 2A ---- PID: 10817
ขั้นตอนที่ 2: การแนะนำแบบสัมพัทธ์
บทนำของหน้าจอ: 1.3 OLED Display White
1. คุณสามารถค้นหาเอกสารที่แสดงการตั้งค่าพื้นฐานและคำอธิบาย:
การแนะนำเซ็นเซอร์: เซ็นเซอร์ความชื้นและอุณหภูมิ DHT22 1. คุณสามารถค้นหาเอกสารที่แสดงคำอธิบาย:
ขั้นตอนที่ 3: เชื่อมต่อวงจร
เซ็นเซอร์ DHT22 จะส่งข้อมูลอนุกรมไปที่พิน 2 ดังนั้น ต่อพินที่สองจากซ้าย พิน "SDA" ควรเชื่อมต่อกับพิน 2
สำหรับจอแสดงผล SSH1106 จะใช้พินอะนาล็อกในการส่งสัญญาณ วงจรของหน้าจอจะเป็นพิน "SCL" กับพิน "A5" ของ Arduino และพิน "SDA" ของ Arduino กับ "A4" ของ Arduino ในขณะที่ข้อมูลตำแหน่งพิกเซลกำลังส่งอย่างต่อเนื่อง ฟังก์ชันการแสดงผลในโปรแกรมจะทริกเกอร์คำสั่งเพียงครั้งเดียวทุกครั้งที่อ่านข้อมูลจากเซ็นเซอร์
ทั้งเซ็นเซอร์และหน้าจอสามารถใช้ 3.3V เพื่อจ่ายไฟให้กับ Arduino เป็นอินพุตไฟ DC ในการจ่ายไฟ เราต้องเชื่อมต่อทั้งพิน "VCC" กับ "3.3V" ของ Arduino และหมุด "GND" สามารถเชื่อมต่อกับพิน "GND" บนบอร์ด Arduino ได้ง่ายๆ
ใช้สาย USB A ถึง B เชื่อมต่อ Arudino กับคอมพิวเตอร์
ขั้นตอนที่ 4: เตรียมคอมไพล์
"u8glib" สำหรับหน้าจอ SSH1106 จาก Olikraus
"ไลบรารีเซ็นเซอร์ DHT" สำหรับเซ็นเซอร์ DHT22 จาก Adafruit คุณควรดาวน์โหลดสองไลบรารี: ไลบรารีเซ็นเซอร์ DHT22:
U8glib:
และใช้ "จัดการไลบรารี" ใน IDE เพื่อคลายซิป คำแนะนำการจัดการห้องสมุดออนไลน์:
ขั้นตอนที่ 5: รหัสทดสอบสำหรับพอร์ตอนุกรมเซ็นเซอร์ DHT22
ทดสอบ coe สำหรับพอร์ตอนุกรมเซ็นเซอร์ DHT22 (ซึ่งอยู่ภายในไลบรารี DHT22>>ตัวอย่าง):
(คุณสามารถข้ามส่วนนี้ได้)
เพียงเพื่อทดสอบเซ็นเซอร์ DHT22 จะอ่านข้อมูลได้ตามปกติ
#รวม
#รวม
#รวม
#รวม
#รวม
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
การตั้งค่าเป็นโมฆะ () {
Serial.begin(9600);
Serial.println(F("DHT22 ทดสอบ!"));
dht.begin();
}
วงเป็นโมฆะ () {
// รอสักครู่ระหว่างการวัด
ล่าช้า (2000);
// อุณหภูมิหรือความชื้นในการอ่านจะใช้เวลาประมาณ 250 มิลลิวินาที!
// การอ่านค่าเซ็นเซอร์อาจเป็น 'เก่า' ได้ถึง 2 วินาที (เป็นเซ็นเซอร์ที่ช้ามาก)
ลอย h = dht.readHumidity();
// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)
float t = dht.readTemperature();
// อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true)
float f = dht.readTemperature(จริง);
// ตรวจสอบว่าการอ่านล้มเหลวและออกก่อนกำหนดหรือไม่ (เพื่อลองอีกครั้ง)
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!"));
กลับ;
}
// คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น)
float hif = dht.computeHeatIndex(f, h);
// คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, เท็จ);
Serial.print(F("ความชื้น: "));
Serial.print(h);
Serial.print(F("% อุณหภูมิ: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F ดัชนีความร้อน: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
// หลังจากคอมไพล์โปรแกรมแล้ว ให้คลิก TOOLS >> SERIAL MONITOR เพื่อตรวจสอบข้อมูล
// สิ้นสุดโปรแกรมการทดสอบ
ขั้นตอนที่ 6: รหัสสำหรับโครงการ
#รวม
#รวม
#รวม
#รวม
#รวม
#define DHTPIN 2
#define DHTTYPE DHT22
#รวม "U8glib.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
เซ็นเซอร์ DHT (DHTPIN, DHTTYPE);
โมฆะวาด (โมฆะ) {
u8g.setFont(u8g_font_unifont);
ลอย h = sensor.readHumidity();
// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)
ลอย t = sensor.readTemperature();
// ตรวจสอบว่าการอ่านล้มเหลวและออกก่อนกำหนดหรือไม่ (เพื่อลองอีกครั้ง)
ถ้า (isnan (h) || isnan (t)) {
u8g.print("ผิดพลาด");
สำหรับ(;;);
กลับ;
}
u8g.setPrintPos(4, 10);
u8g.print("อุณหภูมิ(C):");
u8g.setPrintPos(4, 25);
u8g.print(t);
u8g.setPrintPos(4, 40);
u8g.print("ความชื้น(%):");
u8g.setPrintPos(4, 55);
u8g.print(h);
}
การตั้งค่าเป็นโมฆะ (เป็นโมฆะ) {
u8g.setRot180();
Serial.begin(9600);
sensor.begin();
}
วงโมฆะ (เป็นโมฆะ) {
// ห่วงภาพ
u8g.firstPage();
ทำ {
วาด();
} ในขณะที่ (u8g.nextPage());
// สร้างภาพใหม่หลังจากดีเลย์ล่าช้า (2000);
}
// สิ้นสุดโปรแกรมหลัก
ขั้นตอนที่ 7: คำอธิบาย
จากนั้นเริ่มต้นวงจรพินสำหรับบอร์ด Arduino เนื่องจากไลบรารีเซ็นเซอร์ต้องการข้อมูลเพื่อประกาศวัตถุ
และคุณสามารถทดสอบข้อมูลของเซ็นเซอร์ได้โดยการตรวจสอบข้อมูลเอาต์พุตผ่านพินดิจิทัล 2 โดยใช้ฟังก์ชันที่เรียกว่า "Serial.print()" เนื่องจากความถี่ของการส่งข้อมูลอยู่ที่ประมาณ 1 การอ่านทุกๆ 2 วินาที (ซึ่งก็คือ 0.5 Hz) เมื่อตั้งโปรแกรมไว้ใน Arduino IDE เราจึงต้องตั้งค่าการหน่วงเวลาภายในฟังก์ชันลูปให้มากกว่า 2 วินาที ดังนั้นจึงมี "delay(2000)" ภายในฟังก์ชันลูป เพื่อให้แน่ใจว่าข้อมูลจะได้รับการรีเฟรชบ่อยๆ ในฟังก์ชัน "draw" ให้ดึงข้อมูลจากพอร์ตข้อมูลอนุกรมและใส่ลงในจำนวนทศนิยมโดยใช้ฟังก์ชัน "readHumidity" และ "readTemperature"
พิมพ์ความชื้นและอุณหภูมิโดยใช้ฟังก์ชันการพิมพ์ในไฟล์ "u8glib" คุณสามารถปรับตำแหน่งโดยเปลี่ยนตัวเลขในฟังก์ชัน "setPrintPos" ฟังก์ชันการพิมพ์สามารถแสดงข้อความและตัวเลขได้โดยตรง
ในการตั้งค่าฮาร์ดแวร์ ให้รอพอร์ตอนุกรม 10 วินาที จากนั้นเรียกใช้ฟังก์ชันเริ่มต้นสำหรับเซ็นเซอร์ ตามวงจรของฉัน หน้าจอของฉันกลับด้าน ดังนั้นฉันจึงรวมฟังก์ชัน "setRot180" เพื่อหมุนจอแสดงผลด้วย
ฟังก์ชันลูปของบอร์ด Arduino เป็นฟังก์ชันหลัก มันยังคงเรียกใช้ฟังก์ชันการวาดเพื่อแสดงข้อความและข้อมูลทุกครั้งที่รีเฟรชเซ็นเซอร์
หน้าจอมีลักษณะดังนี้:
คุณสามารถถอด Arduino UNO ออกจากคอมพิวเตอร์ของคุณและจ่ายไฟโดยใช้อะแดปเตอร์จ่ายไฟ 5V DC ที่เชื่อมต่อกับแจ็คจ่ายไฟขนาด 2.1 มม. โดยจะเก็บโปรแกรมไว้ในไดรฟ์และสามารถเรียกใช้โปรแกรมได้อย่างต่อเนื่องอีกครั้งหลังจากเปิดเครื่องแล้ว