Pilotage Thermorégulateur / pompe à vide via RS232

Bonjour à tous !

Je travaille dans un labo, et pour diverses raisons je me retrouve à devoir automatiser des opérations sur des thermorégulateurs et des pompes à vide.

En tout j'ai 3 appareils à contrôler dans un premier temps, 2 thermorégulateurs de marque Huber et 1 pompe à vide de marque Vacuubrand. Ces trois appareils peuvent communiquer en série via un port rs232.

Mon idée est donc d'utiliser un Arduino GIGA et ses 4 ports série pour cela.
Je possède les bibliothèques pour les commandes à envoyer.

J'ai tenté un premier bricolage à l'aide de mon Uno R4 pour faire une preuve de concept.
Cela à consisté à envoyer une simple commande de température à 101°C.

Ce fut un échec.

Niveau hardware j'utilise un arduino couplé à un convertisseur TTL - RS232.

Voici mon code :

#include <SoftwareSerial.h>
int rxPin = 10; // Connecté au TX du convertisseur
int txPin = 11; // Connecté au RX du convertisseur

SoftwareSerial mySerial(rxPin, txPin);

void setup() {

  Serial.begin(9600);
  mySerial.begin(9600);


void loop() {
  // Envoyer la commande pour régler la température à 101 degrés Celsius
  mySerial.print("{M00vSP2714\r\n"); 


  delay(3000);
}

Si quelqu'un à une idée je suis preneur !

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

1 Like

Tu es sûre que la vitesse est de 9600 bauds?

Ton appareils n'envois rien à la connexion ?

sur votre Giga vous avez 4 port UART matériels, n'utilisez pas SoftwareSerial

Pin Function Notes
0 TX Serial communication émission
1 RX Serial communication réception
14 TX3 Serial communication émission
15 RX3 Serial communication réception
16 TX2 Serial communication émission
17 RX2 Serial communication réception
18 TX1 Serial communication émission
19 RX1 Serial communication réception

et pour le begin() c'est

Serial.begin(9600); //initialize serial communication over USB
Serial1.begin(9600); //initialize serial communication on RX0/TX0
Serial2.begin(9600); //initialize serial communication on RX1/TX1
Serial3.begin(9600); //initialize serial communication on RX2/TX2
Serial4.begin(9600); //initialize serial communication on RX3/TX3

il n'a pas de Giga, mais une Uno R4, mais cela n'empêche pas effectivement de ne pas utiliser le SoftwareSerial et le port série matériel.

Eh oui :wink:
Pas bien grave, il manquait une accolade en fin de setup()

J'ai, un peu, réarrangé ton programme:

#include <SoftwareSerial.h>
int rxPin = 10; // Connecté au TX du convertisseur
int txPin = 11; // Connecté au RX du convertisseur

SoftwareSerial mySerial(rxPin, txPin);

void setup()
{

	Serial.begin(9600);
	mySerial.begin(9600);
}

void loop()
{
	// Envoyer la commande pour régler la température à 101 degrés Celsius
	mySerial.print("{M00vSP2714\r\n");
		
	delay(3000);
}

Essaies ça

A+
Cordialement
jpbbricole

ah oui j'avais pas bien lu

Bonjour

Moi non plus :woozy_face:

Avec un UNO R4 pas besoin de SoftwareSeral, il y a le port Serial1

PinFunction|

D0 RX (Receive)
D1 TX (Transmit)

Cordialement
jpbbricole

Oui la vitesse est bien réglée des deux cotés
L'appareil à un mode de test ou il envoie toutes les 5 secondes un message, je l'ai activé et essayé de l'écouter avec l'arduino, sans succès la encore

Du coup avec les ports série D0 et D1 cela donne quoi ?
Merci pour ton aide !

Je vais te passer la version, avec D0 D1, de ton programme.

A+

@J-M-L tu l'a indiqué, sauf que sur la Uno, il y a qu'un seul port série.
tu fais simplement ce qui suit, tu peux voir un exemple chez Arduino

Edit: Serial en Serial1

Serial1.begin(9600); //initialize serial hardware

c'est un R4 pas un R3

Bonjour guillhome

Ca donne ça:

void setup()
{
	Serial.begin(9600);
	Serial1.begin(9600);     // D1 = Tx à connecter sur Tx du convertisseur TTLRS232
}

void loop()
{
	// Envoyer la commande pour régler la température à 101 degrés Celsius
	Serial1.print("{M00vSP2714\r\n");
		
	delay(3000);
}

Sur l'Arduino GIGA, tu multiplies les ports série avec Serial2 et Serial3.
image

A+
Cordialement
jpbbricole

Oui, j'ai oublié de modifier Serial en Serial1, mais c'est clairement expliqué sur le lien que j'ai donné.

Bonjour @guillhome

Attention., dans mon programme, j'ai mis une c......e :woozy_face:
Ce n'est pas:
Serial1.begin(9600); // D1 = Tx à connecter sur Rx du convertisseur TTLRS232
mais
Serial1.begin(9600); // D1 = Tx à connecter sur Tx du convertisseur TTLRS232

A+
Cordialement
jpbbricole

Je ne vois pas la différence entre tes 2 lignes :sweat_smile:

D'ailleurs mon R4 à rendu l'ame .. foutu chat :smiling_face_with_tear:
Du coup je repasse sur mon vieux R3, je modifie serial1 en serial de ce fait

J'ai trouvé mon problème !
C'était relativement simple ..
Mon cable DB9 n'est pas un cable série, il n'yy a pas l'inversion Tx / Rx ...

Ce n'est pas systématique ce croisement.
Il faut bien vérifier à la commande s'il est droit (DTE <-> DCE), croisé (DTE <-> DTE ou DCE <-> DCE)

1 Like

Bonjour guillhome

image
C'est joué fin :wink:

Le miens, je le croyais aussi, maie en regardant de près, je me suis rendu compte que le connecteur USB était mal soudé :woozy_face:

Avec l'inconvénient, avec le R3, que c'est le port de communication de l'USB, mais c'est jouable.

Cordialement
jpbbricole