Um Arduino é capaz de funcionar 24/7?

46

Estou criando um servidor web simples do Arduino e quero mantê-lo ligado o tempo todo. Portanto, ele deve permanecer trabalhando continuamente.

Estou usando um Arduino Uno com um escudo Ethernet. É alimentado por uma fonte de alimentação simples de 5V a 1A.

Minhas perguntas:

  • Terei algum problema ao deixar o Arduino ligado o tempo todo?
  • Existe alguma outra placa Arduino mais recomendada para isso?
  • Existem precauções que eu preciso prestar atenção em relação a isso?
Butzke
fonte
Primeira pergunta!
precisa
Nota do moderador: parece que estamos recebendo muitas respostas que afirmam que funcionou na situação delas. Se você tiver algo técnico a acrescentar à pergunta, sinta-se à vontade para responder. No entanto, as respostas técnicas parecem cobrir que funciona. Se você absolutamente deve declarar que sua situação funcionou, seria melhor adicionar um comentário.
Anonymous Penguin

Respostas:

58

Você não deve ter problemas em mantê-lo o tempo todo, no entanto, algo a considerar é qualquer contador que possa ter, como o uso de millis().

Nos documentos do Arduino em millis :

Esse número excederá (volte a zero), após aproximadamente 50 dias.

Portanto, para projetos que estão em andamento por longos períodos de tempo, talvez você não veja um problema imediatamente, mas algo assim pode aparecer e causar erros no caminho.

sachleen
fonte
19
Para ser mais preciso, millis é uma uint32_tvariável e, portanto, transborda ("volte a zero") em 4294967296 milissegundos, ou seja, ~ 49,7 dias, ~ 1193 horas ou ~ 71582 minutos.
Connor Wolf
5
Então tudo que você precisa fazer é usar outro uint32_t que incrementa quando o primeiro passa o mouse. Depois, você pode desfrutar de aproximadamente 5.846 × 10 ^ 8 anos entre as rolagens.
80
4
se você fizer millis () - startTime (com hora de início como um unsigned long, aka uint32_t), você vai sempre obter um resultado válido a não ser mais do que um estouro é que aconteceu
Lesto
1
Para ser mais preciso, o excesso ocorre após 49 dias, 17 horas, 2 minutos, 47 segundos e 295 milissegundos.
Memet Olsen
4
O excesso de millis () nunca precisa ser um problema. Veja o estouro de millis () ... uma coisa ruim? para mais detalhes. Basicamente, se você calcular intervalos de tempo por subtração, usando os tipos de dados apropriados, nunca terá um problema.
Nick Gammon
33

Lembre-se de algumas coisas (fora a menção de @ Sachleen millis()):

  • Como qualquer eletrônica, o calor pode ser perturbador. O microcontrolador em si provavelmente não será um grande problema do ponto de vista do calor, mas outros componentes, como a fonte de alimentação, podem causar problemas.

  • Se o seu código for usado EEPROM.write(), lembre-se de que a EEPROM no ATmega328P do Uno é classificada apenas para 100.000 gravações.

Matthew G.
fonte
12

Lembre-se de que o flash e a EEPROM têm vida útil limitada (cerca de 10.000 e 100.000 ciclos de gravação, respectivamente); portanto, se você estiver escrevendo muito sobre eles, eles poderão ficar corrompidos. Em um teste que fiz, uma EEPROM externa levou cerca de 3 dias para começar a ficar corrompida.

O médico
fonte
1
Enquanto a documentação pode listar 10k ciclos, muitos testes mostraram ~ 100k é onde os problemas começam a ocorrer.
Ron
A vida útil da EEPROM é de no mínimo 100.000 ciclos de gravação, de acordo com a folha de dados. Acho que lembro de ler um teste em que a corrupção começou em quase um milhão de gravações.
user2973
10

Executar o Arduino 24/7 não deve ser um problema.

Mas certifique-se de ter um gabinete que permita ventilação e mantenha-o em uma área bem ventilada. Assim como os computadores, se você não os mantiver em um ambiente que possa mantê-los frios, eles não ficarão frios.

A carga do servidor também deve ser considerada, quanto mais carga houver no servidor, mais processamento será necessário e mais calor será gerado.

