Contribuer au projet Debian: remonter les bugs.

Utiliser Debian, c'est bien ! Contribuer au projet, c'est mieux... Toutefois, avant de se lancer, il est important de savoir comment faire ! Le point que j'évoquerais aujourd'hui est la remontée de bugs. A priori, Debian est une distribution assez stable et avant la mise en place d'une nouvelle version, une chasse aux bugs drastique est menée. Toutefois, il arrive parfois que vous remarquiez un dysfonctionnement.

Bien entendu, avant de signaler ce comportement anormal, il est bon d'avoir une idée sur son origine et sur la manière dont il se produit. Mais avant de vous lancer, il est important de savoir quelle est la bonne manière de remonter un bug au projet Debian. Car, en effet, il y a une procédure à suivre et des outils à utiliser.

Je viens de passer un peu de temps à traduire une page du wiki Debian qui couvre ce sujet de manière assez concrète: il s'agit du HowtoUseBTS. Après avoir lu cette page, vous devriez pouvoir vous lancer dans la remontée de vos problèmes.

J'ai par exemple rencontré un problème sur le démontage de partition lors de l'arrêt d'une machine qui dispose d'une racine de système de fichiers montée sur un volume UBI. Ma première recherche a été de vérifier quel script de /etc/init.d posait problème. Une fois trouvé le responsable: (le script /etc/init.d/umountfs), il faut essayer de trouver une solution de contournement ou un correctif. Dans tous les cas, comme vous avez pu le lire sur le wiki, il importe de trouver le paquet Debian en cause. Dans ce cas, un simple:

$ dpkg -S /etc/init.d/umountfs
renvoie:
initscripts: /etc/init.d/umountfs

C'est donc le paquet initscripts qui en jeu. Vous devez ensuite aller sur la page de bugs de ce paquet sur http://bugs.debian.org/initscripts . Vous pouvez constater qu'il y en a un paquet !! Maintenant, à vous de vérifier si le problème que vous remontez n'est pas déjà décrit. Dans notre cas, il n'y a rien qui s'approche (quelques éléments sur umountfs ou ubi mais c'est tout...). Dans ce cas, un petit coup de reportbug et le tour est joué !

Dans mon cas précis, je me suis contenté de décrire le problème car je n'étais pas sûr de ma méthode de correction. Toutefois, un patch pour le fichier /etc/init.d/umountfs est trivial à créer à partir des informations fournies.

Quelques minutes après mon envoi de rapport via reportbug, voici le bug #616560. Espérons qu'il sera bientôt corrigé !

Posted sam. 05 mars 2011 15:10:49 Tags:

Capteur de température avec un Arduino

Introduction:

Un Arduino permet pas mal de choses. Un petit tour sur Hackaday.com devrait vous en convaincre... Toutefois, en tant que débutant dans la matière et n'ayant que des concepts théoriques en électronique, il faut que je me tourne vers des choses assez basiques. Sur ce point, il existe un excellent site: celui de ladyada, fondatrice de Adafruit.com qui vend des circuits électroniques pour l'amateur et qui surfe sur la vague du hardware libre.

Sur le site de LadyAda, il y a un montage qui m'a particulièrement intéressé car il est assez simple sur la partie électronique et il permet de commencer doucement à coder avec l'Arduino: c'est le montage sur le capteur de température. Ce montage fait intervenir un capteur de type TMP36. Néanmoins, mon magasin d'électronique le plus proche n'avait pas ça en stock. Je me suis rabattu vers quelquechose de plus conventionnel: un LM335 (lien vers datasheet). Le fonctionnement du capteur est différent de celui présenté sur le site de ladyada. En effet, le LM335 se comporte comme une diode Zener (une diode qui maintient une tension quasi constante à ses bornes sur une plage large d'intensité). Pour peu qu'on lui fournisse suffisamment de courant (entre 450µA et 5mA), on peut lire la température en °K par pas de 10 mV.

La plage des °K est la même que celle des °C à la différence près que 0°K = -273,15 °C. Ainsi, à 20°C, la température sera de 293,15 °K. Ce qui correspond à 293,15°K*10mV = 2,9315 V !

L'objectif est très simple: transformer un ARduino en interface PC<---->Capteur de température, de manière à ramener les données sur la machine. Ce petit exercice fait intervenir du code basique pour Arduino: prendre une mesure analogique et envoyer les données par le port USB.

Schéma:

Voici à quoi ça pourrait ressembler:

Schéma capteur de température basée sur LM335 et Arduino

Pour le branchement du LM335 en boitier TO92, il y a un truc pour les débutants: la datasheet indique le branchement des bornes avec une vue par dessous le composant et non par dessus... Ca à l'air trivial mais j'avais inversé le branchement et les résultats étaient franchement bizarres (mesure entre ADJ et V+).

Calculs:

Pour le calcul de la résistance, j'ai appliqué la formule suivante:

  • Nous serons à presque 20°C de température ambiante.
  • A cette température, la tension aux borne du LM335 sera de 2,9315V.
  • A noter que sur une place de 0°C à 40°C, la tension aux bornes du LM335 variera peu: de 2,73V à 3,13 V.
  • L'Arduino permet de sortir un courant continu de 5V.
  • La tension aux bornes de la résitance devrait être de 5V - 2,93 soit environ 2V.
  • Nous voulons que le courant soit dans les limites du LM335. La valeur de 1mA devrait faire l'affaire.
  • U=RI donc R=U/I soit R=2/0,001 = 2000 Ohms.
  • Dans mon stock, j'ai des résistances de 2,2kOhms, ça fera bien l'affaire (I sera égal à 0,0009mA).

Arduino:

Reste le code pour l'Arduino. Globalement, ce que nous voulons faire est simple:

  • Faire un relevé de tension sur le port d'entrée analogique 0.
  • Convertir cette tension en °C
  • Envoyer le résultat par le port Série de l'Arduino
  • L'Arduino étant branché sur le port USB du PC, on peut utiliser un périphérique Sérial-USB pour récupérer ce que l'Arduino nous renvoie.
  • On attend une seconde et on recommence la boucle.

Pour comprendre comment coder, vous pouvez trouver des exemples à droite et à gauche sur de nombreux sites webs (celui de ladyada est encore une fois très bien fait). Néanmoins, pour bien comprendre, lisez cet ouvrage: le Arduino Programming Notebook.

Voici le code commenté:

    /*
    Capteur de température avec un LM335

    */

    int capteurPin =  0;    // Port analogique pour lire la température

    // Boucle Setup pour indiquer le port de communication
    void setup()   {
      Serial.begin(9600);
    }

    // Boucle principale
    void loop()
    { 
    // On lit la tension sur le bon port:
    int tension_l = analogRead(capteurPin);

    // La tension est un entier qui va de 0 à 1024 fois la tension de
    // référence (5V chez nous). Il faut la convertir en tension:
    float tension = (tension_l * 5.0) / 1024.0;

    // La température se calcule facilement:
    float temp = ((tension_l*5.0)/10.24)-273.15;

    // On envoie les résultats sur le port série:
    Serial.print(tension);
    Serial.println(" volts");
    Serial.print(temp);
    Serial.println(" °C");

    // On attend une seconde:
    delay(1000);
    }

Mettez tout ça dans un fichier capteur_temp.pde.

Programmer l'Arduino:

Maintenant que le source est compris, il reste à le compiler, à l'envoyer sur l'Arduino et à le tester. Comme sur mon article précédent, il va falloir un fichier Makefile du genre:

ARDUINO_DIR = /usr/share/arduino

TARGET       = capteur_temp

MCU          = atmega328p
F_CPU        = 16000000
ARDUINO_PORT = /dev/ttyUSB*

AVRDUDE_ARD_PROGRAMMER = arduino
AVRDUDE_ARD_BAUDRATE   = 57600

include /usr/share/arduino/Arduino.mk

Ensuite, un simple make permettra de compiler le projet correctement. Pour envoyer le tout sur l'Arduino, il suffit de le brancher et de lancer la commande: make upload

Lecture depuis le PC:

Pour lire depuis le PC, il suffit de brancher votre Arduino sur un port USB et de lancer la commande:

screen /dev/ttyUSB0 9600

Screen permettra d'afficher le contenu de ce qui est envoyé par l'Arduino sur l'écran. Le paramètre 9600 indique le débit (9600 bauds) que nous avons indiqués dans le code source.

Vous verrez alors des lignes du genre:

2.91 volts
17,31 °C
2,91 volts
17,31 °C
2,92 volts
17,89 °C
...

Nous avons donc des données qui peuvent éventuellement être récupérées via un script pour former un fichier de données qui pourra être représenté de manière graphique (avec GNUPlot par exemple).

Note: Pour faire les illustrations de cet article et pour le prototypage, j'ai utilisé le logiciel Fritzing. Il n'est pas (encore) packagé sous Debian mais j'espère que ça changera bientôt. Ce logiciel est destiné à des débutants en électronique. Il utilise une représentation simple des composants, proche de ce qu'on peut faire avec une planche d'essai.

Posted dim. 06 mars 2011 17:58:36 Tags:

Débuter avec un Arduino

Comme vous avez pu le constater depuis quelques articles, je consacre un peu de mon temps à apprendre comment faire fonctionner un Arduino avec nombre d'outils et d'interfaces différents. Ce faisant, j'apprends également des rudiments d'électronique de manière bien plus concrète que ce que j'ai pu faire à l'école. Moins de théorie, plus de pratique et surtout, plus de manipulations qui permettent de se faire la main et de saisir avec bien plus d'efficacité les principes de fonctionnement de tel ou tel composant.

En trainant régulièrement sur Hackaday, je suis tombé sur une série de vidéos pour bien débuter avec un Arduino. Elles ont été réalisées par Jeremy Blum qui, malgré son jeune âge (environ 20 ans), nous apporte les éléments essentiels de manière très didactique. Les vidéos sont postées sous Youtube et le mieux est de les télécharger dans une bonne résolution (histoire de pouvoir lire le code).

Certes, ce sont des vidéos et elles ont l'inconvénient de ne pas être aussi souples qu'un tutoriel écrit (il faut regarder au fur et à mesure, le code n'est pas disponible immédiatement). Néanmoins, le contenu du tutoriel est vraiment bien fait et les explications de Jeremy très claires. Par exemple, j'ai très bien compris à quoi servaient des résistances de pull-down ou de pull-up alors que ce n'est pas si évident pour un débutant.

De plus, les exemples utilisés par Jeremy sont souvent repris des tutoriaux "officiels", présents sur le site Arduino.cc. Je vous conseille de les réaliser vous même au fur et à mesure que vous regardez les vidéos, c'est très formateur. Les montage les plus impressionants sont sans doute ceux qui utilisent des servos et qui peuvent se piloter avec quelques lignes de code.

Enfin, je vous recommande de consulter le site de référence sur le langage de l'Arduino. Vous pourrez mieux comprendre les fonctions qui sont utilisées et la manière de les appeler et de manipuler des variables.

Hackez bien !

Posted sam. 19 mars 2011 13:53:46 Tags: