Avant toute chose

Le projet

Nous allons utiliser un capteur pour mesurer la température ambiante. L’Arduino allumera le capteur, lira la valeur mesurée, et copiera les données vers notre PC via le port série du programmeur.

Diagramme d'architecture du capteur
Diagramme d’architecture du capteur

Dans une seconde partie, nous enverrons les données vers un serveur Graphite pour les stocker dans le temps, et nous utiliserons le système de dashboards Tessera pour l’afficher.

Diagramme d'architecture finale
Diagramme d’architecture finale

Matériel nécessaire

  • Une carte Arduino/Genuino 3.3V. Nous allons faire la démonstration avec un SparkFun Pro Mini 3.3V ($9.95), mais toute carte compatible fera l’affaire, avec quelques adaptations. Attention : Il est important pour utiliser le capteur suivant d’employer une carte 3.3V et non 5V.
  • Un programmeur si la carte n’en comporte pas. Nous allons utiliser un programmeur SparkFun FTDI Basic 3.3V ($14.95), il pourra servir à d’autres expériences.
  • Un capteur de température analogique, par exemple le TMP36 ($1.50).
  • Quelques connecteurs à souder($1.50).
  • Une plaque d’expérimentation ($4.95), elle pourra servir à d’autres expériences.

Au total, pour moins de 40€ frais de port inclus, vous pourrez faire vos premiers pas dans le monde de « l’informatique physique ».

En complément utile, vous pouvez également prévoir :

  • Des fils de liaison ($6.95) pour la plaque d’expérimentation, ils pourront servir à réaliser toute sorte d’autres montages facilement.
  • Des connecteurs à angle droit ($1.95), ils sont plus pratiques pour la partie communication de l’Arduino Pro Mini.

Si vous n’en avez pas déjà par ailleurs :

Toutefois, un petit tour chez le fablab à côté de chez vous, ou chez un ami ferru d’électronique fera très bien l’affaire, le service et les conseils en plus.

Le montage

Les connecteurs Arduino

L’Arduino Pro Mini n’est pas fourni avec ses connecteurs, il va donc falloir les souder. Coupez les connecteurs droits pour obtenir 2 bandes de 12 connecteurs. Normalement ils se cassent à la main. S’aider d’un cutter si besoin. On soudera les deux bandes de sorte qu’elles soient sous l’Arduino (le dessous est la face qui comporte le moins de composants), de chaque côté.

Pour les 6 dernières pattes, deux solutions :

  • Soit vous avez acheté des connecteurs à angle droit, soudez-les alors les pattes en haut, tournées vers l’extérieur. La soudure se fait en dessous de l’Arduino.

    Soudure des pattes de communication à angle droit
    Soudure des pattes de communication à angle droit
  • Soit vous n’avez que des connecteurs droits, auquel cas il est plus simple de les souder sur le dessus, les pattes vers le haut. La aussi, la soudure se fait en dessous.

    Soudure des pattes de communication à la verticale
    Soudure des pattes de communication à la verticale

Le montage électronique

Le montage est très simple, une fois la délicate partie soudure terminée. Il ne reste plus qu’à connecter le programmeur FTDI sur l’Arduino (nous l’avons représenté avec des câbles sur le schéma, mais la connexion devrait être directe).

Le FTDI connecté en direct a l'Arduino
Le FTDI connecté en direct a l’Arduino

Ensuite, placer le capteur TMP36 face aux pattes 13 A0 et A1 de l’Arduino. Attention : Ce capteur est sensible à l’orientation : sa face plate doit être opposée à l’Arduino, tournée vers l’extérieur.

Le circuit complet
Le circuit complet

La programmation

Ce que nous voulons

Le capteur TMP36 va mesurer la température en sortant une tension analogique sur la patte de sortie (au milieu, connectée en A0).

Nous voulons donc, toutes les secondes, l’alimenter en courant par ses pattes VCC et GND, respectivement branchées en 13 et A1, et lire la valeur A0.

Une fois que nous avons obtenu la valeur, il faut l’écrire sur le port série pour qu’elle soit disponible sur l’ordinateur.

Lorsque nous lisons la valeur, nous utilisons un convertisseur analogique/numérique. Ce convertisseur transforme une tension entre 0 et REF, REF étant par défaut la tension d’alimentation de l’Arduino, soit 3,3 V dans notre cas. La résolution du convertisseur est de 10 bits, et la précision de la mesure est donc de (REF - 0) / 2^10 = 3,2 mV. Vues les caractéristiques du capteur et la température habituelle dans un open space (environ 20°C, à plus ou moins 10°C), nous pouvons obtenir une mesure plus précise en réglant le convertisseur analogique numérique entre 0 et INTERNAL, sachant que INTERNAL vaut 1,1 V sur un Arduino Pro Mini. La précision sera alors de (INTERNAL - 0) / 1024 = 1 mV ce qui est trois fois meilleur.

Place au code

Voici le firmware minimum pour réaliser cette opération :

unsigned long lastTime;

void setup() {
  pinMode(A1, OUTPUT);
  pinMode(13, OUTPUT);

  digitalWrite(A1, 0);
  digitalWrite(13, 1);

  Serial.begin(9600);
  lastTime = millis();
  analogReference(INTERNAL);
}

void loop() {
  if (lastTime + 1000 < millis()) {
    int value = analogRead(A0);
    Serial.println(value);
    lastTime = millis();
  }
}

Quelques explications :

  • Serial.begin(speed) est une fonction qui démarre le port série à une vitesse donnée. Serial.println(int) écrit une valeur entière sur le port série. Nous allons donc envoyer les valeurs toutes les secondes, une par ligne, sur le port série.
  • Nous utilisons les ports 13 et A1 respectivement comme une source de tension et une masse, en les configurant comme des ports de sortie, et en choisissant 1 pour l’alimentation et 0 pour la masse.
  • analogReference(REFERENCE) va définir la valeur de référence pour le convertisseur analogique/numérique. Ici, nous utilisons la référence INTERNAL qui vaut 1,1 V.
  • Nous n’utilisons pas wait(millis) pour attendre entre deux valeurs. En effet, c’est une opération bloquante qui peut gêner le fonctionnement du port série. À la place, nous faisons une attente non bloquante, en stockant le dernier temps connu, et en effectuant l’opération quand le temps courant dépasse d’une seconde
  • Nous utilisons le port série à 9600bauds. C’est une valeur arbitraire suffisante. On pourrait utiliser moins, mais il faudrait alors calculer précisément le débit nécessaire pour envoyer les valeurs chaque seconde. On pourrait aller bien au delà, mais la fiabilité pourrait alors baisser.

Premier essai

Pour utiliser ce code, relier l’ordinateur utiliser au programmeur FTDI avec un cable USB. Il servira à la fois d’alimentation et de port série entre l’Arduino et l’ordinateur. Ouvrir l’environnement Arduino, et effectuer quelques réglages :

  • Dans le menu « Outils->Type de carte » choisir « Arduino Pro or Pro Mini ».
  • Dans le menu « Outils->Processeur » choisir « ATmega328 (3.3V 8MHz) » (les autres versions ont une tension différente, ou un processeur ancien).
  • Enfin, dans « Outils->Port », choisir le port correspondant au port série utilisé par le programmeur FTDI. Sous Linux, il prendra souvent la forme /dev/ttyUSBn (avec n un chiffre), sous Mac /dev/cu.usbserial et enfin sous Windows COMn (avec n un chiffre).

Ensuite, on peut copier le code source du firmware et le flasher sur l’Arduino avec CTRL-U (ou CMD-U sous Mac).

Pour vérifier le bon fonctionnement du firmware, on peut ouvrir le moniteur de port série de l’environnement Arduino avec CTRL-MAJ-M (ou CMD-MAJ-M sous Mac) : On devrait voir défiler des valeurs mesurées.

Et les tests ?

Il est difficile de faire des tests unitaires pour du hardware. Cependant, on peut configurer le firmware pour qu’il envoie une série de données connues au lieu de lire des valeurs physiques. Voici un firmware de test utilisable pour les étapes suivantes de cette série d’articles :

 

unsigned long lastTime;

void setup() {
  Serial.begin(9600);
  lastTime = millis();
}

void loop() {
  if (lastTime + 1000 < millis()) {
    Serial.println(132);
    lastTime = millis();
  }
}

Ce firmware simplifié permet plusieurs choses :

  • Il permet de tester la lecture du port série côté ordinateur.
  • Il permet de se passer du capteur TMP36 si on l’a branché à l’envers et brûlé subitement, en attendant que son remplaçant arrive par La Poste.
  • Il permet d’envoyer toute sorte de valeurs au besoin : il suffit de changer la valeur et de flasher le firmware.

Conclusion

Voilà qui termine ce premier article de la série « Thermomètre d’Open Space Connecté ». Dans cet article, nous avons commandé les pièces nécessaires, réalisé un montage électronique simple, mais avec quelques soudures délicates, et relié le tout à un ordinateur.
Dans la suite de la série :

  • Comment interpréter les valeurs ?
  • Comment les stocker de façon fiable et utilisable ?
  • Comment les afficher dans des dashboards sexy et présentables ?

À très bientôt.