Problème avec relais à 4 canaux

Bonjour
A l'origine mon but était de créer un système avec une application crée sur MIT app inventor, des relais, et une connexion bluetooth via un HC-05:
Mais comme il me semblait y'avoir des problèmes car les relais ne répondaient pas, j'ai décidé de faire des essais avec un montage comprenant les broches qui vont directement à des LED.
Sur l'application se trouve des boutons ON et OFF dédiés chacun à allumer et éteindre une des LED respectivement de bas en haut.
Par exemple si l'on appuie sur le bouton ON1 ou OFF1, c'est la LED tout en bas qui s'allume ou s'éteint, si l'on appuie sur le bouton ON2 ou OFF2 c'est la deuxième LED en partant du bas qui s'allume ou s'éteint, etc.
Il s'est avéré après essai, que les 7 premières LED en partant du bas fonctionnent comme voulu mais que les dernières LED ne s'allument pas. A la place des dernières LED, c'est systématiquement la septième qui répond à leur place. Quelqu'un aurait-il une idée de pourquoi alors que tout devrait bien fonctionner d'après le programme ?

Cordialement

votre breadboard est peut-être coupée au milieu ce qui fait qu'une partie des LEDs ne sont pas reliées à GND

➜ il faut penser à mettre des jumpers pour assurer la continuité

La breadbord utilisée est coupée en son milieu mais j'avais déjà fait la liaison avec des jumpers.

Cordialement

Qu'est-ce qui est affiché sur le terminal?

Il est écrit ce qui doit y avoir écrit c'est a dire avec les couleurs correspondantes. Peut-être me suis-je trompé d'application.

Cordialement

L'étape suivante c'est de placer des printf dans chaque test pour voir si le mot-clé est bien reconnu. Il y a quelques fois des caractères non affichés (des fin de ligne par exemple)

1 Like

Bonsoir,
@fdufnews Voici ce que le moniteur série affiche:


Et voici le code:

String Incoming_value;

void setup()
{
  Serial.begin(9600);
  
  //--------------------------------- Serial 1 Rx = 19 Tx = 18
  Serial1.begin(9600);
  Serial1.setTimeout(50);     // Pour fin des commandes depuis Bluetooth
  
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
}

void loop()
{
  if(Serial1.available() > 0)
  {
    Incoming_value = Serial1.readString();
    Serial.print(Incoming_value);
    Serial.print("\n");
    //rouge
    if(Incoming_value == "rouge")
    digitalWrite(33, HIGH);
    else if(Incoming_value == "nonRouge")
    digitalWrite(33, LOW);
    //jaune
    else if(Incoming_value == "jaune")
    digitalWrite(32, HIGH);
    else if(Incoming_value == "nonJaune")
    digitalWrite(32, LOW);
    //bleu
    else if(Incoming_value == "bleu")
    digitalWrite(31, HIGH);
    else if(Incoming_value == "nonBleu")
    digitalWrite(31, LOW);
    //gris
    else if(Incoming_value == "gris")
    digitalWrite(30, HIGH);
    else if(Incoming_value == "nonGris")
    digitalWrite(30, LOW);
    //violet
    else if(Incoming_value == "violet")
    digitalWrite(29, HIGH);
    else if(Incoming_value == "nonViolet")
    digitalWrite(29, LOW);
    //ing1
    else if(Incoming_value == "ing1")
    digitalWrite(28, HIGH);
    else if(Incoming_value == "nonIng1")
    digitalWrite(28, LOW);
    //ing2
    else if(Incoming_value == "ing2")
    digitalWrite(27, HIGH);
    else if(Incoming_value == "nonIng2")
    digitalWrite(27, LOW);
    //ing3
    else if(Incoming_value == "ing3")
    digitalWrite(26, HIGH);
    else if(Incoming_value == "nonIng3")
    digitalWrite(26, LOW);
    //ing4
    else if(Incoming_value == "ing4")
    digitalWrite(25, HIGH);
    else if(Incoming_value == "nonIng4")
    digitalWrite(25, LOW);
    //ing5
    else if(Incoming_value == "ing5")
    digitalWrite(24, HIGH);
    else if(Incoming_value == "nonIng5")
    digitalWrite(24, LOW);
    //ing6
    else if(Incoming_value == "ing6")
    digitalWrite(23, HIGH);
    else if(Incoming_value == "nonIng6")
    digitalWrite(23, LOW);
    //ing7
    else if(Incoming_value == "ing7")
    digitalWrite(22, HIGH);
    else if(Incoming_value == "nonIng7")
    digitalWrite(22, LOW);
  }
}

