Là một Arduino có khả năng chạy 24/7?


46

Tôi đang tạo một máy chủ web Arduino đơn giản và tôi muốn bật nó mọi lúc. Vì vậy, nó phải chịu đựng để làm việc liên tục.

Tôi đang sử dụng Arduino Uno với Ethernet Shield. Nó được cung cấp với một nguồn cấp điện ổ cắm đơn giản 5V @ 1A.

Những câu hỏi của tôi:

  • Tôi có gặp vấn đề gì khi bật Arduino không?
  • Có một số bảng Arduino khác tốt hơn đề nghị cho điều này?
  • Có bất kỳ biện pháp phòng ngừa nào mà tôi cần chú ý về điều này?

Câu hỏi đầu tiên!
TheDoctor

Người điều hành lưu ý: dường như chúng tôi đang nhận được rất nhiều câu trả lời nói rằng nó hoạt động trong tình huống của họ. Nếu bạn có một cái gì đó kỹ thuật để thêm vào câu hỏi, hãy trả lời. Tuy nhiên, các câu trả lời kỹ thuật dường như bao gồm rằng nó hoạt động. Nếu bạn hoàn toàn phải nói rằng tình huống của bạn đã hoạt động, tốt hơn là thêm một bình luận.
Chim cánh cụt vô danh

Câu trả lời:


58

Bạn không nên có bất kỳ vấn đề nào trong việc giữ nó mọi lúc, tuy nhiên, một số điều cần xem xét là bất kỳ quầy nào bạn có thể có, như việc sử dụng millis().

Từ các tài liệu Arduino trên millis :

Con số này sẽ tràn (trở về số không), sau khoảng 50 ngày.

Vì vậy, đối với các dự án đang hoạt động trong thời gian dài, bạn có thể không thấy vấn đề ngay lập tức nhưng một cái gì đó như thế này có thể bật lên và gây ra lỗi.


19
Nói chính xác, millis là một uint32_tbiến, do đó, nó sẽ tràn ("trở về số 0") trong 4294967296 mili giây, tức là ~ 49,7 ngày, ~ 1193 giờ hoặc ~ 71582 phút.
Sói Connor

5
Sau đó, tất cả những gì bạn phải làm là sử dụng một uint32_t khác tăng khi lần đầu tiên cuộn qua. Sau đó, bạn có thể tận hưởng khoảng 5,846 × 10 ^ 8 năm giữa các lần quay vòng.
80HD

4
nếu bạn thực hiện millis () - startTime (với thời gian bắt đầu dưới dạng dài không dấu, còn gọi là uint32_t), bạn sẽ luôn nhận được kết quả hợp lệ trừ khi có nhiều hơn một lần tràn xảy ra
Lesto

1
Nói chính xác hơn, tràn xảy ra sau 49 ngày, 17 giờ, 2 phút, 47 giây và 295 mili giây.
Memet Olsen

4
Tràn tràn millis () không bao giờ phải là vấn đề. Xem millis () tràn ... một điều xấu? để biết thêm chi tiết. Về cơ bản nếu bạn tính các khoảng thời gian bằng cách trừ, sử dụng các loại dữ liệu phù hợp, bạn sẽ không bao giờ gặp vấn đề.
Nick Gammon

33

Một vài điều cần lưu ý (ngoài đề cập của @ Sachleen millis()):

  • Giống như bất kỳ thiết bị điện tử nào, nhiệt có thể gây rối. Bản thân bộ điều khiển vi mô dường như không phải là một vấn đề lớn từ góc độ nhiệt, nhưng các thành phần khác như bộ nguồn có thể gây ra sự cố.

  • Nếu mã của bạn sử dụng EEPROM.write(), hãy lưu ý rằng EEPROM trong Unmega328P của bạn chỉ được xếp hạng cho 100.000 lần ghi.


12

Hãy nhớ rằng flash và EEPROM có vòng đời giới hạn (tương ứng khoảng 10.000 và 100.000 chu kỳ viết), vì vậy nếu bạn viết nhiều cho chúng, chúng có thể bị hỏng. Trong một thử nghiệm tôi đã làm, một EEPROM bên ngoài mất khoảng 3 ngày để bắt đầu bị hỏng.


1
Mặc dù tài liệu có thể liệt kê các chu kỳ 10k, nhiều thử nghiệm đã cho thấy ~ 100k là nơi các vấn đề bắt đầu xảy ra.
Ron

Tuổi thọ của EEPROM là tối thiểu 100.000 chu kỳ ghi theo biểu dữ liệu. Tôi nghĩ rằng tôi nhớ đã đọc một bài kiểm tra mà tham nhũng bắt đầu ở mức gần một triệu bài viết.
dùng2973

10

Chạy Arduino 24/7 Không phải là một vấn đề.

Nhưng hãy chắc chắn rằng bạn có một trường hợp cho phép thông gió và bạn giữ nó trong một khu vực thông gió tốt. Cũng giống như máy tính, nếu bạn không giữ chúng trong môi trường có thể giữ cho chúng mát, chúng sẽ không giữ được bình tĩnh.

Tải máy chủ cũng là một điều cần xem xét, càng có nhiều tải trên máy chủ thì càng phải xử lý nhiều hơn và càng tạo ra nhiều nhiệt.


3
ATmega không có các chế độ năng lượng thấp truyền thống như các máy tính thông thường, do đó tải là không liên quan. Nếu bạn không thực hiện tính toán tích cực, thì đó chỉ là chờ đợi. Điện năng tiêu thụ khi chạy thực sự khá tĩnh (ngoại trừ những thứ như ghi vào EEPROM / flash), ít nhất là cho ATmega MCU. Có thể có các biến thể trong khả năng rút điện giao diện ethernet được xác định bởi tải lưu lượng, nhưng không có gì có thể tạo ra đủ nhiệt để trở thành vấn đề trừ khi nó ở trong chân không hoàn hảo hoặc trên lò sưởi hoặc thứ gì đó.
Sói Connor

1
Atmega328p có chế độ ngủ công suất thấp, thu hút ~ 0,1 uA.
JRobert

2
Điều này sẽ chỉ có liên quan nếu mã thực sự đặt bộ xử lý ngủ.
Chris Stratton

8

Chúng tôi đã chạy hệ thống truy cập RFID dựa trên Arduino của chúng tôi tại Bloominglabs Hackerspace ở Bloomington IN từ cuối năm 2011 và ngoài một vài lần mất điện và cập nhật phần mềm, nó chạy suốt ngày đêm, không vấn đề gì. Gần đây, chúng tôi đã thêm một bộ điều nhiệt nối mạng, cùng một thỏa thuận - nó chạy suốt ngày đêm.


Tôi cũng có một hệ thống truy cập RFID chạy 24/7. Lần duy nhất nó "thất bại" là nếu mất điện, vì nó chạy từ nguồn điện lưới. Điều này đã được chạy từ năm 2011 mà không có vấn đề.
Nick Gammon

Haha, này Steve!
deltaray

@NickGammon Có, hệ thống của bạn rất tuyệt, nhưng tại sao auth không dựa trên DATA thẻ, mà chỉ mã thông báo UID? Hãy chỉ cho chúng tôi một giải pháp thông minh.
user2497

ý bạn là sao? điều đó không liên quan đến câu hỏi của người đăng.
sdarle

6

Arduinos có thể chạy mà không gặp vấn đề gì trong một thời gian dài, mặc dù tùy thuộc vào điều kiện địa phương và cường độ tính toán mà bạn có thể phải gắn tản nhiệt.

Ngoài ra, giữ cho nó thông thoáng.

Điều này cũng phụ thuộc vào chương trình đang được sử dụng, nếu máy chủ của bạn đang phục vụ một trang mỗi lần, thì đó không phải là vấn đề, nhưng nếu bạn mong đợi lưu lượng truy cập liên tục thì Arduino có thể nóng lên nhanh chóng.

Bạn cũng muốn đảm bảo sự ổn định của nguồn cung cấp năng lượng, khi chạy thử nghiệm trên bàn với Arduino, đây không phải là vấn đề lớn, bit có thể trở thành vấn đề nếu chuyển đổi nguồn điện từ nguồn điện chính cho thiết bị cố định.


