rf24l01

  Arduino et RF24L01+ Pour aller plus loin  

 

Bas de page

Pour aller plus loin voici deux ou trois petites trucs pour ceux qui ne savent pas programmer.
Nous utiliserons comme exemple les programmes de cette page.



Utiliser plusieurs radios en même temps

Cette ligne const uint64_t pipe = 0xE8E8F0F0E1LL; (présente dans le sketch Émetteur et le sketch Récepteur) défini le canal utilisé.
si vous désirez utiliser deux radios il faudra redéfinir le canal de la deuxième radio. Il suffira de remplacer cette ligne
par const uint64_t pipe = 0xE8E8F0F0E2LL;
ou const uint64_t pipe = 0xE8E8F0F0E3LL; pour une troisième radio .
ou const uint64_t pipe = 0xE8E8F0F0E4LL; pour une quatrième radio.
Etc.... bien évidemment nous devrons modifier cette ligne également dans le sketch réception.



Ajouter un TRIM

Dans l'exemple que nous proposons avec les manches bas de gamme il n'y a pas de TRIM. Voici une solution pour remédier à ce petit désagrément. Il suffit de brancher en parallèle un potentiomètre avec le potentiomètre du manche. Nous limiterons son influence au moyen d'une résistance.



Les valeurs données sur ce schéma fonctionnent bien avec ce manche, mais elles ne sont pas critiques.

Plus la valeur de la résistance sera faible, et plus l'influence sur le neutre sera grande et moins précise.
Plus la valeur de la résistance sera grande, et plus l'influence sur le neutre faible mais plus précise.







Remplacer les potentiométriques par des joysticks d'une radio du commerce

val_0 = (analogRead(potpin_0)); val_0 = map(val_0, 0, 1023, posmin, posmax);
Cette ligne saisie la valeur du potard de la voie 0 puis la transforme pour envoyer au récepteur l'angle que doit faire le servo.

val_1 = (analogRead(potpin_1)); val_1 = map(val_1, 0, 1023, posmin, posmax);
Cette ligne saisie la valeur du potard de la voie 0 puis la transforme pour envoyer au récepteur l'angle que doit faire le servo.

La gestion d'un servo dans notre sketch émetteur est assurée par un potentiomètre ayant une course complète. La valeur lue par l'Arduino va de 0 à 1023.
Si vous désirez utiliser un manche récupéré d'une radio obsolète les valeurs lues seront inférieures parce que le manche ne déplace le curseur de son potentiomètre que sur une partie de sa course. Nous devrons dans ce cas modifier les valeurs 0 et 1023 ( par exemple sur la voie 1 dans la ligne de commande:
val_1 = (analogRead(potpin_1)); val_1 = map(val_1, 0, 1023, posmin, posmax);
par les valeur mini et maxi données par le manche.

Nous trouverons ces valeurs en utilisant ce sketch.
* Connecter le potentiomètre du manche concerné au A0 de l'Arduino UNO.
* Ouvrez le moniteur série
* Déplacez le manche au maximum dans un sens et notez la valeur lue. (nous l’appellerons x)
* Déplacez le manche au maximum dans l'autre sens et notez la valeur lue. (nous l’appellerons y)
Revenez au sketch émetteur remplacer la valeur 0 par la valeur x
et remplacez la valeur 1023 par la valeur y.

Nous ecrirons alors :
val_1 = map(val_1, 0, 1023, x, y);center>
si a l'inverse (au lieu de remplacer 0 par x et 1023 par y) nous remplaçons 0 par y et 1023 par x, cela aura pour effet d'inverser le sens de rotation du servo.



Branchement des sorties


Les leds ou relais connectés à la l'Arduino UNO ou NANO seront branchés de cette façon.

Les leds ou relais connectés au PCF8574 seront branchés de cette façon.





Modifier la course de tous les servos

Ces lignes
int posmin = 45; int posmax = 135; // Ligne à valider pour une rotation de 90° des servos ou Ligne à supprimer pour 180°
//int posmin = 0; int posmax = 180; // Ligne à valider pour une rotation de 180° des servos ou Ligne à supprimer pour 90°

définissent la course de tous les servos. Dans notre sketch elle est de 90°.
si vous désirez une course de 180° il faudra ajouter // devant la première ligne.
Et supprimer // devant la deuxième ligne.

Nous ecrirons donc
// int posmin = 45; int posmax = 135; // Ligne à valider pour une rotation de 90° des servos ou Ligne à supprimer pour 180°
int posmin = 0; int posmax = 180; // Ligne à valider pour une rotation de 180° des servos ou Ligne



Modifier la course d'un seul servo

Par exemple si nous voulons changer la course à 100° du servo de la voie 4  nous allons modifier la ligne :

val_4 = (analogRead(potpin_4)); val_4 = map(val_4, 0, 1023, posmin, posmax);
par
val_4 = (analogRead(potpin_4)); val_4 = map(val_4, 0, 1023, 50, 150);

Si nous écrivons
val_4 = (analogRead(potpin_4)); val_4 = map(val_4, 0, 1023, 150, 50);
Le servo 4 aura une course de 100° mais le sens de rotation sera inversé.



Fonction FAILSAVE.

Dans les programmes réception que nous proposons, en cas de non réception, les servos se mettent en position neutre. Le neutre correspond à la position 90° du servo. Il se peut que cette valeur ne corresponde pas exactement au neutre réel. Nous pouvons dans le sketch récepteur modifier cette valeur.
Sous les lignes : erreur_reception = erreur_reception + 1;
et : if (erreur_reception > 20) {
à la ligne :val_0 = 90; val_1 = 90; val_2 = 90; val_3 = 90;val_4 = 90; val_5 = 90;
Il suffit de changer les valeurs de val_0 , val_1,val_2,val_3,val_4 etc.

Il est possible dans certains cas que nous n'ayons pas besoin que le servo soit au neutre mais dans une position autre.
Par exemple si nous voulons qu'en cas de coupure le servo n°0 se mette à 45°.
Nous écrirons : val_0 = 45 val_1 = 90; val_2 = 90; val_3 = 90;val_4 = 90; val_5 = 90;




Utilisation du PCF8574

Pour fonctionner l'adresse du PCF8574 doit être déclaré dans nos programmes,comme ceci #define adress1 0x20 ou #define adress2 0x21
Pour connaître cette adresse allez à la page
Si nous utilisons plusieurs PCF8574 dans un même programme il faut qu'ils aient deux adresse différentes.
Pour cela il suffit de déplacer un ou plusieurs les cavaliers présents sur le circuit du PCF8574.

Haut de page