Selecionando um microcontrolador para um projeto de coleta de dados operado por bateria

17

Estou planejando medir o nível da água em um poço, com cerca de 10 m de profundidade e nível máximo de água de até 5 m. Meu plano é usar o sensor ultrassônico HC SR04 para medir a profundidade, transmiti-lo via ZigBee para um Raspberry Pi dentro de minha casa.

Conforme discutido na minha pergunta anterior , preciso selecionar um microcontrolador para conectar o sensor de ultrassom e o módulo ZigBee.

Os parâmetros para seleção são:

  1. Baixo consumo de energia: estou planejando executar isso com bateria, portanto, o baixo consumo de energia é uma prioridade. No momento, não tenho nenhum objetivo de uso de energia ou dias entre as trocas de bateria ou mesmo qual bateria usar. Como esse é mais um projeto de aprendizado e está em minha casa, sou flexível, mas menor uso de energia é melhor.

  2. Baixo custo: este é um projeto de aprendizado para mim, e não quero gastar uma quantia exorbitante de dinheiro com isso, portanto, um custo mais baixo é melhor.

  3. Trabalhando dentro de um poço: Todo o projeto estará funcionando de dentro de um poço e será exposto à forte luz solar e chuva. Eu estarei fornecendo um bom caso e proteção.

  4. Fácil de programar.

Eu escolhi o ZigBee, pois é simples, atende ao meu caso de uso e baixa potência. Mas meu requisito é transportar os dados do sensor e estou aberto a outros transportes. A distância do meu poço ao Raspberry Pi é de cerca de 6 metros com uma parede no meio. Estou planejando medir a profundidade da água a cada 10 minutos e duas vezes por minuto quando a bomba de água estiver funcionando (aproximadamente 20 minutos por dia).

Raj
fonte
2
Isso parece bastante amplo, ou talvez fora de tópico. Qualquer pequeno MCU em uma placa seria adequado. Se você não decidiu o Zigbee, sugiro olhar para o micro: bit da BBC, que possui BLE a bordo e um conector de bateria.
precisa saber é o seguinte
2
Se você deseja um rádio em zigbee, avalie pelo menos as partes que o combinam com uma CPU MCU (normalmente ARM Cortex-M). Não significa que você precise seguir esse caminho, mas se você decidir não, deve ser por uma boa razão.
Chris Stratton
2
O que você quer dizer com "dentro de um poço"? O caso estará embaixo d'água? Não espere nenhuma transmissão ou recepção dos módulos Xbee debaixo d'água. Muitos operam na faixa de 2,4 GHz, que é bem absorvida pela água; outros operam em torno de 900 MHz, que provavelmente também não conseguem penetrar muito bem na água. Se o estojo não estiver embaixo d'água, a parede de 6m + deve ficar bem com as abelhas.
Jonas Schäfer
"dentro de um poço" significa que o dispositivo será colocado dentro do poço, mas acima da água.
Raj

Respostas:

19

Um processo geral de seleção de microcontroladores.

  1. Resuma seus requisitos em relação ao microcontrolador. Por exemplo, neste caso:

    • 1 temporizador de hardware , para medir o tempo entre os pulsos de disparo e eco.
    • 2 pinos GPIO para fazer interface com os pinos Echo e Trigger do sensor.
    • Possivelmente UART para fazer interface com o módulo de comunicação RF.
    • 1 entrada ADC para monitorar a tensão da bateria.


    Você pode se dar bem com um controlador de 8 pinos para isso, o que também pode exigir o uso dos pinos do programador para fins gerais.

  2. Decida o desempenho da CPU e os requisitos de memória necessários . É suficiente usar um MCU de 8 bits ou você precisa de um de 32 bits? Quais velocidades de clock da CPU são aceitáveis, dezenas de MHz ou 1 MHz é suficiente? Quanta memória de programa, RAM e ROM são necessárias?

    Dada a aplicação descrita, você não precisa de alto desempenho computacional. Provavelmente, um controlador de 8 bits será suficiente (embora não seja muito mais barato que um de 32 bits, para que você possa decidir aqui pelo preço, talvez).

  3. Baixa potência . Quando isso não é crucial, você provavelmente pode se dar bem com quase qualquer tipo de controlador usando o modo de baixa energia com a menor tensão de alimentação e a freqüência do relógio do sistema. Se for mais importante, você pode começar a restringir sua lista de pesquisa iniciando com núcleos de MCU de baixa potência dedicados, como (núcleos de CPU ARM® Cortex®-M0 ou M0 +). Geralmente, as planilhas de dados contêm tabelas para a maioria dos modos de baixa potência / frequência VCC / SysClk ; os melhores listarão também o consumo de cada periférico.

  4. Ferramentas de desenvolvedor . Eu considero isso um aspecto muito importante. As ferramentas de programadores de hardware dedicadas podem custar fortunas, por isso, geralmente, atendo às MCUs para as quais já tenho programadores. Quando você muda para outra família ou marca, é bom investir em uma placa de desenvolvimento que possua um programador integrado que possa ser usado posteriormente para programar suas placas personalizadas. Em geral, sempre verifique primeiro se quanto custa ser capaz de baixar programas para um microcontrolador.

