สารบัญ:

Fault-Tolerant Temperature Sensor Network Controller: 8 ขั้นตอน
Fault-Tolerant Temperature Sensor Network Controller: 8 ขั้นตอน

วีดีโอ: Fault-Tolerant Temperature Sensor Network Controller: 8 ขั้นตอน

วีดีโอ: Fault-Tolerant Temperature Sensor Network Controller: 8 ขั้นตอน
วีดีโอ: solid state relay connection || SSR || temperature controller || smart Electrical 2024, กรกฎาคม
Anonim
Fault-Tolerant Temperature Sensor Network Controller
Fault-Tolerant Temperature Sensor Network Controller

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

คอนโทรลเลอร์สามารถจัดการเซ็นเซอร์ได้สูงสุด 8 ตัวด้วย Arduino Uno (และอีกมากมายด้วย Arduino Mega หรือด้วยการดัดแปลงซอฟต์แวร์เล็กน้อย)

ขั้นตอนที่ 1: เรื่องราวเบื้องหลัง…

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

สิ่งที่แย่กว่านั้นคือ ความน่าเชื่อถือของเครือข่ายเซ็นเซอร์ลดลงส่วนใหญ่ในคืนฤดูหนาว ในขณะที่ฤดูร้อนแทบไม่มีปัญหา! เกิดอะไรขึ้นที่นี่?

ในการตรวจสอบว่าเซ็นเซอร์ตัวใดเป็นสาเหตุของปัญหา จำเป็นต้องเปิด/ปิดทีละตัวหรือเปิดใช้งานร่วมกัน

ขั้นตอนที่ 2: มันทำงานอย่างไร

DS18B20 (เซ็นเซอร์อุณหภูมิ) ใช้โปรโตคอล 1 สายที่เป็นกรรมสิทธิ์ซึ่งอนุญาตให้เซ็นเซอร์หลายตัวแชร์ดาต้าลิงค์ทั่วไป (สายเดียว) ดาต้าลิงค์ทั่วไปนี้เชื่อมต่อกับพิน GPIO ของ Arduino และถึง + 5 V ผ่านตัวต้านทานแบบดึงขึ้น – ไม่มีอะไรแปลก มีคำแนะนำมากมายที่ครอบคลุมการตั้งค่านี้

เคล็ดลับคือสายไฟของเซ็นเซอร์แต่ละตัวเชื่อมต่อกับพิน GPIO ของตัวเอง (เฉพาะ) เพื่อให้สามารถเปิดและปิดแยกกันได้ ตัวอย่างเช่น หากเซ็นเซอร์มีสาย Vcc เชื่อมต่อกับพิน #3 และ GND กับพิน #2 การตั้งค่าพิน #3 เป็น HIGH จะให้พลังงานแก่เซ็นเซอร์ (ไม่ต้องแปลกใจ) ในขณะที่การตั้งค่าพิน #2 เป็น LOW จะทำให้กราวด์ (แปลกใจเล็กน้อยสำหรับ ฉัน). การตั้งค่าพินทั้งสองให้เข้าสู่โหมดอินพุตจะ (เกือบ) แยกเซ็นเซอร์และการเดินสายออกจากกันโดยสมบูรณ์ ไม่ว่าภายในจะเกิดข้อผิดพลาด (เช่น ทางลัด) อย่างไร จะไม่รบกวนการทำงานของเซ็นเซอร์อื่นๆ

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

โปรดสังเกตว่า DS18B20 กินไฟสูงสุด 1, 5 mA ในขณะที่พิน Arduino หนึ่งพินสามารถจ่ายไฟ / จมสูงสุด 40 mA ดังนั้นจึงปลอดภัยอย่างสมบูรณ์ที่จะจ่ายไฟให้กับเซ็นเซอร์ด้วยพิน GPIO โดยตรง

ขั้นตอนที่ 3: วัสดุและเครื่องมือ

วัสดุ

  • 1 บอร์ด Arduino UNO
  • ส่วนหัวของหมุดตัวเมีย 3 ชิ้น: 1×4, 1×6 และ 1×6 (หรือนานกว่านั้น – ฉันตัดมันออกจากส่วนหัว 1×40 อันเดียว)
  • กาว
  • ลวดเปลือยเปล่า (อย่างน้อย 10 ซม.)
  • เทปฉนวน
  • วัสดุสิ้นเปลืองในการบัดกรี (ลวด, ฟลักซ์…)

