Hey, j'ai une bonne nouvelle : ma Shapeoko arrive à fonctionner, et surtout ne plus planter, et ce avec ma carte maison! Wouhouuu c'teu fête!

J'ai bagarré pour en arriver là. J'attends la carte "nouvelle mouture" du fabricant, mais impatient que je suis, je n'ai pas pu résister à la tentation de la faire fonctionner moi-même...:)

Le point sensible, d'après les forums et mes constats, c'est la liaison USB entre le PC et l'Arduino sur laquelle tourne Grbl. Alors je me suis dit que je pourrais utiliser une autre Arduino entre les deux, qui communique par liaison série.

J'aurai donc:

PC<-- liaison USB --> Arduino 1 (relais) <-- Liaison série (Rx/Tx) --> Arduino 2 (Grbl)

L'Arduino 1 est une Arduino Mega 2560, largement surdimensionnée mais j'en avais une en stock alors ça m'allait bien :)

Entre les deux Arduini (pluriel d'Arduino?), on a juste besoin de 3 fils: Rx Arduino 1 vers Tx Arduino2, Tx Arduino 1 vers Rx Arduino 2, et relier les masses entre elles (Gnd).

En fin de compte, sur l'Arduino "relais", j'avais besoin d'un port usb en entrée et un port série en sortie (la Mega 2560 en a 3, en plus du port zéro qui correspond à l'entrée USB). Quoique, ça devrait aussi fonctionner avec la librairie SoftwareSerial pour émuler un port série.

Bref, le programme est très simple et assure une communication bidirectionnelle: il lit ce qui entre sur le port 0 (le port USB) et l'écrit sur le port 1 (connecté à l'Arduino 2), et il lit ce qui arrive du port 1 pour l'écrire sur le port 0 (connecté au PC).

int baudRate = 115200;
int tmpUsbData = 0;
int tmpGrblData = 0;

void setup() {
  Serial.begin(baudRate);
  Serial1.begin(baudRate);
}

void loop() {
  
  if(Serial.available())
  {
    //lecture des données en provenance du PC (USB)
    tmpUsbData = Serial.read();
    //Ecriture vers le port série
    Serial1.write(tmpUsbData);
  }
  
  if(Serial1.available())
  {
    //lecture des données en provenance du port série
    tmpGrblData = Serial1.read();
    //Ecriture vers le PC (USB)
    Serial.write(tmpGrblData);
  }
}

Le câble USB utilisé mesure 20cm (beaucoup plus court que le câble d'origine, et donc moins sensible aux interférences électromagnétiques). J'ai dû virer l'isolateur galvanique qui posait des problèmes de communication.

Et ça ne plante plus, mon pote. Ca ne plante plus! Enfin jusqu'à preuve du contraire hein, parce que je commence à avoir l'habitude des phases maniaco-dépressives avec cette machine...

L'intérêt de conserver une liaison USB est de pouvoir utiliser bCNC et les autres outils de contrôle pour Grbl. Si j'utilisais une carte SD, je serais limité dans les interactions avec la machine, et je ne pourrais pas bénéficier (entre autres) de l'autoleveling de bCNC.

Article précédent Article suivant