Etat des pins au boot d'arduino

Bonjour la communauté !

Je viens vers vous car je n'arrive pas à régler un contraignant problème.
J'ai un Arduino Mega 2560 contrôlé par un Raspberry Pi (sytème domotique Jeedom).
Sur mon arduino est connecté un relais.

Mon problème, lorsque je reboot mon arduino, est que mon relais passe par l'état 1 avant de revenir à l'état 0 (déterminé par mon programme sous Jeedom).

J'aimerais donc que mon relais soit immédiatement à l'état 0 lorsque je boote mon arduino.

Est-ce possible à réaliser ? Si oui, comment faire ?

Mon programme est attaché à mon post.

Merci pour votre aide.

JeedouinoLAN_correction2.ino (40.5 KB)

même en definissant le pin a "low" dans le setup ??

L'état des I/O pendant la phase de démarrage est définie dans la datasheet du micro --> voir celle de l'ATMega2560.
Tu n'as pas la main sur le micro pendant la phase de démarrage.
Il me semble avoir lu que pendant la phase de démarrage toutes les I/O sont configurées en entrée haute impédance pour éviter le problème que tu cites.

Je regarderai plutôt vers le relais et sa commande.
Comment le relais est-il relié au micro ?
Il n'est sûrement pas connecté directement à une E/S du micro mais au travers d'une interface.
AMHA l'origine du pb se trouve probablement au niveau de cette interface entre le micro et la bobine du relais.

Un petit schéma serait le bienvenu.

Bonjour à vous deux !

Voici un petit schéma:

@nexen, je passe par le gestionnaire domotique Jeedom, le code uploadé dans l'arduino est celui de ce système qui gère ensuite lui-même les entrées sorties et leur utilisation. Rien n'est modifié dans le code à ce propos.

@68tjs, ce qui est étrange c'est que c'est bien un phénomène qui se passe lorsque l'arduino se reset. Si je coupe l'alim de la carte relais et que je la rebranche, l'état de mes contacts ne change pas...

nexen:
même en definissant le pin a "low" dans le setup ??

Avec ces platines, un état LOW excite le relais

artishow:
Bonjour à vous deux !

Voici un petit schéma:

Comment depuis le port Ethernet de la rasp, tu arrives sur l'USB de la mega? Ou le schéma comporte une coquille?

artishow:
@68tjs, ce qui est étrange c'est que c'est bien un phénomène qui se passe lorsque l'arduino se reset. Si je coupe l'alim de la carte relais et que je la rebranche, l'état de mes contacts ne change pas...

Tu as tenté en bootant ta mega seule, sans raspberry connecté?

Comment depuis le port Ethernet de la rasp, tu arrives sur l'USB de la mega? Ou le schéma comporte une coquille?

ahah, je m'attendais à ce que quelqu'un remarque l'erreur. C'était juste pour qu'on comprenne que l'arduino et la rpi sont reliée en ethernet (j'ai un shield sur l'arduino) et par souci d'esthétisme j'ai fait le lien entre l'usb et l'ethernet :wink:

Tu as tenté en bootant ta mega seule, sans raspberry connecté?

J'ai fait plusieurs tests et cela vient bien de l'arduino:

Reboot arduino AVEC rpi : Les contacts du relais, initialement à 0, passent à 1 au reboot.
Reboot arduino SANS rpi : même résultat
Reboot RPI : pas de changement d'état des contacts, ils restent à 0
Reboot de la carte relais : pas de changement d'état des contacts, ils restent à 0

Pour rappel, avec ce type de carte à relais, l'alimentation externe doit être reliée au + et au GND du module, mais l'Arduino ne doit être relié que par le 5V et les sorties de commande : son GND ne doit pas y être relié pour des questions d'isolement.

Merci pour ce rappel ! Je me suis empressé de retirer ce câble ! Même si tout fonctionnait très bien sans cela :wink:

Mais a priori (du moins compte tenu des éléments disponibles), cela ne devrait pas intervenir dans le problème décrit.

En effet, cela ne change rien !

Il faudrait regarder de plus près le code exécuté au moment de l'initialisation.

Le code de mon programme est joint au premier message de ce topic mais il est difficile à comprendre car tout est géré par Jeedom. C'est d'ailleurs amusant car le lien du topic que tu m'as fourni pointe vers un utilisateur qui a exactement le même problème que moi (probleme d'état de relais et utilisation de jeedom).

on est bien sur les broches 4 et 5 sur ton schéma?

on est bien sur les broches 4 et 5 sur ton schéma?

Ok, j'ai fait une connerie en voulant faire un schéma simple pour saisir simplement les liaisons qui existaient entre mes modules, j'aurais dû le faire réaliste., la leçon est enregistrée :confused:

La carte relais est câblée en 37 (int1) / 39 (int2) / 41 (int3) / 43 (int4)

Il y a une histoire de "BootMode" dans le code de la mega:

// BootMode choisi au demarrage de l'arduino
	// 0 = Pas de sauvegarde - Toutes les pins sorties non modifi�es au d�marrage.	
	// 1 = Pas de sauvegarde - Toutes les pins sorties mises � LOW au d�marrage.
	// 2 = Pas de sauvegarde - Toutes les pins sorties mises � HIGH au d�marrage.
	// 3 = Sauvegarde sur JEEDOM - Toutes les pins sorties mises suivant leur sauvegarde dans Jeedom. Jeedom requis, sinon pins mises � OFF.
	// 4 = Sauvegarde sur EEPROM- Toutes les pins sorties mises suivant leur sauvegarde dans l\'EEPROM. Autonome, mais dur�e de vie de l\'eeprom fortement r�duite

Selon le BootMode, par exemple le 3 semble mettre les pin à OFF, donc LOW, ce qui exciterai les relais.

@Jambe,

Merci pour cet oeil expert ! J'étais passé devant mais sans relever. Grave erreur. J'ai trifouillé un peu le système Jeedom pour trouver cette histoire de bootmode et je suis parvenu à obtenir un résultat convaincant.

J'utilise le mode 4 (il y en a 5 en réalité) qui correspond à

Sauvegarde Jeedom - Toutes les pins sorties mises suivant leur sauvegarde dans Jeedom. Jeedom requis, sinon pins mises à HIGH.

Cela semble bien fonctionner car si mon arduino reboot, mes pins passent une seconde à HIGH (donc mes contacts restent à 0 comme souhaité) puis leur valeur passe à celle précédemment enregistrée avant le reboot.

Pour ceux qui auraient le même problème, l'option de bootmode est assez cachée, voici comment faire:
Allez dans "Plugins > Protocoles Domotiques > Jeedouino"
Puis sélectionnez votre Arduino, onglet "Pins/GPIO" > "Paramétrage/Affectation des pins" > Onglet "Options"

Question subsidiaire (@pepe):
Il m'est arrivé à plusieurs reprises que mon arduino reboot après déclenchement d'un moteur. Penses-tu que cela puisse être lié au fait que j'avais câblé la masse entre l'arduino et le relais ? (j'ai mis ce lien en pointillé puisque je l'ai retiré depuis).

Petit schéma, cette fois précis !