En gros, il s'agissait d'améliorer mon précédent projet de véhicule contrôlé au moyen d'un joystick (janvier 2012) qui comportait un câble peu pratique entre le joystick et le véhicule (un peu comme si on promenait le véhicule en laisse...).
Puisque j'avais déjà un peu d'expérience avec les modules NRF24L01 (Arduino Télépathe, avril 2012), je m'attendais à un projet rapide et facile... Ce que je n'avais pas prévu, c'est tout le temps perdu à cause d'un module NRF24L01 instable qui ne fonctionnait que de façon intermittente.
Nous disposons donc de deux cartes Arduino (j'ai utilisé des Duemilanove, mais c'est évidemment pareil pour le Uno), chacune étant munie d'un module NRF24L01. Un premier Arduino émet les informations en provenance d'un joystick, le deuxième Arduino reçoit ces informations et les utilise pour contrôler les moteurs par l'entremise d'un circuit intégré L293D.
Branchement des modules rf
Les modules radiofréquence NRF24L01 sont des périphériques SPI (comme les modules pour carte SD, par exemple). Les branchements sont identiques sur les deux cartes Arduino:
- Pin GND du module rf : Pin GND de l'Arduino
- Pin VCC du module rf: Pin 3.3 V de l'Arduino
- Pin CE du module rf: Pin 9 de l'Arduino
- Pin CSN du module rf: Pin 10 de l'Arduino
- Pin MOSI du module rf: Pin 11 de l'Arduino
- Pin MISO du module rf: Pin 12 de l'Arduino
- Pin SCK du module rf: Pin 13 de l'Arduino
- Pin IRQ du module rf: On ne l'utilise jamais
Concernant l'alimentation, vous pourrez trouver un tas d'informations contradictoires sur le web: certaines personnes affirment que le module sera instantanément détruit si on l'alimente avec 5 V, d'autres disent qu'il n'y a pas de problème puisque les modules sont munis d'un régulateur de tension. Une chose est certaine, ça marche très bien avec 3.3 V. Lors de mes premiers essais en avril, j'avais utilisé 5 V sans aucun problème (est-ce que c'est lié au fait que mes modules fonctionnaient mal quand je les ai réutilisés en juillet?).
Pour ceux qui tiennent à tout savoir: MISO signifie "Master In Slave Out" (les données sont acheminées de l'Arduino vers le module rf), MOSI signifie "Master Out Slave In" (les données sont acheminées du module rf vers l'Arduino), SCK signifie "Serial Clock", CE signifie "Chip Enable" (ou parfois SS pour Slave Select; si plusieurs périphériques SPI sont branchés au même Arduino, cette broche vous permet de choisir le périphérique avec lequel l'Arduino dialogue), et CSN "Chip Select Negative" (?).
Je connais deux types de modules NRF24L01 (les deux sont vendus sur eBay à un prix dérisoire par des expéditeurs chinois): un modèle vert à 10 pins et un modèle noir à 8 pins. Sur le modèle vert, les pins sont identifiées, mais sur le noir elles ne le sont pas! Le schéma ci-dessous vous sera peut-être utile.
Branchements du joystick sur l'Arduino émetteur
Un joystick n'est rien d'autre que deux potentiomètres: un qui change de valeur lorsque le joystick est incliné selon l'axe des x, et un autre qui change de valeur lorsque le joystick est incliné selon l'axe des y.
Chacun des deux potentiomètres est utilisé en diviseur de tension entre les pins GND et 5 V de l'Arduino. Le potentiomètre Y (qui permet d'avancer ou de reculer) achemine son signal à la pin analogique 0, et le potentiomètre X (qui permet de tourner à gauche ou à droite) achemine son signal à la pin analogique 1.
Branchements du circuits intégré L293D sur l'Arduino récepteur (sur le véhicule)
Le module rf occupait déjà les pins 9-10-11-12 de l'Arduino, le pilote de moteur L293D encombrera pour sa part les pins 3-4-5-6-7-8!
Voir les détails sur le schéma ci-contre.
Voici, finalement, les sketchs à télécharger dans chaque Arduino. J'ai utilisé la librairie "mirf", qui exige que les données soient acheminées un byte à la fois (d'où la nécessité de convertir mes deux "int" en une suite de deux bytes, et de reconvertir les bytes en "int" à la réception).
L'affichage des données dans le moniteur série ne sert qu'aux fins de débogage. Je suis conscient que ces sketchs pourraient être améliorés (par exemple, le véhicule pourrait se déplacer un peu plus rapidement en augmentant la valeur de la variable passée en paramètre à analogWrite) mais ça fonctionne!
Sketch de l'émetteur
Sketch du récepteur
Yves Pelletier (Twitter: @ElectroAmateur)
Bonjour,
RépondreSupprimerJe cherche a reparer une voiture teleguidee qui ne roule plus en marche avantje n'y connait rien du tout mais cela m'interesse bcp.
Pourriez m'aider a distance? J'ai ouvert la voiture mais suis pas sure du verdict, il y aun fil noir qui n'est connecté a rien et qui semblait etre collé au toit du vehicule.
Les fards ne fonctionne plus non plus.
Merci pour votre aide.
Bonjour Fabienne,
RépondreSupprimerJe vous conseille de poser votre question dans un forum de discussion, comme par exemple http://www.lelectronique.com/forum-electronique/forum.php
Une voiture télécommandée a besoin de certaines parties de la fonction, et je ne suis pas sûr que ce soit votre idée de «simple», mais de toute façon prendre un regard. Je suis sûr que vous pouvez améliorer l'apparence du projet.
RépondreSupprimerRegards Colin hanks.
Nitrotek
bonjour, merci pour le tuto, néanmoins j'aimerais utiliser un rf433 mhz avec la libraire virtualwire pourriez m'aider?
RépondreSupprimerTout le reste fonctionne
Fabriqué en une apres midi ! Merci
RépondreSupprimerSalut
RépondreSupprimerLe joystick nest pas branché à un pin?
"Le potentiomètre Y (qui permet d'avancer ou de reculer) achemine son signal à la pin analogique 0, et le potentiomètre X (qui permet de tourner à gauche ou à droite) achemine son signal à la pin analogique 1."
SupprimerExcellent tutorial,ça fonctionne très bien,simple question ,comment s y prend on si on veut rajouter un relais sur la carte recepteur mise en route par un poussoir ou un inter sur la carte émetteur..?..
RépondreSupprimerMerci.