เครื่องมือ

  • อุปกรณ์บัดกรี (เหล็ก, ที่ยึด, …)
  • คีมตัดขนาดเล็ก

ขั้นตอนที่ 4: แก้ไขสิ่งต่าง ๆ ด้วยกัน

แก้ไขสิ่งต่าง ๆ ด้วยกัน
แก้ไขสิ่งต่าง ๆ ด้วยกัน

กาวส่วนหัวพินตัวเมียกับส่วนหัวของบอร์ด Arduino:

  1. ส่วนหัว 1×4 ถัดจากส่วนหัวของหมุด "แอนะล็อก" ด้านข้างพร้อมหมุด A0–A4
  2. ส่วนหัว 1×6 ถัดจากส่วนหัวของพินดิจิทัลตัวแรก ด้านข้างพร้อมหมุด 2–7
  3. ส่วนหัว 1×6 ถัดจากส่วนหัวของพินดิจิทัลตัวที่สอง ด้านข้างพร้อมหมุด 8–13

สังเกตว่าส่วนหัวของฉันยาวกว่าเล็กน้อย… ฉันคิดว่าไม่มีข้อเสียและไม่มีข้อดี

ขั้นตอนที่ 5: เชื่อมต่อสิ่งต่าง ๆ เข้าด้วยกัน

Wire Things Together
Wire Things Together
Wire Things Together
Wire Things Together

เดินสายรถเมล์สาย 1:

  1. เชื่อมต่อสายนำทั้งหมดของส่วนหัวติดกาวที่ด้าน "ดิจิทัล" (ติดกับหมุด 2–13) โดยการบัดกรีลวดเปล่าเข้ากับมัน
  2. ประสานปลายสายนี้กับขา SCL (เชื่อมต่อภายในกับ A5)
  3. เชื่อมต่อสายนำทั้งหมดของส่วนหัวติดกาวที่ด้าน "แอนะล็อก" (หมุด A0–A3) โดยการบัดกรีลวดเปล่าเข้ากับมัน
  4. บัดกรีปลายสายนี้กับสาย A4 และ A5 (ฉันใช้ A5 และ A6 เพราะฉันมีบอร์ดที่มี A6 & A7)
  5. ประสานตัวต้านทาน 4k7 ระหว่างปลายอีกด้านของสายนี้กับสายพิน +5 V

หมายเหตุ:

  • พิน A0–A5 แม้ว่าจะทำเครื่องหมายเป็น "แอนะล็อก" แต่ก็สามารถใช้เป็นพินดิจิตอล GPIO ได้เช่นกัน
  • พิน SCL ที่ด้าน "ดิจิทัล" เชื่อมต่อภายในกับ A5 ที่ด้าน "แอนะล็อก" ต่อกับเฮดเดอร์ เป็นบัส 1 สาย
  • A4 (ใช้เป็นอินพุตแบบอะนาล็อก) วัดแรงดันไฟฟ้าของบัสเพื่อการวินิจฉัย นั่นเป็นเหตุผลว่าทำไมมันถึงเชื่อมต่อโดยตรงกับรถบัส
  • ฉันใช้ A6 แทน A4 เพราะฉันมีบอร์ดที่มี A6 & A7; เดิมทีฉันต้องการใช้ A7 เป็นบัสมาสเตอร์ 1 สาย แต่พินทั้งสองนี้ไม่สามารถกำหนดค่าให้เป็น GPIO ดิจิทัลได้
  • เพื่อป้องกันการเชื่อมต่อที่ไม่ถูกต้องของขั้วต่อเซ็นเซอร์ คุณสามารถละเว้น / ตัดหน้าสัมผัสที่ไม่ได้ใช้ (ไม่ได้เชื่อมต่อกับสายใด ๆ) จากขั้วต่อตัวผู้แต่ละตัวและเสียบเข้าไปในรูที่เกี่ยวข้องในส่วนหัวของหมุดที่ติดกาว

ขั้นตอนที่ 6: การเชื่อมต่อเซ็นเซอร์

การเชื่อมต่อเซ็นเซอร์
การเชื่อมต่อเซ็นเซอร์

