สารบัญ:

โครงการบันทึกสถานะประตูและอุณหภูมิ: 21 ขั้นตอน
โครงการบันทึกสถานะประตูและอุณหภูมิ: 21 ขั้นตอน

วีดีโอ: โครงการบันทึกสถานะประตูและอุณหภูมิ: 21 ขั้นตอน

วีดีโอ: โครงการบันทึกสถานะประตูและอุณหภูมิ: 21 ขั้นตอน
วีดีโอ: วิทยาศาสตร์ไม่สามารถอธิบายได้..เมื่อเจอสิ่งนี้บนฟ้า 2024, กรกฎาคม
Anonim
โครงการบันทึกสถานะประตูและอุณหภูมิ
โครงการบันทึกสถานะประตูและอุณหภูมิ

คำแนะนำนี้จะแสดงวิธีการสร้างตัวบันทึกสถานะประตูและอุณหภูมิอย่างง่ายในราคาต่ำกว่า $10.00 โดยใช้ ESP8266 NodeMCU, เซ็นเซอร์อุณหภูมิและความชื้น DHT11, สวิตช์กกประตู/หน้าต่าง, ตัวต้านทาน 10K ohm และสายเชื่อมต่อบางส่วน

จุดเริ่มต้นของโครงการนี้มาจากความปรารถนาของฉันที่จะทำระบบอัตโนมัติภายในบ้านมากขึ้นด้วยบอร์ด Arduino เนื่องจากฉันได้อ่านเกี่ยวกับ EPS8266 NodeMCU ที่เข้ากันได้กับ Arduino มามาก ฉันจึงตัดสินใจว่าบอร์ดนี้จะเป็นบอร์ดต้นทุนต่ำที่สมบูรณ์แบบเพื่อทำการทดลอง หลังจากค้นหาโครงการระบบอัตโนมัติภายในบ้านโดยใช้บอร์ด ESP8266 ทางอินเทอร์เน็ต ฉันตัดสินใจรวมตัวบันทึกอุณหภูมิและสถานะประตูสำหรับความพยายามครั้งแรกของฉัน ในที่สุด โปรเจ็กต์นี้จะรวมกับเซอร์โว เซ็นเซอร์วัดความชื้น และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ เพื่อทำให้บ้านสีเขียวขนาดเล็กที่คุณปู่ของฉันออกแบบและสร้างขึ้นเมื่อ 50 ปีก่อนเป็นอัตโนมัติ เซ็นเซอร์อุณหภูมิจะถูกนำมาใช้เพื่อกำหนดว่าควรเปิดหรือปิดระบบทำความร้อน รวมทั้งส่งสัญญาณให้เซอร์โวเปิดและปิดระบบระบายอากาศเมื่อจำเป็น สถานะของระบบระบายอากาศจะถูกตรวจสอบโดยการใช้สวิตช์กกแม่เหล็ก สุดท้าย เซ็นเซอร์ความชื้นจะถูกใช้เพื่อทำให้ระบบรดน้ำอัตโนมัติ

ขั้นตอนที่ 1: ข้อจำกัดความรับผิดชอบ

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

ขั้นตอนที่ 2: ตั้งค่าบัญชี IFTTT ฟรี

ตั้งค่าบัญชี IFTTT ฟรี
ตั้งค่าบัญชี IFTTT ฟรี

หากคุณยังไม่มี ตอนนี้เป็นเวลาตั้งค่าบัญชี IFTTT ฟรีโดยไปที่หน้าแรกของพวกเขา.. IFTTT ย่อมาจาก If This Then That และเป็นแพลตฟอร์มฟรีที่ให้คุณเชื่อมต่อบริการบนอินเทอร์เน็ตได้ด้วยวิธีใหม่ๆ ช่วยให้คุณสามารถใช้ประโยชน์จากบริการเหล่านั้นในรูปแบบใหม่ สำหรับโครงการนี้ เราจะใช้ IFTTT เพื่อให้ ESP8266 บันทึกสถานะของประตูผ่านสวิตช์กก อุณหภูมิและความชื้นผ่านเซ็นเซอร์ DHT11 ในเอกสาร Google ชีต

