Réaliser une radiocommande avec ARDUINO, manette PS2 et nRF24L01
L’objectif de cet article est de vous montrer comment réaliser une radiocommande à l’aide de deux ARDUINO, d’une manette PS2 et de deux transmetteurs nRF24L01. L’ergonomie et le super design d’une manette de PS2 est extrêmement plaisant, d’autant plus que le temps qu’on a passé à jouer avec différents jeux, la rend incontournable pour un tel projet. C’est carrément une extension de la main pour certain. Sa maniabilité n’est plus à démontrer. Autre avantage de ce projet, c’est le coût. En effet, les transmetteurs coûtent moins de 4€ la paire, la manette PS2 en occasion est à moins de 10€. Cet article sera un support pour la réalisation d’un DRONE. L’objectif étant de réaliser une radiocommande DIY en 2.4GHZ afin de piloter un drone.
Liste des matériels :
ARDUINO (Amazon) x2 (Dans mon exemple, j’utilise un ARDUINO UNO et NANO)
Pour cette étape, je vous redirige vers un précédent article expliquant en détail la marche à suivre. N’oubliez pas de revenir ici pour suivre l’étape 2.
Un problème se pose désormais, le transmetteur nRF24L01 utilise les mêmes pins que celles utilisées dans l’article/tuto que vous venez de faire. Pour corriger ce problème, vous allez changer les pins pour la manette comme suit :
Ça prendra quelques minutes de votre précieux temps, mais ça peut vous en faire gagner beaucoup en recherche de panne à l’étape de test.
Étape 5 : Télécharger les librairies
Pour cela, il faut deux librairies, l’une vous l’avez déjà en théorie. Étant donné que vous avez suivi ce Tutorial, précédemment cité. Et la librairie concernant la communication des nRF24L01 c’est MIRF.
//CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
error = ps2x.config_gamepad(7,6,5,3, true, true); //setup pins and settings: GamePad(clock=bleu , command=orange, attention=jaune, data=b run, Pressures?, Rumble?) check for error //The numbers he reported success with is as follow:
//5V = 180 ohm, voltage drop of 1.85V (3.15v to the controller) //ATT = 5.6K ohm, voltage drop of 1.08V (3.92 to the controller) //CLK = 5.6K ohm, voltage drop of 1.15V (3.85 to the controller) //CMD = 860K ohm, voltage drop of 1.39V (3.61 to the controller) //so you can give that a try as well. Though really, ignore the resistor on 5V and just connect the red power wire to 3.3V. if(error == 0){ Serial.println("Found Controller, configured successful"); Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;"); Serial.println("holding L1 or R1 will print out the analog stick values."); Serial.println("Go to www.billporter.info for updates and to report bugs."); }
else if(error == 1) Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
else if(error == 2) Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
else if(error == 3) Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
//Serial.print(ps2x.Analog(1), HEX);
type = ps2x.readType(); switch(type) { case 0: Serial.println("Unknown Controller type"); break; case 1: Serial.println("DualShock Controller Found"); break; case 2: Serial.println("GuitarHero Controller Found"); break; }
Mirf.cePin = 9; // CE sur D9 Mirf.csnPin = 10; // CSN sur D10 Mirf.spi = &MirfHardwareSpi; Mirf.init();
/* You must Read Gamepad to get new values Read GamePad and set vibration values ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255) if you don't enable the rumble, use ps2x.read_gamepad(); with no values
you should call this at least once a second */
if(error == 1) //skip loop if no controller found return;
else { //DualShock Controller
ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed Serial.println("Start is being held"); if(ps2x.Button(PSB_SELECT)) Serial.println("Select is being held");
if(ps2x.Button(PSB_PAD_UP)) { //will be TRUE as long as button is pressed Serial.print("Up held this hard: "); Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC); } if(ps2x.Button(PSB_PAD_RIGHT)){ Serial.print("Right held this hard: "); Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC); } if(ps2x.Button(PSB_PAD_LEFT)){ Serial.print("LEFT held this hard: "); Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC); } if(ps2x.Button(PSB_PAD_DOWN)){ Serial.print("DOWN held this hard: "); Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC); }
vibrate = ps2x.Analog(PSAB_BLUE); //this will set the large motor vibrate speed based on //how hard you press the blue (X) button
if (ps2x.NewButtonState()) //will be TRUE if any button changes state (on to off, or off to on) {
int numero1=512; int numero2=512; int numero3=512; int numero4=512; int numero8=512; byte numero; int pairimpair; byte data[Mirf.payload]; // Tableau de byte qui va stocker le message recu
Maintenant que vous avez câblé, vos deux Arduino avec les deux nRF04L01 ainsi que la manette. Vous pouvez :
Câbler une led ou un petit moteur CC sur la pin 5 pour le voir varier en luminosité/vitesse lorsque vous bougerez le joystick/pad.
Aussi, vous pouvez brancher un SERVO moteur sur la pin 4 pour le voir varier d’angle, en jouant avec la manette. Sans cela, vous pouvez quand même vérifier si votre montage fonctionne en ouvrant le SERIAL MONITOR de l’Arduino récepteur et ainsi constater que les valeurs varient en fonction de la manette.
Transférer dans l’Arduino qui a la manette branchée dessus, le code Émission.
Transférer dans l’Arduino qui a uniquement le NRF24l01, le code Réception.
Brancher vos Arduino aux ports USB.
Ouvrir le Serial Monitor de l’Arduino Réception en sélectionnant le bon port.
Vidéo d’illustration de cet exemple :
Voilà, si vous avez des questions n’hésitez pas à utiliser les commentaires…
Bonjour, qu’elles sont les modifications à faire pour que le code fonctionne avec les modules xbee ?
Car j’ai comme but de faire voler un drone avec ce systeme de commande.
Cordialement
Salut,
J’ai utilisé les xbees pour le même projet. Pour cela tu aura besoin de la librairie EASYTRANSER.
Avec les xbees tu aura de meilleurs performances et un code plus léger et plus maniable grâce à cette librairie « EasyTranser »
Cela dit, fait très attention aux xbees car c’est fragile et coûtent cher *_*
j’aimerais savoir ce que chaque bouton fait et sur quel sortie de l’arduino, car moi je veux contrôler un petit véhicule et les moteur sont alimentés par une source externe et je dois pouvoir contrôler les mosfet avec le arduino, alors j’aimerai savoir ce que chaque bouton fait sur l’arduino de sortie
Merci beaucoup
Salut, moi c’est sur que j’aimerais que les joystick puisse servir pour controler un transistor pour controler un moteur qui est branché sur une source externe. Ex plus que j’avance le joystick gauche vers l’avant plus que de volt sorte d’une sortie PWN du arduino de sortie de même pour chaque mouvement des joysticks, moi je ferais mes branchement en conséquence
merci beaucoup de ton aide !!
Bonjour, j’ai utilisé2 ESC pour controller 2 brushless dc motor mais le problème qu’ils ne s’arrête pas en même temps; il y’a un décalage entre les 2 moteurs
Bonjour, j’ai mal posé ma question. J’ai refais ton travail et d’après le code émetteur, lorsque j’envoie le « numéro8 », je commande mes 4 moteurs brushless pour mon quadricoptère mais j’ai pas su comment commander les 4 moteurs séparemment. Qulles modification pourrais-je ajouter aux codes svp et Merci.
bonjour je construit un drone que je vais controler par un capteur emg (capteur musculaire) pensez vous que je pourai adapter facilement votre programe pour que les commande vienne de ce capteur et non d une manette ?
salut !
sujet très intéressant et pourtant j’ai eu bien du mal à le trouver.
en vue de me mettre au drone FPV, je me demandait s’il était possible (et rentable, financièrement et autonomie de batterie) de brancher une manette USB (avec les même bouton que la PS2, mais avec un port USB) du genre celle de free (fournie avec la « révolution ») ou bien genre dual trigger de thrustmaster ?
également, est-on obligé de repasser par un arduino sur le quad ? (le récepteur branché comme avec une télécommande classique devrait fonctionner ?…)
merci beaucoup pour le tuto et d’un éventuelle réponse … 😀
Si on parle de rentabilité et gain de temps le mieux c’est de s’orienter vers des produit chinois.
Si on parle de dépendance à la bidouille, je pense que c’est faisable à condition de trouver une bibliothèque arduino qui gère la manette free ou thrusmaster.
Oui tu es obliger d’avoir deux arduino, l’un émetteur et l’autre récepteur. Deux arduinos nano font l’affaire.
j’ai l’impression que votre télécommande est reliée par un fil au reste, ce qui signifierait qu’elle ne peut fonctionner pour un drone (utilisation d’un fil pas très pratique !) ??
pourra-t-on modifier le programme en cas d’expansion (gyrometre + accelerometre, gps, camera …)
super tuto mais j’ai un souci: je pense avoir fait tous les branchements correctement, la manette est bien reconnue mais le programme émission m’affiche « select is being held » en continue, alors que je n’appuie sur aucun bouton. Je précise que ma manette est une officielle sony en bon état. Tu aurais une idée du souci?
salut !
je reviens à la charge, mais après avoir investi dans une turnigy 9x, je vais maintenant poser la question ‘à l’envers’ :
comment relier un joystick PC (ports DB15 ou USB) pour l’utiliser en double commande afin d’utiliser la partie émettrice de la RC 2.4Gh ?
ahah ! elle est bonne, celle là 😉
est-ce de l’analogique ou du numérique, pour relier la RC esclave (donc le joystsick) à la (vraie) RC maitre ? (apparemment par la prise mini-jack, la même que pour l’adaptateur USB pour RC)
merci d’avance 😉
bonjour j’aimerai savoir si je peux utiliser cette méthode avec un RF 433mhz et pas le nrf24
svp répondez moi par e-mail
je vous remercie d’avance pour votre aide
salutation.
Salut,
Je suis en étudiant en Mesures Physiques et dans le cadre de mon DUT je réalise un projet tuteuré. Sur le arduino recpteur je reçois bien les commandes des joysticks, mais je n’arrive pas à modifié les programmes afin de juste recevoir les gachettes L2, R2 et les flèches droite et gauche.
« No controller found, check wiring, see readme.txt to enable debug. visit http://www.billporter.info for troubleshooting tips
Unknown Controller type found »
donc qu’Est-ce que ça veut dire ? je ne trouve pas le pb?
je sis sur le point de construire mon quadricopter mais je rencontre un probleme au niveau du code .
j’aimerai commander les ESC 2 a 2 pour faire les differents mouvements de mon drone
mais il semble que il n’ya que la pin 4 et 11 qui fonctionnent . aidez moi s’il vous plait a programmer d’autre pin arduino pour effectuer different mouvement .
jusqu’ici je decolle seulement car tous mes ESC sont relié a la pin 4.
j’aimerais que wallid m’explique dans les details comment il a procedé si possible le code .
merci a vous.
Bonjour, moi je voudrais faire un petit chariot élévateur comme dans la vidéo de creative channel mais j’y connais pas grand chose en transmetteur avec récepteur 4 channels ou plus ;-( donc si tu pouvais me proposer un système assez simple pour pouvoir faire comme sur la vidéo ce serait vraiment cool de ta part merci d’avance 😉
bonjour
j adore votre tuto
j ai egalement un projet RC
pour cela je veux utiliser 2 uno
j’ai un probléme avec la reception, je reçois pas correctement les infos.
ce qui m’étonne c’est que sur l’emetteur le voyant rx clignote sur le récepteur il ne clignote pas, alors qu il me semble sur votre video qu’il doit clignoter
D’ou peux venir le problème
d’avance merci
bonsoir. s’il vous plait j’ai deux préoccupation.
première préoccupation: est-il possible de faire une simulation du fonctionnement de cette radiocommande dans protéus? parceque je n’ai pas pu trouvé la nRF24L01 dans protéus.
2e préoccupation: dans le cas où l’on voudrait commandé un quadricopter, quel serait le code en ce moment? vu le code présenté plusi haut ne gère que quelques fonctions.
bonsoir. s’il vous plait j’ai deux préoccupation.
première préoccupation: est-il possible de faire une simulation du fonctionnement de cette radiocommande dans protéus? parceque je n’ai pas pu trouvé la nRF24L01 dans protéus.
2e préoccupation: dans le cas où l’on voudrait commandé un quadricopter, quel serait le code en ce moment? vu le code présenté plusi haut ne gère que quelques fonctions.
bonjour j aimerai connaitre les paramètres dont on tient en compte pour la commande du drone cet à les différents mouvements et les informations de commande.
merci d’avance
Bonjour et bravo pour vos réalisations. Mon garçon est tétraplégique, possède déjà un Bebop2 dont j’ai aménagé la radiocommande, mais ça le fatigue beaucoup. Il souhaite piloter un drone avec les mouvements de sa tête. J’ai songé à réaliser un drone et sa radiocommande avec gyroscope pour capter les mouvements de sa tête. Comment puis-je faire ? Merci pour l’attention que vous porterez à ce post. Francis
c’est génial . J’ai un problème de connexion, je donne le x ou un autre bouton et il me reconnaît, mais au bout d’un moment il ne me reconnaît plus rien et les LED rouges s’éteignent et seule la verte reste allumée. Je suis désolé pour mon français, je suis originaire des îles Canaries et je ne connais pas beaucoup le français, désolé
salut a vous
je suis nouveau dans l’électronique
je voudrais savoir.
est on vas toujours utiliser les résistance ( au borne du PS2) dans le circuit final ?
merci..
Bonjour, qu’elles sont les modifications à faire pour que le code fonctionne avec les modules xbee ?
Car j’ai comme but de faire voler un drone avec ce systeme de commande.
Cordialement
Salut,
J’ai utilisé les xbees pour le même projet. Pour cela tu aura besoin de la librairie EASYTRANSER.
Avec les xbees tu aura de meilleurs performances et un code plus léger et plus maniable grâce à cette librairie « EasyTranser »
Cela dit, fait très attention aux xbees car c’est fragile et coûtent cher *_*
Amuse toi bien
perfectly done mate! i struggled with the french part but the code is perfect! thank you
Présentation vraiment intéressante et bien expliquée.
Merci pour cette aide précieuse et de surplus en Français
Salut,
j’aimerais savoir ce que chaque bouton fait et sur quel sortie de l’arduino, car moi je veux contrôler un petit véhicule et les moteur sont alimentés par une source externe et je dois pouvoir contrôler les mosfet avec le arduino, alors j’aimerai savoir ce que chaque bouton fait sur l’arduino de sortie
Merci beaucoup
Bonjour Francis,
Dans l’exemple que je montre toutes les touches ne sont pas exploitées. Mais tu peux faire ce que tu veux et je peux t’aider.
Dis moi quelles touches de la manette tu souhaites utiliser et sur quelle sortie…j’essaierai de t’écrire le code.
Salut, moi c’est sur que j’aimerais que les joystick puisse servir pour controler un transistor pour controler un moteur qui est branché sur une source externe. Ex plus que j’avance le joystick gauche vers l’avant plus que de volt sorte d’une sortie PWN du arduino de sortie de même pour chaque mouvement des joysticks, moi je ferais mes branchement en conséquence
merci beaucoup de ton aide !!
Bonjour, j’ai utilisé2 ESC pour controller 2 brushless dc motor mais le problème qu’ils ne s’arrête pas en même temps; il y’a un décalage entre les 2 moteurs
Bonjour Walid,
Pour contrôler tes deux ESC tu as utilisé quelles sorties Arduino? puis tu utilises quelles touches de ta manette?
Bonjour, j’ai mal posé ma question. J’ai refais ton travail et d’après le code émetteur, lorsque j’envoie le « numéro8 », je commande mes 4 moteurs brushless pour mon quadricoptère mais j’ai pas su comment commander les 4 moteurs séparemment. Qulles modification pourrais-je ajouter aux codes svp et Merci.
bonjour je construit un drone que je vais controler par un capteur emg (capteur musculaire) pensez vous que je pourai adapter facilement votre programe pour que les commande vienne de ce capteur et non d une manette ?
je l’ai su maintenant, il suffit d’envoyer les numéros 1 ou 2 ou 3 ou 4 ou 8 🙂
Bonjour,
super article.
Peux tu renvoyer le lien de l’etape stp
salut !
sujet très intéressant et pourtant j’ai eu bien du mal à le trouver.
en vue de me mettre au drone FPV, je me demandait s’il était possible (et rentable, financièrement et autonomie de batterie) de brancher une manette USB (avec les même bouton que la PS2, mais avec un port USB) du genre celle de free (fournie avec la « révolution ») ou bien genre dual trigger de thrustmaster ?
également, est-on obligé de repasser par un arduino sur le quad ? (le récepteur branché comme avec une télécommande classique devrait fonctionner ?…)
merci beaucoup pour le tuto et d’un éventuelle réponse … 😀
TYT
Salut,
Si on parle de rentabilité et gain de temps le mieux c’est de s’orienter vers des produit chinois.
Si on parle de dépendance à la bidouille, je pense que c’est faisable à condition de trouver une bibliothèque arduino qui gère la manette free ou thrusmaster.
Oui tu es obliger d’avoir deux arduino, l’un émetteur et l’autre récepteur. Deux arduinos nano font l’affaire.
de rien c’est un plaisir
bonjour
j’ai l’impression que votre télécommande est reliée par un fil au reste, ce qui signifierait qu’elle ne peut fonctionner pour un drone (utilisation d’un fil pas très pratique !) ??
pourra-t-on modifier le programme en cas d’expansion (gyrometre + accelerometre, gps, camera …)
en fait j’ai regardé plus dans le détail, oubliez ce que j’ai dit 🙂
autre question plus pertinente : où trouver votre étape 2 ?
votre étape 1 plutôt 🙂
Salut!
super tuto mais j’ai un souci: je pense avoir fait tous les branchements correctement, la manette est bien reconnue mais le programme émission m’affiche « select is being held » en continue, alors que je n’appuie sur aucun bouton. Je précise que ma manette est une officielle sony en bon état. Tu aurais une idée du souci?
merci!
Bonjour,
Avez vous avancé sur la programmation du contrôleur de vol?
Cordialement
salut !
je reviens à la charge, mais après avoir investi dans une turnigy 9x, je vais maintenant poser la question ‘à l’envers’ :
comment relier un joystick PC (ports DB15 ou USB) pour l’utiliser en double commande afin d’utiliser la partie émettrice de la RC 2.4Gh ?
ahah ! elle est bonne, celle là 😉
est-ce de l’analogique ou du numérique, pour relier la RC esclave (donc le joystsick) à la (vraie) RC maitre ? (apparemment par la prise mini-jack, la même que pour l’adaptateur USB pour RC)
merci d’avance 😉
bonjour j’aimerai savoir si je peux utiliser cette méthode avec un RF 433mhz et pas le nrf24
svp répondez moi par e-mail
je vous remercie d’avance pour votre aide
salutation.
Salut,
Je suis en étudiant en Mesures Physiques et dans le cadre de mon DUT je réalise un projet tuteuré. Sur le arduino recpteur je reçois bien les commandes des joysticks, mais je n’arrive pas à modifié les programmes afin de juste recevoir les gachettes L2, R2 et les flèches droite et gauche.
Aurais tu quelque conseil à donner?
Genre, est-ce qu’on ai obligé de passer par un tableau pour envoyer les données?
salut à tous !
pour ma part j’ai entré le code, et j’ai
« No controller found, check wiring, see readme.txt to enable debug. visit http://www.billporter.info for troubleshooting tips
Unknown Controller type found »
donc qu’Est-ce que ça veut dire ? je ne trouve pas le pb?
sachant que la manette est une sony dualshock
salut
comment modifier le code pour piloter deux moteur cc pour une voiture rc je suis planter
salut a tous
je sis sur le point de construire mon quadricopter mais je rencontre un probleme au niveau du code .
j’aimerai commander les ESC 2 a 2 pour faire les differents mouvements de mon drone
mais il semble que il n’ya que la pin 4 et 11 qui fonctionnent . aidez moi s’il vous plait a programmer d’autre pin arduino pour effectuer different mouvement .
jusqu’ici je decolle seulement car tous mes ESC sont relié a la pin 4.
j’aimerais que wallid m’explique dans les details comment il a procedé si possible le code .
merci a vous.
Bonjour , Est-ce que je peux avoir les codes en utilisant les modules Xbee ?
salut ,j’aimerais savoir combien de voies donne cette modif ?
merci
Bonjour, moi je voudrais faire un petit chariot élévateur comme dans la vidéo de creative channel mais j’y connais pas grand chose en transmetteur avec récepteur 4 channels ou plus ;-( donc si tu pouvais me proposer un système assez simple pour pouvoir faire comme sur la vidéo ce serait vraiment cool de ta part merci d’avance 😉
sur quelles pins de l’arduino se branche l’alimentation ?
bonjour,
Vin et gnd
attention aux limites de tension max et mini
as-t u des plans de châssis (dessins avec cotation ) simples à réaliser ?
bonjour
j adore votre tuto
j ai egalement un projet RC
pour cela je veux utiliser 2 uno
j’ai un probléme avec la reception, je reçois pas correctement les infos.
ce qui m’étonne c’est que sur l’emetteur le voyant rx clignote sur le récepteur il ne clignote pas, alors qu il me semble sur votre video qu’il doit clignoter
D’ou peux venir le problème
d’avance merci
bonsoir. s’il vous plait j’ai deux préoccupation.
première préoccupation: est-il possible de faire une simulation du fonctionnement de cette radiocommande dans protéus? parceque je n’ai pas pu trouvé la nRF24L01 dans protéus.
2e préoccupation: dans le cas où l’on voudrait commandé un quadricopter, quel serait le code en ce moment? vu le code présenté plusi haut ne gère que quelques fonctions.
en passant j’admire vos publication. elles sont d’une très grande aide.
bonsoir. s’il vous plait j’ai deux préoccupation.
première préoccupation: est-il possible de faire une simulation du fonctionnement de cette radiocommande dans protéus? parceque je n’ai pas pu trouvé la nRF24L01 dans protéus.
2e préoccupation: dans le cas où l’on voudrait commandé un quadricopter, quel serait le code en ce moment? vu le code présenté plusi haut ne gère que quelques fonctions.
bonjour j aimerai connaitre les paramètres dont on tient en compte pour la commande du drone cet à les différents mouvements et les informations de commande.
merci d’avance
Herman
Bonjour et bravo pour vos réalisations. Mon garçon est tétraplégique, possède déjà un Bebop2 dont j’ai aménagé la radiocommande, mais ça le fatigue beaucoup. Il souhaite piloter un drone avec les mouvements de sa tête. J’ai songé à réaliser un drone et sa radiocommande avec gyroscope pour capter les mouvements de sa tête. Comment puis-je faire ? Merci pour l’attention que vous porterez à ce post. Francis
c’est génial . J’ai un problème de connexion, je donne le x ou un autre bouton et il me reconnaît, mais au bout d’un moment il ne me reconnaît plus rien et les LED rouges s’éteignent et seule la verte reste allumée. Je suis désolé pour mon français, je suis originaire des îles Canaries et je ne connais pas beaucoup le français, désolé
salut a vous
je suis nouveau dans l’électronique
je voudrais savoir.
est on vas toujours utiliser les résistance ( au borne du PS2) dans le circuit final ?
merci..