Go Down

Topic: Station meteo : sondes avec arduino, base raspberry et nrf24l01 (Read 3994 times) previous topic - next topic

VincentC

Bonjour,

Je suis nouveau sur le forum et je crée ce topic car après pas mal de recherches, je ne trouve pas de réponses à certaines de  mes questions.
J'ai fabriqué une station meteo maison avec comme base un raspberry, une sonde de température ds18b20 montée avec un atmega 328p en stand alone et une autre sonde avec encore un ds18b20 et un arduino. Le tout communique avec des modules nrf24l01.
Je n'ai pas de soucis de communication puisque je récupère à intervalle régulier les températures.
En fait je voudrai passer à l'étape supérieure et rendre autonome mes sondes en les branchant sur batterie.
Mon problème est que je pense que les batteries vont se décharger rapidement car l'arduino boucle sans arrêt sur lui même et envoie des infos au raspberry de façon régulière.
Je voudrai donc que les sondes soient en veille et que ce soit le raspberry qui les réveillent en demandant une mesure de température.
C'est ici que ça coince car je ne trouve rien sur internet à ce sujet.
Quelqu'un pourrait il m'aider sur la façon de faire ?

Merci.

Vincent

skizoh

Salut, si ton problème c'est de vouloir alimenter les sondes uniquement pour une mesure, il te suffis de placer un transistor ou un relais sur sont alim et quand tu souhaite faire une mesure tu alimente d'abord le relais/transistor puis après un petit temps (mise sous alimentation) d'environs 50ms ou 100ms, tu fait ta mesure et après tu désactive le relais/transistor et la ta sonde passe hors tension.

Tu peut faire pareil si ce que tu voulais c'était alimenter le arduino + sonde uniquement pour une mesure, tu mets le relais encore plus haut, juste entre la batterie et le arduino et de la même manière le arduino va s'allumer, allumer ta sonde faire le relever et l'envoyer et tu pourras couper l'alim juste après.

Voila :)

Skizo !

fdufnews

Code: [Select]
Je voudrai donc que les sondes soient en veille et que ce soit le raspberry qui les réveillent en demandant une mesure de température.
Pour que l'arduino soit réveillé à distance il faut fatalement qu'un élément soit actif pour guetter le signal de réveil. Par conséquent tu consommeras.

Il serait plus économique de mettre l'arduino en veille avec un réveil périodique par le timer interne. C'est je pense le mode qui sera le plus efficace du point de vue de la consommation.

Reste le module nrf24l01. J'en ai une paire dans un coin mais je n'ai encore jamais joué avec donc je manque d'expérience sur le sujet. Il faudrait voir si on peut lui couper son alimentation complètement et le faire raccrocher au réseau facilement ou le placer dans un mode économie d'énergie sans perte du réseau.

VincentC

Bonjour,

Merci pour les réponses.
je pense que je vais voir du côté de l'Arduino pour le mettre en veille.
Actuellement l'arduino lance une mesure de température toutes les x secondes et les envoie à chaque fois vers le raspberry afin de stocker tout ça en base.
Je voudrai changer un peu le mode de fonctionnement pour avoir ceci :

Le code du raspberry n'a plus de boucle while qui scrute la réception de message mais plutôt un démon qui s'excute toutes les x minutes par l'intermédiaire du crontab.
Je voudrai que le raspberry lance mon programme et que ce soit lui qui intérroge les sondes pour avoir en retour les températures.
Je pense que le code doit être plus complexe que celui que je possède car en gros le raspberry demande une fois aux Arduino et attend un retour de chacun d'entre eux.
Je dois m'assurer que les messages sont bien reçus de chaque côté et le cas échéant faire un nouvel envoi. Il doit falloir gérer des acquittements de messages et des relances.
Est-ce que quelqu'un a déjà fait ça et si oui, serait-il possible d'avoir quelques exemples ?
Merci.

Vincent.

john_lenfr

Apparement d'après le datasheet les nrf24 consommeraient environ 12mA en marche et 900nA à 320µA en veille.

Mais c'est 12mA uniquement durant la transmission, donc si ta transmission dure 25ms.... :smiley-roll:

;)

68tjs

#5
Jun 25, 2014, 12:30 pm Last Edit: Jun 25, 2014, 01:21 pm by 68tjs Reason: 1

Reste le module nrf24l01. J'en ai une paire dans un coin mais je n'ai encore jamais joué avec donc je manque d'expérience sur le sujet. Il faudrait voir si on peut lui couper son alimentation complètement et le faire raccrocher au réseau facilement ou le placer dans un mode économie d'énergie sans perte du réseau.

Je suis un peu dans la même situation, néanmoins à la lecture de la datasheet du nRF24L01+ [1] j'ai compris que le nRF24L01+ même en position "sommeil" est capable de détecter qu'un message lui a été envoyé et délivre un signal sur sa broche IRQ. Je pense donc que ce signal IRQ devrait être capable de réveiller un ATmega328 qui à son tour devrait sortir le nRF24L01+ du sommeil.
[1]  le "+" est important car il introduit un débit à 250 kHz qui offre une meilleure sensibilité en réception et qui peut permettre, à qualité de liaison égale, de baisser la puissance à l'émission et donc d'économiser du courant.

A mon stade de réflexion actuel je pense que la bibliothèque "officielle" arduino, je veux dire Mirf, est incomplète et ne gère pas "l'économie d'énergie".  La bibliothèque RF24 (maniacbug) me semble  plus complète et surtout mieux organisée.

Quelques liens utiles :
http://itechnofrance.wordpress.com/2014/04/01/sonde-de-temprature-et-transmission-rf-avec-des-modules-nrf24l01/
http://itechnofrance.wordpress.com/2014/03/28/sonde-de-temprature-et-consommation-dnergie/

Pour la mise en sommeil du 328
http://www.gammon.com.au/forum/?id=11497
C'est rien de plus que ce qui est écrit dans la datasheet mais la forme est nettement plus agréable et le texte plus compréhensible.

Librairie RF24
https://github.com/maniacbug/RF2
http://maniacbug.github.io/RF24/index.html

Un fork de RF24 (je n'ai pas encore vu de différence)
http://www.bajdi.com/rf24-library-revisited/

Un fork de Mirf  (ou une précédente version ???????? )
http://www.tinkerer.eu/AVRLib/nRF24L01/

Inutile de te dire que la suite de tes essais m'intéresse énormément et quand cela fonctionnera tu fera des heureux en publiant dans le sous forum "Réalisations et Projets terminés" :smiley-mr-green: .

VincentC

Bonjour,

J'ai un peu avancé sur mon projet et maintenant c'est mon raspberry qui pilote les sondes.
En effet j'ai modifié mon code pour que le raspberry interroge les sondes et il attend en retour les mesures effectuées.
Je suis satisfait de ce côté là mais il me reste maintenant la partie la plus délicate, la gestion de l'alimentation.
J'ai lu les liens de 68tjs et d'autres mais je n'arrive pas à voir comment avancer sur l'alimentation.

Rappel pour les sondes :
Actuellement elles sont branchée sur secteur et les montages sont avec la puce Atmega 328p en standalone.

Voic ce que je souhaiterai :
Sortie du mode sommeil de l'atmega grâce à l'interruption du nrf24l01
Sortie du mode sommeil du ntf24l01
Envoi des mesures au raspberry
Mise en sommeil du nrf24l01 et de l'atmega

Je ne sais pas comment écrire le code mais je n'ai pas trop d'idées non plus sur le montage.
Si de bonnes âmes avaient une idée ....

Merci !

Vincent

B@tto

Dans ce genre de problématique il y a malheureusement des choses assez difficiles à réaliser, voir impossible : dans tous les cas avoir, une réception permanente + batterie est impossible tel quel, car ça implique forcement une conso sur le nrf. Une première parade est que la sonde autonome envoi périodiquement la température (genre toute les 2 sec, même si celle ci n'est mise à jour que toute les minutes par exemple). Et côté central, on ne mets en marche la réception que que pendant une période supérieure à l'écartement entre deux envois successif de la sonde émettrice, exemple ici 2 sec. Comme ça, pendant la période d'éveil on est sûr de recevoir au moins une trame complète. Et côté émission, avec la fonction burst des nrf la conso devient ridicule. J'ai fait l'expérience avec un msp430, mes mesures donnaient une autonomie de + d'un an avec une pile bouton ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

Je n'ai pas la réponse ,et la solution IRQ est bien sexy.

- un séquenceur autonome (astable en techno 74HCxxxx)  qui réveille le micro principal + le nrf satellite toujours sous tension mais en mode power down -> consomation quasi nulle, il est capable de détecter une réception (pas de la lire) et degénérer un IRQ

- le micro principal envoie un message au satellite qui provoque un IRQ.
- l'IRQ satellite réveille le micro satellite qui passe le nrf en mode power up . Le "satellite" envoie un message au maître pour lui dire qu'il est prêt.

La transaction peut commencer.

pirquessa

Salut,

Je viens de trouver ce sujet. J'essaie aussi de faire communiquer un Arduino et un Raspberry pi avec des modules modules nrf24l01. Pour le moment, je n'ai pas beaucoup de réussite...

Tu aurais pas fait un petit dossier sur ta réalisation sur un blog/doc/bout de papier ?

Merci :)

Go Up