Arduino สามารถใช้งานได้ตลอด 24/7 หรือไม่?


46

ฉันกำลังสร้างเว็บเซิร์ฟเวอร์ Arduino ที่เรียบง่ายและฉันต้องการให้มันเปิดอยู่ตลอดเวลา ดังนั้นจึงต้องอดทนทำงานอย่างต่อเนื่อง

ฉันใช้ Arduino Uno กับ Ethernet Shield มันใช้พลังงานจากแหล่งจ่ายไฟแบบ 5V @ 1A ที่เรียบง่าย

คำถามของฉัน:

  • ฉันจะมีปัญหาใด ๆ ที่ปล่อยให้ Arduino เปิดตลอดเวลาหรือไม่
  • มีบอร์ด Arduino อื่นที่ดีกว่าที่แนะนำสำหรับเรื่องนี้?
  • มีข้อควรระวังใดบ้างที่ฉันจำเป็นต้องฟังเกี่ยวกับเรื่องนี้หรือไม่?

คำถามแรก!
TheDoctor

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

คำตอบ:


58

คุณไม่ควรจะมีปัญหาใด ๆ ที่เก็บรักษาไว้ในตลอดเวลา millis()แต่บางสิ่งบางอย่างที่จะต้องพิจารณาเป็นเคาน์เตอร์ที่คุณอาจมีเช่นการใช้งานของ

จากArduino เอกสารบนมิลลิวินาที :

ตัวเลขนี้จะล้น (กลับไปที่ศูนย์) หลังจากประมาณ 50 วัน

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


19
จะแม่นยำuint32_tมิลลิวินาทีเป็นตัวแปรดังนั้นมันจะล้น ("กลับไปที่ศูนย์") ใน 4294967296 มิลลิวินาทีซึ่งเป็น ~ 49.7 วันประมาณ ~ 1193 ชั่วโมงหรือ ~ 71582 นาที
Connor Wolf

5
จากนั้นสิ่งที่คุณต้องทำคือใช้ uint32_t ที่เพิ่มขึ้นเมื่อการหมุนครั้งแรก จากนั้นคุณสามารถเพลิดเพลินไปกับ 5.846 × 10 ^ 8 ปีระหว่าง rollovers
80HD

4
ถ้าคุณทำมิลลิวินาที () - startTime (ด้วยเวลาเริ่มต้นเป็นแบบยาวที่ไม่ได้ลงนาม aka uint32_t) คุณจะได้รับผลลัพธ์ที่ถูกต้องเสมอเว้นแต่จะมีการเกิด
โอเวอร์โฟลว์

1
เพื่อให้แม่นยำยิ่งขึ้นการล้นเกิดขึ้นหลังจาก 49 วัน, 17 ชั่วโมง, 2 นาที, 47 วินาทีและ 295 มิลลิวินาที
Memet Olsen

4
การโอเวอร์โหลดมิลลิวินาที () ไม่เคยมีปัญหา ดูล้น (มิลลิวินาที) ... เป็นสิ่งที่ไม่ดี? สำหรับรายละเอียดเพิ่มเติม โดยทั่วไปหากคุณคำนวณช่วงเวลาโดยการลบโดยใช้ประเภทข้อมูลที่เหมาะสมคุณจะไม่พบปัญหาใด ๆ
Nick Gammon

33

สองสิ่งที่ต้องจำไว้ (นอกเหนือจากการพูดถึง @ Sachleen millis()):

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

  • หากรหัสของคุณใช้EEPROM.write()โปรดทราบว่า EEPROM ใน ATmega328P Uno ของคุณจะได้รับการจัดอันดับสำหรับการเขียน 100,000 รายการเท่านั้น


12

โปรดทราบว่าแฟลชและ EEPROM มีช่วงชีวิตที่ จำกัด (ประมาณ 10,000 และ 100,000 รอบการเขียนตามลำดับ) ดังนั้นหากคุณเขียนจดหมายจำนวนมากพวกเขาอาจเสียหายได้ ในการทดสอบที่ฉันทำ EEPROM ภายนอกใช้เวลาประมาณ 3 วันในการเริ่มเสียหาย


