Selezione di un microcontrollore per un progetto di raccolta dati a batteria


18

Sto programmando di misurare il livello dell'acqua in un pozzo, che è profondo circa 10 m con un livello massimo dell'acqua fino a 5 m. Il mio piano è quello di utilizzare il sensore a ultrasuoni HC SR04 per misurare la profondità, trasmetterlo tramite ZigBee a un Raspberry Pi all'interno della mia casa.

Come discusso nella mia domanda precedente, devo selezionare un microcontrollore per collegare insieme il sensore a ultrasuoni e il modulo ZigBee.

I parametri per la selezione sono:

  1. Basso consumo: sto programmando di farlo funzionare a batteria, quindi un basso consumo energetico è una priorità. Al momento non ho alcun obiettivo per il consumo di energia o giorni tra i cambi di batteria o anche quale batteria utilizzare. Dal momento che si tratta più di un progetto di apprendimento ed è a casa mia, sono flessibile, ma un consumo di energia inferiore è migliore.

  2. Basso costo: questo è un progetto di apprendimento per me e non voglio spendere una cifra esorbitante per questo, quindi un costo inferiore è meglio.

  3. Lavorare all'interno di un pozzo: l'intero progetto lavorerà dall'interno di un pozzo e sarà esposto alla luce solare e alla pioggia. Fornirò comunque un buon caso e protezione.

  4. Facile da programmare.

Ho scelto ZigBee in quanto è semplice, soddisfa il mio caso d'uso e il basso consumo. Ma il mio requisito è di trasportare i dati del sensore e sono aperto ad altri trasporti. La distanza dal mio pozzo a Raspberry Pi è di circa 6 metri con un muro in mezzo. Sto programmando di misurare la profondità dell'acqua ogni 10 minuti e due volte al minuto quando la pompa dell'acqua è in funzione (circa 20 minuti al giorno).


2
Questo sembra piuttosto ampio, o forse fuori tema. Qualsiasi piccolo MCU su una scheda andrebbe bene. Se non avessi deciso su Zigbee, suggerirei di guardare il micro: bit della BBC, che ha BLE a bordo, e un connettore della batteria.
Sean Houlihane,

2
Se vuoi una radio a zigbee, dovresti almeno valutare le parti che la combinano con una CPU MCU (tipicamente ARM Cortex-M). Non significa che devi percorrere quella strada, ma se decidi di non farlo dovrebbe essere per una buona ragione.
Chris Stratton,

2
Cosa intendi con "dentro un pozzo"? Il caso sarà sott'acqua? Non aspettarsi alcuna trasmissione o ricezione dai moduli Xbee sott'acqua. Molti operano sulla banda a 2,4 GHz, che è ben assorbita dall'acqua; altri funzionano intorno ai 900 MHz, che probabilmente non riescono nemmeno a penetrare molto bene nell'acqua. Se il caso non è sott'acqua, 6m + muro dovrebbe andare bene con gli xbe.
Jonas Schäfer,

"dentro un pozzo" significa che il dispositivo verrà posizionato all'interno del pozzo, ma sopra l'acqua.
Raj

Risposte:


20

Un processo generale di selezione del microcontrollore.

  1. Riassumi le tue esigenze verso il microcontrollore. Ad esempio in questo caso:

    • 1 timer hardware , per misurare il tempo tra impulsi trigger ed eco.
    • 2 pin GPIO per interfacciare i pin Echo e Trigger del sensore.
    • Forse UART per interfacciare il modulo di comunicazione RF.
    • 1 ingresso ADC per monitorare la tensione della batteria.


    È possibile andare d'accordo con un controller a 8 pin per questo, che potrebbe richiedere l'uso dei pin del programmatore anche per scopi generali.

  2. Decidere le prestazioni richieste della CPU e i requisiti di memoria . È sufficiente utilizzare un MCU a 8 bit o ne hai bisogno uno a 32 bit? Quali velocità di clock della CPU sono accettabili decine di MHz o 1 MHz è sufficiente? Quanta memoria di programma, RAM e ROM sono necessarie?

    Data l'applicazione descritta, non sono necessarie elevate prestazioni di elaborazione. Probabilmente sarà sufficiente un controller a 8 bit (anche se non sarà molto più economico di uno a 32 bit, quindi puoi decidere qui dal prezzo forse).

  3. Bassa potenza . Quando non è cruciale, puoi probabilmente andare d'accordo con quasi tutti i tipi di controller usando la sua modalità a basso consumo con la tensione di alimentazione e la frequenza di clock di sistema più basse. Se è più importante, puoi iniziare a restringere l'elenco di ricerca iniziando con core MCU dedicati a bassa potenza come (core ARM® Cortex®-M0 o M0 + CPU). Di solito i fogli dati contengono tabelle per la maggior parte delle modalità a bassa potenza / frequenza VCC / SysClk , quelle migliori elencheranno anche il consumo di ciascuna periferica.

  4. Strumenti per sviluppatori . Lo considero un aspetto molto importante. Gli strumenti di programmazione hardware dedicati possono costare fortune, quindi di solito mi attengo alle MCU per cui ho già programmatori. Quando passi a un'altra famiglia o marchio, è bene investire in una scheda di sviluppo che ha un programmatore integrato che potrebbe essere utilizzato in seguito per programmare le tue schede personalizzate. In generale, controlla sempre innanzitutto quanto costerà scaricare programmi su un microcontrollore.

