Aller au contenu


Photo

Test de 3 HC-12


  • Veuillez vous connecter pour répondre
3 réponses à ce sujet

#1 Kylzar

Kylzar

    Membre

  • Membres
  • 11 messages
  • Gender:Male

Posté 03 mars 2020 - 12:07

Bonjour à tous, l'objectif du jour est de pouvoir faire communiquer une carte Arduino Uno, Arduino Mega et Arduino Nano ensemble !

Petite contrainte supplémentaire : La carte Uno ne doit écrire qu'a la MEGA, la MEGA n'écrit qu'a la Nano, et enfin la Nano n'écrit qu'a la UNO ! 

cercle.PNG

1er étape : Cabler mes différents capteurs

 

Comme indiqué dans la fiche produit du capteur, je peux brancher mes capteurs HC-12 de manière classique pour la UNO et la NANO :

VCC : 3.3V | GND : GND  | RXD : 4 | TXD : 5 | SET : 6

  montage HC-12.PNG  IMG_20200303_111841.jpg

Note : J'utilise un shield sur la Nano qui n'est pas obligatoire

De même comme il est précisé dans le code du HC-12 pour l'Arduino Mega les Pins RXD et TXD sont imposées, on a donc :

VCC : 3.3V  | GND : GND | RXD : 46 | TXD : 48 

IMG_20200303_111904.jpg

 

2éme étape : Mise en place du code

 

Grâce aux codes fournis dans la fiche produit, je compile les codes avec la librairie "SoftWareSerial" pour l'Arduino Uno et Nano, et le code avec la librairie 

"AltSoftSerial" pour l'Arduino Mega.

Ainsi mes cartes communiquent entre elles : 

- 1 message envoyé depuis la UNO : reçu par la MEGA et la Nano

- 1 message envoyé depuis la MEGA : reçu par la UNO et la Nano

- 1 message envoyé depuis la Nano : reçu par la MEGA et la UNO

 

3éme étape : Communication deux à deux

 

Afin de s'adresser à un capteur HC-12 précis, il est possible de choisir un channel précis ! Pour ce faire il faut utiliser le mode AT.

Afin d'accéder à ce mode, il faut brancher "SET" sur la masse (GND) de vos Arduino.

Commandes existantes :

Vérification du mode : AT --> Renvoie OK (Permet de s'assurer que l'on se trouve dans le mode).

Afficher le Setup : AT+RX à Renvoie les paramètres

Choix du Baudrate : AT + B.... -->  Renvoie OK+B.... Exemple: Si je veux le BaudRate 9600 je commande : AT+B9600, le moniteur répondra OK+B9600.

Choix du Channel : AT+C... --> Renvoie OK+C... Je peux choisir un channel de 001 à 100.

Choix du Mode : OK+FU. --> Renvoie OK+FU. Je peux choisir le mode de 1 à 4 (Le mode de communication classique est le FU3)

Choix du Niveau de communication : OK+P. --> Renvoie OK+P. Choix du niveau ce qui influence la puissance de transmission lvlpuissance.PNG

 

Cas d'application : Si je laisse le channel par défault (1) sur l'Arduino MEGA, et place sur le Channel 2 (AT+C002) l'Arduino Uno et Nano : 

- 1 message envoyé par la MEGA : Reçu par aucune des cartes

- 1 message envoyé par la Nano : Reçu par la UNO uniquement

- 1 message envoué par la UNO : Reçu par la Nano uniquement

 

4éme étape : Atteindre notre objectif !

 

Maintenant que l'on sait communiquer à un channel précis, il reste à automatisé le changement de channel, afin de pouvoir recevoir un message sur un channel et l'envoyer sur un autre channel !

Si on résume les étapes pour changer de channel à partir du mode émission : il faut brancher le SET sur la masse, et envoyé la commande de changement de channel (AT+C...).

Pour ce faire, nous allons brancher le SET sur une Pin Digital que nous feront passer de l'état haut pour l'émission, à l'état bas pour le changement de mode ! Il ne nous restera qu'a écrire dans le Serial la commande souhaité. 

Établissons alors les channels des communications que nous allons utiliser : 

cercle channel.PNG

Et maintenant traduisons cela dans le code :

(Pour la Nano et la UNO)

(Pour la MEGA)

 

Fonctionnement du code : Grâce au switch case, je peux choisir de paramétrer ma carte. Pour y accéder je n'ai qu'a rentrer "$", je peux ensuite rentrer ma commande. Exemple : $p --> affiche les paramètres, $3ac --> Rentre 3 dans channel, affichage 3 et rentre dans la channel 3 du HC12.

 

Alors je vous montrerai le résultat mais en testant le programme, nous avons très vite constaté que le HC-12 est plutôt lent, et qu'il est nécessaire d'appliquer des delay (enfin des safe-delay) afin de laisser les trams de réponses arriver sans être perturbées.

Le programme fonctionne bien, mais il y a toujours un moment où il se "dérègle" et où les trams sont reçu de manière déformée (retour à la ligne à chaque caractère, des symboles étrange comme '⸮').

bug.png

Je ne suis pas parvenu à résoudre le problème pour le faire fonctionner de manière constante.

 



#2 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 766 messages
  • Gender:Male

Posté 03 mars 2020 - 01:58

Cela dépasse de loin mes compétences, mais dernièrement, j'ai visionné 2 vidéos sur la communication entre 2 Arduino.

Ce n'est peut-être pas très important, mais dans les vidéos, il fait un include Wire.h.

La première instruction du loop() dans le Master est un delay(50).

Dans tes programmes, les vitesses de communication sont différentes dans le Uno et le Mega.

Dans les vidéos, il utilise simplement Serial.begin(9600)

Dans ton architecture, je ne retrouve pas la notion de Master/Slave.

 

Voici les vidéos : 'https://www.youtube.com/watch?v=PnG4fO5_vU4' et 'https://www.youtube.com/watch?v=yBgikWNoU9o&t=18s'



#3 Kylzar

Kylzar

    Membre

  • Membres
  • 11 messages
  • Gender:Male

Posté 04 mars 2020 - 12:07

Effectivement, en allant fouiller dans la librairie Wire de "Arduino référence" nous retrouvons la structure que tu décris Master/Slave (https://www.arduino....al/MasterReader) qui sert à faire communiquer 2 Arduinos entres elles. Peut-être qu'ici (je suis un peu dépassé aussi !) la différence est le faite que la communication d'information se fait par onde radio. Ici, c'est le module HC-12 qui va effectuer la communication et va pouvoir à la fois recevoir et envoyer les messages. Je ne pense donc pas que c'est la structure Master/Slave qui est utilisée.



#4 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 766 messages
  • Gender:Male

Posté 04 mars 2020 - 02:11

Ah ok, intéressant ! Je n'avais pas du tout compris que c'était une liaison radio.

Si tu trouves la solution, ce serait sympa de la partager. As tu cherché sur YouTube ? Il y a plein de choses.

Si je trouve quelque chose, je te fais signe, bien sûr.






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users