Bonjour, étant complétement novice avec Arduino je souhaiterai pouvoir donner une information à mon Arduino depuis plusieurs PC. Pour vous expliquer je fait de l'astrophoto chaque setup est piloter via un mini PC avec un logiciel astro. Ce logiciel me permet de contrôler le toit de mon observatoire à l'aide de l'Arduino. avec un seul PC aucun soucis cela fonctionne parfaitement mais je voudrais cette même opération avec chacun de mes setups. Merci pour votre aide, salutations
Bonjour et bienvenu,
Je ne comprend pas bien, vous voulez brancher plusieurs PC sur une seule carte Arduino, un PC sur plusieurs cartes Arduino ou plusieurs fois un PC sur une carte Arduino ?
EDIT : Votre Post n'est pas au bon endroit, mais je ne sais pas comment le déplacer....
Bonsoir
Le post est maintenant à sa place conformément au mode d'emploi du Forum
, à l'écart des Projets Finis, des réalisations complètes et fonctionnelles......chaque chose en son temps......
Bonjour Guillaume, pour vous expliquer je pilote actuellement le toit de mon observatoire à l'aide d'un Arduino UNO avec un seul mini PC. Chaque télescope est équipé d'un mini PC et je souhaiterai que chaque télescope puissent donner l'information de fermer ou ouvrir le toit à la demande. C'est pour cela que je recherche une solution pour connecter plusieurs PC sur un seul Arduino. Merci d'avoir pris le temps de regarder et une personne à mis mon post sur le bon forum.
Bonsoir, merci d'avoir transféré mon post sur le bon forum.
Et bien j'avoue que je ne sais pas si s'est possible....
Je sais que deux application sur le même PC ne peuvent pas être connecter a la même carte Arduino, mais je ne sais pas si sa fonctionne aussi dans l'autre sens.
Le plus simple serait de faire un test avec un splitter USB.
Bonsoir thierry-astro
Avec un Arduino Mega, ce serai possible de mettre 4 PC:
1 via l'USB "normal"
les 3 autres avec les 3 autres ports séries:
via des convertisseurs USB à UART TTL
Dis moi combien il t'en faut?
A+
Cordialement
jpbbricole
Un bus UART classique fonctionne avec un TX qui envoie des données et un RX qui les reçoit. Normalement, chaque périphérique doit avoir sa propre ligne TX pour éviter les conflits, mais si l’Arduino ne renvoie jamais de données, plusieurs TX peuvent être connectés sur un même RX.
Lorsqu’un périphérique TX transmet un signal, il force la ligne à un état haut ou bas. Si plusieurs TX sont reliés directement, un conflit peut apparaître si l’un envoie un 1 et un autre un 0. Pour éviter cela, il faut s’assurer qu’un seul périphérique transmet à la fois et utiliser des diodes de protection.
Les diodes sont placées en série entre chaque TX et RX avec leur anode vers TX et leur cathode vers RX. Elles laissent passer les signaux bas et bloquent les signaux hauts, empêchant ainsi qu’un périphérique impose un niveau de tension sur la ligne commune.
Cette solution fonctionne à condition que les émetteurs transmettent chacun leur tour. Une résistance pull-up sur RX peut être nécessaire pour éviter les fluctuations de tension lorsque toutes les diodes bloquent. La chute de tension provoquée par les diodes doit être prise en compte, surtout si le récepteur nécessite une tension précise.
Sinon vous pouvez laisser tomber la liaison filaire et passer en mode radio ou plusieurs émetteurs peuvent envoyer un message au récepteur
Ou alors vous faites un mini serveur web sur l’arduino et vous exposez une API de commande du toit que n’importe quel client peut appeler
Bonsoir jpbbricole, votre solution avec 4 pc serait très bien. J'ai déjà la premier PC est connecté sur l'USB normal pour les trois autres il serait bien d'avoir une solution soit filaire ou transmissions wifi ou radio. Mais je ne sais pas si c'est possible. Salutations Thierry
Bonsoir J-M-L, merci pour votre retour j'ai déjà un premier PC connecté sur l'USB de l'Arduino qui fait fonctionner mon toit et il est vrai que j'avais envisagé un liaison wifi ou radio pour les autres PC mais je ne sais pas comment l'intégrer à mon programme actuel. Salutations Thierry
ça me rappelle quelque chose ... ce schéma, peut-être ?
Bonsoir,
Heu... tu es novice et tu arrives à contrôler le toit de ton observatoire avec un arduino ?
Tu peux nous en dire un peu plus sur ton ton interface arduino/pc pour contrôler ton installation?
Bonsoir Axelmaux, oui je ne connais que très peu la programmation de l'Arduino mais tout le reste je gère. J'ai transféré le programme que j'ai eu dans la communauté d'astro dans un Arduino UNO qui actionne un module relais dont le contact enclenche la commande mural de mon moteur comme si vous appuyiez sur le bouton de la télécommande de votre porte de garage ce qui me permet d'ouvrir et de fermer le toit de mon observatoire. Cet ordre de commande et transmis par le logiciel astro (N.I.N.A si vous connaissez) en début et en fin de session photo. C'est comme si vous ouvriez votre porte de garage à l'aide du pilote ASCOM sauf que là j'ouvre et je ferme le toit de mon observatoire. Actuellement je n'ai qu'un télescope avec un mini PC qui est branché via un câble USB sur mon Arduino et qui peut faire cette commande mais cela fait un moment que je regarde comment faire cette manipe avec les autres télescopes. Si cela peut vous aider voici le schéma de câblage de mon installation
Je connais un peu, j'adore l'astronomie. Pour ton soucis, je me demande si ce ne serait pas plus simple d'envoyer l'ordre à l'arduino via un module wifi... Il suffirait que tes mini-pc envoient l'ordre d'ouvrir ou de fermer le toit via le réseau... Cela t'affranchi aussi de tout le câblage entre tes PC et l'arduino.
Peut-être voir également avec un ESP32 qui intègre le wifi de base.
Bonsoir thierry-astro
Actuellement, comment fonctionne ton système, qu'envoie ton pc à l'Arduino pour ouvrir le toit.
Mets ton programme actuel en ligne.
On pourrait aussi imaginer un ESP32 en serveur Web, ainsi on ne serai plus limité en nombre de connexion.
A+
Cordialement
jpbbricole
Bonsoir jpbbricole, voici le programme qui actuellement fait fonctionner le toit de mon observatoire avec un seul PC connecté via le câble USB sur l'Arduino.
// Variables
int doorPin = 10;
int doorPinClose = 12;
int relayPin = 7;
int inByte = 0;
int doorState = 0;
int doorStateClose = 0;
// Le protocole de communication avec le driver ASCOM est assez simple et repose sur 5 commandes de base que voici:
int OD = 79; // Open door, le driver ASCOM va transmettre un O (OPEN)soit le code ascii 79
int CD = 67; // Close door, le driver ASCOM va transmettre un C (CLOSE) soit le code ascii 67
int DS = 83; // Door status, le driver ASCOM va transmettre un S (STATUS) soit le code ascii 83
int INFOVERSION = 63; // Info version du code de la carte Arduino, le driver ASCOM va transmettre un ? soit le code ascii 63
int BYPASS = 33; // Permet de bypasser la vérification des capteurs et de faire déplacer le toit, le driver ASCOM va transmetrte un ! soit le code ascii 33
void setup() {
digitalWrite(relayPin, HIGH);
pinMode(doorPin, INPUT);
pinMode(doorPinClose, INPUT);
pinMode(relayPin, OUTPUT);
Serial.begin(9600);
}
// La loop attend une commande provenant du driver ASCOM
void loop()
{
if (Serial.available() > 0)
{
inByte = Serial.read(); // Lecture de la commande du port série, la commande va provenir du driver ASCOM
if (inByte == DS) // Si le driver ASCOM transmet un S pour STATUT, alors on va retourner le statut du toit (O pour OPEN ou C pour CLOSE)
{
GetDoorState();
}
if (inByte == OD ) // Si le driver ASCOM transmet un O pour OPEN DOOR, alors on va ouvrir le toit
{
OpenDoor();
}
if (inByte == CD ) // Si le driver ASCOM transmet un C pour CLOSE DOOR, alors on va fermer le toit
{
CloseDoor();
}
if (inByte == INFOVERSION ) // Si le driver ASCOM transmet un ? pour INFO VERSION, alors on va retourner la version du code de la carte Arduino
{
InfoVersion();
}
if (inByte == BYPASS ) // Si le driver ASCOM transmet un ! pour MOVE DOOR, alors on va ouvrir ou fermer le toit dans la vérification sur la position la porte
{
moveDoor();
}
}
delay(100);
}
// Cette fonction permet de fermer le toit, elle va cependant s'assurer que le toit est bien en position OUVERT avant.
void CloseDoor()
{
doorStateClose = digitalRead(doorPinClose); // Interrogation du sensor (contact magnétique du toit en position CLOSE) attribué à l'état CLOSE
doorState = digitalRead(doorPin); // Interrogation du sensor (contact magnétique du toit en position OPEN)attribué à l'état OPEN
if (! (HIGH == doorStateClose && HIGH == doorState ) ) // On s'assure que le toit est bien en position OPEN
{
if (HIGH == doorStateClose)
{
moveDoor();
}
}
}
// Cette fonction permet d'ouvrir le toit, elle va cependant s'assurer que le toit est bien en position CLOSE avant.
void OpenDoor()
{
doorStateClose = digitalRead(doorPinClose); // Interrogation du sensor (contact magnétique toit FERMÉ)attribué à l'état CLOSE
doorState = digitalRead(doorPin); // Interrogation du sensor (contact magnétique toit OUVERT)attribué à l'état OPEN
if (! (HIGH == doorStateClose && HIGH == doorState ) ) // On s'assure que le toit est bien en position (fermé)CLOSE
{
if (HIGH == doorState)
{
moveDoor();
}
}
}
// Cette fonction retourne le statut du toit: OPEN, CLOSE ou en MOVE
// Le statut est retourné au driver ASCOM via un port série
void GetDoorState()
{
doorState = digitalRead(doorPin);
if (LOW == doorState)
{
Serial.print("O");
}
doorStateClose = digitalRead(doorPinClose);
if (LOW == doorStateClose)
{
Serial.print("C");
}
if (HIGH == doorStateClose && HIGH == doorState )
{
Serial.print("M");
}
delay(200);
}
// Cette fonction retourne la version du code Arduino
void InfoVersion()
{
Serial.print("1.0");
}
// Cette fonction actionne le relais afin de faire déplacer le toit
void moveDoor()
{
digitalWrite(relayPin, LOW);
delay(500);
digitalWrite(relayPin, HIGH);
}
Bonsoir thierry-astro
Ton programme serait facile à adapter.
Dans les sites, y as t il du Wifi?
Ca faciliterai nettement le partage de la commande du toit.
S'il n'y a pas de Wifi, l'ESP32 32 peut tenir le rôle de serveur.
As tu déjà "pratiqué" l'ESP32 ?
Ca se traite comme un Arduino, depuis l'IDE Arduino.
Si tu veux une aide concernant l'ESP32, regardes le post de @al1fch
Si tu veux un exemple ...
A+
jpbbricole
Le souci est plus du côté du logiciel Astro qui semble t il parle que sur un port série par l’envoi d’un octet de contrôle et la liaison va dans les deux sens puisque on peut interroger l’état.
A moins que ce logiciel ait aussi une interface web paramètrable ce n’est pas une approche qui va fonctionner.
L’idée du MEGA qui escoute plusieurs ports séries serait une option simple, on pourrait supporter jusqu’à 5 PC ainsi (4 UART plus une émulation)
Bonsoir J-M-L
Je l'avais un peu oublié
Mais, est il indispensable, pour ouvrir la coupole?
Bonne nuit
jpbbricole
@thierry-astro sinon, tu peux utiliser cette librairie pour émuler des ports séries supplémentaires:
https://docs.arduino.cc/learn/built-in-libraries/software-serial/
Et ensuite, modifier le .ino pour écouter chaque port à tour de rôle.