Dans les précédents tutos, nous avons vu comment piloter la cafetière avec un Arduino (et 2 boutons). Mais ce serait dommage de s’arrêter là. Parce que l’inconvénient, c’est qu’il faut quand même se lever pour appuyer sur le bouton. Je vous propose donc d’améliorer ce système et de contrôler la cafetière à distance en ajoutant simplement une vieille télécommande et un capteur infrarouge.

Matériel nécessaire :
- La cafetière modifiée précédemment et 1 module d’au moins 4 relais
- Un Arduino Uno et son alimentation,
- Une breadboard avec des câbles Dupont,
- Une LED avec une résistance d’environ 220 Ω (facultatives, car vous pouvez aussi regarder la LED interne de l’Arduino qui est reliée à la même borne).
- Une télécommande (infrarouge) de récupération
- Un capteur infrarouge de type VS1838B (moins de 2 euros )
La bibliothèque IRremote
Pour que l’Arduino puisse recevoir les signaux infrarouges de la télécommande, il faut ajouter la bibliothèque IRremote. Lancez l’IDE Arduino et dans les menus, sélectionnez Croquis – Inclure une bibliothèque – Gérer les bibliothèques. Ensuite, recherchez « IRremote » et cliquez sur Installer.

Branchement du capteur infrarouge
Attention, le schéma correspond à un capteur infrarouge de type VS1838B, si vous utilisez un autre modèle, l’ordre des pins peut être différent (il faudra donc adapter le schéma).

Décoder la télécommande
Chaque touche de la télécommande envoie un message différent. Il s’agit d’un signal lumineux (invisible à l’oeil nu) que le capteur infrarouge est capable de détecter. C’est un peu comme si vous envoyiez un message en morse avec une lampe de poche (mais c’est beaucoup plus rapide).
Mais le langage utilisé peut être différent d’une télécommande à l’autre. Cela permet par exemple de ne pas éteindre la télévision en essayant de fermer les volet. Pour utiliser votre télécommande, il faut donc connaitre le protocole de communication (le langage) qu’elle utilise, ainsi le signal (le message) des touches qui nous intéressent.
Pour cela, lancez l’IDE Arduino et ouvrez le fichier IRrecvDump que vous trouverez dans Fichier -Exemples – IRremote – IRrecvDump. Ensuite, téléversez le code dans l’Arduino et ouvrez le moniteur série.
Pointez la télécommande en direction du capteur, appuyez sur les boutons (que vous souhaitez utiliser) et notez le code qui s’affiche. Logiquement, j’ai choisi la touche « 1 » pour un café simple et la touche « 2 » pour un café double, mais évidement, vous pouvez utiliser n’importe quelles touches.
J’ai donc appuyé 4 fois de suite sur la touche « 1« , mais le résultat obtenu est un peu surprenant. Le signal envoyé par la télécommande (entouré en rouge) est soit « 401« , soit « 10401 » (les autres informations qui s’affichent dans le moniteur série ne seront utilisées dans ce tuto).

C’est la même chose avec la touche « 2« , le signal alterne régulièrement entre « 402 » et « 10402« .

Mais d’autres télécommandes envoient toujours le même signal (avec la même touche). Pour le savoir, il suffit simplement de tester…
Le schéma de branchement
Vous pouvez maintenant reproduire ce schéma, mais n’oubliez pas de l’adapter si vous utilisez un autre type de capteur infrarouge que le VS1838B.

Télécommander la cafetière
Le code ci dessous correspond à ma télécommande (« 401 » ou « 10401″ pour la touche « 1 » et « 402 » ou « 10402 » pour la touche « 2« ). Pour vous, les résultats seront certainement différents, il faudra donc adapter le code ci dessous (et remplacer les valeurs de ma télécommande par celles de la vôtre).
Mais attention, le signal de la télécommande est en hexadécimal, alors n’oubliez surtout pas d’ajouter le préfixe « 0x » pour l’indiquer à l’Arduino.