Puis-je avoir un exemple de comment pourrait-je introduire un printf ?

Cordialement

Bonjour enash

J'ai essayé ton programme, depuis App Inventor et il semble fonctionner normalement, comme tu le désires.
Tu dois avoir des problèmes de câblage, publies ton schéma ou une photo, en gros plan, de ton montage.

Quel type de relais as-tu?

Cordialement
jpbbricole

Bonjour,
J'utilise des relais à 4 canaux. Au départ les relais ne fonctionnaient pas comme voulu. Avant de comprendre que le problème ne venait pas du programme ou de l'appli, j'ai décidé d'effectuer des essais avec des fils qui partent de l'arduino directement vers des LED:
image
le programme et l'application fonctionnent comme voulu. J'ai ensuite placé petit à petit des relais entre l'arduino et les LED:
image
Sur le schéma ci-dessus, je n'ai pas représenter toutes les connexions des LED aux relais pour éviter de le rendre déroutant mais elles sont toutes comme en bas à droite:
image
Sur les relais, se trouvent des petites LED rouges qui s'éteignent lorsqu'elle reçoivent un signal. Donc lorsque ces LED sont allumées la LED correspondante sur la breadbord est censé être éteinte et inversement. Le problème est que j'ai au départ des allumage de LED sur la breadbord lorsque j'appuie sur ON sur l'application mais qu'ensuite ces mêmes LED refusent de s'éteindre lorsque j'appuie sur OFF, alors que je peux clairement voir sur les LED des relais que les signaux sont bien reçu

Cordialement

Bonjour enash

Audépart, tu devrais mettre tout tes relais à OFF et pour ça, la gestion de tes E/S en tableau peut bien t'aider, je te montre ça.

Pour résumer, les LED des relais "suivent" bien les ordres de l'application, seules les LED posent problème?

A+
Cordialement
jpbbricole

Effectivement les allumages et les extinctions des LED des breadbord sont capricieux

Cordialement

Les LED de la breadbord ne sont là qu'en guise de test et d'assurance du bon fonctionnement des relais. Elles sont destinées à être remplacés par autres choses avec des tensions plus élevées. Et je ne peux malheureusement pas passer à la phase suivante tant que ces dernières disfonctionnent

Cordialement

Bonjour enash

image
Cette liaison devrait être au +5V.
Telle que câblées, tes LED devraient toutes être allumées, au démarrage.

Je te mets la version du progranne avec gestion des E/S en tableau:

const int relaisPin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33};     // Liste des pin des relais
const int relaisNombre = sizeof(relaisPin) / sizeof(int);     // Calcul du nombre de relais
const int relaisEtatOn = HIGH;     // Etat pour faire tirer le relais

String Incoming_value;     // Chaîne reçue de App Inventor via Bluetooth

void setup()
{
	Serial.begin(9600);
	delay(500);
	
	//--------------------------------- Serial 1 Rx = 19 Tx = 18
	Serial1.begin(9600);
	Serial1.setTimeout(50);     // Pour fin des commandes depuis Bluetooth

	for (int r = 0; r < relaisNombre; r ++)     // Initialisation des pin des relais
	{
		pinMode(relaisPin[r], OUTPUT);
		digitalWrite(relaisPin[r], !relaisEtatOn);     // Relais à OFF
	}
}