1
ในขณะที่เอกสารประกอบอาจแสดงรายการ 10k รอบการทดสอบจำนวนมากได้แสดง ~ 100k เป็นปัญหาที่เกิดขึ้น
Ron

อายุการใช้งาน EEPROM คือ 100,000 รอบการเขียนขั้นต่ำตามแผ่นข้อมูล ฉันคิดว่าฉันจำได้ว่าเคยอ่านการทดสอบที่ความเสียหายเริ่มต้นใกล้กับหนึ่งล้านเขียน
user2973

10

การใช้ Arduino 24/7 ไม่น่าจะมีปัญหา

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

การโหลดเซิร์ฟเวอร์ควรเป็นสิ่งที่ควรคำนึงถึงยิ่งมีการโหลดบนเซิร์ฟเวอร์มากเท่าไหร่ก็ยิ่งต้องมีการประมวลผลมากขึ้นเท่านั้น


3
ATmega ไม่มีโหมดพลังงานต่ำเช่นคอมพิวเตอร์ทั่วไปดังนั้นการโหลดจึงไม่เกี่ยวข้อง หากคุณไม่ได้ทำการคำนวณที่ใช้งานอยู่มันเป็นเพียงการรอคอย การใช้พลังงานเมื่อใช้งานจริง ๆ แล้วค่อนข้างคงที่ (ยกเว้นสิ่งต่าง ๆ เช่นการเขียนไปยัง EEPROM / แฟลช) อย่างน้อยสำหรับ ATmega MCU อาจมีการเปลี่ยนแปลงในการดึงพลังงานอินเตอร์เฟสของอีเธอร์เน็ตที่กำหนดโดยการโหลดการจราจร แต่ไม่มีอะไรน่าจะสร้างความร้อนมากพอที่จะเป็นปัญหาเว้นแต่จะอยู่ในสุญญากาศที่สมบูรณ์แบบหรือบนตัวทำความร้อนหรือบางอย่าง
Connor Wolf

1
Atmega328pมีโหมดสลีปพลังงานต่ำที่เหลือ ~ 0.1 uA
JRobert

2
ซึ่งจะเกี่ยวข้องถ้ารหัสจริงทำให้โปรเซสเซอร์เข้าสู่โหมดสลีป
Chris Stratton

8

เราใช้ระบบการเข้าถึง RFID บน Arduino ของเราที่ Bloominglabs Hackerspace ใน Bloomington IN ตั้งแต่ปลายปี 2554 และนอกเหนือจากไฟฟ้าดับสองสามครั้งและการอัปเดตซอฟต์แวร์ที่มันทำงานอยู่ตลอดเวลาไม่มีปัญหา เมื่อไม่นานมานี้เราได้เพิ่มเทอร์โมเครือข่ายข้อตกลงเดียวกัน - มันทำงานได้ตลอดเวลา


ฉันก็มีระบบเข้าใช้ RFID ตลอดเวลา 24/7 ครั้งเดียวที่มัน "ล้มเหลว" คือถ้าไฟดับเพราะมันทำงานจากไฟเมน สิ่งนี้ดำเนินการมาตั้งแต่ปี 2011 โดยไม่มีปัญหา
Nick Gammon

ฮ่าฮ่าสตีฟเฮ้!
deltaray

@NickGammon ใช่ระบบของคุณเจ๋ง แต่ทำไมการตรวจสอบไม่ได้ขึ้นอยู่กับข้อมูลของการ์ด แต่เป็นเพียงโทเค็นโพสต์ UID? โปรดแสดงวิธีการแก้ปัญหาที่ฉลาด
user2497

ประเด็นของคุณคืออะไร? ที่ไม่เกี่ยวข้องกับคำถามของผู้โพสต์
sdcharle

6

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

นอกจากนี้ให้อากาศถ่ายเทได้ดี

มันขึ้นอยู่กับโปรแกรมที่ใช้เช่นกันหากเซิร์ฟเวอร์ของคุณให้บริการหน้าเว็บทุก ๆ ครั้งมันก็ไม่น่าจะมีปัญหา แต่ถ้าคุณคาดว่าปริมาณการใช้งานคงที่ Arduino ก็อาจร้อนขึ้นอย่างรวดเร็ว

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


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