JVarhol
fonte
3
O ATmega não possui modos tradicionais de baixo consumo de energia, como os computadores normais; portanto, a carga é irrelevante. Se você não está fazendo computação ativa, é apenas uma espera de rotação. O consumo de energia durante a execução é realmente praticamente estático (exceto coisas como gravar na EEPROM / flash), pelo menos para o ATmega MCU. Pode haver variações no consumo de energia da interface Ethernet determinado pelo carregamento do tráfego, mas nada provavelmente gera calor suficiente para ser um problema, a menos que esteja em um vácuo perfeito ou em um aquecedor ou algo assim.
Connor Wolf
1
O Atmega328p possui um modo de economia de energia que consome ~ 0,1 uA.
JRobert 04/04
2
O que seria relevante apenas se o código realmente colocar o processador em suspensão.
Chris Stratton
8

Operamos nosso sistema de acesso RFID baseado em Arduino no Bloominglabs Hackerspace em Bloomington, IN, desde o final de 2011 e, além de algumas falhas de energia e atualizações de software, ele é executado o tempo todo, sem problemas. Mais recentemente, adicionamos um termostato em rede, o mesmo negócio - ele funciona 24 horas por dia.

sdcharle
fonte
Eu também tenho um sistema de acesso RFID funcionando 24/7. O único momento em que "falha" é se a energia for desligada, porque é executada a partir da rede elétrica. Isso está em execução desde 2011, sem problemas.
Nick Gammon
Haha, ei Steve!
Deltaray 08/04
@NickGammon Sim, seu sistema é legal, mas por que a autenticação não se baseia nos dados do cartão, mas apenas no UID do token? Por favor, mostre-nos uma solução inteligente.
precisa saber é o seguinte
onde você quer chegar? isso não tem relação com a pergunta do pôster.
Sdcharle 6/11/2017
6

Os Arduinos podem funcionar sem problemas por um tempo muito longo, embora, dependendo das condições locais e da intensidade do cálculo, você possa ter que conectar dissipadores de calor.

Além disso, mantenha-o bem ventilado.

Depende do programa que está sendo usado também, se o servidor estiver exibindo uma página de vez em quando, não deve ser um problema, mas se você espera tráfego constante, o Arduino pode esquentar rapidamente.

Você também desejará garantir a estabilidade da fonte de alimentação. Ao executar experimentos de bancada com um Arduino, isso não é um grande problema, mas pode se tornar um problema se a energia da rede elétrica for transformada em um dispositivo permanente.

Manishearth
fonte
2
Não há razão alguma para esperar que a carga computacional cause um superaquecimento no Arduino. Como foi apontado nas respostas mais baseadas em fatos, o caso normal é executar a plena carga. Se houver um componente que pode superaquecer, será o regulador de tensão, mas isso é principalmente uma função da tensão de entrada, pois ele já está funcionando quase na corrente mais alta esperada quando não faz nada.
Chris Stratton
@ Chrishratton, uma blindagem Ethernet pode variar de potência dependendo do uso. Além disso, o Arduino pode estar em um estado de baixa energia (por exemplo, dormindo entre as 12h e as 5h).
Anonymous Penguin
4

Eu nunca usei um Arduino por tanto tempo, mas não deveria haver um problema. Uma coisa a observar é a tensão de entrada.

Enquanto um Arduino é capaz de lidar com 7-20v como entrada, qualquer coisa acima de 12v pode superaquecer após longos períodos de tempo e causar danos à placa. Como uma recomendação rápida para evitar qualquer superaquecimento do Arduino, eu manteria a tensão o mais próximo possível de 7V.

Steven10172
fonte
4

Gostaria de mencionar um problema que não surge com muita frequência, mas pode causar problemas de longo prazo. Vazamentos de memória e fragmentação de heap. Quase ninguém faz mal em coisas incorporadas, mas se você fizer, faça o que é certo.

EternityForest
fonte
Você me venceu, +1.
hoosierEE
Eu acredito que a classe String usa malloc e é bastante comum.
user2973
Acordado. Especialmente com um servidor web, certifique-se de não fazer nada que possa fragmentar a memória, como usar a classe String. No entanto, é fácil evitar isso. Eu tenho um Arduino funcionando como um servidor da Web para me informar se minha porta da garagem está fechada. Isso já dura anos.
Nick Gammon
4

Eu construí um monitor de energia simples com meu primeiro Arduino. Ele é alimentado via USB a partir de um servidor da Web que, por sua vez, é alimentado por um backup de bateria bastante substancial (que não possui capacidade de notificação).

