Pour les besoins de cette petite expériences je vais utiliser 3 cartes Arduino Uno:
- La carte "émetteur 1" va continuellement envoyer le message "Bonjour, je suis le numéro 1" par sa pin Tx.
- La carte "émetteur 2" va continuellement envoyer le message "Salut, je suis le numéro 2" par sa pin Tx.
- La carte "récepteur" écoutera alternativement les messages de l'émetteur 1 et ceux de l'émetteur 2 sur sa pin Rx.
(Puisque le multiplexeur comporte 4 entrées, j'aurais pu ajouter deux émetteurs supplémentaires).
Le sketch des émetteurs
Rien de spécial à signaler ici: chaque émetteur diffuse à répétition un même message deux fois par seconde. Les messages émis par les deux émetteurs sont légèrement différents afin qu'on puisse les distinguer l'un de l'autre lorsqu'ils sont reçus.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Premier Arduino émetteur | |
Plus de détails: | |
http://electroniqueamateur.blogspot.com/2015/09/multiplexer-plusieurs-signaux-sur.html | |
*/ | |
void setup() { | |
Serial.begin(9600); | |
} | |
void loop() { | |
Serial.println("Bonjour, je suis le numero 1"); | |
delay(500); | |
} |
Le sketch du récepteur
Du côté du récepteur, la seule subtilité consiste à contrôler la source du message au moyen de la pin 8 de l'Arduino, qui est elle-même branchée à la pin "A" du multiplexeur 74153: cette pin sera au niveau logique bas pendant 5 secondes afin d'écouter les messages provenant de l'émetteur 1, puis au niveau logique haut pendant 5 autres secondes afin d'écouter les messages provenant de l'émetteur 2. Les messages reçus sont immédiatement relayés au moniteur série de l'IDE Arduino, pour que nous puissions vérifier le déroulement correct de l'expérience.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Arduino récepteur | |
Plus de détails: | |
http://electroniqueamateur.blogspot.com/2015/09/multiplexer-plusieurs-signaux-sur.html | |
*/ | |
long previousMillis = 0; | |
long interval = 5000; // on change d'émetteur toutes les 5 secondes | |
int emetteur = 0; | |
void setup() { | |
Serial.begin(9600); | |
} | |
void loop() { | |
unsigned long currentMillis = millis(); | |
if(currentMillis - previousMillis > interval) { | |
previousMillis = currentMillis; | |
emetteur = !emetteur; | |
if (emetteur){ | |
digitalWrite(8,false); // pin A du multiplexeur 74153 | |
Serial.println("J'ecoute l'emetteur 1"); | |
} | |
else{ | |
digitalWrite(8,true); // pin A du multiplexeur 74153 | |
Serial.println("J'ecoute l'emetteur 2"); | |
} | |
} | |
while (Serial.available()) { | |
Serial.write(Serial.read()); // on transmet tout ce qu'on recoit (pour affichage au moniteur série) | |
} | |
} |
Le circuit
L'Arduino récepteur doit être branché par USB à un ordinateur pour qu'on puisse afficher sa progression au moyen du moniteur série. Les deux Arduino émetteurs s'alimentent directement sur l'Arduino récepteur (par leur entrée VIN) et n'ont donc pas besoin d'être branchés à un ordinateur (fils rouges sur le schéma ci-dessous).
Tous les GND sont reliés ensemble (ce sont les fils noirs sur le schéma ci-dessous).
Les broches du multiplexeur 74153 sont branchées de la façon suivante:
- Pin 1 (1G): GND (nécessaire pour activer le multiplexeur numéro 1)
- Pin 2 (B): GND (nécessaire pour sélectionner les entrées 1C0 et 1C1)
- Pin 5 (1C1): Pin 1 (TX) de l'Arduino émetteur numéro 2.
- Pin 6 (1C0): Pin 1 (TX) de l'Arduino émetteur numéro 1.
- Pin 7 (1Y): Pin 0 (RX) de l'Arduino récepteur
- Pin 8 (GND): GND
- Pin 14 (A): Pin 8 de l'Arduino récepteur, et reliée indirectement à GND par l'entremise d'une résistance pull-down de 100 K. (Sans cette résistance, la tension de la pin 14 ne descendait pas en-dessous de 1,5 V même quand la pin 8 de l'Arduino était au niveau logique bas). C'est cette pin qui permet de sélectionner le signal de l'Arduino émetteur numéro 1 (quand elle est à 0 V) ou le signal de l'Arduino émetteur numéro 2 (quand elle est à 5 V).
- Pin 16 (VCC): 5 volts.
Ça fonctionne! Pendant 5 secondes, l'Arduino récepteur reçoit uniquement les messages qui proviennent de l'Arduino émetteur numéro 1, et pendant les 5 secondes suivantes, il écoute plutôt les messages qui lui sont envoyés par l'Arduino émetteur numéro 2.
Yves Pelletier (Twitter, Facebook)