ขั้นตอนที่ 3: สร้าง IFTTT Applet

สร้าง IFTTT Applet
สร้าง IFTTT Applet

ขณะที่ยังอยู่ใน IFTTT ให้ไปที่ส่วน "แอปเพล็ตของฉัน" และสร้างแอปเพล็ตใหม่โดยคลิกปุ่ม "แอปเพล็ตใหม่"

ขั้นตอนที่ 4: กำหนดค่าส่วน "นี้" ของแอปเพล็ตของคุณ

กำหนดค่า
กำหนดค่า

คลิกที่คำว่า "นี่" ที่เป็นสีน้ำเงิน ดังที่ไฮไลท์ไว้ในภาพด้านบน

ขั้นตอนที่ 5: เพิ่มบริการ WebHooks ลงในแอปเพล็ตของคุณ

เพิ่มบริการ WebHooks ลงในแอปเพล็ตของคุณ
เพิ่มบริการ WebHooks ลงในแอปเพล็ตของคุณ

ในแถบค้นหา ค้นหาบริการ "Webhooks" และเลือกไอคอน Webhooks

เมื่อคุณพบบริการ "Webhooks" แล้ว ให้คลิกที่บริการนั้น

ขั้นตอนที่ 6: ตั้งค่าทริกเกอร์รับคำขอเว็บ

ตั้งค่าทริกเกอร์รับคำขอเว็บ
ตั้งค่าทริกเกอร์รับคำขอเว็บ

เลือกทริกเกอร์ "รับคำขอเว็บ"

ขั้นตอนที่ 7: ระบุชื่อกิจกรรม

ระบุชื่อกิจกรรม
ระบุชื่อกิจกรรม

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

ขั้นตอนที่ 8: กำหนดค่าส่วน "ที่" ของแอปเพล็ตของคุณ

กำหนดค่า
กำหนดค่า

คลิกที่คำว่า "นั่น" ที่เป็นสีน้ำเงิน ดังที่ไฮไลต์ในภาพด้านบน

ขั้นตอนที่ 9: ตั้งค่า Action Service

ตั้งค่าการดำเนินการบริการ
ตั้งค่าการดำเนินการบริการ

ในช่องค้นหา ให้ค้นหาบริการ "Google ชีต" แล้วคลิกไอคอน Google ชีต

ขั้นตอนที่ 10: เชื่อมต่อกับ Google ชีต

เชื่อมต่อกับ Google ชีต
เชื่อมต่อกับ Google ชีต

หากยังไม่ได้ดำเนินการ คุณจะต้องเชื่อมต่อบัญชี IFTTT กับ Google ชีต กดปุ่มเชื่อมต่อที่แสดงด้านบนและทำตามคำแนะนำบนหน้าจอ

ขั้นตอนที่ 11: เลือกการดำเนินการ

เลือกการดำเนินการ
เลือกการดำเนินการ

คลิกที่ "เพิ่มแถวในสเปรดชีต"

ขั้นตอนที่ 12: ตั้งค่า Action

ตั้งค่าการดำเนินการ
ตั้งค่าการดำเนินการ

ระบุชื่อในกล่องข้อความ "ชื่อสเปรดชีต" ฉันเลือกใช้ "Data_Logger" เพื่อความสม่ำเสมอ ปล่อยให้การตั้งค่าที่เหลืออยู่คนเดียว (คุณสามารถทดลองกับการตั้งค่าเหล่านั้นในบางครั้ง) จากนั้นกดปุ่ม "สร้างการดำเนินการ" ที่ด้านล่างของหน้าจอ

ขั้นตอนที่ 13: ตรวจสอบและสรุปแอปเพล็ตของคุณ

ตรวจสอบและสรุปแอปเพล็ตของคุณ
ตรวจสอบและสรุปแอปเพล็ตของคุณ

