ARDUINO – SD RTC SHIELD

pour toute les applications de sauvergarde et utilisation de données , il existe des shields comportant un lecteur de carte SD et une Horloge Temps Reel ( Real Time Clock). on retrouve ce type d’application sous la denomination commune de DataLogger . Nous développerons ici le principe sur la base du SD-RTC shiel Deek-Robot mais adafruit propose le même module .

avant de commencer et pour ceux parlant Anglais , ci dessous en téléchargement la notice complete PDF de la version Adafuit:

Le Bus SPI:

premier point important a savoir, la partie SD du shield utilise le BUS SPI , Un bus SPI est un bus série composé de quatre fils : deux fils de données (MOSI et MISO), un fil d’horloge (SCK) et un fil d’adressage (/CS = »Chip Select ») par périphérique utilisant le bus SPI.

Les trois premiers fils sont communs à tous les périphériques d’un même bus SPI. Le quatrième fil (/CS) est unique par périphérique et permet au maître de choisir avec quel périphérique il souhaite communiquer. il y aura autant de fil /CS différents que de périphériques utilisant le BUS SPI. les modules Deek-Robot et Adafruit utilisent les broches D11 (MOSI)- D12(MISO)- D13 (SCK) de l’ARDUINO UNO pour le BUS SPI et normalement ( a verifier) la broche D10 pour le /CS ( voir paramétrage en rouge dans le premier exemple de programme ino proposé) , ces 4 broches sont donc indisponibles pour connecter des capteurs ou actionneurs.

si vous voulez utiliser en plus un shield Ethernet utilisant le Bus SPI , il faudra donc veiller a ce qu’il utilise une autre boche que la broche D10 pour activer la communication SPI.

La carte SD:

deuxieme point crucial , il faudra bien entendu utiliser une carte SD mais en prenant en compte quelques précautions et limitations. Toutes les cartes SD ne sont pas compatibles avec les cartes Arduino. Cela est dû au fait que les cartes Arduino communiquent avec la carte SD via un bus SPI. La communication en mode SPI n’est pas la méthode classique de communication avec une carte SD. Ce mode un peu spécial est un héritage des toutes premières versions de cartes SD. ci dessous , quelques conseils qui aideront:

  • les cartes doivent etre compatible du protocole SPI
  • Les cartes SDXC ne sont PAS compatibles. De même que les cartes d’une capacité supérieure à 32Go.
  • Utiliser une carte SD max 32 Go formatée en FAT16 ou FAT32 .
  • utiliser de preference des cartes de teille maxi 2 a 8 Go
  • Les noms de fichiers devront être au standard MSDOS ( 8 caractères sans espace ni extension de plus de 3 caractères)
  • Utiliser de préférence des fichiers au format .CSV (Comma Separated Value ) , format texte  tabulaire qui permet la récupération directe sur Excel.
  • Les vieilles cartes SD de 128 ou 256 Mo récupérées sur d’anciens apareils font très bien l’affaire pour les projets arduino:

Exemples : 128 Mo permet de stocker 2 560 000 enregistrements de 50 caractères

Si un enregistrement toutes les 5 minutes => capacité pour 9 000 jours soit plus de 20 ans d’enregistrement de données …

La Fonction RTC :

pour utiliser la fonction Horloge Temps Réels (Real Time Clock) du SD shield , il faut impérativement mettre une pile ronde plate CR1220 dans le logement prévu a cet effet , ceci pour la sauvegarde jour/heure du RTC en cas de coupure de courant sur l’ARDUINO.

deuxieme point important a savoir, l’horloge Temps Réel utilise le bus I2C pour la communication avec l’ARDUINO UNO , ARDUINO utilise les broche A4 et A5 pour le bus I2C , ces 2 broches ne sont donc plus disponibles comme broches Analogiques .

Mise en Œuvre, exemples:

  • Plugger l’ensemble sur l’arduino UNO en prenant garde à l’alignement des broches.
exemple de shield SD sur Arduino UNO

a titre d’exemple d’utilisation , nous allons connecteur un capteur DHT11 ( voir rubrique dédiée) et enregistrer les données du capteur sur la carte SD .

pour ce test , j’ai utilisé une carte SD de 2 Go . première opération, vérifier que la carte SD est reconnue par l’ARDUINO. pour cela , nous allons ouvrir l’exemple « cardinfo » de la librairie SD:

avant de télé-verser le programme dans l’ARDUINO , il faut modifier la ligne qui permet de spécifier la broche /CS et remplacer par la bonne valeur ( 10 dans le cas des cartes ADAFRUIT et DEEK ROBOT ):

une fois televersé dans l’arduino, ouvrir le moniteur serie , et si tout se passes bien un message du genre ci dessous devrait s’afficher .

passons maintenant a un premier cas concret avec le DHT11

charger le programme ino ci dessous ( format ZIP car format ino interdit en telechargement par mesure de securité) et televersez le dans l’arduino avec le DHT11 branché comme ci dessuspuis ouvrir le moniteur serie.

