- Protocole de communication série RS-485
- RS-485 dans Arduino
- Composants requis
- Schéma
- Programmation Arduino UNO et Arduino Nano pour la communication série RS485
- Contrôle de la luminosité des LED avec la communication série RS485
Le choix d'un protocole de communication pour la communication entre les microcontrôleurs et les périphériques est une partie importante du système embarqué. C'est important car les performances globales de toute application embarquée dépendent des moyens de communication car elles sont liées à la réduction des coûts, un transfert de données plus rapide, une couverture longue distance, etc.
Dans les tutoriels précédents, nous avons appris le protocole de communication I2C et les protocoles de communication SPI dans Arduino. Il existe maintenant un autre protocole de communication série appelé RS-485. Ce protocole utilise une communication série asynchrone. Le principal avantage du RS-485 est le transfert de données longue distance entre deux appareils. Et ils sont le plus couramment utilisés dans un environnement industriel électriquement bruyant.
Dans ce tutoriel, nous allons en apprendre davantage sur la communication série RS-485 entre deux Arduinos, puis la démontrer en contrôlant la luminosité de la LED connectée à un Arduino esclave de Master Arduino en envoyant des valeurs ADC via le module RS-485. Un potentiomètre 10k est utilisé pour faire varier les valeurs ADC chez Master Arduino.
Commençons par comprendre le fonctionnement de la communication série RS-485.
Protocole de communication série RS-485
RS-485 est un protocole de communication série asynchrone qui ne nécessite pas d'impulsion d'horloge. Il utilise une technique appelée signal différentiel pour transférer des données binaires d'un appareil à un autre.
Alors, quelle est cette méthode de transfert de signal différentiel ??
La méthode du signal différentiel fonctionne en créant une tension différentielle en utilisant un 5V positif et négatif. Il fournit une communication semi-duplex lors de l'utilisation de deux fils et le duplex intégral nécessite 4 quatre fils.
En utilisant cette méthode
- RS-485 prend en charge un taux de transfert de données plus élevé de 30 Mbps maximum.
- Il fournit également une distance de transfert de données maximale par rapport au protocole RS-232. Il transfère des données jusqu'à 1200 mètres maximum.
- Le principal avantage de RS-485 par rapport à RS-232 est l'esclave multiple avec un seul maître tandis que RS-232 ne prend en charge qu'un seul esclave.
- Il peut avoir un maximum de 32 appareils connectés au protocole RS-485.
- Un autre avantage du RS-485 est qu'il est insensible au bruit car ils utilisent la méthode du signal différentiel pour le transfert.
- RS-485 est plus rapide que le protocole I2C.
RS-485 dans Arduino
Pour utiliser RS-485 dans Arduino, un module appelé 5V MAX485 TTL à RS485 basé sur Maxim MAX485 IC est nécessaire car il permet une communication série sur une longue distance de 1200 mètres et il est bidirectionnel. En mode semi-duplex, il a un taux de transfert de données de 2,5 Mbps.
Le module 5V MAX485 TTL à RS485 nécessite une tension de 5V et utilise des niveaux logiques 5V afin qu'il puisse être interfacé avec les ports série matériels de microcontrôleurs comme Arduino.
Il présente les caractéristiques suivantes:
- Tension de fonctionnement: 5 V
- Puce MAX485 intégrée
- Une faible consommation d'énergie pour la communication RS485
- Émetteur-récepteur limité à vitesse de balayage
- Borne 2P à pas de 5,08 mm
- Câblage de communication RS-485 pratique
- Toutes les broches de la puce ont été conduites peuvent être contrôlées via le microcontrôleur
- Taille de la carte: 44 x 14 mm
Brochage du RS-485:
Nom de la broche |
Utilisation |
VCC |
5V |
UNE |
Entrée de récepteur non inverseuse Sortie pilote non inverseuse |
B |
Inverser l'entrée du récepteur Inverser la sortie du pilote |
GND |
GND (0 V) |
R0 |
Sortie récepteur (broche RX) |
RÉ |
Sortie récepteur (LOW-Enable) |
DE |
Sortie pilote (HIGH-Enable) |
DI |
Entrée du pilote (broche TX) |
Ce module RS-485 peut être facilement interfacé avec Arduino. Utilisons les ports série matériels d'Arduino 0 (RX) et 1 (TX) (In UNO, NANO). La programmation est également simple, utilisez simplement Serial.print () pour écrire sur RS-485 et Serial.Read () pour lire depuis RS-485.
La partie programmation est expliquée plus loin en détail, mais vérifions d'abord les composants nécessaires et le schéma électrique.
Composants requis
- Arduino UNO ou Arduino NANO (2)
- Module de conversion MAX485 TTL vers RS485 - (2)
- Potentiomètre 10K
- Écran LCD 16x2
- LED
- Planche à pain
- Connexion des fils
Dans ce tutoriel, Arduino Uno est utilisé comme maître et Arduino Nano est utilisé comme esclave. Deux cartes Arduino sont utilisées ici, donc deux modules RS-485 sont nécessaires.
Schéma
Connexion de circuit entre le premier RS-485 et Arduino UNO (maître):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RÉ |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
UNE |
Vers A du RS-485 esclave |
B |
Vers B de l'esclave RS-485 |
Connexion entre le deuxième RS-485 et Arduino Nano (esclave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RÉ |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
UNE |
Vers A du maître RS-485 |
B |
Vers B du maître RS-485 |
Connexion du circuit entre un écran LCD 16x2 et Arduino Nano:
Écran LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Vers la broche centrale du potentiomètre pour le contrôle du contraste de l'écran LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UNE |
+ 5V |
K |
GND |
Un potentiomètre 10K est connecté à la broche analogique A0 de l'Arduino UNO pour fournir une entrée analogique et une LED est connectée à la broche D10 de l'Arduino Nano.
Programmation Arduino UNO et Arduino Nano pour la communication série RS485
Pour la programmation des deux cartes, Arduino IDE est utilisé. Mais assurez-vous d'avoir sélectionné le PORT correspondant dans Outils-> Port et carte dans Outils-> Tableau.
Le code complet avec une vidéo de démonstration est donné à la fin de ce tutoriel. Ici, nous expliquons une partie importante du code. Il existe deux programmes dans ce tutoriel, un pour Arduino UNO (Master) et un autre pour Arduino Nano (Slave).
Explication du code pour le maître: Arduino UNO
Du côté maître, il suffit de prendre l'entrée analogique sur la broche A0 en faisant varier le potentiomètre, puis d' écrire ces valeurs sur le bus RS-485 via les ports série matériels (0,1) d'Arduino UNO.
Pour commencer la communication série au niveau des broches série matérielles (0,1), utilisez:
Serial.begin (9600);
Pour lire la valeur analogique à la broche A0 de l'Arduino UNO et les stocker dans un potval variable, utilisez:
int potval = analogRead (pushval);
Avant d'écrire la valeur potentielle sur le port série, les broches DE et RE de RS-485 doivent être HAUTES qui sont connectées à la broche 8 d'Arduino UNO afin de rendre la broche 8 ÉLEVÉE:
digitalWrite (enablePin, HIGH);
À côté de mettre ces valeurs dans le port série connecté avec le module RS-485, utilisez l'instruction suivante
Serial.println (potval);
Explication du code pour l'esclave: Arduino NANO
Du côté esclave, une valeur entière est reçue du maître RS-485 qui est disponible sur le port série matériel de l'Arduino Nano (broches -0,1). Lisez simplement ces valeurs et stockez-les dans une variable. Les valeurs sont sous la forme (0 -1023). Il est donc converti en (0-255) car la technique PWM est utilisée pour contrôler la luminosité des LED.
Puis AnalogWrite ces valeurs converties sur la broche LED D10 (c'est une broche PWM). Ainsi, en fonction de la valeur PWM, la luminosité de la LED change et affiche également ces valeurs sur un écran LCD 16x2.
Pour que le RS-485 de l'esclave Arduino reçoive les valeurs du maître, il suffit de rendre les broches DE & RE du RS-485 BAS. Ainsi, la broche D8 (enablePin) d'Arduino NANO est rendue BASSE.
digitalWrite (enablePin, LOW);
Et pour lire les données entières disponibles sur Serial Port et les stocker dans une variable, utilisez
int pwmval = Serial.parseInt ();
Ensuite, convertissez la valeur de (0-1023 à 0-255) et stockez-les dans une variable:
int convert = carte (pwmval, 0,1023,0,255);
Ensuite, écrivez la valeur analogique (PWM) sur la broche D10 où l'anode LED est connectée:
analogWrite (ledpin, convertir);
Pour imprimer ces valeurs PWM sur un écran LCD 16x2, utilisez
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (convertir);
Contrôle de la luminosité des LED avec la communication série RS485
Lorsque la valeur PWM est réglée à 0 à l'aide du potentiomètre, la LED s'éteint.
Et lorsque la valeur PWM est définie sur 251 à l'aide du potentiomètre: La LED est allumée avec une luminosité totale comme indiqué dans l'image ci-dessous:
Voici donc comment RS485 peut être utilisé pour la communication série dans Arduino.