1. Introduction

Pourquoi un avertisseur de courrier ?

L'objectif de ce projet est de me simplifier la vie du point de vue de la réception de mon courrier. Et ceci en installant un système permettant de m’avertir de sa venue à l'aide d'un haut-parleur et d'un indicateur lumineux tel qu'une LED.

Quelles étaient les limitations possibles ?

A l'heure de devoir choisir mon projet, je ne voyait qu’une seule limitation possible qui pouvait se manifester : c’est-à-dire l’impossibilité d’installer efficacement mon système dans ma boite aux lettres de façon sûre. En effet, ma boite au lettre étant en extérieur, le système risquait d’être endommagé par les possibles intempéries.

Quels sont les enjeux de ce projet ?

Les enjeux de ce projet sont de m’amener à avoir des connaissances approfondies sur Arduino et donc sur l’électronique et la programmation qui lui est associée. Ce projet m’apporte également une solution efficace pour savoir si oui ou non il y a du courrier dans ma boite aux lettres. D'autre part, il m'amène à résoudre quelques problèmes qui se confrontent à moi tel que l’installation du système dans ma boite aux lettres. Par ailleurs, j’ai également l’intention d’approfondir ce système lors du projet P (2ème semestre) en y apportant une touche un peu plus software (un site internet entre autres). Ce premier projet sert donc également de base au deuxième projet de l’année.

2. Matériel et méthodes

Pour réaliser ce projet, j'ai eu recours à toutes sortes de matériel de détection, de transmission et réception de données, d'affichage lumineux et autres. En ce qui concerne la méthode de travail, elle était très linéaire, à savoir que j'ai commencé par la détection du courrier pour finir par l'affichage par LED, en passant par la transmission à distance des informations. Je vais donc vous présenter, étape par étape, le matériel que j'ai pu utiliser et également la méthode qui m'a permis d'unir tout ce matériel en un système fonctionnel.

2.1) Première partie: dans la boite aux lettres

Pour la première partie se situant au niveau de la boite aux lettres, j'ai utilisé un senseur de poids, une carte Arduino Uno, un amplificateur, un transmetteur et un câble d'alimentation par pile 9V.
IMG_0915.JPG Figure 1
IMG_0917.JPG Figure 2

2.1.1) Senseur de poids (load sensor)

Le senseur de poids, load sensor en anglais, sert essentiellement à détecter l'arrivée et la présence de lettres dans la boite aux lettres. Il est capable de détecter des masses allant de 0 à 3 kilogrammes. Si le senseur détecte la présence de quelque chose, il envoie un signal continu, tant qu'il y a une lettre dessus, au circuit imprimé Arduino afin qu'il traite l'information. IMG_0937.JPG Figure 3

2.1.2) Carte Arduino Uno

Pour traiter l'information du senseur, j'ai décidé d'utiliser un circuit imprimé, appelé Arduino Uno. Celui-ci, à l'aide du code implanté à l'intérieur, permettra d'envoyer un signal au transmetteur radio, si une lettre se trouve dans la boite aux lettres. Tant que le senseur détecte une lettre et donc que la carte Arduino reçoit un signal, elle envoie l'information au transmetteur radio. La carte Arduino sera alimentée par un boitier d'alimentation à pile PP3.

2.1.3) Amplificateur

Pour traiter correctement l'information du senseur, ses mesures nécessitent d'être amplifiées à l'aide d'un amplificateur de voltage. J'ai donc utilisé l'amplificateur INA125P. En ce qui concerne la configuration et le câblage de celui-ci sur la carte Arduino, j'ai utilisé le montage préconisé par défaut pour mon senseur.

2.1.4) Transmetteur radio

Le transmetteur que j'ai utilisé va de paire avec le récepteur présent dans la seconde partie du système. Il s'agit d'un transmetteur fonctionnant par fréquence radio. Sa fonction est de transmettre les données provenant de la carte Arduino au récepteur situé dans la maison. IMG_0933.JPG Figure 4

2.1.5) Câble d'alimentation

Afin d'alimenter le circuit Arduino et les composants qui y sont rattachés, j'ai décidé d'utiliser un câble d'alimentation pour pile 9V. Ce système d'alimentation est très pratique, car mobile. IMG_0939.JPG Figure 5

2.2) Deuxième partie: dans la maison

Pour cette deuxième partie, qui se situe dans la maison et qui transforme les informations provenant de la boite aux lettres en signal lumineux, j'ai utilisé un récepteur, une autre carte Arduino Uno et deux LEDs. IMG_0925.JPG Figure 6 IMG_0928.JPG Figure 7