@ChrisStratton โล่อีเธอร์เน็ตอาจมีพลังงานแตกต่างกันไปตามการใช้งาน นอกจากนี้ Arduino อาจอยู่ในสถานะใช้พลังงานต่ำ (ตัวอย่างเช่นนอนระหว่าง 12AM ถึง 5AM)
เพนกวินที่ไม่เปิดเผยตัว

4

ฉันไม่เคยวิ่ง Arduino มานานขนาดนั้น แต่ก็ไม่ควรมีปัญหา สิ่งหนึ่งที่ต้องระวังคือแรงดันไฟฟ้าขาเข้า

ในขณะที่ Arduino มีความสามารถในการจัดการ 7-20v เป็นสิ่งที่ใส่มากกว่า 12v สามารถร้อนมากเกินไปหลังจากระยะเวลานานและทำให้คณะกรรมการเกิดความเสียหาย ตามคำแนะนำอย่างรวดเร็วเพื่อหลีกเลี่ยงความร้อนสูงเกินไปของ Arduino ฉันจะรักษาแรงดันไฟฟ้าให้ใกล้เคียงกับ 7v มากที่สุด


4

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


คุณชนะฉันได้ไหม +1
hoosierEE

ฉันเชื่อว่าคลาส String ใช้ malloc และมันค่อนข้างบ่อย
user2973

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

4

ฉันสร้างจอภาพพลังงานเรียบง่ายด้วย Arduino ตัวแรกของฉัน มันใช้พลังงานผ่าน USB จากเว็บเซิร์ฟเวอร์ที่ใช้พลังงานจากการสำรองแบตเตอรี่ที่ค่อนข้างมาก (ซึ่งไม่มีความสามารถในการแจ้งเตือน)

นอกจากนี้ยังเชื่อมต่อกับที่ชาร์จโทรศัพท์มือถือที่เสียบเข้ากับปลั๊กไฟที่ไม่ใช่ของ UPS

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

ติดตั้งในช่วงปลายเดือนกันยายน 2556 ในวันที่ 23 มีนาคม 2557 - ฉันได้รับอีเมลฉบับแรก!

ดังนั้นฉันไม่ได้เห็นปัญหา (ไม่ได้ใช้มิลลิวินาที) แต่มันจะเก็บตัวอย่างพลังงานทุก ๆ 5 วินาที


1

Arduino สามารถใช้งานได้ตลอด 24/7 หรือไม่?

