Pages d'index

Pages d'index

dimanche 25 février 2018

Communication RF 433 MHz entre ATTiny85 et Arduino

Je vous propose aujourd'hui un petit projet consistant à transmettre à une carte Arduino la mesure d'un capteur analogique branché à un ATTiny85, au moyen d'un signal radio de 433 MHz.  Si vous le désirez, vous pouvez utiliser les principes exposés dans ce billet pour mettre en place un réseau constitué de plusieurs capteurs satellites peu coûteux qui communiquent leurs données à un seul Arduino.

Si vous préférez, vous pouvez également utiliser les informations présentées ici pour créer une communication entre deux ATTiny85, ou entre deux cartes Arduino.

Matériel nécessaire pour faire cette activité: une paire émetteur/récepteur 433 MHz, une carte Arduino, un ATTiny85 (avec une alimentation et ce qu'il faut pour le programmer). et un potentiomètre qui tiendra lieu de capteur.



Installation de la bibliothèque Manchester

Le sketch que je vous propose pour l'émetteur et pour le récepteur nécessitent tous deux la bibliothèque Manchester, que vous devrez donc installer dans votre IDE Arduino.

Deux fichiers d'exemple sont fournis avec la bibliothèque: "ManchesterRX_Array-unfixed_length" et "ManchesterTX_Array-unfixed_length".  Ces deux sketches fonctionnent très bien (ils ont d'ailleurs servi de fondation aux sketches que je vous propose ci-dessous), mais pour obtenir de bons résultats, j'ai dû supprimer l'appel à la routine "man.workAround1MhzTinyCore()" dans le sketch de l'émetteur et diminuer la vitesse de la communication (2400 plutôt que 9600).

Sketch de l'émetteur (pour l'ATTiny85)

Voici le sketch destiné à l'ATTiny85.  Au besoin, vous pouvez vous référer à ce précédent billet qui explique comment programmer l'ATTiny avec l'IDE Arduino et une carte Arduino Uno.  Comme d'habitude, j'ai utilisé le noyau de David A. Mellis.

Le sketch est plutôt simple: une fois par seconde, l'ATTiny enverra, par l'entremise de l'émetteur RF, un message constitué de 4 octets: le premier octet contient la taille du message, et le deuxième octet contient le numéro de l'émetteur (qui n'a aucune utilité si votre carte Arduino ne reçoit des messages qu'en provenance d'un seul ATTiny, mais qui pourrait s'avérer essentiel pour distinguer plusieurs ATTiny émetteurs l'un de l'autre).

Les deux autres octets contiennent la lecture analogique que nous désirons transmettre.  Puisque le convertisseur analogique-numérique de l'ATTiny produit des valeurs à 10 bits, la lecture du potentiomètre doit être distribuée sur deux octets distincts, grâce aux fonctions highByte et lowByte (l'Arduino récepteur s'occupera de les fusionner lors de la réception).



Sketch du récepteur (pour la carte Arduino)

Rien de très complexe de ce côté non plus, puisque c'est la bibliothèque Manchester qui effectue le sale boulot: chaque fois qu'un message est reçu, il est affiché sur le moniteur série.



Circuit de l'émetteur (ATTiny85)

Une LED indicatrice est branchée à la pin 0, l'émetteur est branché à la pin 1, et le potentiomètre est branché à la pin 2 de l'ATTiny85, tel qu'indiqué sur le schéma ci-dessous.
La LED n'est pas obligatoire;  elle change d'état chaque fois qu'un message est envoyé, ce qui peut être utile pour savoir si votre ATTiny est actif ou non.



Circuit du récepteur

Le récepteur est connecté à la broche 4 de l'Arduino.  C'est la LED intégrée à la carte qui change d'état pour indiquer la réception d'un message.



Résultats

Toutes les secondes, l'ATTiny mesure la position du potentiomètre et envoie le résultat à l'Arduino. Sur réception d'un message, l'Arduino l'affiche dans le moniteur série.  Lorsque vous tournez le potentiomètre, la valeur transmise est modifiée.


Et ensuite?

Vous trouverez ici d'autres projets impliquant l'ATTiny85.  En ce qui concerne les émetteurs et récepteurs RF 433 MHz, vous serez peut-être intéressé par ce projet impliquant deux cartes Arduino, ou celui qui établit une communication entre Arduino et Raspberry Pi.

Yves Pelletier   (TwitterFacebook)

5 commentaires:

  1. Bonjour , ce tutoriel est très intéressant...
    par contre j'aimerai pour mon application transmettre l'état d'une entrée arduino vers un 2ème arduino, il s'agit juste d'envoyer l'information lorsque l'entrée change d'état...
    Merci d'avance de votre aide.

    RépondreSupprimer
  2. Bonjour, quelle est ta version de ton IDE ?
    Je cherche simplement à transmettre un flag ON/OFF à partir d'un ATtiny85 vers soit un autre ATtiny85 ou un ATmega328p mais ça semble complètement surréaliste:
    - Manchester ne marche pas (chez moi) même entre 2 Arduino UNO
    - idem avec RCSwitch....
    - par contre tout fonctionne à merveille avec VirtualWire qui est pourtant décrite comme vieille et obsolète. Seulement cette librairie n'est pas supportée pour l'ATtiny85....

    RépondreSupprimer
    Réponses
    1. Ma dernière utilisation d'un ATTiny date de quelques années, c'est bien possible que ça ne fonctionne plus.

      Supprimer
    2. Bonjour,
      je déterre un peu le sujet
      ayant un peu galéré mais ça fonctionne
      mon gros problème venait des module de chez ali de mauvaise qualité et pas du tout étalonné
      après l'achat d'un tinySA je me suis aperçu que les modules émetteur n'était pas sur 433
      j'avais du 315, 868, et certain en 538
      autre problème dans arduino IDE2.x quand on sélectionne atiny 25/45/85 par défaut il met le processor 25 et 85 met pas de message d'erreur
      et aussi dernier problème pour téléverser il faut faire CTRL+MAJ+U pour téléverser en utilisant un arduino en mode isp

      voila j'espère que cela pourra aider d'autre personne

      Supprimer
    3. Bonjour yves,
      merci pour ce tuto qui m'a bien aidé pour un projet utilisant un atiny85 et de la RF 433Mhz
      je viens de découvrir votre blog et c'est super de partager comme ça 👍️
      mon projet fera l'occasion de sortir une vidéo sur la chaine YouTube ADS - L'atelier de SMHOSY

      Supprimer