เมื่อพอใจกับการกำหนดค่าแอปเพล็ตแล้ว ให้กดปุ่ม "เสร็จสิ้น"

ขั้นตอนที่ 14: ดึงข้อมูลการกำหนดค่าที่จำเป็นในภายหลัง

เรียกข้อมูลการกำหนดค่าที่จำเป็นในภายหลัง
เรียกข้อมูลการกำหนดค่าที่จำเป็นในภายหลัง

คลิกที่ "Webhooks" ตามที่ไฮไลต์ด้านบน

ขั้นตอนที่ 15: ดำเนินการตามเอกสารประกอบ Webhooks สำหรับคีย์ API

ดำเนินการตามเอกสารประกอบ Webhooks สำหรับคีย์ API
ดำเนินการตามเอกสารประกอบ Webhooks สำหรับคีย์ API

อาจดูแปลกแต่คลิกลิงก์เอกสารที่มุมขวาบนเพื่อไปยังหน้าด้วยคีย์ API เฉพาะของคุณ

ขั้นตอนที่ 16: บันทึกคีย์ API

บันทึกคีย์ API
บันทึกคีย์ API
บันทึกคีย์ API
บันทึกคีย์ API

บรรทัดแรกของหน้าจอเอกสารจะแสดงคีย์ API เฉพาะของคุณ คัดลอกและบันทึกคีย์นี้เพื่อใช้ในภายหลัง

เป็นความคิดที่ดีที่จะทดสอบแอปเพล็ตที่นี่ อย่าลืมเปลี่ยน {event} เป็น Data_Logger หรืออะไรก็ตามที่คุณตั้งชื่อกิจกรรมของคุณ และเพิ่มข้อมูลบางส่วนลงในค่าว่าง 3 ค่า จากนั้นคลิกปุ่ม "ทดสอบ" ที่ด้านล่างของหน้า คุณควรเห็นข้อความสีเขียวว่า “เหตุการณ์ถูกทริกเกอร์” ถ้าใช่ ให้ไปที่ Google Docs และยืนยันว่าข้อมูลที่คุณป้อนในหน้าทดสอบแสดงขึ้นในเอกสาร Google ชีต

ขั้นตอนที่ 17: รวบรวมส่วนประกอบ

รวบรวมส่วนประกอบ
รวบรวมส่วนประกอบ
รวบรวมส่วนประกอบ
รวบรวมส่วนประกอบ
รวบรวมส่วนประกอบ
รวบรวมส่วนประกอบ

คุณจะต้องการบางส่วนเท่านั้น

1) ESP8266 คณะกรรมการพัฒนา NodeMcu

2) DHT11 เซ็นเซอร์อุณหภูมิ/ความชื้น

3) สวิตช์กกประตู/หน้าต่าง

4) ตัวต้านทาน 10k โอห์ม

5) สายเชื่อมต่อ

ขั้นตอนที่ 18: ประกอบส่วนประกอบ

1) เชื่อมต่อหนึ่งในพิน 3v3 บน ESP8266 กับพิน vcc บน DHT11

2) เชื่อมต่อหมุดกราวด์ตัวใดตัวหนึ่งบน ESP8266 กับพินกราวด์บน DHT11

3) เชื่อมต่อพิน D4 (a.k.a. pin 2 ใน IDE) บน ESP8266 กับดาต้าพินบน DHT11

4) ต่อพิน 3v3 อีกอันบน ESP8266 เข้ากับด้านหนึ่งของสวิตช์กกประตู/หน้าต่าง

5) เชื่อมต่อพิน D5 (หรือที่รู้จักว่าพิน 14 ใน IDE) บน ESP8266 กับอีกด้านหนึ่งของสวิตช์กกประตู/หน้าต่าง และเชื่อมต่อกับตัวต้านทาน 10k ohm ด้านใดด้านหนึ่ง

6) เชื่อมต่ออีกด้านหนึ่งของตัวต้านทาน 10k ohm กับพินกราวด์อีกอันบน ESP8266

