Ciao a tutti, sto utilizzando la libreria radiohead, in particolare i driver RH_RF24 con il seguente modulo wireless : HC-12 SI4463 Wireless.
Per la gestione dei pacchetti, sto utilizzando la libreria manager di radiohead: Rhdatagram.h.
I 3 Arduino di cui dispongo sono dotati del micro-controllore ATMega328p.
Il mio obbiettivo è quello di inviare dati dai sensori periferici, verso il nodo centrale. Ogni nodo però ha un tempo limitato a disposizione per l'invio dei dati e questo invio non deve sovrapporsi con l'invio dei dati di altri nodi periferici, appunto per evitare interferenze. Per ora non sto utilizzando gli ACK.
Nella prima fase del mio piccolo progetto, avevo intenzione di sincronizzare in questa maniera:
- Fase di sincronizzazione iniziale.
- Ogni 8 secondi, il nodo 1 ha altrettanti 8 secondi per il inviare i dati.
- Finiti gli 8 secondi parte il nodo 2 per altri 8 secondi.
- ecc ecc.
Il Nodo centrale però deve sapere quale nodo sta trasmettendo e chi trasmetterà dopo, quindi deve tenere traccia del tempo che sta passando ed essendo collegato al pc non ha bisogno di risparmiare energia.
In un primo momento per risparmiare batteria stavo utilizzando il watchdog in modalità interrupt, quindi il nodo 1, una volta passati gli 8 secondi a sua disposizione(valutati tramite la funzione millis) andava in sleep per un tempo pari 8 secondi, ovvero fin tanto che il nodo 2 non ha smesso di trasmettere.
Ho notato che utilizzando questo metodo, si veniva a creare uno sfasamento tra i tempi del nodo centrale e i 2 nodi periferici, che a lungo andare diveniva non trascurabile. Ciò penso sia dovuto al fatto che il passaggio tra sleep e normal mode, impiegava troppo tempo.
Allora ora per semplicità sto utilizzando solo la funzione millis per tenere conto del tempo che passa, e sto spegnendo solo la radio. Ovviamente il timer interno di arduino non è ottimo e quindi diciamo che anche in questo caso si viene a definire uno sfasamento.
Non voglio un aiuto dal punto di vista del codice, ma più che altro un metodo da cui prendere spunto per effettuare questo tipo di sincronizzazione, cercando di risparmiare più energia possibile.
Le mie domande sono le seguenti:
Secondo voi sarebbe più utile utilizzare un RTC esterno da sincronizzare con il nodo centrale? E magari utilizzare questo RTC per inviare degli interrupt per accendere il nodo al momento giusto, tenendo conto dei tempi di accensione?
Mi potreste indicare qualche metodo di sincronizzazione che magari avete utilizzato?
Mi sapreste anche indicare come effettuare un sense del canale con i moduli che ho a disposizione?
E' un po' difficile spiegarvi cosa ho in testa attraverso un forum, quindi scusatemi se non sono riuscito a rendere bene l'idea.
Ringrazio tutti in anticipo per l'aiuto.