lundi 6 août 2012

Fabrication d'une voiture téléguidée (Arduino)

Ce projet consiste à produire un véhicule/robot téléguidé au moyen du matériel suivant:  une base de robot de type "smart car" (chaque roue est munie de son propre moteur), 2 cartes Arduino, deux modules radiofréquence NRF24L01, un pilote de de moteur L293D et un joystick (de type Playstation).

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)

8 commentaires:

  1. Bonjour,
    Je 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.

    RépondreSupprimer
  2. Bonjour Fabienne,
    Je vous conseille de poser votre question dans un forum de discussion, comme par exemple http://www.lelectronique.com/forum-electronique/forum.php

    RépondreSupprimer
  3. 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.

    Regards Colin hanks.
    Nitrotek

    RépondreSupprimer
  4. bonjour, merci pour le tuto, néanmoins j'aimerais utiliser un rf433 mhz avec la libraire virtualwire pourriez m'aider?

    Tout le reste fonctionne

    RépondreSupprimer
  5. Fabriqué en une apres midi ! Merci

    RépondreSupprimer
  6. Salut
    Le joystick nest pas branché à un pin?

    RépondreSupprimer
    Réponses
    1. "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."

      Supprimer
  7. Excellent 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..?..
    Merci.

    RépondreSupprimer