นี่คือคำถามความน่าเชื่อถือ ในความน่าเชื่อถือมีหลายสิ่งที่ต้องพิจารณา

  1. ซอฟต์แวร์ มีโปรแกรมที่มีประสิทธิภาพมากขึ้น มีโปรแกรมที่แข็งแกร่งน้อยกว่า ตัวอย่างเช่นสำหรับแอปพลิเคชันที่สำคัญการจัดสรรหน่วยความจำแบบไดนามิกจะหมดกำลังใจเนื่องจากอาจนำไปสู่การกระจายตัวของหน่วยความจำ แต่น่าเสียดายที่ Arduino พึ่งพาการจัดสรรหน่วยความจำแบบไดนามิกเป็นอย่างมาก ปัญหานี้รุนแรงขึ้นเนื่องจากบอร์ด Arduino ส่วนใหญ่มี RAM จำกัด
  2. ห้องสมุด ห้องสมุด Arduino หลายแห่งมีข้อผิดพลาด (แม้แต่ในตัวในแพ็คเกจ Arduino ก็ง่ายเหมือน WString!) ในการทำงานปกติข้อผิดพลาดดังกล่าวอาจไม่ปรากฏขึ้นเลย อย่างไรก็ตามคุณไม่สามารถหวังได้ว่า "ทุกอย่างจะดี" และ "ผู้ใช้" (หรือระบบย่อย) จะทำหน้าที่ตามที่คาดการณ์ไว้ ไลบรารีอาจมีขีด จำกัด (เช่นไม่ใช่ข้อบกพร่องที่เหมาะสม) ตัวอย่างเช่นผู้ใช้หลายคนอ้างถึงฟังก์ชั่น millis () ซึ่งจะรีเซ็ตหลังจาก 50 วัน หากไม่จัดการอย่างถูกต้องอาจนำไปสู่ข้อบกพร่องที่รุนแรง
  3. ความน่าเชื่อถือของฮาร์ดแวร์ (ไม่ได้พูดถึงโคลน Arduino ราคาถูก ... ) ที่นี่คลาสย่อยของคำถามย่อยใหม่จะเปิดขึ้น ฉันจะอ้างอิงชุดย่อยที่ จำกัด มากเท่านั้น
    • บอร์ด Arduino ออกแบบมาเพื่อความน่าเชื่อถือหรือไม่ (เช่น
      ความน่าเชื่อถือของตัวเก็บประจุที่ใช้แล้วคืออะไรและส่วนประกอบอื่น ๆ )
    • ความทนทานต่อ EMI หรือไม่ ฉันจะไม่พึ่งพาสิ่งนั้น: บอร์ด Arduino ส่วนใหญ่มีเพียงสองชั้นและขาดระนาบกราวด์ / กำลังที่เหมาะสม
    • EEPROM (นี่เป็นทั้งซอฟต์แวร์และฮาร์ดแวร์) ซอฟต์แวร์ของคุณใช้ EEPROM หรือไม่ การใช้อัลกอริทึมเพื่อป้องกันการวนซ้ำ (การเขียน / ลบซ้ำ ๆ ในเซลล์เดียวกัน) หรือไม่?
    • เวลาการเก็บรักษาหน่วยความจำแฟลช เวลาการเก็บข้อมูลลดลงตามอุณหภูมิและจำนวนรอบการเขียนโปรแกรม
    • รังสีไอออไนซ์ ใช่แม้ว่าความน่าจะเป็นนั้นต่ำมากอย่างน้อยที่ระดับน้ำทะเลความน่าจะเป็นของการเกิดเหตุการณ์ที่ทำให้เกิดรังสีเดียวนั้นไม่เป็นศูนย์และควรมีมาตรการตอบโต้ที่เพียงพอ (โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่า RAM ไม่มีการตรวจจับข้อผิดพลาด ) ในแอปพลิเคชันที่สำคัญ
    • คุณภาพของแหล่งจ่ายไฟ
    • สภาพแวดล้อมการทำงาน สภาพแวดล้อมที่ควบคุม 25- ° C หรือในกล่องดำเหนือหลังคา (70 ° C ภายใต้ดวงอาทิตย์ในฤดูร้อน) ยิ่งอุณหภูมิสูงขึ้นเท่าไหร่กลไกการย่อยสลายก็จะยิ่งเร็วขึ้นเท่านั้น
    • ...

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

วิธีการตอบโต้บางอย่างจะเพิ่มความน่าเชื่อถือ:

  • ใช้สุนัขเฝ้าบ้าน: เป็นการดีกว่าที่จะรีเซ็ตระบบที่ไม่ตอบสนองได้ดีกว่าการติดอยู่ / ทำงานผิดปกติ
  • หลีกเลี่ยงการใช้ไลบรารีใด ๆ ที่ใช้การจัดสรรหน่วยความจำ
  • ใช้งาน (ถ้าคุณใช้ EEPROM) อัลกอริทึมเพื่อรักษามันไว้!
  • แหล่งจ่ายไฟที่ดี
  • หลีกเลี่ยงสภาพแวดล้อมที่รุนแรง (อุณหภูมิสูงความชื้นสูงวงจรความร้อนขนาดใหญ่และต่อเนื่องเป็นต้น)

0

มันสามารถวิ่งได้ตลอด 24/7 ฉันใช้ 5V กับขา 5V หรือ 7808 กับขา Vin เพื่อถ่าย vreg เป็นการดีที่มันจะเป็น 6.5V แต่ฉันไม่มีอุปกรณ์ดังกล่าว คุณอาจต้องการฝาครอบตัวแยกบน 5V เพื่อที่จะดูดหนามเล็ก ๆ น้อย ๆ เมื่อจ่ายพลังงานให้กับอุปกรณ์ของคุณ

ฮาร์ดแวร์ใด ๆ ที่เชื่อมต่อที่ทำงานที่ 5V ฉันป้อนด้วย 7805 คุณสามารถใช้ LM317s หรือ LM350 แทน 78XXs แต่คุณจะต้องมีตัวต้านทานเล็กน้อยสำหรับทรัมป์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.