สารบัญ:
- ขั้นตอนที่ 1: การพัฒนาซอฟต์แวร์
- ขั้นตอนที่ 2: การทำงานกับเซ็นเซอร์อุณหภูมิสองตัว - รายละเอียด
- ขั้นตอนที่ 3: ผลลัพธ์เบื้องต้น
วีดีโอ: DIY Logging Thermometer พร้อมเซ็นเซอร์ 2 ตัว: 3 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
โครงการนี้เป็นการปรับปรุงจากโครงการก่อนหน้าของฉัน "DIY Logging Thermometer" บันทึกการวัดอุณหภูมิไปยังการ์ด micro SD
การเปลี่ยนแปลงฮาร์ดแวร์
ฉันเพิ่มเซ็นเซอร์อุณหภูมิ DS18B20 ลงในโมดูลนาฬิกาแบบเรียลไทม์ซึ่งมีข้อกำหนดอยู่บนแผงวงจรพิมพ์สำหรับอุปกรณ์นี้ และเพิ่มสายที่เหมาะสมจากพิน "DS" ของ RTC ไปยัง D2 ของ Arduino
การเปลี่ยนแปลงซอฟต์แวร์
จากนั้นฉันก็เพิ่มและแก้ไขซอฟต์แวร์ การเปลี่ยนแปลงหลักคือ:
จอ LCD แสดงอุณหภูมิสองระดับ "เข้า" และ "ออก"
ไฟล์บันทึกที่บันทึกในการ์ด SD มีฟิลด์อุณหภูมิสองฟิลด์ "อุณหภูมิเข้า" และ "อุณหภูมิออก"
เนื่องจากบันทึกในการ์ด SD นานขึ้น บัฟเฟอร์สำหรับ EEPROM จึงมีขนาดใหญ่ขึ้น และด้วยเหตุนี้เอง ฉันจึงเริ่มมีปัญหาหน่วยความจำขัดแย้งกัน ฉันได้ทำการเปลี่ยนแปลงหลายอย่างเพื่อลดการใช้หน่วยความจำแบบไดนามิก รวมถึงการใช้อาร์เรย์อักขระสำหรับสตริงทั้งหมดแทนออบเจ็กต์สตริง
ส่วนหนึ่งของซอฟต์แวร์ที่ได้รับอุณหภูมิมีการดัดแปลงที่สำคัญ ซึ่งส่วนใหญ่เกี่ยวข้องกับการระบุโพรบที่ "เข้า" และส่วนใด "ออก" การระบุนี้ส่วนใหญ่เป็นไปโดยอัตโนมัติ หากเปลี่ยนโพรบด้วยเหตุผลบางประการ สามารถแก้ไขได้โดยถอดปลั๊กโพรบ "ออก" แล้วเสียบกลับเข้าไปใหม่อีกครั้ง ฉันไม่ได้ประสบกับการพลิกกลับนี้ด้วยตัวเอง โปรแกรมเมอร์หรือผู้ใช้ไม่จำเป็นต้องพิมพ์ที่อยู่ของเซ็นเซอร์ ซอฟต์แวร์จะค้นหาที่อยู่ของเซ็นเซอร์อุณหภูมิด้วยตัวเอง
จากการทดสอบที่ฉันทำ การระบุหัววัดอุณหภูมิ และการตอบสนองต่อการถอดและเปลี่ยนการ์ด SD ยังคงทำงานได้อย่างราบรื่น
ขั้นตอนที่ 1: การพัฒนาซอฟต์แวร์
ขั้นตอนนี้จะให้ซอฟต์แวร์ตัวเต็มสำหรับโครงการที่เสร็จสมบูรณ์ ฉันรวบรวมโดยใช้ Arduino IDE 1.6.12 ใช้หน่วยความจำโปรแกรม 21, 400 ไบต์ (69%) และหน่วยความจำแบบไดนามิก 1, 278 ไบต์ (62%)
ฉันได้ใส่ความคิดเห็นในโค้ดโดยหวังว่าจะทำให้ชัดเจนว่าเกิดอะไรขึ้น
ขั้นตอนที่ 2: การทำงานกับเซ็นเซอร์อุณหภูมิสองตัว - รายละเอียด
ซอฟต์แวร์นี้ใช้ไลบรารี "OneWire" ไม่ใช้ "DallasTemperature" หรือไลบรารีที่คล้ายกัน แทนคำสั่งและข้อมูลจากเซ็นเซอร์อุณหภูมิจะทำโดยภาพร่างและสามารถมองเห็นและเข้าใจได้ค่อนข้างง่าย ฉันพบรายการคำสั่งห้องสมุด OneWire ที่มีประโยชน์ที่
www.pjrc.com/teensy/td_libs_OneWire.html
เมื่อมีเซ็นเซอร์อุณหภูมิสองตัว (หรือมากกว่า) จำเป็นต้องระบุว่าตัวไหนเป็นตัวไหน
ฉันเรียกเซ็นเซอร์สองตัวของฉันว่า "เข้า" และ "ออก" ซึ่งเป็นเรื่องปกติของหน่วยการค้าที่มีเซ็นเซอร์ในโมดูลการแสดงผลซึ่งปกติแล้วจะเป็น "ภายใน" และเซ็นเซอร์อีกตัวบนสายเคเบิลเพื่อให้สามารถวางอีกด้านหนึ่งได้ ของผนังภายนอกจึงกลายเป็น "ภายนอก"
วิธีปกติในการระบุโพรบที่แตกต่างกันคือการค้นหาที่อยู่ของอุปกรณ์และใส่ไว้ในซอฟต์แวร์พร้อมกับฉลากระบุ โครงการอื่นๆ ทั้งหมดที่ฉันเคยเห็นใช้วิธีนี้ ไม่ว่าพวกเขาจะใช้ไลบรารี DallasTemperature หรือไม่ก็ตาม
ความตั้งใจของฉันคือซอฟต์แวร์ควรระบุเซ็นเซอร์โดยอัตโนมัติและจัดสรรให้ "เข้า" และ "ออก" อย่างถูกต้อง ทำได้ง่ายโดยวางบนพิน Arduino แยกกัน ในโปรเจ็กต์นี้ A0 ถึง A3 และ A6 และ A7 ทั้งหมดไม่ได้ใช้ ดังนั้นจึงสามารถใช้หนึ่งในนั้นในกรณีนี้ อย่างไรก็ตาม ฉันประสบความสำเร็จในการให้การระบุอัตโนมัติทำงานกับเซ็นเซอร์ทั้งสองบนบัส OneWire เดียวกันได้
มันทำงานเช่นนี้
ไลบรารี OneWire มีคำสั่ง "OneWireObject.search(address)" โดยที่ "address" เป็นอาร์เรย์ขนาด 8 ไบต์ และ "OneWireObject" เป็นชื่อของอินสแตนซ์ของวัตถุ OneWire ที่สร้างขึ้นก่อนหน้านี้ สามารถมีชื่อใดก็ได้ที่คุณชอบ ของฉันเรียกว่า "ds" เมื่อคุณออกคำสั่ง "ค้นหา" นี้ ไลบรารี OneWire จะส่งสัญญาณบางอย่างบนบัสสายเดียว หากพบเซ็นเซอร์ตอบสนอง จะส่งคืนค่าบูลีน "TRUE" และเติมอาร์เรย์ "ที่อยู่" ด้วยตัวระบุที่ไม่ซ้ำกันขนาด 8 ไบต์ของเซ็นเซอร์ ตัวระบุนี้มีรหัสครอบครัว (ตอนต้น) และผลรวมของเช็ค (ตอนท้าย) ในระหว่างนั้นมีขนาด 6 ไบต์ที่ระบุเซ็นเซอร์ภายในตระกูลโดยเฉพาะ
จะได้รับผลลัพธ์หนึ่งรายการ (ที่อยู่และส่งคืน TRUE) ทุกครั้งที่ได้รับคำสั่งนี้ โดยวนผ่านอุปกรณ์ทั้งหมดบนบัส OneWire เมื่ออุปกรณ์ทุกเครื่องตอบรับแล้ว ในครั้งถัดไปที่ออก "การค้นหา" การส่งคืนจะเป็น "FALSE" ซึ่งแสดงว่าอุปกรณ์ทั้งหมดบนรถบัสได้ตอบกลับแล้ว หากมีการออก "การค้นหา" อีกครั้ง อุปกรณ์เครื่องแรกจะตอบสนองอีกครั้ง และอื่นๆ อย่างไม่มีกำหนด อุปกรณ์จะตอบสนองในลำดับเดียวกันเสมอ ลำดับของการตอบสนองจะขึ้นอยู่กับตัวระบุของอุปกรณ์บนบัส OneWire ดูเหมือนว่าจะเป็นการค้นหาแบบไบนารีโดยเริ่มจากบิตที่มีนัยสำคัญน้อยที่สุดของตัวระบุอุปกรณ์ โปรโตคอลที่ใช้ค้นหาตัวระบุเหล่านี้ค่อนข้างซับซ้อน และอธิบายไว้ในหน้า 51 - 54 ของเอกสาร "Book of iButton Standards" ซึ่งเป็นเอกสาร pdf ที่ https://pdfserv.maximintegrated.com/en/an/AN937.pd …
ฉันทดสอบกระบวนการค้นหานี้ด้วยเซ็นเซอร์ 1 ถึง 11 ตัวบนรถบัสคันเดียว และพบว่าลำดับการตอบสนองสำหรับชุดอุปกรณ์ที่กำหนดนั้นเหมือนกันเสมอ แต่เมื่อฉันเพิ่มอุปกรณ์ใหม่ที่ส่วนท้ายของรถบัส ไม่มีทาง ฉันสามารถคาดเดาได้ว่าโฆษณาจะปรากฏที่ใดในลำดับการค้นหา ตัวอย่างเช่น เซ็นเซอร์ตัวที่ 11 ที่ฉันเพิ่มเข้ามาที่ตำแหน่งที่ 5; และเซ็นเซอร์ตัวแรกที่ฉันใส่ไว้บนรถบัส ก็ไม่อยู่ในลำดับการค้นหาสุดท้าย
ในโครงการนี้มีเซ็นเซอร์สองตัว หนึ่งในนั้นจะถูกบัดกรีเข้าที่บนโมดูล RTC อีกอันเสียบปลั๊กโดยใช้ส่วนหัวของตัวผู้บนกระดานและส่วนหัวของตัวเมียบนสายเคเบิล สามารถถอดออกได้ง่าย
เมื่อถอดเซ็นเซอร์บนสายเคเบิล (เซ็นเซอร์ "ออก") คำสั่ง "ค้นหา" จะสร้าง "TRUE" และ "FALSE" สลับกัน
เมื่อต่อเซ็นเซอร์เข้ากับสายเคเบิล คำสั่ง "search" จะสร้างวงจร 3 ขั้นตอน โดยจะส่ง "TRUE" สองครั้งและ "FALSE" หนึ่งรายการกลับมา
ขั้นตอนของฉันคือการออกคำสั่ง "ค้นหา" 1, 2 หรือ 3 คำสั่ง จนกว่าจะได้ผลลัพธ์ FALSE จากนั้นฉันก็ออกคำสั่ง "ค้นหา" อีก 2 คำสั่ง หากตัวที่สองล้มเหลว (เช่น FALSE) ฉันรู้ว่ามีเซ็นเซอร์เพียงตัวเดียวบนรถบัสและเป็นเซ็นเซอร์ "ใน" ข้อมูลประจำตัวของอุปกรณ์จะถูกบันทึกและจัดสรรให้กับเซ็นเซอร์ "ใน"
ในเวลาต่อมา หากการส่งคืนครั้งแรกและครั้งที่สองเป็นจริง ฉันรู้ว่ามีเซ็นเซอร์สองตัวบนรถบัส ฉันตรวจสอบว่าตัวใดตัวหนึ่งมีตัวตนเท่ากับเซ็นเซอร์ "ใน" และจัดสรรอีกอันให้เป็นเซ็นเซอร์ "ออก"
อีกประเด็นรองคือการรวบรวมผลลัพธ์จากเซ็นเซอร์สองตัวนั้นทำได้โดยส่ง "การแปลงเริ่มต้น" โดยคำสั่ง "ข้าม ROM" เรามีตัวเลือกในการส่งคำสั่งไปยังอุปกรณ์เครื่องเดียว (โดยใช้ตัวระบุที่ไม่ซ้ำกัน) หรือไปยังอุปกรณ์ทั้งหมดบนบัส (ข้าม ROM) รหัสมีลักษณะดังนี้:
ds.รีเซ็ต(); //
// ส่งคำสั่ง "skip ROM" (เพื่อให้คำสั่งถัดไปใช้งานได้ในเซ็นเซอร์ทั้งสอง) ds.write(0xCC); // ข้ามคำสั่ง ROM ds.write(0x44, 0); // เริ่มการแปลงในโพรบทั้งสอง temperature_state = wait_convert; // ไปที่สถานะล่าช้า
เมื่อผ่านเวลาหน่วงที่ต้องการแล้ว อุณหภูมิจะได้รับจากเซ็นเซอร์แต่ละตัวแยกกัน นี่คือรหัสสำหรับเซ็นเซอร์ตัวที่สอง (เช่น เซ็นเซอร์ OUT)
ถ้า (flag2) {
ปัจจุบัน = ds.reset(); ds.select(DS18B20_addr_out); ds.write(0xBE); // อ่าน Scratchpad ของข้อมูลโพรบ "ออก" [0] = ds.read(); ข้อมูล[1] = ds.read(); temperature_out = (ข้อมูล[1] << 8) + data[0]; temperature_out = (6 * temperature_out) + temperature_out / 4; // คูณด้วย 6.25 } else { // ไม่ใช่ flag2 - เช่น Out sensor ไม่ได้เชื่อมต่อ temperature_out = 30000; // แก้ไขที่ 300.00 C หากเซ็นเซอร์อุณหภูมิไม่ทำงาน } // สิ้นสุด if (flag2)
ฉันทำงานส่วนใหญ่ของซอฟต์แวร์นี้ในแบบร่างแบบสแตนด์อโลนที่มีเซ็นเซอร์อุณหภูมิอยู่ในนั้น โดยไม่ต้องยุ่งยากกับการรองรับ LCD, RTC และการ์ด SD ร่างการพัฒนานี้อยู่ในไฟล์ด้านล่าง
ขั้นตอนที่ 3: ผลลัพธ์เบื้องต้น
แผนภูมินี้เป็นการผสมผสานระหว่างสองวันแรกของการอ่าน
แนะนำ:
พรีแอมป์ไมโครโฟนมิกเซอร์ 4 ตัว: 6 ขั้นตอน (พร้อมรูปภาพ)
4 Microphones Mixer Preamplifier: เมื่อก่อนฉันถูกขอให้แก้ปัญหาต่อไปนี้: คณะนักร้องประสานเสียงขนาดเล็กเล่นไมโครโฟนคงที่จำนวนสี่ตัว สัญญาณเสียงจากไมโครโฟนทั้งสี่นี้จะต้องได้รับการขยาย ผสม และสัญญาณที่ได้จะต้องนำไปใช้กับพลังเสียงและ
ไฟ LED กะพริบโดยใช้ตัวจับเวลาและโพเทนชิโอมิเตอร์ 555 ตัว: 4 ขั้นตอน
LED เต้นเป็นจังหวะโดยใช้ตัวจับเวลาและโพเทนชิโอมิเตอร์ 555 ตัว: สวัสดี! ในคำแนะนำนี้ เราจะแสดงวิธีสร้างวงจร LED Dimmer ที่ทำงานบนลูปตั้งเวลาแบบปรับได้โดยใช้โพเทนชิออมิเตอร์ ตัวจับเวลา 555 และส่วนประกอบวงจรพื้นฐานอื่นๆ เราได้รับแนวคิดสำหรับโครงการนี้ครั้งแรกจาก
DIY Glove Controller พร้อมเซนเซอร์ E-Textile: 14 ขั้นตอน (พร้อมรูปภาพ)
ตัวควบคุมถุงมือ DIY พร้อมเซ็นเซอร์ E-Textile: คำแนะนำนี้เป็นการสอนทีละขั้นตอนเกี่ยวกับวิธีการทำถุงมือข้อมูลด้วยเซ็นเซอร์ eTextile โครงการนี้เป็นความร่วมมือระหว่าง Rachel Freire และ Artyom Maxim Rachel เป็นนักออกแบบสิ่งทอถุงมือและเซ็นเซอร์ eTextile และ Arty เป็นผู้ออกแบบวงจร
Arduino DIY Light Meter พร้อมเซ็นเซอร์ BH1750: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino DIY Light Meter พร้อมเซ็นเซอร์ BH1750: ในคำแนะนำนี้ ฉันจะแสดงวิธีสร้างเครื่องวัดแสงด้วยจอแสดงผล LCD ขนาดใหญ่ของ Nokia 5110 โดยใช้ Arduino การสร้างเครื่องวัดแสงเป็นประสบการณ์การเรียนรู้ที่ยอดเยี่ยม เมื่อคุณสร้างโครงการนี้เสร็จแล้ว คุณจะมีความเข้าใจมากขึ้น
ESP32 WiFi Weather Station พร้อมเซ็นเซอร์ BME280: 7 ขั้นตอน (พร้อมรูปภาพ)
ESP32 WiFi Weather Station พร้อมเซ็นเซอร์ BME280: เพื่อน ๆ ที่รักยินดีต้อนรับสู่บทช่วยสอนอื่น! ในบทช่วยสอนนี้ เราจะสร้างโครงการสถานีตรวจอากาศที่เปิดใช้งาน WiFi! เราจะใช้ชิป ESP32 ใหม่ที่น่าประทับใจพร้อมกับจอแสดงผล Nextion เป็นครั้งแรก ในวิดีโอนี้เราจะ