คุณเพิ่งสร้างอาร์เรย์ขนาด 2×2 แปดซ็อกเก็ต คุณสามารถบัดกรีและประกอบคอนเน็กเตอร์ดูปองท์ 2×2 เข้ากับสายเซ็นเซอร์และต่อเข้ากับซ็อกเก็ตเหล่านี้ได้ ซอฟต์แวร์กำหนดค่าพินเพื่อให้แม้แต่พินเป็นพิน GND และพินคี่คือพิน Vcc สำหรับเซ็นเซอร์แต่ละตัว พิน Vcc เป็นเพียงพิน GND + 1 อีกสองพินของซ็อกเก็ต 2 × 2 (หนึ่งในสองพินนั้นในส่วนหัวที่ติดกาวและบัดกรี) ใช้สำหรับสายข้อมูลของเซ็นเซอร์ ไม่สำคัญว่าคุณใช้อะไร

ขั้นตอนที่ 7: ซอฟต์แวร์คอนโทรลเลอร์

ซอฟต์แวร์ควบคุม
ซอฟต์แวร์ควบคุม

ร่าง SerialThermometer เรียกใช้คอนโทรลเลอร์ คุณสามารถค้นหาได้ใน github เปิดและอัปโหลดโดยใช้ Arduino IDE

เป็นขั้นเป็นตอน:

  1. เปิด Arduino IDE ของคุณและติดตั้งไลบรารี DallasTemperature และการพึ่งพาทั้งหมดผ่าน Sketch | รวมห้องสมุด | จัดการห้องสมุด
  2. โคลนที่เก็บ git หากไม่คุ้นเคยกับ git ให้ดาวน์โหลดและแตกไฟล์ zip นี้ไว้ที่ใดก็ได้บนคอมพิวเตอร์ของคุณ
  3. เปิดแบบร่าง SerialThermometer ใน Arduino IDE ของคุณ
  4. เชื่อมต่อบอร์ด Arduino ที่ดัดแปลงเข้ากับคอมพิวเตอร์ด้วยสาย USB (วิธีมาตรฐาน)
  5. อัปโหลดภาพร่างโดยใช้ Arduino IDE. ของคุณ
  6. เปิด Serial Monitor ผ่านเครื่องมือ | จอภาพแบบอนุกรม
  7. คุณควรเห็นเอาต์พุตการวินิจฉัยที่มีการตรวจวัดทางกายภาพหลายอย่างตามด้วยการอ่านอุณหภูมิ – แต่ละซ็อกเก็ตเซ็นเซอร์ในบรรทัดเดียว หากจำนวนเซ็นเซอร์แตกต่างกันเมื่อเปิดแยกกันและเมื่อเปิดพร้อมกันทั้งหมด) ให้วินิจฉัยซ้ำจนกว่าจะได้รับการแก้ไข แต่ไม่ต้องกังวล การวินิจฉัยยังมีการวัดอุณหภูมิอีกด้วย!

ดูภาพที่มีคำอธิบายประกอบสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเอาต์พุตการวินิจฉัย

ขั้นตอนที่ 8: สรุป

ฉันมีความรู้สึกอย่างแรงกล้าว่าเครือข่ายเซ็นเซอร์ขัดข้องเกิดจากสายไฟที่มีความจุสูง - สายเคเบิล LIYY 314 ประมาณ 10 ม. (3 × 0, 14 มม.²) สำหรับแต่ละเซ็นเซอร์ การทดลองของฉันแสดงให้เห็นว่าการสื่อสารหยุดชะงักหากมีความจุประมาณหรือสูงกว่า 0.01 μF ระหว่างบัส 1 สายและกราวด์ ฉันคิดว่าเพราะตัวต้านทานแบบดึงขึ้น 4k7 ไม่สามารถดึงบัสไปที่ + 5 V ได้เร็วพอที่จะปฏิบัติตามข้อจำกัดของโปรโตคอล.

ในการตั้งค่าของฉัน มันเกิดขึ้นเมื่อเชื่อมต่อเซ็นเซอร์มากกว่า 3 ตัวเข้าด้วยกัน จากนั้นตัวควบคุมจะวนซ้ำในวงจรการวินิจฉัย วัดอุณหภูมิโดยเซ็นเซอร์ด้วยเซ็นเซอร์ (สิ่งที่เจ๋งเกินไป…)

แต่เซ็นเซอร์ตัวที่ 5 (28:ff:f2:41:51:17:04:31) ก็ดูไม่ค่อยสบาย (อาจจะบัดกรีผิด) ดังนั้นฉันจึงสามารถตรวจสอบเพิ่มเติมได้!

แนะนำ: