Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
mardi 10 mai 2016

:: Prolonger la durée de vie des cartes SD sur Raspberry Pi ::

Les cartes Raspberry Pi sont souvent considérées, à tort, comme des "killeuses" de carte SD. Ceci n'est pas dû à notre framboise préférée mais au fait que la carte SD fasse office de disque dur. Or le système d'exploitation risque de solliciter énormément cette dernière pour y écrire régulièrement de petites quantités de données (fichiers journaux, fichiers temporaires, etc.), traitement pour lequel une carte SD n'a pas été conçue (ses cycles d'écritures sont limités). Le risque ici est de voir fondre comme neige au soleil l'espace disque disponible sur votre carte SD, jusqu'à la rendre inutilisable. Pour limiter ce risque des moyens existent, je vous en présente deux que j'ai personnellement testés (et éprouvés).

tmpfs

tmpfs va nous permettre de déplacer les répertoires fortement sollicités en ram.
A noter que le contenu de ces répertoires sera perdu à chaque redémarrage du système.

Répertoires concernés :

  • /tmp
  • /var/tmp
  • /var/log

Cette liste est bien-sûr exhaustive, n'hésitez pas à ajouter d'autres répertoires fortement sollicités en terme d'écriture.

Pour cela, il faut modifier le fichier /etc/fstab comme suit :

tmpfs /tmp tmpfs defaults,noatime,nosuid,size=16m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=16m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=16m 0 0

La quantité de RAM disponible sur le raspberry pi étant limitée, on fixe arbitrairement la taille max des partitions à 16Mo.

ramlog (http://www.tremende.com/ramlog/)

Dans le cas des fichiers journaux, la méthode précédente présente l'inconvénient de supprimer ces derniers à chaque redémarrage du Pi. Ce qui, pour un serveur Web ou tout autre serveur public, peut s'avérer rédhibitoire. ramlog permet de contourner ce problème : à chaque démarrage, il crée un volume de stockage virtuel en RAM, y copie le contenu de /var/log puis monte ce volume comme /var/log. Les fichiers journaux sont ainsi stockés sur le disque dans le répertoire /var/log.hdd qui est mis à jour à chaque arrêt/redémarrage du service.

Pour installer ramlog, lancer les commandes suivantes :

$ wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
$ sudo dpkg -i ramlog_2.0.0_all.deb
$ sudo reboot

Une fois le Pi redémarré, vérifier que ramlog est bien actif avec la commande suivante :

$ service ramlog status

Références


vendredi 06 mai 2016

:: Calibration et gestion du firmware - Marlin LCD ::

Préparation de l'environnement de développement Arduino

Installation

Sur Linux Mint, l'IDE Arduino étant présent dans les repositories officiels, on l'installe en une seule commande :

$ sudo apt-get install arduino 

Permissions utilisateurs

Ajouter les utilisateurs de l'imprimante au groupe "dialout" pour autoriser l'accès aux ports séries.

$ sudo usermod -aG dialout utilisateur

Pour s'ajouter soi-même :

$ sudo usermod -aG dialout $(whoami)

Vérifier à l'aide de la commande "groups" :

$ groups
[...] dialout [...]

Connexion à la carte Arduino

  • Connecter la carte Arduino à l'aide du câble usb.
  • Lancer Arduino IDE et sélectionner le type de carte et le port série, pour ma part :
    • Outils > Type de carte > Arduino Mega 2560 ou Mega ADK
    • Outils > Port série > /dev/ttyACM0

Calibration des moteurs

Informations à collecter

  • Nombre de pas moteur : 200
  • Angle de pas : 1,8 °
  • Résolution ou pas du driver : 1/16ème (A4988) ou 1/32ème (DRV8825)
  • Type de tige filetée et son pas de vis : M5 / 0.8
  • Type de courroie et son pas : GT2 / 2 mm
  • Nombre de dents de l'engrenage de la courroie : 20
  • Nombre de dents du grand engrenage de l’extrudeur : 43
  • Nombre de dents du petit engrenage de l’extrudeur : 10
  • Ratio de l’extrudeur : 1
  • Diamètre de l’axe de la vis entraînant le fil : 6.5

Ces informations sont nécessaires pour calculer le nombre de pas pour chaque moteur (axes X, Y, Z + extrudeur) et définir la valeur DEFAULT_AXIS_STEPS_PER_UNIT du fichier Configuration.h :

#define DEFAULT_AXIS_STEPS_PER_UNIT {X, Y, Z, E}

Calcul des valeurs de pas

Extrudeur

Formule du calcul de pas pour l'extrudeur :

\[ E = \frac{{PasMoteur} * {PasControleur} * \frac{DentsGrandEngrenage}{DentsPetitEngrenage}}{{DiamètreAxe} * {\pi}} \]

  • Extrudeur Wade

    \[ E = \frac{{200} * {32} * \frac{43}{10}}{{6.5} * {\pi}} = 1347,67508735 \]

  • Extrudeur Titan

    \[ E = \frac{{200} * {32} * {3}}{{6.7} * {\pi}} = 912,171614139 \]

Axes X et Y

Formule du calcul de pas pour les axes X et Y :

\[ X | Y = \frac{PasMoteur}{PasCourroie * DentsEngrenage * Résolution} \]

Axe Z

Formule du calcul de pas pour l'axe Z :

\[ Z = \frac{PasMoteur}{PasDeVis * Résolution} \]

Dans mon cas, j'obtiens les valeurs suivantes :

  • Extrudeur Wade

    define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,1347.67}

  • Extrudeur Titan

    define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,912.17}

Outil indispensable

Le calculateur de pas RepRap : RepRap Calculator

Optimisation des paramètres PID

Les paramètres Proportionnelle Intégrale et Dérivation concernent les éléments chauffants de l'imprimante (buses de chauffe et lit).
Afin d'éviter tout problème de dépassement de température et d'optimiser la consommation électrique, il est important d'affiner au maximum ces paramètres.
Pour cela, une commande existe qui fait tout le travail pour nous :-)

Buse de chauffe extrudeur

Le code suivant chauffe la buse n°1 (E0) jusqu'à 200°C durant 8 cycles, puis remonte les valeurs PID calculées :

M303 E0 S200 C8

Après quelques minutes, le résultat donne :

[...]
 bias: 102 d: 102 min: 194.70 max: 205.94
 Ku: 23.12 Tu: 61.87
 Clasic PID
 Kp: 13.87
 Ki: 0.45
 Kd: 107.29
PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h

Lit chauffant :

Le code suivant chauffe le lit (E-1) jusqu'à 50°C durant 8 cycles, puis affiche les valeurs PID calculées.

M303 E-1 S50 C8

Après plusieurs minutes, on obtient :

[...]
 bias: 126 d: 126 min: 49.92 max: 50.70
 Ku: 410.70 Tu: 87.54
 Clasic PID
 Kp: 246.42
 Ki: 5.63
 Kd: 2696.34
PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h

Modification du firmware

Configuration.h

Valeurs modifiées :

  • Version et auteur

    #define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__
    #define STRING_CONFIG_H_AUTHOR "Xzz"
  • Connexion à l'imprimante

    #define SERIAL_PORT 0
    #define BAUDRATE 250000
  • Type de carte (RAMPS 1.4 avec sorties extrudeur, ventilateur et lit)

    #define MOTHERBOARD 33
  • Thermistances

    #define TEMP_SENSOR_0 5
    #define TEMP_SENSOR_BED 7
  • Buse de chauffe de l'extrudeur

    // Prusa i3 - Hotend 12V 40W
    #define  DEFAULT_Kp 13.87
    #define  DEFAULT_Ki 0.45
    #define  DEFAULT_Kd 107.29
  • Lit chauffant

    // Mk8 300x200 12V
    #define  DEFAULT_bedKp 246.42
    #define  DEFAULT_bedKi 5.63
    #define  DEFAULT_bedKd 2696.34 
  • Bornes d'arrêt (endstop)

    const bool X_MIN_ENDSTOP_INVERTING = false;
    const bool Y_MIN_ENDSTOP_INVERTING = false;
    const bool Z_MIN_ENDSTOP_INVERTING = false;
    #define DISABLE_MAX_ENDSTOPS
    [...]
    #define INVERT_X_DIR false
    #define INVERT_Y_DIR false
    #define INVERT_Z_DIR false
    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1
    #define Z_HOME_DIR -1
  • Dimensions du lit

    #define X_MAX_POS 200
    #define X_MIN_POS 0
    #define Y_MAX_POS 260
    #define Y_MIN_POS 0
    #define Z_MAX_POS 180
    #define Z_MIN_POS 0
  • Mouvements

    #define HOMING_FEEDRATE {50*60, 50*60, 3*60, 0} 
    #define DEFAULT_AXIS_STEPS_PER_UNIT   {80,80,4000,1347.67}
    #define DEFAULT_MAX_FEEDRATE          {100, 100, 3, 25}

    Note : les valeurs d'accélération par défaut sont extraordinairement élevées pour ma Prusa i3. Afin d'éviter les sauts de pas (que j'ai surtout constaté sur l'axe Y), je les ai diminuées drastiquement.

    #define DEFAULT_MAX_ACCELERATION      {220,220,10,200}
    #define DEFAULT_ACCELERATION          180
    #define DEFAULT_RETRACT_ACCELERATION  180
  • Constantes de préchauffage

    #define PLA_PREHEAT_HOTEND_TEMP 190
    #define PLA_PREHEAT_HPB_TEMP 45
    #define PLA_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255
    
    
    #define ABS_PREHEAT_HOTEND_TEMP 240
    #define ABS_PREHEAT_HPB_TEMP 100
    #define ABS_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255

Références