สำหรับการเลือกพินของ ESP8266 โปรดดูไดอะแกรมที่เป็นประโยชน์นี้หรือวิดีโอที่เป็นประโยชน์มาก

ขั้นตอนที่ 19: เขียนโค้ด Arduino

เขียนโค้ด Arduino
เขียนโค้ด Arduino

คัดลอกและวางโค้ดด้านล่างลงใน Arduino IDE ของคุณ

#รวม #รวม #รวม "DHT.h"

#define DHTPIN 2 // พินดิจิทัลใดที่เราเชื่อมต่อกับ

#define DOORPIN 14 // สวิตซ์ประตูเปิดอยู่ด้วยพินดิจิตอลอะไร

#define DHTTYPE DHT11 // DHT 11

DHT dht (DHTPIN, DHTTYPE);

จำนวน int = 1;

const ถ่าน* ssid = "some_ssid"; // เปลี่ยนสิ่งนี้เพื่อใช้ ssid const char* password = "some_password"; // เปลี่ยนสิ่งนี้เพื่อใช้รหัสผ่านของคุณ int sleepTime = 100;

// Maker Webhooks IFTTT

เซิร์ฟเวอร์ const char* = "maker.ifttt.com";

// ทรัพยากร URL IFTTT

const char* ทรัพยากร = "/trigger/SOME_SERVICE_NAME/with/key/SOME_API_KEY"; //ตรวจสอบให้แน่ใจว่าใช้ชื่อบริการและรหัส API ของคุณ

String doorStatus = "ปิด";

สถานะบูลผันผวนเปลี่ยน = เท็จ;

// หากนอนเป็นชั่วโมง ให้ตั้งช่วงเวลาเป็น ชม. * 60 นาที * 60 วินาที * 1,000 มิลลิวินาที

const ช่วงยาว = 1.0 * 60 * 60 * 1,000; // 1 ชั่วโมงก่อนหน้ามิลลิวินาทีที่ไม่ได้ลงนามนาน = 0 - (ช่วง 2 *);

การตั้งค่าเป็นโมฆะ () {

Serial.begin(115200); AttachInterrupt(digitalPinToInterrupt(DOORPIN), eventTriggered, CHANGE); โหมดพิน (DOORPIN, INPUT); //เซ็นเซอร์ประตู dht.begin(); WiFi.begin(ssid, รหัสผ่าน);

Serial.print("\nกำลังเชื่อมต่อ..");

ในขณะที่ (WiFi.status () != WL_CONNECTED) { ล่าช้า (1000); Serial.print("."); } Serial.print("\n"); }