Ensuite vous pourrez téléverser le code modifié.
// Cafetiere_et_telecommande_infrarouge
//Appel de la bibliothèque
#include <IRremote.h>
// Parametrage du récepteur infrarouge
int pin_recept = 11;
IRrecv ir_recept(pin_recept);
decode_results ir_decode;
const int ALIMENTATION = 2;
const int ONOFF = 3;
const int SIMPLE_TASSE = 4;
const int DOUBLE_TASSE = 5;
const int LED_TEMOIN = 13;
// Temps avant mise en veille de la cafetière (en minutes)
const int VEILLE = 5;
// Etat de la cafetière (0 éteinte, 1 allumée)
boolean allumageCafetiere = 0;
// Moment de la derniere utilisation
unsigned long derniereUtilisation;
void setup() {
// Initialisation du récepteur IR et des sorties
ir_recept.enableIRIn();
pinMode(ALIMENTATION, OUTPUT);
pinMode(ONOFF, OUTPUT);
pinMode(SIMPLE_TASSE, OUTPUT);
pinMode(DOUBLE_TASSE, OUTPUT);
pinMode(LED_TEMOIN, OUTPUT);
// Mise hors tension de la cafetière
digitalWrite(ALIMENTATION, HIGH);
// Les 3 boutons ne sont pas appuyés
digitalWrite(ONOFF, HIGH);
digitalWrite(SIMPLE_TASSE, HIGH);
digitalWrite(DOUBLE_TASSE, HIGH);
// La LED témoin est allumée
digitalWrite(LED_TEMOIN, HIGH);
}
void loop() {
// Si le capteur capte un signal
if (ir_recept.decode(&ir_decode)){
//Si le signal est égal à
switch (ir_decode.value) {
// 401 ou 10401 (bouton 1)
case 0x401:
case 0x10401:
appuyer(SIMPLE_TASSE);
break;
// 402 ou 10402 (bouton 2)
case 0x402:
case 0x10402:
appuyer(DOUBLE_TASSE);
break;
}
ir_recept.resume();
}
// Si la cafetière est allumée et qu'elle n'a pas été utilisée depuis longtemps
if ((millis() - derniereUtilisation) >= (VEILLE*60000) && allumageCafetiere == 1){
// Mise hors tension de la cafetière
digitalWrite(ALIMENTATION, HIGH);
// Indique que la cafetière est éteinte
allumageCafetiere = 0;
}
}
void appuyer(int bouton){
digitalWrite(LED_TEMOIN, LOW);
// Si la cafetière est éteinte
if (allumageCafetiere == 0){
// Mise sous tension de la cafetière
digitalWrite(ALIMENTATION, LOW);
delay(1000);
// Appui sur le bouton ON/OFF pour allumer la cafetière
digitalWrite(ONOFF, LOW);
delay(500);
// Relachement du bouton ON/OFF
digitalWrite(ONOFF, HIGH);
// Chauffage de l'eau dans la cuve
// Ajustez ces valeurs en fonction de votre cafetière
pause(90); // 90 secondes (1 min 30 sec)
// Indique que la cafetière est allumée
allumageCafetiere = 1;
}
// Appui sur le bouton
digitalWrite(bouton, LOW);
delay(500);
// Relachement du bouton
digitalWrite(bouton, HIGH);
// Préparation du café et chauffage de l'eau
// Ajustez ces valeurs en fonction de votre cafetière
if (bouton == SIMPLE_TASSE){
pause(70); // 70 secondes (1 min 10 sec)
}
else {
pause(100); // 100 secondes (1 min 40 sec)
}
// Mise à jour du moment de la dernière utilisation
derniereUtilisation = millis();
digitalWrite(LED_TEMOIN, HIGH);
}
void pause(int secondes){
// Faire clignoter la LED témoin en attendant. le nb de secondes indiqué
for (int i=0; i < secondes; i++){
digitalWrite(LED_TEMOIN, HIGH);
delay(500);
digitalWrite(LED_TEMOIN, LOW);
delay(500);
}
}
Boire un café
Il faut quand même préparer d’avance la cafetière (en mettant la tasse, l’eau et les dosettes).
Mais maintenant, quand vous voulez un café, il suffit de pointer la télécommande et d’appuyer sur le bouton (« 1 » ou « 2« ).
Évidement, il faut quand même se lever pour aller chercher le café. Malheureusement, je n’ai pas encore trouvé de solution à ce problème…

Aller plus loin
Si vous êtes satisfait de votre nouvelle cafetière, vous pouvez intégrer l’Arduino dans le même boitier que le module relais (en faisant seulement dépasser le capteur infrarouge et la LED).
Dans ce cas, choisissez plutôt l’Arduino Nano qui possède les mêmes caractéristiques que l’Arduino Uno, en beaucoup plus compact. Vous pourrez certainement trouver (ou de fabriquer) un boitier un peu plus joli que ma boite de dérivation…

Il est également possible de remplacer la télécommande par un autre Arduino. Ce qui ouvre de nombreuses possibilités de communication entre les 2 appareils (liaisons filaires, infrarouge Bluetooth, radio, Ethernet, Wifi…). Si vous voulez en savoir plus, sachez que le chapitre 8, de mon livre est consacré à ce sujet.