Também está conectado a um carregador de telefone celular conectado a uma tomada que não seja da UPS.

Portanto, se a energia acabar, o Arduino envia uma mensagem para um pequeno programa em execução no servidor. O programa do servidor, por sua vez, me envia uma notificação por email.

Foi instalado no final de setembro de 2013, em 23 de março de 2014 - recebi meu primeiro email!

Portanto, não vi um problema (ele não usa millis ()), mas mostra a potência a cada 5 segundos.

TimboTinkerer
fonte
1

Um Arduino é capaz de funcionar 24/7?

Esta é uma pergunta de confiabilidade. Em confiabilidade, há muitas coisas a considerar.

  1. O software. Existem softwares mais robustos. Existem softwares menos robustos. Por exemplo, para aplicativos críticos, a alocação dinâmica de memória é desencorajada, pois pode levar à fragmentação da memória. Infelizmente, o Arduino depende muito da alocação dinâmica de memória. Esse problema é agravado, pois a maioria da placa Arduino possui uma RAM muito limitada.
  2. As bibliotecas. Muitas bibliotecas do Arduino possuem bugs (mesmo aqueles integrados no pacote Arduino, tão simples quanto o WString!). Em operação normal, esses erros podem não aparecer. No entanto, você não pode esperar que "tudo corra bem" e que "o usuário" (ou subsistema) atue como previsto. As bibliotecas também podem ter seus limites (ou seja, não são bugs apropriados). Por exemplo, muitos usuários já citaram a função millis (), que é redefinida após 50 dias. Isso, se não for tratado corretamente, pode levar a erros graves.
  3. A confiabilidade do hardware (sem falar em clones baratos do Arduino ...). Aqui, uma nova classe de subquestões é aberta. Vou citar apenas um subconjunto muito limitado.
    • As placas Arduino foram projetadas para oferecer confiabilidade? (por exemplo, qual é a
      confiabilidade dos capacitores usados? e de outros componentes?)
    • Robustez contra a EMI? Eu não confiaria nisso: a maioria das placas Arduino tem apenas duas camadas e falta de um plano de terra / energia adequado.
    • EEPROM (este é o software e o hardware). Seu software está usando a EEPROM? Está implementando algum algoritmo para impedir o ciclo (gravação / exclusão repetidas nas mesmas células)?
    • Tempo de retenção da memória flash. O tempo de retenção diminui com a temperatura e também com o número de ciclos de programação.
    • Radiação ionizante. Sim, mesmo que a probabilidade seja MUITO baixa, pelo menos ao nível do mar, a probabilidade de perturbação por evento único induzida por radiação não é zero e deve-se tomar contramedidas adequadas (especialmente considerando que a RAM não possui detecção de erro de hardware ) em aplicações críticas.
    • A qualidade da fonte de alimentação.
    • O ambiente operacional. Um ambiente controlado a 25 ° C ou em uma caixa preta sobre o telhado (70 ° C sob o sol no verão)? Quanto mais alta a temperatura, mais rápidos são os mecanismos de degradação.
    • ...

Ainda assim, você não deve se surpreender se o seu arduino funcionar perfeitamente por muitos anos. Mas isso não garante que todo arduino o faça.

Algumas contramedidas aumentarão a confiabilidade:

  • Use o watchdog: é melhor redefinir um sistema não responsivo do que ter um sistema travado / com mau comportamento.
  • Evite usar qualquer biblioteca que use alocação de memória.
  • Implemente (se você usar a EEPROM) um algoritmo para preservá-lo!
  • Boa fonte de alimentação.
  • Evite ambientes agressivos (alta temperatura, alta umidade, ciclos térmicos grandes e contínuos, etc.).
next-hack
fonte
0

Certamente pode funcionar 24/7. Eu uso 5V no pino 5V ou um 7808 no pino Vin para descarregar o vreg. Idealmente, seria 6.5V, mas eu não tenho esses suprimentos. Você pode querer uma tampa de desacoplador em 5V, para absorver quaisquer picos menores ao ligar seu suprimento.

Qualquer hardware conectado que funcione a 5V, alimento com um 7805. Você pode usar LM317s ou LM350s no lugar de 78XXs, mas precisará de alguns resistores para esses, talvez trimpots.

user2497
fonte