void loop()
{
	if(Serial1.available() > 0)
	{
		Incoming_value = Serial1.readString();
		Serial.print(Incoming_value);
		Serial.print("\n");
		//rouge
		if(Incoming_value == "rouge")               // ON 1
		digitalWrite(relaisPin[11], relaisEtatOn);
		else if(Incoming_value == "nonRouge")
		digitalWrite(relaisPin[11], !relaisEtatOn);
		//jaune
		else if(Incoming_value == "jaune")               // ON 2
		digitalWrite(relaisPin[10], relaisEtatOn);
		else if(Incoming_value == "nonJaune")
		digitalWrite(relaisPin[10], !relaisEtatOn);
		//bleu
		else if(Incoming_value == "bleu")               // ON 3
		digitalWrite(relaisPin[9], relaisEtatOn);
		else if(Incoming_value == "nonBleu")
		digitalWrite(relaisPin[9], !relaisEtatOn);
		//gris
		else if(Incoming_value == "gris")               // ON 4
		digitalWrite(relaisPin[8], relaisEtatOn);
		else if(Incoming_value == "nonGris")
		digitalWrite(relaisPin[8], !relaisEtatOn);
		//violet
		else if(Incoming_value == "violet")               // ON 5
		digitalWrite(relaisPin[7], relaisEtatOn);
		else if(Incoming_value == "nonViolet")
		digitalWrite(relaisPin[7], !relaisEtatOn);
		//ing1
		else if(Incoming_value == "ing1")               // ON 6
		digitalWrite(relaisPin[6], relaisEtatOn);
		else if(Incoming_value == "nonIng1")
		digitalWrite(relaisPin[6], !relaisEtatOn);
		//ing2
		else if(Incoming_value == "ing2")               // ON 7
		digitalWrite(relaisPin[5], relaisEtatOn);
		else if(Incoming_value == "nonIng2")
		digitalWrite(relaisPin[5], !relaisEtatOn);
		//ing3
		else if(Incoming_value == "ing3")               // ON 8
		digitalWrite(relaisPin[4], relaisEtatOn);
		else if(Incoming_value == "nonIng3")
		digitalWrite(relaisPin[4], !relaisEtatOn);
		//ing4
		else if(Incoming_value == "ing4")               // ON 9
		digitalWrite(relaisPin[3], relaisEtatOn);
		else if(Incoming_value == "nonIng4")
		digitalWrite(relaisPin[3], !relaisEtatOn);
		//ing5
		else if(Incoming_value == "ing5")               // ON 10
		digitalWrite(relaisPin[2], relaisEtatOn);
		else if(Incoming_value == "nonIng5")
		digitalWrite(relaisPin[2], !relaisEtatOn);
		//ing6
		else if(Incoming_value == "ing6")               // ON 11
		digitalWrite(relaisPin[1], relaisEtatOn);
		else if(Incoming_value == "nonIng6")
		digitalWrite(relaisPin[1], !relaisEtatOn);
		//ing7
		else if(Incoming_value == "ing7")               // ON 12
		digitalWrite(relaisPin[0], relaisEtatOn);
		else if(Incoming_value == "nonIng7")
		digitalWrite(relaisPin[0], !relaisEtatOn);
	}
}

C'est testé avec ce programme
Relais_B.aia.zip (14.7 KB)

A+
Cordialement
jpbbricole

1 Like

Bonjour enash

Encore un truc, vu le nombre de relais, tu devrait les alimenter avec une alimentation externe comme un chargeur USB.

Cordialement
jpbbricole

1 Like

Autant pour moi pour l'erreur sur le schéma. Voici le schéma corrigé:


image
Le programme avec ajout de tableau est bien fonctionnel d'après les LED des relais. Je suppose que je dois me procurer un adaptateur qui relie un chargeur de téléphone à la breadbord. Quelle en est la référence ?

Cordialement

Il faudrait déjà estimer la consommation du montage.

Bonjour enash

Oui, si tu prends un modèle courant à 2 Ampères tu as largement de quoi voire venir, un bobinage consomme ~90 mA.
Pour le câblage, tu "ouvres" un câble USB, tu connectes le fil rouge au 5V. de l'Arduino et le noir au GND de l'Arduino.
Les fils vert et blanc ne servent pas, attention à les isoléer.

Cordialement
jpbbricole

1 Like

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