Como o @Sean apontou nos comentários, uma solução possível e econômica seria procurar esses módulos de RF que vêm com um MCU de aplicativo programável e integrado, que pode executar seu firmware enquanto manipula também a parte de comunicação de RF. Esses módulos existem para BLE, WiFi e ZigBee e, possivelmente, para muitas outras tecnologias.

Além disso, sobre como qualquer MCU sobreviverá no poço. Tudo ficará no gabinete que você fornecerá para o dispositivo. Por exemplo, não importa muito qual MCU você escolher se o gabinete não for 100% resistente à água.


TL; DR; Aí vem a peça específica do produto.

  1. Você pode escolher o ATtiny25, que custa 0,87 $ / 1 peça na Farnell. 8 bits e 8 pinos, portanto, não precisará de muito espaço. No modo de desligamento, consome 0,2 μA com o watchdog desativado, a 3 V. 2-4 μA se o watchdog estiver ativado. É compatível com Arduino, portanto, a programação não custa muito (o programador USBasp ou AVRdude custa cerca de 2 dólares no eBay). ( Observe que : você deve usar a biblioteca Arduino Software Serial para fazer interface com um módulo de comunicação de RF, pois este MCU possui apenas SPI por hardware.) No geral, é pequeno, barato, com consumo de energia relativamente baixo, mas o UART de baixa potência pode complica embora. Possui 2 kB de memória de programa, o que deve ser suficiente para você.

  2. Ou use um ARM Cortex M0, que consome 2 μA no modo de espera e 5 μA no modo de parada. Esse MCU é, por exemplo, STM32F030F4, que custa 1,09 $ / 1 peça . É um controlador de 32 bits mais poderoso com uma frequência de clock do sistema de 48 MHz no máximo, mas como você pode ver apenas por + 0,2 $. Ele vem com 16 kB de memória de programa, longe o suficiente para esta tarefa simples. Possui SPI, UART, I2C e muitos outros periféricos. A programação custa mais, o programador dedicado custa 20 $ na Farnell. Na minha opinião, não vale a pena. Em vez disso, você pode investir em uma placa de desenvolvimento para a família F0, que possui um programador integrado (ST-LINK) . Placa STM32F0Discovery custa ~ 10 $. Você pode iniciar a criação de protótipos com esta placa e usá-la como programador posteriormente.

Bence Kaulics
fonte
3
Observe que os ST-LINKs de placas de descoberta e de núcleo podem ser usados ​​com freqüência para outros MCUs que não os da própria placa. Não tenho certeza sobre essa placa específica, mas, pelo que parece, ela usa SWD e pode ser desconectada usando os jumpers à direita. O bom disso é que o ST-LINK não são apenas programadores, mas também depuradores de circuito , facilitando muito o desenvolvimento .
Jonas Schäfer
3
Além disso, se você não se importa com as respostas do XBEE, pode usar a Interface Serial Universal do ATtiny para obter um UART mais rápido que a implementação do software.
Jonas Schäfer
3
Vale ressaltar que os módulos de rádio freqüentemente vêm com recursos não dedicados do MCU (e existem módulos para simplificar o tipo apropriado). A CPU geralmente é compartilhada com a pilha de RF, então você precisa aceitar interrupções periódicas etc.
Sean Houlihane
3
ULPBENCH é um bom recurso quando a operação de baixa energia (bateria) é importante.
neonzeon
5

Considerando a facilidade de programação e o baixo custo, eu provavelmente começaria com algum tipo de módulo Arduino (ou clone de baixo custo). O código para o seu sensor ultrassônico já existe, assim como o código de exemplo para o ZigBee, por exemplo, usando os módulos Digi XBee. Neste último, você conecta o XBee a uma porta serial e, depois de fazer a conexão com a antiga interface de comando "AT", você tem um canal ponto a ponto que pode enviar qualquer texto (para o seu Raspberry Pi ) O ZigBee não é o tipo mais barato de comunicação de curto alcance, mas os módulos XBee caíram de preço em termos reais nos últimos 5 anos.

Eu sei que algumas pessoas têm um problema com a linguagem baseada em C / C ++ usada no Arduino, mas nesse caso você estaria fundindo amplamente scripts já existentes de outros usuários.

Se você pesquisar no "modo de suspensão do Arduino", encontrará exemplos de como colocar o Arduino no modo de baixa energia e acordar esporadicamente para fazer uma leitura, comunicá-la e entrar novamente no modo de suspensão.

TheMagicCow
fonte
1
Embora seja possível um bom gerenciamento de energia com um chip ATmega, uma placa Arduino típica possui drenos de energia parasitas que limitarão drasticamente a vida útil da bateria.
22817 Chris Stratton