Aspirateur Wifi

Par défaut

Cet article va vous faire suivre la transformation d’un aspirateur autonome type « Romba » d’entrée de gamme pour lui ajouter le Wifi afin de l’intégrer dans une smart Home.

Il s’agit du Fagor FG736 acheté sur CDiscount pour une centaine d’euros. C’est en effet un modèle d’entrée de gamme car d’autres versions plus évoluées peuvent frôler les 1000 €. Ce produit est donc bon marché mais cela se répercute sur le nombre de fonctionnalités. Par exemple, on ne peut le commander que par, soit l’unique bouton sur l’aspirateur, soit par la télécommande infrarouge fournie avec :

Dans un premier temps j’ai d’abord essayé d’analyser les trames reçues avec un module infrarouge standard :

Mais là, rien du tout, alors que ce module fonctionne avec les 3 autres télécommandes que j’ai testées. J’ai alors suspecté une différence au niveau de la fréquence de modulation avec le standard 38KHz. Voire pire, qu’il ne s’agissait finalement pas d’infrarouge du tout. J’ai alors ouvert la télécommande.

On ne peut difficilement faire plus simple, seulement 3 composants sur cette carte : une LED infrarouge, un condensateur (tous deux de l’autre côté) et une puce avec le label « TTR01D ». Selon la datasheet, il s’agit d’un microcontrôleur spécialisé pour les télécommandes infrarouges. Bon, au moins c’est clair. Mais par contre aucune information de baud-rate et pas de fréquence de modulation prédéfinie (elle est paramétrable).

Il va falloir passer aux choses sérieuses et ouvrir la bête (je n’attendais que ça ^^).

On constate pas moins de 5 récepteurs infrarouges, dont deux servant à s’aligner sur la base lors du retour : ça ne rigole pas. Bon après quelques minutes d’émerveillement, je constate un emplacement pour un connecteur 4 pins non soudés avec le label « COM »

À ce moment je ne peux pas m’empêcher d’espérer le meilleur, c-à-d un port série de Debug très bavard avec plein de télémétrie et capable de recevoir des commandes, je rêve. En plus il est accessible depuis le compartiment batterie, ça sent bon ça :

Jetons un œil au circuit. On trouve au centre un microcontrôleur STM8L151C6T6 qui semble gérer toutes les opérations.

Après analyse du circuit, je constate que les 4 pins sont (dans l’ordre) :

  • VCC 3.3V : OK c’est normal
  • GND : jusque là tout va bien
  • PA0 du microcontrôleur STM qui d’après la datasheet est un « Reset » : mouais, ça sent pas bon.
  • PA1 du STM qui est une entrée/sortie : il y a peut-être de l’espoir.

Après vérification à l’analyseur logique maison (fait maison avec un Arduino). Ces 2 pins PA0 et PA1 reste toujours à 3.3V quoi qu’il se passe : quelle désillusion =(

Il faut se ressaisir et se pencher à nouveau sur l’infrarouge qui semble la façon la plus simple d’arriver à mes fins. Donc en branchant un oscilloscope à la sortie d’un récepteur/démodulateur infrarouge, voici ce que j’obtiens :

Je vous épargne les heures que j’ai mis à comprendre qu’il ne s’agissait pas d’une simple liaison série, que les états hauts et bas n’importaient pas mais que les données étaient en fait la largeur des pics et des creux (comme pour les codes à barres EAN13)

Après passage à l’analyseur logique voici mon document de travail :

bit de start 
1 de 3080 µs
0 de 1032 µs

ensuite alternance de 1 et de 0 de durée de 700 µs ou 1500 µs
l'état n'est pas important, seule la durée compte
par convention :
700 µs => 0
1500 µs =>1

ONOFF	011010100110011

Up	011001010101011
Down	011001010101101
Left	011001010110011
Right	011001010110101
		
Mode1	011001011001101	
Mode2	011001011010010		
Mode3	011001011010011		
Mode4	011001011010101		
Mode5	011001100101010

Home	011001100101101
Spot	011001011001100
Plan	101001100110011	

Plus qu’à implémenter une télécommande de test avec un Arduino. J’envoie donc ces états directement sur la sortie d’un récepteur infrarouge, mais la rien ne se passe, il faudrait enlever le récepteur qui force l’état à haut, mais cela rendrait l’appareil partiellement aveugle.

Je décide plutôt de moduler le signal et de l’envoyer dans une LED infrarouge. Pour la fréquence de modulation, je l’ai trouvé avec l’oscilloscope, en faisait de gros zooms, il restait de très légers pics après démodulation. Je trouve 20KHz. Je génère un signal carré avec des « delayMicroseconds(11) ». Et là, hourra, ça fonctionne, les récepteurs sont assez tolérants sur la fréquence de modulation, ce code fera donc l’affaire.

#define Pin D6

byte cmdONOFF [] = {0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1};

void setup() {
  Serial.begin(115200);
  Serial.println("Hello");
  pinMode(Pin, OUTPUT);
}

unsigned long timeStart;
unsigned long timeEnd;

void send(int bit, unsigned int duration) {
  timeStart = micros();
  timeEnd = timeStart + duration;

  if (bit) {
    while (micros() < timeEnd) {
      digitalWrite(Pin, 1);
      delayMicroseconds(11);
      digitalWrite(Pin, 0);
      delayMicroseconds(11);
    }
  } else {
    digitalWrite(Pin, 0);
    while (micros() < timeEnd);
  }
}

void sendCMD(byte* cmd) {
  send(1, 3080);
  send(0, 1032);

  for (int i = 0; i < 16; i += 2) {
    send(1, (cmd[i]) ? 1500 : 700);
    send(0, (cmd[i + 1]) ? 1500 : 700);
  }
}

void loop() {
  while (!Serial.available());
  Serial.read();

  unsigned long beginTime = micros();
  sendCMD(cmdUp);
  Serial.println(String("Sent! in ") + ((float)(micros() - beginTime) / 1000 ) + " ms");
}

C’est parti pour la réalisation électronique. J’utilise un WeMos D1 mini doté d’un ESP8266 acheté 3$ sur banggood.com .

Notez l’élégance du trou dans la carte pour laisser la place à un composant déjà présent. En effet, il n’y a pas beaucoup de place là-dedans, il faut y aller au chausse-pied.

Plus qu’à poser l’ESP

Je me sers donc du fameux port pour l’alimentation, mais je décide de câbler également le pin « Reset ». Il me serait en effet très utile car il y a une commande « ON/OFF » mais on n’est pas sûr de l’état dans lequel on est. Il sera très utile pour compenser ce manque de feedback.

Voilà, il fonctionne maintenant avec une interface web.

Mais également avec Google Home grâce à IFTTT.

D’autres évolutions sont encore possibles, comme récupérer l’état de charge de la batterie, ou commander plus précisément ses déplacements en triangulant sa position grâce au wifi, mais ça c’est pour une autre fois.

Une réflexion au sujet de « Aspirateur Wifi »

  1. Poulain

    Je n’ai absolument rien compris ,sauf que l’aspirateur robot fonctionne désormais avec ton téléphone et la Google home.
    Alors que dire d’autre que félicitations et bravo.

Répondre à Poulain Annuler la réponse

Votre adresse de messagerie ne sera pas publiée.