2.2.1) Récepteur radio

Le récepteur va bien entendu de paire avec le transmetteur utilisé pour la première Arduino. Il reçoit donc les données du transmetteur et les transmet à la deuxième carte Arduino qui va traiter les informations. IMG_0931.JPG Figure 8

2.2.2) Carte Arduino Uno

Comme pour la première partie du système, j'utilise un circuit imprimé Arduino Uno pour traiter les informations provenant du récepteur, et donc de la première partie du système. La carte analyse les données et "ordonne" à la LED verte de s'allumer si quelque chose est sur le senseur. Dans l'autre cas, à savoir que rien ne se trouve dans la boîte aux lettres, elle "ordonne" à la LED rouge de s'allumer. À noter que l'alimentation de cette Arduino se fait à l'aide d'un câble USB raccordé à un ordinateur.

2.2.3) LEDs rouge et verte

Comme dit en 2.2.2), j'ai utilisé deux LEDs différentes (rouge et verte) pour permettre l'affichage visuel et lumineux des données. Si quelque chose se trouve sur le capteur, la LED verte s'allume. Dans le cas contraire, c'est la rouge qui s'illumine.

2.3) Méthodes

2.3.1) Première partie

A) Schéma

ArduinoBALSchemafinal.png Figure 9

Comme détaillé dans le matériel plus haut, on aperçoit sur le schéma le senseur, l'amplificateur, le transmetteur et bien entendu la carte Arduino. Les câbles noir et rouge rattachés au senseur servent à l'alimentation de celui-ci. Les deux autres (vert et blanc) servent à transmettre les données qu'il fournit. Ces câbles sont donc directement reliés à l'amplificateur. En ce qui concerne le câblage du senseur en lien avec l'amplificateur INA125, j'ai réutilisé le modèle conseillé par défaut à cette URL: http://edg.uchicago.edu/tutorials/load_cell/. Pour ce qui est du câblage du transmetteur, rien de bien compliqué. En effet, les câbles orange servent à l'alimenter et le câble vert à lui envoyer les données provenant de la pin 12.

B) Code

Pour plus d'informations et pour accéder au code complet, veuillez vous référer à la fin de cette section.

Tout d'abord, j'inclus la bibliothèque VirtualWire qui ajoute un certain nombre de commandes, comme vw_send par exemple, qui permettent toutes sortes de choses comme envoyer ou recevoir des données.

#include <VirtualWire.h>

Je déclare ensuite les constantes des différentes pins assignées au senseur et au transmetteur radio.
Je déclare également deux autres constantes qui sont les messages qui vont être transmis par le transmetteur.

const char* signalOn = "Led";
const char* signalOff = "Nop";

Dans le setup(), je détermine la fonction de chaque pin. INPUT pour la pin du senseur et OUTPUT pour la pin du transmetteur. Avec la fonction vw_set_tx_pin(), je peux directement signaler à l'Arduino quelle pin va servir pour la transmission.
Ensuite, j'initialise et démarre la bibliothèque et ses fonctions :

vw_setup(2000);

Puis, dans le loop(), je commence par déclarer une variable dans laquelle vont être stockées les données provenant du senseur.
J'affiche ensuite ces données dans le moniteur suivies du message qui va être envoyé, c'est à dire "Led" si quelque chose se trouve sur le senseur et "Nop" dans le cas contraire.

Pour ce faire, j'utilise une condition basique (if/else):

  • Dans le cas où il y a quelque chose sur le senseur, la variable senseur sera plus haute que 65, ce qui aura pour effet d'envoyer le message "Led" grâce à la fontion vw_send(). La fonction vw_wait_tx() sert simplement à attendre que l’entièreté du message soit envoyée. Pour finir je reporte le message sur le moniteur.
if (senseur >= 65)
    {
     vw_send((uint8_t*)signalOn, 3);
     vw_wait_tx();
     Serial.println(signalOn);
    }
  • Dans tout autre cas, à savoir que rien ne se trouve sur le senseur, j'envoie le message "Nop" et, de la même manière que pour "Led", je le reporte sur le moniteur.
else
    {
      vw_send((uint8_t*)signalOff,3);
      vw_wait_tx();
      Serial.println(signalOff);
    }

Code complet ici.

2.3.2) Deuxième partie

A) Schéma

ArduinoMaisonSchema.png Figure 10

Comme décrit dans la partie matériel plus haut, on aperçoit sur le schéma le récepteur, les deux différentes LEDs et bien évidemment le circuit imprimé Arduino. Pour cette partie, les branchements sont plutôt simples. En effet, les LEDs nécessitent tout bonnement d'être alimentées en série par deux pins en OUTPUT. Et tout comme pour le transmetteur, le récepteur nécessite d'être alimenté et les données sont récupérées sur la pin 11 par le câble orange.

B) Code

Pour plus d'informations et pour accéder au code complet, veuillez vous référer à la fin de cette section.

Tout d'abord, pour la première partie, j'inclus la bibliothèque VirtualWire afin de pouvoir recevoir les données de la première Arduino grâce au récepteur.

#include <VirtualWire.h>

Je déclare en premier lieu deux variables de type byte qui contiennent ou contiendront le message reçu et la longueur de celui-ci. La constante qui définit la longueur maximum d'un message reçu est définie dans la bibliothèque comme VW_MAX_MESSAGE_LEN et vaut 30.

byte reception[VW_MAX_MESSAGE_LEN];
byte longueurReception = VW_MAX_MESSAGE_LEN;

Je déclare également les constantes des différentes pins assignées au senseur et au transmetteur radio.
Aussi déclare une chaîne de caractère que j'appelle message dans laquelle je transférerais les messages reçus plus loins.

Dans le setup(), je déclare à l'Arduino quelle pin servira pour la réception des messages avec la fonction vw_set_rx_pin(). Je démarre également la réception avec vw_rx_start(). Et comme dans le cas de la première partie, j'initialise et démarre la bibliothèque et ses fonctions :

vw_set_rx_pin(RECEPTION);
vw_rx_start();
vw_setup(2000);

Ensuite dans le loop(), la fonction vw_get_message détecte l'arrivée d'un message. Je commence par récupérer le message à l'aide de la fonction boucle for dans la variable reception et je la copie directement dans la chaîne de caractères message. La raison pour laquelle je fais cette copie est qu'il faut passer la chaîne byte en une chaîne de type char pour des questions de compatibilité dans la suite du code.

if (vw_get_message(reception, &longueurReception))
  {
      for (int i = 0; i < longueurReception; i++)
     {
      message[i] = reception[i];
     }
   }

Je compare ensuite la chaîne message aux deux potentiels messages que l'Arduino aurait pu recevoir grâce à la fonction strcmp qui renvoie 0 si deux chaînes de caractères sont similaires :

  • si le message reçu est "Led", alors j'allume au maximum de son intensité la LED jaune et j'éteins la LED rouge. Accessoirement, je reporte l'information dans le moniteur :
if (strcmp(message, "Led") == 0)
  {
     Serial.println("'Led' donc ALLUME");
     analogWrite(LED_QQCH, 1023);
     digitalWrite(LED_RIEN, LOW);
  }
  • si le message reçu est "Nop", alors j'allume au maximum de son intensité la LED rouge et j'éteins la LED jaune. Accessoirement, je reporte l'information dans le moniteur :
else if (strcmp(message, "Nop") == 0)
 {
    Serial.println("'Nop' donc ETEINT");
    analogWrite(LED_RIEN, 1023);
    digitalWrite(LED_QQCH, LOW);
 }

Code complet ici.

3. Résultats

3.1) Première partie

3.1.1) Senseur

Si on observe les résultats provenant du senseur sur le moniteur série, on peut observer que la valeur initiale qu'il envoie est 33. Resultat_moniteur_BAL.png Figure 11

Si on presse sur le capteur avec un doigt, on observe une variation assez conséquente des valeurs, dont certaines grimpant jusqu'à presque 200. Resultat_moniteur_BAL2.png Figure 12

Le problème que j'ai rapidement rencontré est que le capteur comporte deux défauts majeurs nuisant à mon système. Le premier consiste en le fait que le détecteur nécessite une pression extrêmement élevée pour détecter quelque chose. Par conséquent, il ne détecte pas la présence des lettres, étant trop légères. Le deuxième défaut que l'on peut relever est que le senseur ne détecte pas les grandes surfaces: En appliquant un objet ayant un poids conséquent, mais ayant une grande surface, le senseur ne le détecte pas. Le courrier étant en général du papier, pas forcément très lourd, et ayant une grande surface d'application sur le détecteur, les valeurs du moniteur ne risquent pas de varier.

Le moniteur série confirme bien que dans le cas où la valeur est au-dessus de 65, le message envoyé est "Led" et non plus "Nop" (cf. Figure 12).

3.1.2) Transmetteur

En lien avec le récepteur de la deuxième partie (cf. 3.2.1), je peux affirmer que les messages "Led" et "Nop", dépendant de la situation du senseur, s'envoient correctement à la deuxième carte Arduino.

3.2) Deuxième partie

3.2.1) Récepteur

En lien avec le transmetteur de la première partie (cf.3.1.2), les messages transmis depuis la première carte Arduino arrivent parfaitement à destination sur la deuxième, via le récepteur. On peut d'ailleurs le vérifier sur le moniteur série. Comme on peut le voir sur la figure 13, pendant un court instant j'exerce une pression sur le senseur de poids et le récepteur reçoit donc le message "Led". Le moniteur série affiche donc le message " 'Led' donc ALLUME " pendant ce court instant. Resultat_moniteur_Maison.png Figure 13

À noter que le transmetteur et le récepteur permettent un transfert de données à une distance expérimentale d'environ 30 mètres.

3.2.2) LEDs

Pour ce qui est des LEDs, les résultats sont très concluants. Si le message "Led" est reçu, la LED jaune s'allume et la rouge reste bien éteinte : Resultat_LED2.JPG Figure 14

Dans le cas inverse, si le message reçu par le récepteur est "Nop", alors la LED jaune s'éteint et la LED rouge s'illumine : Resultat_LED1.JPG Figure 15

4. Discussion

Au final, les résultats obtenus sont plutôt corrects. Le concept final est atteint : le senseur détecte, malheureusement presque pas, la présence d'objet dans la boîte aux lettres, l'information est transmise à la deuxième partie de mon système dans la maison et les LEDs permettent parfaitement d'afficher visuellement l'information. Le problème que l'on peut donc soulever est le très peu de détection du capteur. Au moment de commander ce senseur de poids, je ne me suis que très peu renseigné. Mon erreur a sûrement été de choisir un senseur qui acceptait des poids de 0 à 3 kg ce qui rend le senseur beaucoup moins précis que certains qui ne supportent que des poids entre 0 et 500 g. Surtout que le courrier ne pèse en général pas plus de 500 g. A mon sens, il aurait été plus judicieux d'utiliser un senseur provenant d'une balance (de cuisine par exemple) au milligramme près. D'ailleurs, mon manque d'information sur mon capteur m'a beaucoup retardé sur la méthode de branchement du senseur et notamment de la nécessité de l'utilisation d'un amplificateur. En ce qui concerne la méthode de travail le facteur temps a beaucoup influencé le résultat final de mon projet. En effet, si je m'y étais pris un peu plus tôt, j'aurais peut-être pu rectifier la pièce du senseur afin d'avoir un système totalement fonctionnel à la fin. Dans mon cas, c'est surtout la tardiveté de la commande des pièces qui a beaucoup retardé le début de mon projet. Je ne savais pas vraiment comment simuler les pièces dont j'avais besoin. Le temps de réalisation de mon projet a été donc particulièrement réduit. Ce projet m'a permit de pratiquer pas mal le code Arduino et le fonctionnement du circuit imprimé. Il m'a également permis d'approcher certains concepts, comme la transmission à distance par ondes radio. La réalisation de ce système permet donc surtout une approche hardware de l'informatique. La plus grosse difficulté que j'ai pu rencontré est la connexion du senseur à l'Arduino. La nécessité de l'utilisation d'un amplificateur a vraiment été difficile à comprendre. Il m'a fallu plusieurs heures de recherche sur le web pour trouver les spécifications pour la configuration du senseur et de l'amplificateur.

5. Conclusion

En conclusion, mon système va bien au-delà d'un simple concept. Malgré les quelques défauts du senseur, je peux affirmer que mon système est tout-à-fait opérationnel. Je peux donc à présent me poser la question: "et qu'en est il maintenant ?". Tout d'abord je pense que mon système nécessite d'être entièrement fonctionnel, mon but étant de pouvoir l'utiliser concrètement chez moi. Le senseur nécessiterait donc d'être remplacé par un autre plus performant.

Je pense que mon système peut également être amélioré grâce à d'autres fonctionnalités. Je pense notamment à un site internet qui centraliserait les données, telles que le poids exact du courrier dans la boîte aux lettres, ou encore l'affichage en temps réel d'une petite caméra.

Ce projet m'a donc permis de me perfectionner dans le domaine de l'hardware et de me fabriquer un système bien utile pour me simplifier la vie vis-à-vis de mon courrier.

6. Ressources