Chapitre III Conception et mise en oeuvre du
fonctionnement
40
III.4. Récepteur RF 2.4 GHz :
Tout émetteur a besoin d'un récepteur.
Habituellement, les récepteur radio génèrent des signaux
de sortie PWM qui varie de 1000 à 2000 microsecondes, parce que c'est
les largeurs d'impulssion nécessaire pour le fonctionnement des ESCs.
Dans ce contexte, l'utilisation des registres de Timer de l'Arduino Nano permet
facilement de généré les signaux PWM pour les 6
différents canaux qui correspondent enfaite aux mêmes valeurs de 8
bits envoyés par le transmetteur.
III.4.1. Circuit et schéma électronique
:
Le circuit électronique du récepteur radio 2,4
GHz est basé sur les mêmes composants que le transmetteur
l'Arduino Nano, NRF24l01 et la socket-8-pin pour NRF24 qui détient d'un
régulateur de 3.3v ASM1117. Les connexions de l'Arduino Nano au NRF24l01
sont les mêmes que dans le transmetteur radio, comme il est
illustré dans le schéma ci-dessus Figure
3.18.
Les connexions au module radio sont les mêmes que dans
le cas du transmetteur. Pour alimenter le récepteur nous pourrions
obtenir 11.1 volts directement de la batterie Lipo du drone. Les broches D2,
D3, D4, D5, D6 et D7 sont utilisés comme canaux de sortie PWM car ils
peuvent générer ces signaux et proviennent du même registre
de PORT (DDRD).
(CH1: D2, CH2: D3, CH3: D4 et CH4 : D5) sont les canaux qui
corresponds respectivement aux commandes (Throttle, Yaw, Pitch et Roll) tandis
que (CH5: D6) et (CH6: D7) sont les deux canaux auxiliaires numériques
destinés pour les switches.
![](Conception-et-ralisation-dun-quadrotor-UAV50.png)
Figure 3.18 : Schéma électronique du
récepteur RF 2.4 GHz
Le circuit imprimé double face du récepteur RF
Figure 3.19 est réalisé à l'aide du
logiciel Eagle CAD soft.
![](Conception-et-ralisation-dun-quadrotor-UAV51.png)
Chapitre III Conception et mise en oeuvre du
fonctionnement
![](Conception-et-ralisation-dun-quadrotor-UAV52.png)
Figure 3.19 : Schéma du circuit imprimé
du récepteur RF 2.4 GHz
III.4.2. Algorithme du récepteur RF 2.4GHz :
Nous commençons le code en initialisant la
configuration de l'interruption PWM et la bibliothèque du module NRF24,
au début on utilise la même adresse du canal que dans
l'émetteur radio. L'Arduino nano reçoit chaque paquet de
données de 8 bits dans chaque canal, ce qui nous donne des valeurs
décimales au maximum de 255, pour lire ces valeurs dans l'Arduino Nano
du récepteur
il suffit d'utiliser la fonction prédéfinie
radio.
|
read(&data,
|
sizeof(MyData)). L'utilisation de la
|
|
fonction prédéfinie map (, , , ,);permet
de codées ces valeurs de 8 bits pour que les signaux s'arrange entre
1000ìs et 2000ìs. La fonction prédéfinie du
comptage writeMicroseconds (); permettent de gérer les périodes
des signaux PWM avec précision.
L'algorithme du transmetteur RF est expliqué
ci-dessous:
Déclaration des librairies SPI
& NRF24. Initialisation du registre Timer à
0. Définir la fréquence des signaux PWM à 50
Hz. Définir PWM_period. Déclaration des 6
variables « PWM_largeur » pour les sorties (2, 3, 4, 5, 6 et
7).
Déclaration des variables de 8 bits à
être reçu : Throttle, Pitch, Roll, Yaw, SW1 et SW2. Activer
le compteur millis. Déclaration du variable 32 bits de comptage :
« PreviousMillis ». Définir les broches D2, D3, D4, D5,
D6 et D7 du Port D comme sorties.
Déclaration du variable 32 bits de réception
des données : « LastRecvTime »
41
Void setup :
![](Conception-et-ralisation-dun-quadrotor-UAV53.png)
Chapitre III Conception et mise en oeuvre du
fonctionnement
Commencer la communication radio
Sous-programme de réception des données
Oui
Voir si le signal radio est disponible : radio.available ( )
Lire et recevoir les données de 8 bits
Non
Void loop :
Non
Vérifier si le signal est perdu
Oui
Réinitialiser les données
Codé les valeurs reçues de 8 bits sur 1000
à 2000 et les Affectés aux variables PWM_largeur en utilisant
la fonction prédéfinie map
ch1_value = map(received_data.Throttle,0,
255,1000,2000);
ch2_value =
map(received_data.Yaw,0,255,1000,2000); ch3_value =
map(received_data.Pitch,0,255,1000,2000); ch4_value =
map(received_data.Roll,0,255,1000,2000);
ch5_value = map(received_data.SW1,0,1,
1000,2000);
ch6_value = map(received_data.SW2,0,1,
1000,2000);
Générer les signaux PWM avec la fonction
prédéfinie writeMicroseconds (); pour chaque
canal channel_1.writeMicroseconds(ch1_value); channel_2.writeMicroseconds(ch2_value); channel_3.writeMicroseconds(ch3_value); channel_4.writeMicroseconds(ch4_value); channel_5.writeMicroseconds(ch5_value); channel_6.writeMicroseconds(ch6_value);
42
|