สารบัญ:

ตัวควบคุมอุณหภูมิสมาร์ทโฮม: 4 ขั้นตอน
ตัวควบคุมอุณหภูมิสมาร์ทโฮม: 4 ขั้นตอน

วีดีโอ: ตัวควบคุมอุณหภูมิสมาร์ทโฮม: 4 ขั้นตอน

วีดีโอ: ตัวควบคุมอุณหภูมิสมาร์ทโฮม: 4 ขั้นตอน
วีดีโอ: วิธีตั้งค่าใช้งาน WiFi Smart Switch TUYA กับแอพ Smartlife (เริ่มต้นใช้งาน Smart Home อย่างง่ายๆ) 2024, กรกฎาคม
Anonim
ตัวควบคุมอุณหภูมิสมาร์ทโฮม
ตัวควบคุมอุณหภูมิสมาร์ทโฮม

Smart Home Thermostat ของเราเป็นโปรแกรมที่สามารถประหยัดเงินในครัวเรือนโดยอัตโนมัติในค่าสาธารณูปโภคตามความชอบของบุคคล

ขั้นตอนที่ 1: ภาพรวม

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

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

ขั้นตอนที่ 2: ชิ้นส่วนและวัสดุ

(15) สายจัมเปอร์

(4) ตัวต้านทาน 220 โอห์ม

(1) ตัวต้านทาน 10K โอห์ม

(1) เซ็นเซอร์อุณหภูมิ

(1) ตัวต้านทานภาพ

(1) DAGU Mini DC กระปุก

(1) ไดโอด

(1) ทรานซิสเตอร์

(1) โฟโตรีซีสเตอร์

(1) เขียงหั่นขนม

(1) Arduino MKR

ขั้นตอนที่ 3: วงจร

วงจร
วงจร
วงจร
วงจร
วงจร
วงจร
วงจร
วงจร

รูปที่ 1 = ภาพซ้ายขนาดใหญ่

รูปที่ 2 = ขวาบน

รูปที่ 3 = กลางขวา

รูปที่ 4 = ล่างขวา

รูปที่ 1

จากแผนภาพด้านบน เราได้ต่อสายไฟ LED ทั้งสามดวงของเรา เราเว้นระยะห่าง LED แต่ละดวงเนื่องจากเรากำลังทำงานกับเขียงหั่นขนมขนาดใหญ่ สำหรับแผงขนมปังขนาดเล็ก อาจจำเป็นต้องใส่ไฟ LED ให้ชิดกันมากขึ้น นอกจากนี้ยังไม่จำเป็นต้องจ่ายไฟให้กับเขียงหั่นขนมเนื่องจากไฟ LED ใช้พลังงานน้อยมาก เราไม่ได้ใช้การเชื่อมต่อ 5V บนเขียงหั่นขนมสำหรับไฟ LED การเชื่อมต่อแต่ละครั้งจาก LED กับ Arduino ของเราถูกสร้างขึ้นเหมือนสายสีเขียวอยู่ด้านบน ไฟ LED สีแดง น้ำเงิน และเขียวของเราเชื่อมต่อกับ Digital Pin 8, 9 และ 10 ตามลำดับ โดยกำหนดด้วยลวดสีแดง น้ำเงิน และเขียวในรูปภาพของเรา

รูปที่ 2

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

รูปที่ 3

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

รูปที่ 4

ภาพด้านบนใช้เพื่อต่อสายกล่องเกียร์ DAGU Mini DC สายสีเขียวที่ติดกับกระปุกเกียร์นั้นแท้จริงแล้วเป็นสายสีแดงที่เชื่อมต่อกับมันในรูปของเรา กระปุกเกียร์เชื่อมต่อกับพินดิจิตอล 11 ด้วยสายสีส้มในรุ่นของเรา อย่าทำผิดพลาดกับทรานซิสเตอร์ที่ใช้กับเซ็นเซอร์อุณหภูมิ พวกเขาดูเกือบจะเหมือนกัน เซ็นเซอร์อุณหภูมิน่าจะมี TMP หรือสคริปต์อื่นๆ เขียนไว้ที่ด้านแบนของเซ็นเซอร์ คุณต้องใช้ทรานซิสเตอร์ที่นี่ ไม่ใช่เซ็นเซอร์อุณหภูมิ

ขั้นตอนที่ 4: รหัส Arduino

มีการอธิบายส่วนที่สำคัญที่สุดของรหัสที่นี่ รหัสจะใช้ไม่ได้กับสิ่งที่ให้ไว้ที่นี่เท่านั้น หากต้องการรับรหัสการทำงานแบบเต็ม จะมีลิงก์ที่ด้านล่างของหน้า

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

การตั้งค่าเซ็นเซอร์อุณหภูมิและ LED:

tempPin = 'A0';% กำหนดฟังก์ชันที่ไม่ระบุตัวตนที่แปลงแรงดันไฟฟ้าเป็นอุณหภูมิ tempCfromVolts = @(volts) (volts-0.5)*100; การสุ่มตัวอย่างระยะเวลา = 5; % วินาที นานแค่ไหนที่เราต้องการสุ่มตัวอย่างสำหรับ samplingInterval = 1; % กี่วินาทีระหว่างการอ่านค่าอุณหภูมิ % ตั้งค่าเวกเตอร์ของเวลาสุ่มตัวอย่าง samplingTimes = 0:samplingInterval:samplingDuration; % คำนวณจำนวนตัวอย่างตามระยะเวลาและช่วงเวลา numSamples = length(samplingTimes); % จัดสรรล่วงหน้าตัวแปรชั่วคราวและตัวแปรสำหรับจำนวนการอ่านที่จะเก็บ tempC = ศูนย์ (numSamples, 1); tempF = อุณหภูมิ C; %เราจะใช้การวนซ้ำในครั้งนี้เพื่อคำนวณ % การอ่านค่าอุณหภูมิที่กำหนดไว้ล่วงหน้า

สำหรับลูป:

สำหรับดัชนี = 1: numSamples % อ่านแรงดันไฟฟ้าที่ tempPin และเก็บไว้ในโวลต์โวลต์โวลต์ = readVoltage (a, tempPin); tempC(ดัชนี) = -1*tempCfromVolts(โวลต์+0.3); tempF(ดัชนี) = tempC(ดัชนี)*(9/5)+32; % แสดงเอาต์พุตที่จัดรูปแบบเพื่อสื่อสารกับการอ่านอุณหภูมิปัจจุบัน fprintf('อุณหภูมิที่ %d วินาทีคือ %5.2f C หรือ %5.2f F.\n', … samplingTimes(index), tempC(index), tempF(index)); %โปรดทราบว่าเอาต์พุตการแสดงผลนี้จะปรากฏให้เห็นพร้อมกันทั้งหมดหลังจาก %d ดำเนินการรันโค้ดเสร็จแล้ว เว้นแต่คุณจะคัดลอก/วางโค้ดลงใน mfile ของสคริปต์ธรรมดา หยุดชั่วคราว (samplingInterval) %delay จนกว่าจะสิ้นสุดการสุ่มตัวอย่างถัดไป

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

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

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

การตั้งค่าเมนู:

ตัวเลือก = {'อัตโนมัติ', 'ด้วยตนเอง'};imode = เมนู ('โหมด' ตัวเลือก) ถ้า imode>0 h=msgbox(['คุณเลือก ' ตัวเลือก{imode}]); อื่น h=warndlg('คุณปิดเมนูโดยไม่เลือก') สิ้นสุด waitfor(h);

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

โหมดแมนนวลจะเริ่มขึ้น:

if imode == 2 dlg_prompts = {'คุณต้องการอุณหภูมิเท่าไร'}; dlg_title = 'อุณหภูมิ'; dlg_defaults = {'68'}; opts. Resize = 'เปิด'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty(dlg_ans) h=warndlg('คุณยกเลิกคำสั่ง inputdlg'); อื่น temp_manual = str2double(dlg_ans{1}) %[เพิ่มสไลด์การตั้งค่าการควบคุมอุณหภูมิด้านล่าง] สิ้นสุด

ภายในคำสั่ง if สำหรับโหมดแมนนวล คุณต้องเขียนอินเทอร์เฟซเมนูสำหรับผู้ใช้เพื่อเลือกอุณหภูมิบ้านที่ต้องการ จากนั้นใช้คำสั่ง while ที่จะควบคุมอุณหภูมิที่บ้าน

การตั้งค่าการควบคุมอุณหภูมิ:

ในขณะที่ temp_manual < tempF writeDigitalPin(a, 'D9', 1) writeDigitalPin(a, 'D11', 1); สิ้นสุดในขณะที่ temp_manual > tempF writeDigitalPin(a, 'D8', 1) writeDigitalPin(a, 'D11', 1); จบ

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

ตั้งค่าโหมดอัตโนมัติ:

elseif imode == 1 dlg_prompts = {'ปกติ', 'ไม่อยู่'}; dlg_title = 'การตั้งค่าอุณหภูมิ'; dlg_defaults = {'68', '64'}; opts. Resize = 'เปิด'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty(dlg_ans) h=warndlg('คุณยกเลิกคำสั่ง inputdlg'); อื่น temp_normal = str2double(dlg_ans{1}) temp_away = str2double(dlg_ans{2}) สิ้นสุด waitfor(h); %[เพิ่มขั้นตอนการตรวจจับความเคลื่อนไหวด้านล่าง]

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

Run_Motion_Detector (a, inf) ในขณะที่ lightStr == 0 temp = temp_away ในขณะที่ temp tempF writeDigitalPin (a, 'D6', 1) ไฟสีแดงของพินใดก็ตามที่อยู่ในมอเตอร์สำหรับพัดลม writeDigitalPin (a, 'D9', 1); สิ้นสุดจุดสิ้นสุดในขณะที่ lightStr == 1 temp = temp_normal writeDigitalPin (a, 'D6', 1) % เปลี่ยนเป็นพินใดก็ตามที่ไฟปกติอยู่ในขณะที่ temp tempF writeDigitalPin (a, 'D6', 1) ไฟสีแดงที่พินอยู่ในนั้นด้วย มอเตอร์สำหรับเขียนพัดลมDigitalPin(a, 'D9', 1); ปลาย ปลาย

รหัสเต็มสามารถพบได้ที่นี่

แนะนำ: