Quel uptime envisageable pour un montage arduino

Bonjour à tous,

j'envisage un circuit avec un arduino nano et une série de capteurs (lumière température, peut-être d'autres) qui devrait idéalement tourner H24, faire des mesures et les envoyer via usb à un raspberry.

Je me pose la question de la fiabilité à long terme (jours/mois... années ?) d'un tel dispositif... côté arduino (pour le RPi, j'ai des solutions)

Est-ce que je peux y aller sans souci, fiabilité assurée les yeux fermé ?
Est-ce qu'il y a des précautions à prendre niveau code et alors lesquels ?
Est-ce que je me fout le doigt dans l'œil et il faut que je prévois un plantage régulier de mon arduino/capteurs et une solution pour rattraper le problème (mais lequel)

Merci de vos avis

edit : dans les bidouilles envisageable, un reboot complet programmé du RPi est possible.

Bonsoir @ProfesseurMephisto

Hardware : La qualité du câblage des connections des capteurs sera pour beaucoup dans la durabiliré : Souder à la carte Nano pour assurer

Déjà il faudrait définir l'environnement où l'équipement va opérer? intérieur, extérieur?

Si tu utilises des librairies éprouvées on peut imaginer que la fiabilité va en partie dépendre de la qualité de ton code.

La question est triple : logiciel, materiel et aussi conséquence si le système tombe en panne.

Sans oublier l’objectif de durée de vie en bon fonctionnement.

Matériel : fabriqué en Chine sans rien connaître de l’origine des composants. Donner une durée de vie se raproche d’un jeu de devinette.

Pourquoi ne pas relier les capteurs directement à la RPI ?
Sauf si certains capteurs sont analogiques bien entendu.

Fiabilité au sens large du terme c'est vague

Bon sans tergiverser, si le code est robuste et que le materiel est correctement dimensionné, un montage Arduino peut durer longtemps. Et pour correctement dimensionné, il ne s'agit pas de mettre une resistance de telle ou telle valeur parce qu'on l'as vu marcher une fois sur une video. La valeur de chaque composant se calcule

Là j'ai les poils qui se dressent, si le code est bien pensé et bien écrit, un reboot programmé ne doit jamais être une option. C'est faire un pansement sur un tas de pus. Si le programme plante au point d'avoir à faire un reboot, c'est qu'il y a un bug et du coup il faut débugger.

A la conception, il faut envisager tout les cas de figure possible et les défaillances probables. Bien plus facile à dire qu'à faire, j'en conviens.

Pourquoi ne pas relier les capteurs directement à la RPI ?

j'ai pensé utilsier les ports I2C du RPi, mais la distance nécessaire n'est pas adaptée (3 m)

Désolé pour ta pilosité, j'ai évoqué ça parce que j'avais commis cette hérésie avec un RPi + Apache qui bizarrement plantait au bout d'une 30aine de jours d'uptime. Un reboot par cron tous les 15j avait réglé le pb (jamais élucidé d'ailleurs). Mais c'est crade, c'est vrai...

Certains te diront qu'une distance de 3m est tout à fait acceptable pour de l'I2C.
Pour ma part je dirais oui, à condition de pouvoir câbler tout ça de manière extrêmement fiable, car un bus I2C rompu peut occasionner des temps de réponse importants, voire infinis si la librairie ne prévoit pas de timeout.

J'essayerai bien, mais :

  • la fiabilité est plutôt importante à mes yeux
  • la gaine prévue, les emplacements imposés font que le cheminement passe à côté de la moitié des circuits électriques et info de la maison. Le risque de perturbations EM n'est pas (estimation au doigt mouillé) négligeable (bon tous les câbles info sont en cat6a double blindage)

Cela dit, je ne sais pas non plus comment va réagir un câble USB dans les même conditions :frowning:

Dans ce cas là, tu mets un Arduino (Arduino pro micro, mini, voir même un ATTiny) par capteur et tu utilises une interface RS485 pour échanger entre les capteurs et le RasPi.
Comme ça, si un capteur flanche, il ne plante pas les autres.
Son interface différentielle rend le bus RS485 relativement immune aux perturbations .

En électronique la fiabilité décroit avec la complexité des circuits donc plus c'est simple plus la fiabilité sera élevée pour autant que les composants soient bien choisis évidemment. Donc les petites cartes Arduino les plus minimalistes, sans liaison USB feront très bien l'affaire.

Oui, on a tendance à oublier le RS485 de nos jours, où tout se fait par voie radio.

Il y a quelque chose que je ne comprends pas : pourquoi il n'est jamais proposé de baisser la fréquence de l'horloge I2C ?

C'est prévu dans la bibliothèque Wire, c'est juste que la fonction est mal foutue et qu'il faut demander une fréquence que le micro est capable de fournir => consultation de la datasheet obligatoire => mon dieu quelle horreur !

Parlons technique :
Qu'est-ce qui empêche l'I2C de fonctionner : la capacité sur la ligne qui écroule les fronts des signaux.
Si les fronts sont écroulés, les systèmes logiques du micro n'arrivent plus à retrouver leurs petits.

Le seul conseil que l'on trouve est de diminuer la valeur de la résistance de charge pour accélérer la charge des capacités et donc redresser les fronts.

Sauf s'il y a des notions impérieuses de rapidité, quelle est la différence fonctionnelle entre diviser par deux le front de montée en divisant par deux la résistance équivalente de l'I2C ou doubler la période en passant la fréquence de 100 kHz à 50 kHz ?

Bonjour @68tjs

Je ne vois pas de fréquence minimale dans la spécification de l'I2C :

Baisser la fréquence est une méthode rationelle pour retrouver des fronts corrects , par ailleurs dégradés par une capacité excessive des lignes.

pourquoi cela n'est pas proposé ? la routine, toujours la routine...... :unamused:

la limite basse est côté microcontrolleur + bibliothèque

ESP32 : SCL encore OK à 2,5kHz demandés d'après cet échange

J'ai vu plusieurs fois la valeur de 10 kHz en valeur minimale
Il est vrai qu'une norme a tendance à normaliser :slight_smile: afin d'éviter trop de n'importe quoi, n'importe comment. La fréquence obligatoire est 100 k, la fréquence recommandée est 400k. Mais cela va jusqu'à 5 MHz en mode NON bidirectionnel.

Contrairement au vénérable protocole RS232, où émetteur et récepteur doivent chacun avoir une fréquence d'horloge bien connue et précise, dans l'I2C et le SPI c'est le maitre qui fourni l'horloge aux esclaves ce qui laisse plus de marge de manœuvre.
Le travail du CI esclave est de synchroniser les signaux entrant sur sa propre horloge interne => ça dans le métier, ils savent faire.

Il est vrai que je n'ai jamais tenté le 10 kHz, toutefois je ne vois pas ce qui pourrait empêcher le fonctionnement.
Cela mériterait d'être vérifié, je l'accorde, mais comme tu vas le voir, j'ai fait fonctionner de l'I2C en dehors des fréquences "conseillées"

J'ai plutôt regardé dans l'autre sens et j'ai pu constater que deux nanos pouvaient communiquer (l'une maître, l'autre esclave) jusqu'à environ 560 kHz/1 m de distance (je n'ai plus la valeur exacte en tête, il faut reprendre le calcul d'après la datasheet).
Avec des registres 8 bits la première valeur supérieure suivante était à plus de 800 kHz et là cela ne fonctionnait plus.

Edit : nos messages se sont croisés.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.