Come ha sottolineato @Sean nei commenti, una soluzione possibile ed economica sarebbe quella di cercare tali moduli RF forniti con un'applicazione MCU integrata e programmabile, che può eseguire il firmware gestendo anche la parte di comunicazione RF. Tali moduli esistono per BLE, WiFi e ZigBee e possibilmente per molte altre tecnologie.

Inoltre, come sopravviverà qualsiasi MCU nel pozzo. Tutto verrà giù sull'involucro che fornirai per il dispositivo. Ad esempio, non importa molto quale MCU scegli se la custodia non è resistente all'acqua al 100%.


TL; DR; Arriva la parte specifica del prodotto.

  1. Puoi scegliere ATtiny25 che costa 0,87 $ / 1 pezzo su Farnell. 8 bit, 8 pin quindi non occuperà molto spazio. In modalità di spegnimento consuma 0,2 μA con watchdog disabilitato, a 3 V. 2-4 μA se il watchdog è abilitato. È compatibile con Arduino quindi la programmazione non ti costerà molto (il programmatore USBasp o AVRdude costa circa 2 $ su eBay). ( Nota : dovresti usare la libreria seriale software Arduino per interfacciare un modulo di comunicazione RF, poiché questa MCU ha solo SPI dall'hardware.) Tutto sommato è piccolo, economico, con un consumo energetico relativamente basso, ma l' UART sbattuto a bit potrebbe complica però. Ha 2 KB di memoria di programma che dovrebbe essere sufficiente per te.

  2. Oppure vai con un ARM Cortex M0, che consuma 2 μA in modalità Standby e 5 μA in modalità Stop. Tale MCU è ad esempio STM32F030F4 che costa 1,09 $ / 1 pezzo . È un controller a 32 bit più potente con una frequenza di clock di sistema massima di 48 MHz, ma come puoi vedere solo per + 0,2 $. Viene fornito con una memoria di programma di 16 kB, tutt'altro che sufficiente per questo semplice compito. Ha SPI, UART, I2C e molte altre periferiche. Programmarlo costerà di più, il programmatore dedicato costa 20 $ a Farnell. Secondo me, non ne vale la pena. Invece puoi investire in una scheda di sviluppo per la famiglia F0 che ha un programmatore di bordo (ST-LINK) . STM32F0 La scheda di scoperta costa ~ 10 $. Puoi iniziare la prototipazione con questa scheda e usarla come programmatore in seguito.


3
Si noti che gli ST-LINK delle schede di rilevamento e nucleo possono spesso essere utilizzati per MCU diversi da quelli presenti sulla scheda stessa. Non sono sicuro di quella scheda specifica, ma dal suo aspetto, utilizza SWD e può essere disconnesso usando i jumper sulla destra. La cosa buona di questo è che l'ST-LINK non sono solo i programmatori, ma in-circuit debugger , facilitando lo sviluppo di un sacco .
Jonas Schäfer,

3
Inoltre, se non ti interessano le risposte di XBEE, puoi utilizzare l'interfaccia seriale universale di ATtiny per ottenere un UART che è più veloce dell'implementazione del software a bit di bit.
Jonas Schäfer,

3
Vale la pena notare che i moduli radio vengono spesso con risorse MCU non dedicate (e esistono moduli per semplificare l'approvazione del tipo). La CPU è in genere condivisa con lo stack RF, quindi è necessario accettare interruzioni periodiche, ecc.
Sean Houlihane

3
ULPBENCH è una buona risorsa quando è importante il funzionamento a bassa potenza (batteria).
Neonzeon,

5

Guardando facilità di programmazione e basso costo, probabilmente inizierei con una sorta di modulo Arduino (o clone a basso costo). Il codice per il tuo sensore a ultrasuoni esiste già, così come il codice di esempio per ZigBee, ad esempio utilizzando i moduli Digi XBee. In quest'ultimo caso, si collega XBee a una porta seriale e, dopo aver effettuato la connessione con la venerabile vecchia interfaccia di comando "AT", si dispone quindi di un canale punto-punto che consente di inviare qualsiasi testo verso il basso (al proprio Raspberry Pi ). ZigBee non è il tipo più economico di comunicazione a corto raggio, ma i moduli XBee sono diminuiti di prezzo in termini reali negli ultimi 5 anni.

So che alcune persone hanno un problema con il linguaggio basato su C / C ++ usato su Arduino, ma in questo caso dovresti fondere in gran parte insieme script già esistenti di altri utenti.

Se cerchi Google per "Modalità sospensione Arduino", troverai esempi di come puoi mettere Arduino in modalità a basso consumo e svegliarti sporadicamente per leggere, comunicare, quindi accedere nuovamente alla modalità sospensione.


1
Mentre una buona gestione della potenza è possibile con un chip ATmega, una tipica scheda Arduino ha scarichi parassiti che limitano drasticamente la durata della batteria.
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.