#include <SPI.h>
#include <SD.h>
#include <dht_nonblocking.h>
const int chipSelect = 10;    // broche /CS utilisée par le shield
#define DHT_SENSOR_TYPE DHT_TYPE_11
//#define DHT_SENSOR_TYPE DHT_TYPE_21
//#define DHT_SENSOR_TYPE DHT_TYPE_22
static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

void setup() {
  Serial.begin(9600);
  while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print("Initializing SD card...");  
  if (!SD.begin(chipSelect)) {    // see if the card is present and can be initialized:
    Serial.println("Card failed, or not present");    
    while (1);    // don't do anything more:
  }
  Serial.println("card initialized.");
}

static bool measure_environment( float *temperature, float *humidity ) {
static unsigned long measurement_timestamp = millis( );
if( millis( ) - measurement_timestamp > 3000ul )   {
        if( dht_sensor.measure( temperature, humidity ) == true )       {
           measurement_timestamp = millis( );
           return( true );
        }
    }
   return( false );
}

void loop() { 
   float temperature;
   float humidity;
   if( measure_environment( &temperature, &humidity ) == true )   {
      String dataString = String(temperature) + ";" + String(humidity) ;  // make a string for assembling the data to log: 
      File dataFile = SD.open("DHT11.csv", FILE_WRITE);  
      if (dataFile) {     // if the file is available, write to it:
          dataFile.println(dataString);
          dataFile.close();
          // print to the serial port too:
          Serial.println(dataString);
          Serial.print( "T = " );
          Serial.print( temperature, 1 );
          Serial.print( " deg. C, H = " );
          Serial.print( humidity, 1 );    
          Serial.println( "%" );
      }
      // if the file isn't open, pop up an error:
      else {
          Serial.println("error opening datalog.txt");
      }    

   }  
}

dans le moniteur série on a quelque chose comme ça:

debrancher l’ARDUINO de l’alimentation et mettre la carte SD dans un PC pour voir ce qui a été enregistré dans le fichier.

le deuxieme exemple de mise en pratique va utiliser l’Horodatage de façon a avoir date et heure de chaque donnée. pour cela , en préliminaire , il va faloir installer la bibliothequeRTC disponible ici:

https://github.com/adafruit/RTClib

une fois fait , charger le programme ci dessous dans l’IDE arduino et televersez le dans l’ARDUINO.

#include <SPI.h>
#include <SD.h>
#include <RTClib.h>   // horodatage
#include <Wire.h> // Pour la communication I2C horodateur
#include <dht_nonblocking.h>
const int chipSelect = 10;   // broche CS pour le bus SPI
#define DHT_SENSOR_TYPE DHT_TYPE_11
//#define DHT_SENSOR_TYPE DHT_TYPE_21
//#define DHT_SENSOR_TYPE DHT_TYPE_22
static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
RTC_DS1307 RTC;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  // following line sets the RTC to the date & time this sketch was compiled
  // RTC.adjust(DateTime(__DATE__, __TIME__));
  
  while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print("Initializing SD card...");  
  if (!SD.begin(chipSelect)) {    // see if the card is present and can be initialized:
    Serial.println("Card failed, or not present");    
    while (1);    // don't do anything more:
  }
  Serial.println("card initialized.");
}

static bool measure_environment( float *temperature, float *humidity ) {
static unsigned long measurement_timestamp = millis( );
if( millis( ) - measurement_timestamp > 3000ul )   {
        if( dht_sensor.measure( temperature, humidity ) == true )       {
           measurement_timestamp = millis( );
           return( true );
        }
    }
   return( false );
}

void loop() { 
   float temperature;
   float humidity;
   if( measure_environment( &temperature, &humidity ) == true )   {
      File dataFile = SD.open("DHT11.csv", FILE_WRITE);  
      if (dataFile) {     // if the file is available, write to it:
          DateTime now = RTC.now();
          uint16_t year1 = now.year();
          uint16_t month1 = now.month();
          uint16_t day1 = now.day();
          uint16_t hour1 = now.hour();
          uint16_t minute1 = now.minute();
          uint16_t second1 = now.second();
          String dataReg = String(year1) + ";" + String( month1) + ";" + String(day1) +";" + String(hour1) + ";" + String(minute1) + ";" + String(temperature) + ";" + String(humidity) ; 
          dataFile.println(dataReg);
          dataFile.close();
          // print to the serial port too:
          Serial.println(dataReg);
      }
      // if the file isn't open, pop up an error:
      else {
          Serial.println("error opening DHT11.csv");
      }  
   }  
}

l’affichage dans le moniteur serie donne ceci:

et si ensuite on ouvre le fichier de la carte SD avec un PC sous notepad et excel on a ceci.

cet exemple terminera ce tuto sur le principe d’utilisation d’un DATALOGGER shield.

ARDUINO- ETHERNET SHIELD

impossible de parler d’ARDUINO sans parler d’objets connectés. comme beaucoup de systemes programmables , ARDUINO peut communiquer avec les réseaux internet.

l’une des options est la connexion via câble Ethernet , pour cela il existe des SHIELD ETHERNET a plugger directement sur un ARDUINO UNO . la gamme de shield disponible evolue en permanence mais les fonctions principales restent les memes. en general , un connecteur RJ45 , et une carte SD pour stockage de données . petit reproche ,a mon sens il manque une horloge temps réels mais cela peut etre compensé via un composant RTC ajouté.

pas plus de discours sur le sujet , et pour développer , je vous propose d’aller sur la page en lein ci dessous pour voir une application concrete ( station meteo serveur )

Station météo Serveur ARDUINO

ESP32 cam

dans le domaine de la vidéo , impossible de zapper l’ESP32 cam qui est devenu la référence dans le monde du DIY .elle est a elle seule un arduino équipé d’une camera et du wifi et du Bluetooth en standard.

avec cet ensemble , outre les fonction vidéo et prise de vue, la camera possède de base un émetteur- récepteur wifi permettant de la connecter au réseau mais aussi des possibilités de reconnaissance faciale intégrées. elle comporte egalement un lecteur de carte SD. pour finir, une LED haute luminosité peut être commandée pour des prises de vues la nuit par exemple. Dans ce cas, il est possible de connecter une photorésistance sur la carte. En effet, elle intègre aussi quelques ports GPIO pour assembler différents capteurs et actionneurs. permettant l’enregistrement direct . cet ensemble ouvre la porte a la création de système de sécurité DIY ou a bien d’autres applications de prise de vues .

la camera est disponible en achat en ligne pour mois de 15 euros sur Amazone et est livré avec sa camera non montée .

le module accepte d’autres cameras compatible comme par exemple le module fisheye ci dessous que l’on trouve pour 10 euros , équipé d’un capteur CMOS UXGA (1632 x 1232) .

on peut acheter en option un kit antenne 2,4GHz externe pour augmenter la portée (a priori jusqu’a 200m suivant les essais trouvés ça et la sur internet).

ci dessous , une petite description sommaire de la carte et de ses connexion:

REMARQUE: si l’ESP32cam est utilisées avec une SD card insérée, les broches GPIO de gauche (GPIO 4-2-14-15-13-12) sont monopolisées par les fonctions « oranges » correspondant aux signaux DATA1-DATA2-CLK-CMD DATA3 et DATA4 de communication avec la carte SD. si aucune carte SD n’est utilisée , ces broches peuvent alors être utilisées comme entrées/sorties supplémentaires.

ALIMENTATION EXTERNE DE L’ESP32 CAM:

Une source externe 5 Vcc de 2 A minimum est nécessaire pour alimenter le module via les broches GND et 5V . c’est ensuite le régulateur interne qui va fournir les 3,3V de la tension de fonctionnement.

bien que la documentation précise qu’on peut alimenter via la broche 3,3V , il vaut mieux éviter d’alimenter en 3,3V sous peine de rencontrer des problèmes potentiels de stabilité ou de fonctionnement ( nombreux utilisateurs rapportant ce type de soucis).

NOTA: la broche Vcc (3,3V/5V orange sur schéma ci dessus) est une broche de sortie , il ne faut donc surtout pas y brancher d’alimentation externe. elle délivre une tension utilisable par des composants annexes a l’ESP32cam . attention , en général a la livraison , l’ESP32 cam est configuré pour délivrer du 3,3V sur la broche Vcc. pour obtenir du 5V il faut dé-souder la résistance de shunt en position 3V3 sur le circuit (rectangle bleu sur photo ci dessous) et la déplacer/souder sur la position 5V .

PROGRAMMATION DE L’ESP32 CAM:

la programmation de l’ESP32 CAM va nécessiter 2 opérations préparatoire préliminaires:

– installation d’un module complémentairement sur l’IDE ARDUINO.

– achat d’un module type FTDI232 : le module ESP32cam n’est en effet pas équipé de prise USB et il ne peut donc pas etre connecté directement a un PC pour la programmation.

IDE ARDUINO: installation du module ESP32 :

ouvrir l’IDE ARDUINO puis dans l’option FICHIER aller sur préférences:

dans la fenetre qui s’ouvre, dans la case du bas  » additional Board manager, saisir les adresses url ci dessous séparées par une virgule, puis valider:

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

on ouvre ensuite le menu « tools » puis « Board: » puis « Board Manager » et on cherche « ESP32

et dans la fenetre ESP32 , cliquer sur « instal », une fenetre de telechargement s’ouvre pendant l’installation et une fois terminé l’option « INSTALLED » s’affiche.

TELECHARGEMENT avec le FTDI232:

branchement :

comme toute connexion de modules de communication série ensembles , bien veiller a croiser les broches Tx et Rx de chaque module : Tx de l’un vers Rx de l’autre et vice versa . ce qui donne pour toutes les broches utiles au mode programmation:

GND FTDI <=> GND ESP32

VCC FTDI <=> 5V ESP32

TX FTDI<=> UOR ESP32

RX FTDI<=> UOT ESP32

NOTA: pour le mode téléchargement avec l’IDE ARDUINO, on met un câble de shunt (FLASH MODE DE L’ESP) entre le IO0 ESP32 et le GND juste en dessous ( câble jaune sur image ci dessous). il faudra penser a enlever ce shunt pour les tests une fois le téléchargement terminé.

ouvrir l’IDE ARDUINO et Aller dans Outils/gestionnaire de cartes et selectionner « ESP32 Wrover Module »

puis modifier les parametres en dessous comme dans l’image :

Aller dans Fichier/Exemples/ESP32/Caméra et ouvrir le fichier CameraWebServer.ino et televerser le code .

NOTA: suivant le modèle d’ESP32cam acheté, il faudra peut être appuyer sur le bouton reset de l’ESP32 quand le telechargement commence ( quand s’affiche connecting avec des petits points et des underscore).

une fois le téléchargement effectué, retirer le shunt du FLASH MODE de l’ESP , et appuyer sur le bouton reset de la carte .

Ouvrir le moniteur série et repérer l’adresse IP de votre Caméra Serveur Web et les différents ports de communication

puis ouvrez le navigateur web de votre PC et taper l’adresse IP récupérée dans le moniteur série, vous voyez ce que vise la camera et vous pouvez ensuite « jouer » avec les paramètres vidéo dans le menu de gauche . a ce stade , vois pouvez débrancher le FTDI232 , ajouter une alim 5V sur les broches GND et 5V de l’ ESP32cam et le déconnecter de votre PC , il est maintenant autonome et connecté a votre réseau internet perso.

TELECHARGEMENT avec un ARDUINO UNO

si vous n’avez pas de FTDI232 ou si vous avez des problèmes avec un FTDI , l’autre solution pour le téléchargement c’est d’utiliser un ARDUINO UNO pour assurer le transfert USB .

Cablage de l’ensemble:

ce n’est pas précisé sur le schema , mais il faut bien entendu brancher l’arduino uno sur le port USB du PC via le cordon prévu a cet effet. petite précision, dans la partie téléchargement avec FTDI232 , sont fourni des paramètres de camera , ces paramètres sont susceptible de changer suivant la provenance des ESP32 cam et la date d’achat . par exemple sur le dernier lot acheté , dans les paramètres IDE voici l’ecran qui a permis de faire marcher le téléchargement,

ainsi que dans le programme arduino: la camera choisie : CAMERA_MODEL_WROVER_KIT.

si on compare a l’écran plus haut on constate des différences sensibles .tout ça pour dire que si vous avez des messages d’erreurs au téléchargement du pgme dans l’arduino , il faudra probablement faire des essais dans le menu « Outils/type de carte » avec différents types d’ESP32 et différents paramétrages , il faudra donc s’armer de courage pour les tests…:

quelques liens pour plus d’infos et de développements:

https://github.com/raphaelbs/esp32-cam-ai-thinker

https://randomnerdtutorials.com/projects-esp32-cam/

utilisation potentielles:

le module ESP32 cam peut par exemple être utilisé couplé a un détecteur IR HC-SR501 (voir rubrique dédiée) pour faire une camera automatique autonome a déclenchement par détection de mouvement . l’une des application potentielle étant par exemple une camera animalière autonome de ce type :

ou comme ICI en camera PAN/TILT de vidéo surveillance .

REMOTE XY – smartphone IHM

difficile de parler ARDUINO sans aborder la liaison ARDUINO SMARTPHONE. la difficulté de la manip etant la partie soft du smartphone pour communiquer avec ARDUINO.

nous allons voir ici un utilitaire de programmation via interface Visuelle : REMOTE XY

coté microcontroleur ,le soft est compatible avec Arduino, ESP8266, ESP32
coté smatphone , il est compatible avec Android et iOS,

cet outil est un soft composé de 2 modules, une application payante ( 8 €) a installer sur son smartphone via google store pour android ou play store pour IOS , et un editeur graphique en ligne sur le site .

https://remotexy.com/en/

coté protocole de communication , il supporte:

  • Bluetooth via module HC-05 , HC-06 , HM-10 ou module integré au microcontroleur
  • Wi-Fi via ESP8266 ou module WIFI intégré ( ESP32 par exemple)
  • Ethernet via Ethernet Shield W5100
  • USB sur android uniquement et via cable OTG
  • internet a distance .

le principe est simple, une fois l’interface conçue via l’éditeur en ligne , le programme génère le code source ARDUINO qu’il ne reste plus qu’a télécharger dans l’ARDUINO via l’IDE ARDUINO . une fois le programme remote XY demarré sur le smartphone et la connexion bluetooth établie avec l’arduino , c’est le programme arduino qui va envoyer a l’application remote XY sur le smartphone les paramètres de configuration graphique et le smartphone va ensuite afficher l’écran graphique de communication avec l’arduino .

EXEMPLE : 2 bouttons d’allumage led

1°) création dans l’éditeur:

on commence par saisir les parametres globaux de la communication : type de microcontroleur (ARDUINO UNO), type de communication (bluetooth avec HC05) , et IDE ARDUINO et pour finir le type de comm ( software serial) , les broches arduino concernées ( RX -2 et TX 3 ) et la vitesse de communication série sur Tx et Rx ( 9600 bauds).

ensuite on choisi les widgets de controle (ici de simples boutons) , pour cela cliquer a gauche dans le menu des contrôles sur le « bouton » puis venir le déposer sur l’écran dans la fenêtre centrale

changer ensuite la désignation du bouton dans la partie droite des paramètres , ici on le nome A ( case caption) et on voit le nom de la variable dans la case au dessus (button_1) qui sera utilisée dans le programme arduino. on peut changer le nom de la variable si on le souhaite . on peut également changer la couleur du bouton , la forme (draw type) et le style de bordure ) puis on fini par affecter la broche de l’arduino au bouton ici la broche 4 (snap to pin)

de la même façon on créé un deuxième bouton B , rectangulaire , de couleur verte pour varier les plaisirs et affecté a la broche arduino 5.

on peut pour finir positionner les boutons ou on veut sur l’écran et modifier leur taille via les poignées de modif ( petit carrés dans les coins du cadre de bouton)

l’interface graphique est maintenant prête , on va generer le code arduino , pour cela , cliquer en haut a droite dans « get source code »

une nouvelle fenêtre s’affiche, avec le code arduino , et les instructions pour la suite :

  1. téléchargement du code
  2. installation de la librairie « Remote XY »
  3. compilation et téléchargement sur l’arduino
  4. connexion du module bluetooth a l’arduino et raccord des éléments a commander (2 led sur les broches D4 et D5 )
  5. installation de l’appli sur smartphone si pas déjà fait
  6. connexion a l’arduino et test

AUTRES EXEMPLE

d’autres exemples sont disponible directement sur le site XY REMOTE

https://remotexy.com/en/examples/

ARDUINO CNC- exemples d’applications

plutôt que de longs discours , ci dessous quelques vidéos YouTube de cas concrets de  CNC DIY ou commerciales à base d’arduino ou microcontroleurs equivalents.

 Numérisation d’un tour JEULIN MT2:

Numérisation d’une Fraiseuse MF70 PROXXON

Graveuse laser  (avec Arduino Nano):

Micro fraiseuse   (avec Arduino Nano):

Numérisation d’une autre Fraiseuse MF70 PROXXON

ARDUINO CNC-commande de moteur Pas a Pas

construire sa propre CNC à base d’Arduino nécessite tout d’abord la compréhension de quelques notions autour de la commande de moteurs pas a pas.

Dans le cadre de ce tutoriel,  nous allons nous intéresser à la commande d’un moteur pas a pas NEMA 17 par un driver POLOLU A4988 associé a une carte ARDUINO UNO.

Principe de commande d’une CNC ARDUINO:

pour piloter un moteur pas a pas il faut utiliser un systeme de commande électronique et des logiciels spécifique dont nous allons voir la réalisation et l’utilisation dans cette rubrique. l’élément de base de la chaine sera un controleur ARDUINO UNO qui vient s’integrer dans la chaine de commande schématisée ci dessous (pour la partie GCODE voir la rubrique CAO-FAO du site)

les moteur Pas a Pas NEMA 17:

un moteur pas  a pas est un moteur capable de transformer une impulsion électrique en un mouvement angulaire . dit autrement , on peut le faire tourner d’une fraction de tour précise , cette fraction correspondant a un certain nombre de « pas » dont il est mécaniquement et électriquement constitué.

pour plus d’info voir le lien wikipedia : moteurs pas a pas.

la catégorie des moteurs pas à pas est vaste et comprends plusieurs type de moteurs. les moteurs pas a pas NEMA , sont des moteurs au standard NEMA. c’est un standard Américain qui défini l’interface de fixation des moteurs pas a pas.

dans le cas du  NEMA 17 , cela désigne un moteur pas à pas de 1,7 pouces (4,32 cm) de côté pour la plaque de face et dont voici les dimensions de l’interface standard:

une fois cela défini , il faut comprendre qu’ il n’y a pas un seul moteur pas a pas NEMA 17 mais toute une gamme avec différents constructeurs . les variantes sont caractérisées principalement par:

  • la longueur L du moteur ( qui dépends de la puissance et du couple du moteur)
  • les caractéristiques électrique du moteur avec en particulier:
    • la tension d’alimentation ( en volts)
    • le nombre de pas  (en général 200 ou 400)
    • le couple de maintient ( kg/cm ou N/cm)
    • l’intensité électrique admissible par bobine ( en Amperes)
    • l’inductance par bobine ( unité en mH = millihenry)

Avant de choisir un Moteur pas a pas , il faut donc fixer les caractéristiques a atteindre ( vitesse maxi , couple , etc..), puis en fonction de ces éléments voir quel NEMA 17 corresponds au cahier des charges , pour cela il faudra consulter les « data sheets » fournies par les vendeurs ou constructeurs retenus et si possible trouver les courbes couple/vitesse pour les moteurs envisagés.

dernier point a vérifier , dans la phase de choix de votre NEMA 17 , privilégier les moteurs bipolaires a 4 fils plutôt que les moteur unipolaires a 6 fils. en effet les drivers pololu A4988 ne sont prévus que pour connecter des moteurs 4 fils.

les Drivers POLOLU A4988:

ce sont des petits circuits imprimés de quels mm de cotés et dont la fonction est de convertir les signaux electriques Step et Dir reçus d’un circuit de commande en impulsion électriques envoyés sur les 4 fils du moteur pas a pas pour le faire tourner du nombre d’impulsion Step et dans le sens du signal Dir reçu. le pololu A4988 est capable de gérer du micro pas ce qui veut dire qu’il est capable d’utiliser les caractéristiques intrinsèques des Pas a Pas pour augmenter « électriquement » le nombre de pas réel du moteur . cela permet d’augmenter la finesse de l’angle recherché.

brochage et branchement d’un Pololu A4988:

Data sheet et données techniques Pololu A4988:

https://www.pololu.com/product/1182

lien WIKI en francais:

http://wiki.mchobby.be/index.php?title=A4988

NOTA: la tension d’alimentation a appliquer entre VMOT et GND des pololu dépends du moteur Pas a Pas choisi => se reporter a la date sheet du PaP choisi.

ARDUINO CNC- choix du moteur et de la vis

le moteur pas a pas est un élément important de la chaine de transmission, il ne doit pas être choisi au hasard. les principaux paramètres a prendre en compte sont :

– couple du moteur

-vitesse de rotation

– précision de déplacement recherchée

le couple nécessaire est déterminé par la mécaniqueet les masses à mettre en mouvement mais surtout par les paramètres d’usinage attendus . ces parametres dépendent  du matériaux a usiner et du type d’outil utilisé ( acier rapide , carbure) . les paramètres resultants sont : la vitesse de rotation de broche mais aussi  la vitesse d’avance de la pièce

la vitesse d’avance est donc au final un des paramètres les plus important. celle ci se calcule a partir de 2 autres parametres:

– la vitesse de rotation du moteur pas a pas

– le pas de la vis d’avance qui pousse l’axe concerné

calcul de la vitesse de rotation maxi possible d’un moteur pas a pas:

le courant dans une bobine de moteur pas a pas est proportionnel au temps ou le voltage a été appliqué et inversement proportionnel a l’inductance. soit I l’intensité , L l’inductance et T le nombre de secondes pour un pas , on a :

1°) I= V*T/L d’ou T= I*L/V

pour un pas moteur le cas le pire est quand il doit passer de zéro a Imax puis changer de sens , le courant doit partir de zero a Imax puis de Imax à -Imax dans ce cas l’intensité totale qui traverse la bobine est :

2°) I= 2*Imax 

et en integrant I dans  1°)

  1°) T= (L*Imax*2)/V

le nombre de révolutions par secondes se calcule de la façon suivant :

Rev/sec = (Rev/pas) * (pas/sec) = [1/(pas/Rev)] *[1/(sec/pas)]=[1/(pas/Rev)] *[1/T]

soit d’apres 1°)

Rev/sec =[1/(pas/Rev)] *[V/(L*Imax*2)]

en bas de page, quelques exemples de calculs resultants sur des moteurs du commerce

si a un moteur vous associez une vis de pas P donnée , pour calculer l’avance en milimetres par minute , il suffit de multiplier la vitesse max par le pas de la vis pour obtenir la vitesse lineaire maxi resultante.

ces calculs vous permettrons de documenter les parametres $4 et $5 du GRBL [ voir la section 3°) « les programmes « ]

calcul de la précision des déplacements

le calcul de la précision de positionnement et de déplacement obtenu est extrement simple , il dépends du nombre de pas du moteur et du pas de la vis a bille.

si « Pm » est le nombre de pas du moteur et  » Pv » le pas de la vis de transmission, la precision de déplacement se calcule comme suit :

precision = Pv/Pm

par exemple en prenant les moteurs pas a pas du projet (400 pas) que je vais associer a une vis M6 au pas de 1mm , on obtient une precision de déplacement de : 1/400 = 0,0025 mm soit environ 3 microns . pour ne pas ruiner cette précision , il faudra bien entendu veiller avec soin a minimiser le jeu entre la vis et l’ecrou de transmission .

Tableau d’exemples de synthese

ARDUINO CNC-branchement ARDUINO UNO

le role de l’arduino dans la chaine de commande est de recevoir les instructions GCODE et de transformer les consignes de mouvements en impulsion électriques sur les sorties Step et Dir des axes correspondants. le module ARDUINO peut  également, via les sorties correspondantes,  commander la mise en rotation et l’arrêt de broche d’usinage ainsi que  la mise en route et l’arrêt de l’arrosage de coupe . via un certain nombre d’entrées, il est egalement capable de gérer les limites d’axes , l’arret d’urgence , le demarrage cycle et la mise en arret sur coupure d’alimentation electrique.

pour gerer tout cela il faudra installer dans la memoire de l’arduino un programme appelé GRBL (voir vignette spécifique ).

ci dessous les brochages d’un ARDUINO UNO correspondant a toutes ces fonctions.

il y a 2 versions de branchement dépendant de la version de GRBL installée.

Version GRBL 0.9 et anterieures:

dans ces versions, la gestion de vitesse broche ou puissance laser n’etait pas implémentée ni le retour de sonde de position (Z probe).

Version GRBL 1.1 et Ultérieures:

depuis GRBL 1.1 , la gestion de vitesse broche ou puissance laser est implémentée dans GRBL ainsi que la gestion de la lubrification brouillard d’huile et la sonde de Z

Cablage POLOLU

avec 3 modules POLOLU A4988 pour les axes X , Y et Z , cela donne le schéma de cablage suivant:

et pour finir avec les 3 moteurs d’axes , l’alimentation des pololu  et un condensateur de filtrage de 100 uF  aux bornes de l’alimentation,  cela donne:

ATTENTION : l’ordre de branchement des fils de chaque  moteur pas a pas sur son driver pololu dépendra des moteurs achetés et du sens de rotation de ceux ci aux premiers essais. en fonction des essais il vous faudra peut etre echanger les fils axe par axe. le schéma ci dessous donne de bons résultats dans la majorité des cas de NEMA 17 avec fils blanc/brun/orange/vert:

ARDUINO CNC-GRBL

une fois la partie hard de la commande construite , pour faire fonctionner l’ARDUINO UNO en mode CNC il va falloir y  installer le programme GRBL.

GRBL est un programme  libre, open-source,  écrit en C et  optimisé pour tourner sur un Arduino Uno.

voici le lien vers le wiki Github qui permet d’acceder a toutes les infos et ressources concernant GRBL . le site GitHub est malheureusement en Anglais.

https://github.com/gnea/grbl/wiki

les instruction ci dessous permettrons, je l’espere,  a ceux qui ne parlent pas anglais de faire les operations de bases pour charger et  installer GRBL sur leur ARDUINO.

telechargemnt de GRBL:

  • rendez vous sur la page GitHub de GRBL :https://github.com/grbl/grbl
  • une fois sur la page , cliquez sur la case verte « clone or download »

  • dans la fenêtre « Clone with HTTPS » qui apparait, cliquez sur « Download ZIP ». votre navigateur va ensuite télécharger un fichier ZIP nommé « grbl-master.zip »  et le mettre dans le répertoire de téléchargement du navigateur.

  • ouvrez le répertoire de téléchargement  et décompresser le fichier ZIP pour obtenir le répertoire avec les fichiers GRBL a l’intérieur.  la version décompressée servira  dans la suite de l’installation (voir plus bas)

Installation de la librairie GRBL:

  • ouvrez l’interface ARDUINO

IMPORTANT: assurez vous d’avoir la dernière version de l’IDE compatible avec la dernière version de GRBL. dans le doute faites une mise a jour ( voir plus bas problème potentiel sur l’installation de la librairie)

  • dans le menu du haut , sélectionner « sketch », puis dans le menu deroulant »Include Library » puis dans le menu déroulant suivant « Add ZIP library »

aller dans le répertoire temporaire du navigateur  ou vous avez mis le fichier ZIP et la version décompressée. ouvrir le répertoire « grbl-master » , puis ensuite le répertoire « grbl-master » suivant ( le soft de décompression crée 2 répertoires grbl-master l’un dans l’autre). une fois le 2° répertoire ouvert vous devriez voir 3 sous répertoires (build/doc/grbl).  sélectionnez le répertoire « grbl » puis cliquez sur OPEN.

la librairie GRBL est maintenant installée sur l’IDE ARDUINO.

Téléversement  de L’ARDUINO

nous allons maintenant installer le programme GRBL sur l’arduino

  • connectez votre ARDUINO UNO au PC via le cable USB puis dans l’interface ARDUINO , menu du haut aller sur « file » puis « open »:

  • allez dans le répertoire de téléchargement du navigateur puis dans le répertoire « grbl-master » , puis dans « grbl » puis dans « exemples » puis dans « grblUpload » et selectionez le fichier « grblUpload.ino » et cliquez sur « open »

  • le fichier GRBL est maintenant chargé dans l’IDE ARDUINO

il ne reste plus qu’a le téléverser dans l’arduino , pour cela cliquez sur la fleche de commande rapide :

Voila , GRBL est maintenant installé sur votre microcontroleur ARDUINO qui est pret a fonctionner pour piloter votre CNC DIY.

reste a configurer les parametres GRBL dans votre logiciel de pilotage de la CNC c’est l’objet de la vignette suivante.

pour compléter ce tuto , voici une video Youtube qui résume toutes les Opérations précédentes ( a visionner en plein écran de préférence):

ARDUINO CNC-parametrage de GRBL

une fois GRBL installé sur le module ARDUINO UNO , l’opération suivante va consister au paramétrage de GRBL. ce paramétrage ne se fait pas directement dans GRBL via l’IDE ARDUINO mais via le logiciel de commande de la CNC qui est en communication avec la carte ARDUINO et GRBL. c’est ce logiciel qui va permettre d’aller modifier les paramètres dans GRBL .

plusieurs soft de commande open source (libre) comptatibles avec GRBL sont disponibles, voici une liste des plus connus avec le lien vers le site qui permet de les telecharger:

Universal GODE Sender: 

https://github.com/winder/Universal-G-Code-Sender

GRBL Controller:

https://github.com/zapmaker/GrblHoming

CANDLE:

https://github.com/Denvi/Candle

 

pour plus d’info sur l’utilisation de ces software , voir la rubrique CAO-FAO-XAO du site de e-learning. GRBL Controller etant tombé en désuétude , la rubrique ne développe que  l’utilisation de CANDLE et Universal GCODE Sender.

voici par exemple a quoi ressemble Grbl Controller 3.6.1 une fois démarré sur le PC qui est connecté a l’ARDUINO.

Une fois le soft ouvert, pour etablir la connexion avec la carte ARDUINO,  il faut aller dans la partie en haut a gauche , sélectionner le port de connexion ( le port COM3 dans le cas présent). sélectionner la vitesse de connexion (115200 si pas affichée par défaut) puis cliquer sur « Ouvrir ».

apres quelques secondes , le bouton « Ouvrir » se transforme en « Fermer/RAZ » sur fond rouge, signe que la connexion est établie.

et du texte apparait dans la fenetre en bas a gauche. la zone de texte affiche les paramètres de GRBL tels qu’ils viennent d’être récupérés de l’ARDUINO .

si tout fonctionne correctement , quand vous cliquez sur une des flèches de la zone commande d’axe (zone a droite en position basse), le moteur pas a pas de l’axe correspondant tourne et dans la zone d’affichage de coordonnées les chiffres doivent évoluer en fonction du déplacement.

Changer un parametre GRBL

le détail des paramètres de configuration de GRBL est expliqué dans le lien suivant

https://github.com/grbl/grbl/wiki/Configuring-Grbl

ce site étant en anglais , voici ci dessous une synthese en français pour vous aider a la manipulation :

liste des parametres GRBLV0.9:

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=6 (dir port invert mask:00000110)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.020 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=1 (homing dir invert mask:00000001)
$24=50.000 (homing feed, mm/min)
$25=635.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=314.961 (x, step/mm)
$101=314.961 (y, step/mm)
$102=314.961 (z, step/mm)
$110=635.000 (x max rate, mm/min)
$111=635.000 (y max rate, mm/min)
$112=635.000 (z max rate, mm/min)
$120=50.000 (x accel, mm/sec^2)
$121=50.000 (y accel, mm/sec^2)
$122=50.000 (z accel, mm/sec^2)
$130=225.000 (x max travel, mm)
$131=125.000 (y max travel, mm)
$132=170.000 (z max travel, mm

pour changer un parametre GRBL , il faut aller dans la petite fenetre « commande » de votre soft de commande de la CNC ( en general  la fenetre qui permet d’envoyer des instruction GCODE  en ligne a ligne).

et ensuite il suffit de taper une commande du type

$x= valeur

« x « est le numero de paramètre correspondant de la liste de parametres GRBL , et « valeur » la valeur que l’on souhaite mettre comme donnée dans le paramètre . par exemple si dans les paramètres on a:

$100=314.961

et que l’on souhaite mettre 240 a la place de 314.961

il faut taper : $100= 240 puis faire « Entrée » avec la touche correspondante.

les parametres GRBL importants

les parametres principaux de GRBL sont les suivants

  • le parametre $13 permettent de configurer les unités de déplacement. $13=0 pour les mm et $13=1 pour les pouces

 

  • $100-$101-$102
$100=314.961 (x, step/mm) nombre de pas par mm sur X
$101=314.961 (y, step/mm) nombre de pas par mm sur Y
$102=314.961 (z, step/mm) nombre de pas par mm sur Z

il déterminent le nombre de pas pour un déplacement d’un mm sur chaque axe. ces paramètres dépendent du nombre de pas du moteur et du pas de la vis .

il faudra veiller a les configurer de tel façon que les déplacements réels constatés soient  conformes a la consigne GCODE de déplacement.

par exemple avec un NEMA 17 de 200 pas et une vis trapezoidale au pas de 5mm sur l’axe X , cela veut dire qu’un tour de moteur fait avancer l’axe de 5 mm. donc que 200 pas correspondent a 5 mm soit 200/5= 40 pas par mm

dans ce cas il faudra donc saisir : $100=40

  • les parametres $110-$111-$112 permettent de configurer les vitesses d’avance max sur les 3 axes

 

  • les parametres $120-$121-$122 permettent de configurer les vitesses d’accélération sur les 3 axes

 

  • les parametres $130-$131-$132 permettent de configurer les courses maxi  sur les 3 axes

 

  • le parametre $3 permettent de configurer le sens de rotation des moteurs d’axes. c’est ce parametre qu’il faut toucher si un des axes ne se déplace pas dans le bon sens.

le tableau suivant permet de connaitre les valeurs a saisir pour $3:

      valeur            Masque      Invert X    Invert Y   Invert Z
0 00000000 N N N
1 00000001 Y N N
2 00000010 N Y N
3 00000011 Y Y N
4 00000100 N N Y
5 00000101 Y N Y
6 00000110 N Y Y
7 00000111 Y Y Y