Corruption du programme Arduino en cours de fonctionnement...

Bonjour,
Je rencontre un problème récurrent avec un de mes montages utilisant une Arduino mini (enfin une CCC). Le montage sert à gérer l'arrosage de notre serre. L'arduino est connecté à une RTC (I2c), un LCD I2C, un shield 2 relais et 2 capteurs de niveau.
L'arduino est alimenté en 9V (dc/dc 12V ->9V) et le 5V est produit par un dc/dc 12V->5V.
La sortie 5V de l'arduino n'est pas connectée..
Enfin, la conversion AC/DC est réalisée par une alim à découpage classique 12V/100W ; et cette dernière est à environ 1m du montage.

Le problème : cela fait 3 fois que l'arduino 'arrête de fonctionner': le programme ne fonctionne plus. Un reset (stop alim et start alim) ne permet pas au programme de redémarrer. En fait le programme est corrompu et je dois le reflasher..
C'est assez reproductible (le défaut se produit toutes les 2-3 semaines..) .
J'ai pensé à un problème dont la cause serait l'overflow du compteur de millisecondes mais:

  1. L'overflow a lieu tous les 49 jours approximativement.. Mon problème se répète plus tôt...
  2. J'utilise peu la fonction Delay() et assez systématiquement les "non blocking pauses" car c'est ce dont j'ai besoin pour le programme... Mais j'utilise la bibliothèque Wire (I2C)....
  3. J'ai mis en place un reset auto (software) tous les jours.. Ça n'a rien changé..
  4. Enfin, je ne comprends pas pourquoi l'overflow du compteur des millisecondes corromprait le programme en mémoire flash...

J'ai ensuite pensé à des problèmes de stabilité des différentes tensions ; j'ai mis des 'grosses' capacités et d'autres de découplage par ci par la mais pas d'effet non plus.

Le montage ayant subit l'été, je me suis dit que l'arduino supportait mal les grosses chaleurs... J'ai mis en ventilo mais le problème continue à se produire..

Et enfin, ces derniers temps le problème se produit de plus en plus souvent.. (1 semaine) mais il y a eu un gros orage...

Je suis assez démuni car

  1. j'ai testé le montage pendant des mois avant de l'installer et je n'ai jamais eu ce souci
  2. j'ai une autre montage extérieur qui ne posé aucun pb.. Il est alimenté via une batterie

Est ce que certains d'entre vous auraient déjà rencontré cette situation ?
Si Oui, avez vous quels conseils/astuces pour investiguer et peut-être résoudre mon souci?

Merci

Vincent

Un reset (stop alim et start alim) ne permet pas au programme de redémarrer.

changez le set-up pour faire clignoter une LED 5 fois au boot. Si elle ne clignote pas sur reset c'est qu'il y a un souci matériel quelque part.

si elle clignote et que votre code ne fonctionne pas, c'est que le code qui suit a un pb.

sans voir le code, difficile à dire

Le montage subit-il des coupures d'alimentation ?
Je pense à une chute de tension lente, et donc aux fuses (brown-out detection).

Au prix d'une carte Arduino, tu peux essayer de changer la carte elle-même (en cas de pb hardware sur celle-ci).

J-M-L:
changez le set-up pour faire clignoter une LED 5 fois au boot. Si elle ne clignote pas sur reset c'est qu'il y a un souci matériel quelque part.

si elle clignote et que votre code ne fonctionne pas, c'est que le code qui suit a un pb.

sans voir le code, difficile à dire

Bonsoir
J'ai cela dans la fonction setup juste après l'init des IOs et le code n'arrive pas jusque là. Qd je branche le montage sur le PC, rien n'arrive dans la console (les premières lignes de la fonction setup sont l'init de serial et un print pour indiquer le début de l'exec de la fonction setup...
Le code est malheureusement trop lourd pour être posté intégralement...
V

Est-ce que blink fonctionne si vous le chargez ?
Comment sont branchés les relais ou tout ce qui tire du courant ?
Est-ce que le code va plus Loin si vous débranchez les relais ?
Pouvez vous tester avec une autre carte ?

Mettez le code en PJ

biggil:
Au prix d'une carte Arduino, tu peux essayer de changer la carte elle-même (en cas de pb hardware sur celle-ci).

Bonjour,
J'ai été 'forcé' de faire ce test car ça s'est produit avant et maintenant, j'ai 2 Arduino mini que je n'arrive pas à reprogrammer...
V

Vous les avez grillés ?
Des réponses pour #5 ?

As-tu vérifié les alimentations?
Une alimentation de 100W faiblement chargée (ce qui est le cas lorsque les relais ne sont pas excités) peut être instable et l'ajout des capas supplémentaires peut même aggraver l'instabilité. Elle peut aussi mal réagir lorsque les relais se coupent (baisse brutale de charge) et générer une surtension.
Ne pas oublier que certaines alimentations exigent une consommation minimale permanente pour fonctionner correctement (voir la spécification de l'alim en question). Un Arduino ne consomme que quelques dizaines de milliampères ce qui peut être trop faible pour garantir la stabilité de la régulation de tension.

fdufnews:
As-tu vérifié les alimentations?
Une alimentation de 100W faiblement chargée (ce qui est le cas lorsque les relais ne sont pas excités) peut être instable et l'ajout des capas supplémentaires peut même aggraver l'instabilité. Elle peut aussi mal réagir lorsque les relais se coupent (baisse brutale de charge) et générer une surtension.
Ne pas oublier que certaines alimentations exigent une consommation minimale permanente pour fonctionner correctement (voir la spécification de l'alim en question). Un Arduino ne consomme que quelques dizaines de milliampères ce qui peut être trop faible pour garantir la stabilité de la régulation de tension.

l'alim est une MeanWell LRS 100-12. D'apres la datasheet, la regulation en charge est validée pour une charge de 0% a 100%.
Donc cette alim n'a pas besoin d'être chargée pour fonctionner correctement...
Ceci dit, comme elle est largement surdimensionnée, je peux la charger a 500mA... J'essaierai ca dans les jours qui viennent...

J-M-L:
Vous les avez grillés ?
Des réponses pour #5 ?

J'avoue ne pas avoir eu le temps de les autopsier correctement.
J'ai prévu de les brancher et de regarder la conso en courant et si le LDO regule toujours... mais je n'ai pas encore eu de faire ces mesures basiques...

V

J-M-L:
Est-ce que blink fonctionne si vous le chargez ?

Il faut que je demonte le montage de son support et que j'essaie

J-M-L:
Comment sont branchés les relais ou tout ce qui tire du courant ?

Sur un DC/DC 12V -> 5V externe. je n'utilise pas le 5V généré par l'arduino pour alimenter les "périphériques"

J-M-L:
Est-ce que le code va plus Loin si vous débranchez les relais ?

Il faut que je demonte le montage de son support et que je reflashe le programme et que j'essaie mais je doute que le pb vienne de la (cf reponse ci-dessus)

J-M-L:
Pouvez vous tester avec une autre carte ?

je dois en recommander car je n'ai plus de mini :frowning:

J-M-L:
Mettez le code en PJ

je vois pour créer une archive.. Attention ca risque de piquer les yeux de certains...

vdaanen:
je vois pour créer une archive.. Attention ca risque de piquer les yeux de certains...

vous zippez juste le répertoire

J-M-L:
vous zippez juste le répertoire

oui, en fait le vrai pb c'est de l'attacher a cette discussion.. je n'ai pas trouvé comment faire..
pouvez-vous m'indiquer "mettre le code en pj"?

merci
V

C'est içi en bas de l'écran d'édition de message :
pièces jointes.png
Pour ajouter une ou plusiers pièces jointes à un message déjà posté , passer par 'More' , 'pas Quick Edit' pour voir le lien permettant d'atracher quelque chose

pièces jointes.png

Si on utilise "Quick reply" le menu "Attachment" n’apparaît pas.
Pour le faire apparaître il faut faire un "Preview".

Bonjour

voici le code source en pj, ainsi qu'un google doc qui donne quelques infos

'schema', composants, etc...

V

Arrosage.zip (15.5 KB)

Je vois que tu peux utiliser le watchdog.
Est-ce que la configuration qui plante avait le watchdog activé?
Il me semble qu'un problème avait été identifié, il y a quelques années, avec le watchdog lors du boot.
Lorsque l'Arduino se plantait, le watchdog était toujours actif et le temps de démarrage était plus long que la période du watchdog. Du coup l'Arduino enchaînait les reset. Je ne sais pas si c'est toujours vrai avec les bootloader récents.

Salut

fdufnews:
Je vois que tu peux utiliser le watchdog.

en fait non, le watchodg n'est pas utilisé (cf #define USE_WATCHDOG qui est commenté)

V

Bonjour,

J-M-L:
Vous les avez grillés ?

les arduino mini sont mort (RiP :frowning: ). Quand je les alimente en 12V, le regulateur chauffe et sur VCC, j'ai 10V et quelques...

Bref mon montage a tué quelques arduino mini..

je me souviens qu'au 2eme deces, j'ai ajouté quelques diodes pour "evacuer" d'eventuelles surtensions transitoires sur les alims (au 12V)...

V