2
Không có lý do gì để mong đợi tải tính toán để làm cho Arduino quá nóng. Như đã được chỉ ra trong các câu trả lời dựa trên thực tế hơn, trường hợp bình thường là chạy ở mức đầy tải. Nếu có một bộ phận có thể quá nóng sẽ là bộ điều chỉnh điện áp, nhưng đó chủ yếu là chức năng của điện áp đầu vào, vì nó đã chạy ở mức gần như cao nhất dự kiến ​​khi không làm gì.
Chris Stratton

@ChrisStratton một lá chắn Ethernet có thể thay đổi công suất tùy thuộc vào cách sử dụng. Ngoài ra, Arduino có thể ở trạng thái năng lượng thấp (ví dụ, ngủ trong khoảng từ 12 giờ sáng đến 5 giờ sáng).
Chim cánh cụt ẩn danh

4

Tôi chưa bao giờ chạy Arduino lâu như vậy, nhưng không có vấn đề gì. Một điều cần chú ý là điện áp đầu vào.

Trong khi một Arduino có khả năng xử lý 7-20v vì đầu vào bất cứ thứ gì trên 12 v có thể bị quá nóng sau thời gian dài hơn và gây hư hỏng bo mạch. Theo khuyến cáo nhanh chóng để tránh mọi sự quá nhiệt của Arduino, tôi sẽ giữ điện áp càng gần 7v càng tốt.


4

Tôi muốn đề cập đến một vấn đề không xuất hiện thường xuyên nhưng có thể gây ra các vấn đề dài hạn. Rò rỉ bộ nhớ và phân mảnh Heap. Hầu như không ai mallocs trong các công cụ nhúng, nhưng nếu bạn làm, hãy làm đúng.


Bạn đánh tôi với nó, +1.
hoosierEE

Tôi tin rằng lớp String sử dụng malloc và nó khá phổ biến.
dùng2973

Đã đồng ý. Đặc biệt với máy chủ web, đảm bảo bạn không làm bất cứ điều gì có thể làm mất bộ nhớ, như sử dụng lớp String. Tuy nhiên thật dễ dàng để tránh điều đó. Tôi có một Arduino chạy như một máy chủ web để cho tôi biết nếu cửa nhà để xe của tôi bị đóng. Điều đó đã được chạy trong nhiều năm.
Nick Gammon

4

Tôi đã xây dựng một màn hình năng lượng đơn giản với Arduino đầu tiên của tôi. Nó được cung cấp qua USB từ một máy chủ web, đến lượt nó được cung cấp thông qua một bản sao lưu pin khá lớn (không có khả năng thông báo).

Nó cũng được kết nối với bộ sạc điện thoại di động cắm vào ổ cắm điện không phải của UPS.

Vì vậy, nếu mất điện, Arduino sẽ gửi một thông báo tới một chương trình nhỏ đang chạy trên máy chủ. Chương trình máy chủ lần lượt gửi cho tôi một thông báo email.

Nó được cài đặt vào cuối tháng 9 năm 2013, vào ngày 23 tháng 3 năm 2014 - Tôi đã nhận được email đầu tiên của mình!

Vì vậy, tôi đã không thấy một vấn đề (nó không sử dụng millis ()) nhưng nó sẽ lấy mẫu năng lượng cứ sau 5 giây.


1

Là một Arduino có khả năng chạy 24/7?

Đây là một câu hỏi về độ tin cậy. Trong độ tin cậy, có rất nhiều điều cần xem xét.

  1. Phần mềm. Có phần mềm mạnh mẽ hơn. Có phần mềm ít mạnh mẽ hơn. Ví dụ, đối với các ứng dụng quan trọng, việc cấp phát bộ nhớ động không được khuyến khích, vì nó có thể dẫn đến phân mảnh bộ nhớ. Thật không may, Arduino chủ yếu dựa vào phân bổ bộ nhớ động. Vấn đề này trở nên trầm trọng hơn vì hầu hết các bo mạch Arduino có RAM rất hạn chế.
  2. Các thư viện. Nhiều thư viện Arduino có lỗi (ngay cả những thư viện tích hợp trong gói Arduino, đơn giản như WString!). Trong hoạt động bình thường, các lỗi như vậy có thể không xuất hiện ở tất cả. Tuy nhiên, bạn không thể hy vọng rằng "mọi thứ sẽ ổn" và "người dùng" (hoặc hệ thống con) sẽ hoạt động như dự đoán. Các thư viện cũng có thể có giới hạn của họ (tức là không đúng lỗi). Chẳng hạn, nhiều người dùng đã trích dẫn hàm millis (), thiết lập lại sau 50 ngày. Điều này, nếu không được xử lý chính xác, có thể dẫn đến các lỗi nghiêm trọng.
  3. Độ tin cậy của phần cứng (thậm chí không nói về bản sao Arduino giá rẻ ...). Ở đây một lớp các câu hỏi con mới mở ra. Tôi sẽ chỉ trích dẫn một tập hợp con rất hạn chế.
    • Các bảng Arduino được thiết kế cho độ tin cậy? (ví dụ
      độ tin cậy của các tụ điện được sử dụng là gì? và các thành phần khác?)
    • Mạnh mẽ chống lại EMI? Tôi sẽ không dựa vào điều đó: hầu hết các bo mạch Arduino chỉ có hai lớp và thiếu một mặt phẳng điện / mặt đất thích hợp.
    • EEPROM (đây là cả phần mềm và phần cứng). Phần mềm của bạn có sử dụng EEPROM không? Là thực hiện một số thuật toán để ngăn chặn chu kỳ (ghi / xóa lặp đi lặp lại trên cùng một ô)?
    • Thời gian lưu giữ bộ nhớ flash. Thời gian duy trì giảm theo nhiệt độ, và cũng với số chu kỳ lập trình.
    • Bức xạ ion hóa. Có, ngay cả khi xác suất RẤT thấp, ít nhất là ở mực nước biển, xác suất xảy ra sự cố đơn lẻ do bức xạ là không bằng 0 và cần phải có biện pháp đối phó thích hợp (đặc biệt là xem xét rằng RAM không phát hiện lỗi phần cứng ) trong các ứng dụng quan trọng.
    • Chất lượng của nguồn cung cấp.
    • Môi trường hoạt động. Môi trường được kiểm soát 25 ° C, hoặc trong hộp đen trên mái nhà (70 ° C dưới ánh mặt trời vào mùa hè)? Nhiệt độ càng cao, tất cả các cơ chế suy thoái càng nhanh.
    • ...

Tuy nhiên, bạn không nên ngạc nhiên nếu arduino của bạn sẽ hoạt động hoàn hảo trong nhiều năm. Nhưng điều này không đảm bảo rằng mọi arduino sẽ.

Một số biện pháp đối phó sẽ tăng độ tin cậy:

  • Sử dụng cơ quan giám sát: tốt hơn là thiết lập lại một hệ thống không phản hồi, hơn là hệ thống bị kẹt / hoạt động sai.
  • Tránh sử dụng bất kỳ thư viện sử dụng cấp phát bộ nhớ.
  • Triển khai (nếu bạn sử dụng EEPROM) một thuật toán để bảo tồn nó!
  • Cung cấp năng lượng tốt.
  • Tránh các môi trường khắc nghiệt (nhiệt độ cao, độ ẩm cao, chu kỳ nhiệt lớn và liên tục, v.v.).

0

Nó chắc chắn có thể chạy 24/7. Tôi sử dụng chân 5V đến chân 5V hoặc chân 7809 cho chân Vin để giảm tải cho vreg. Lý tưởng nhất là 6,5V, nhưng tôi không có nguồn cung cấp như vậy. Bạn có thể muốn có một nắp decoupler trên 5V, để ngâm bất kỳ gai nhỏ nào khi cấp nguồn cho nguồn cung cấp của bạn.

Bất kỳ phần cứng nào được gắn ở mức 5V, tôi cung cấp với 7805. Bạn có thể sử dụng LM317 hoặc LM350 thay vì 78XX, nhưng bạn sẽ cần một vài điện trở cho những thứ đó, có lẽ là trimpots.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.