โมฆะ eventTriggered(){

stateChanged = จริง; Serial.println("กำลังตรวจสอบประตู!"); if (digitalRead(DOORPIN)==HIGH) // ตรวจสอบว่าประตูเปิดอยู่หรือไม่ { Serial.println("Door is closed!"); doorStatus = "ปิด"; } อื่น { Serial.println ("ประตูเปิดอยู่!"); doorStatus = "เปิด"; } }

ถือเป็นโมฆะ checkStatus(){

if (WiFi.status () == WL_CONNECTED) { // ตรวจสอบสถานะการเชื่อมต่อ WiFi // อุณหภูมิในการอ่านหรือความชื้นใช้เวลาประมาณ 250 มิลลิวินาที! // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h = dht.readHumidity(); // อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น) float t = dht.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f = dht.readTemperature(true); // ตรวจสอบว่าการอ่านล้มเหลวและออกก่อนกำหนดหรือไม่ (เพื่อลองอีกครั้ง) ถ้า (isnan (h) || isnan (t) || isnan (f)) { Serial.println ("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!"); //Serial.print("."); // ไม่สามารถอ่านจากเซ็นเซอร์ DHT! กลับ; } // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif = dht.computeHeatIndex(f, h); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false);

Serial.print("\n");

Serial.print("อุณหภูมิ:"); Serial.print(f); Serial.print(" *F ("); Serial.print(t); Serial.print(" *C)"); Serial.print(" *F ("); Serial.print(t); Serial.print(" *C)"); Serial.print("\t"); Serial.print("ดัชนีความร้อน:"); Serial.print(hif); Serial.print(" *F ("); Serial.print(hic); Serial.print(" *C)%"); Serial.print("\t"); Serial.print("ความชื้น: "); Serial.println(ซ);

if (digitalRead(DOORPIN)==HIGH) // ตรวจสอบว่าประตูเปิดอยู่หรือไม่

{ Serial.println("ประตูถูกปิด!"); doorStatus = "ปิด"; } อื่น { Serial.println ("ประตูเปิดอยู่!"); doorStatus = "เปิด"; } String jsonObject = String("{"value1\":\"") + f +"*F (" + t + "*C) / "+ hif +"*F (" + hic + "*C) " + "\", \"value2\":\"" + h + "\", \"value3\":\"" + doorStatus + " \"}"; HTTPClient http; สตริง completeUrl = "https://maker.ifttt.com/trigger/bme280_readings/with/key/cZFasEvy5_3JlrUSVAxQK9"; http.begin(completeUrl); // http.begin(เซิร์ฟเวอร์); http.addHeader("Content-Type", "application/json"); http. POST(jsonObject); http.writeToStream(&อนุกรม); http.end(); //ปิดการเชื่อมต่อ

stateChanged = เท็จ;

int sleepTimeInMinutes = ช่วงเวลา / 1000 / 60; Serial.print("\n\nเข้าสู่โหมดสลีปสำหรับ "); Serial.print (sleepTimeInMinutes); Serial.println(" นาที …"); } }

วงเป็นโมฆะ () {

ไม่ได้ลงนามยาว currentMillis = millis(); ล่าช้า(4000); //ถ้าเกินเวลาที่ผ่านไป ให้บังคับตรวจสอบประตูและอุณหภูมิ if(currentMillis - PreviousMillis >= ช่วง) { stateChanged = true; มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; Serial.print(นับ++); Serial.println(") กำลังตรวจสอบเนื่องจากเวลาที่ผ่านไป!"); } มิฉะนั้น if (stateChanged) { Serial.print (นับ ++); Serial.println(") กำลังตรวจสอบเนื่องจากการเปลี่ยนแปลงสถานะ!"); }

//ถ้าสถานะเปลี่ยน ให้ตรวจสอบประตูและอุณหภูมิ

ถ้า(stateChanged){ checkStatus(); }

ล่าช้า (sleepTime);

}

ขั้นตอนที่ 20: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์

เมื่อคุณอัปโหลดซอร์สโค้ดในขั้นตอนก่อนหน้า คุณควรได้ผลลัพธ์ดังตัวอย่างที่แสดงด้านบน

ขั้นตอนที่ 21: เครดิต

ฉันพบคำแนะนำและเคล็ดลับที่เป็นประโยชน์มากมายจาก Random Nerd Tutorials และขอขอบคุณสำหรับความช่วยเหลือทั้งหมดของพวกเขา โดยเฉพาะอย่างยิ่งบทช่วยสอนที่ยอดเยี่ยมของพวกเขาเกี่ยวกับ ESP32 ESP8266 เผยแพร่การอ่านเซ็นเซอร์ไปยัง Google ชีตซึ่งส่วนสำคัญของคำแนะนำนี้ยึดตาม

นอกจากนี้ DHT11 Instructable จาก TheCircuit ยังช่วยให้ฉันเข้าใจวิธีใช้เซ็นเซอร์ตัวเล็กราคาไม่แพงมากแต่น่าสนใจนี้

นอกจากนี้ยังมีบทช่วยสอนมากมายเกี่ยวกับการตรวจสอบประตูของคุณ เช่น Garage Door Monitor และอีกบทหนึ่งจาก Random Nerd Tutorials ฉันใช้บิตและชิ้นส่วนเหล่านี้เพื่อช่วยให้ฉันเข้าใจวิธีทำให้สวิตช์กกทำงานอย่างถูกต้อง

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

แนะนำ: