Publié le 23 janvier 2014 - par

Un 4×4 Lego piloté par Raspberry Pi

lego_crawler_2500Sur le blog de Karl, on trouve de nombreuses réalisation qui vont de la woktenna (antenne wifi à gain construite à partir d’un wok) à Androïd en passant par MySQL.

Cette fois c’est à la réalisation d’un 4×4 commandé par un Raspberry Pi que Karl nous invite. Ses enfants ont monté un Crawler Lego 4×4 qu’il s’est empressé d’équiper… d’un Raspberry Pi !lego_crawlerCe qui est appréciable sur le blog de Karl, c’est qu’il est abondamment illustré, que des liens mènent vers les sites des différents composants, et surtout que les scripts qu’il a écrits sont disponibles.

 lego_crawler_2Vous trouverez ci-dessous la traduction de cet article (en anglais) de Karl sur son blog :

http://karlherrick.com/dev/

========== TRADUCTION DE L’ARTICLE DE KARL ==========

Depuis un certain temps, j’avais envie de connecter une voiture RC à un Raspberry Pi. Au départ j’avais dans l’idée de câbler à un contrôleur Tyco Fast Traxx, mais cette façon de faire est actuellement au-delà de mes capacités. Au lieu de cela, pour appliquer le concept que j’avais choisi, je me suis assuré l’aide de mes enfants (voir l’article que nous avions publié sur les voitures Lego).

Montage du Crawler 4×4

Récemment, nous avons acquis le Crawler Lego 4×4, qui comprend:

(2) Des gros moteurs – pour entraîner les roues
(1) Un servo moteur – pour les virages
(1) Un boîtier de piles – pour alimenter les pièces Lego d’origine
(1) Une télécommande infrarouge
(1) Un récepteur infrarouge

Après avoir terminé le montage en suivant les instructions de la notice de construction Lego, ils ont ajouté:

(2) Des lumières – pour les phares
(1) Un interrupteur de contrôle – pour allumer ou éteindre les lumières

lego-raspberry-piCela m’a fourni l’occasion de contrôler le Crawler 4×4 par infrarouge avec un servo Parallax équipé d’une roue dentée et relié au Raspberry Pi.

lego-raspberry-pi-profile-001Le servo standard Parallax a été fixé avec des briques Lego montées autour de lui et une grande roue dentée Lego fixée dessus. J’ai ensuite construit une plate-forme sur le châssis du 4×4 pour accueillir cette pièce supplémentaire, ainsi que la roue dentée de liaison et le récepteur infrarouge Lego.

lego-raspberry-pi-profile-002Pour répartir un peu le poids, la batterie USB a été fixée sur la face inférieure du véhicule. Comme vous pouvez le voir dans la vidéo à la fin de la poste, il semble parfois déséquilibré. Lors de la mise en marche, la seule chose que cette batterie alimente directement  est le hub USB situé sur le dessus. Le hub USB alimente à son tour le Raspberry Pi, le servo, et les autres périphériques.

lego-raspberry-pi-profile-003La commande par le Raspberry Pi

Les éléments utilisées:

lego-raspberry-pi-profile-004

Connexion du servo

Bien que  dans ce projet le servo ait été connecté au hub USB, l’illustration ci-dessous montre comment alimenter le servo depuis la batterie USB, ainsi que la façon de relier le fil de commande du servo à la broche 18 du GPIO pour les tests.
raspberry-pi-servo-batteryPour envoyer les commandes à distance, j’ai eu l’idée de brancher un adaptateur USB Bluetooth et de d’associer la manette de jeu Bluetooth directement avec le Raspberry Pi, mais dans un but de simplification, je l’ai plutôt couplée avec ma Nexus 4 et connectée en SSH au Raspberry Pi avec l’appli Android Terminal IDE.
lego-raspberry-pi-profile-005

Les programmes

Pour utiliser un clavier sans fil, j’ai lancé le script d’écoute pour la gestion du servo et j’ai pu prendre le contrôle à l’aide des touches fléchées. Le contrôleur de jeu Bluetooth fonctionne parfaitement car les boutons sont mappés aux codes de clavier standard.

listener.sh

#!/bin/bash
ENTER=$(printf "%b" "\n")
ESCAPE=$(printf "%b" "\e")
UP_SUFFIX="A"
RIGHT_SUFFIX="C"
LEFT_SUFFIX="D"

while true; do
  read -sn1 a
  case "$a" in
    $ENTER) echo "ENTER";;
    $ESCAPE)
      read -sn1 b
      test "$b" == "[" || continue
      read -sn1 b
      case "$b" in
        $RIGHT_SUFFIX)
          echo "Turning Right"
          ~/right.sh
        ;;
        $UP_SUFFIX)
          echo "Straigtening"
          ~/straight.sh
        ;;
        $LEFT_SUFFIX)
          echo "Turning Left"
          ~/left.sh
        ;;
        *) continue;;
      esac
    ;;
    "d")
      echo "Turning Right"
      ~/right.sh
    ;;
    "w")
      echo "Straigtening"
      ~/straight.sh
    ;;
    "a")
      echo "Turning Left"
      ~/left.sh
    ;;

    "3")
      echo "Taking a picture"
      ~/picture.sh &
    ;;
    "4")
      echo "Taking a video"
      ~/video.sh &
    ;;
    *) echo "$a";;
  esac
done

Lorsqu’on appuie sur les différents boutons ou sur les touches du clavier, le script d’écoute (listener.sh) appelle aux autres scripts, qui déclenchent le virage, la prise de photo, et la prise de vidéo.

picture.sh

#!/bin/bash
dateTime=`date +%Y-%m-%d-%H-%M-%S`
pictureDirectory=~/pictures

raspistill -w 640 -h 480 -e jpg -t 0 -o $pictureDirectory/$dateTime.jpg</pre>

video.sh

#!/bin/bash
dateTime=`date +%Y-%m-%d-%H-%M-%S`
videoDirectory=~/videos

echo "Taking a video for 10 seconds"
raspivid -t 10000  -o $videoDirectory/$dateTime.h264

right.sh

#!/bin/bash
sudo ~/control.py 1100 .25

straight.sh

#!/bin/bash
sudo ~/control.py 1300 .25

left.sh

#!/bin/bash
sudo ~/control.py 1550 .25

control.sh

#!/usr/bin/python
import time
import sys
from RPIO import PWM

servo = PWM.Servo()

#appropriate range of values for BCM_GPIO pin 18 and the servo: 370 - 2330

print servo.set_servo(18, float(sys.argv[1]))

time.sleep(float(sys.argv[2]))

servo.stop_servo(18)

Les photos obtenues

Bien que le module de caméra Raspberry Pi puisse fournir des images de 5 mégapixels avec une résolution native de 2592×1944 pixels j’ai fixé la résolution à 640×480 pixels dans le script de prise de vue ci-dessus. Avec lui, j’ai pu capturer une image de mon chat qui ne se doutait absolument pas de la blague que nous lui faisions….

lego-pi-cat-001Et voici une autre photo, quand il a réalisé que quelque chose se passait.

lego-pi-cat-002

Vidéo du Crawler 4×4

Enfin, voici une courte vidéo du Crawler Lego 4×4 radiocommandé ainsi qu’un clip ou on aperçoit le pilote de l’engin…

Conclusion

Merci à Karl pour cet article très documenté qui pourra inspiré ceux-d’entre vous qui ont entrepris la réalisation d’un véhicule piloté par un Raspberry Pi.

Si cet article vous a donné des idées, ou vous a aidé dans la conception de votre projet, pensez à laisser vos remarques dans les commentaires ci-dessous…

Crédit photo : http://karlherrick.com/dev/


qrcode_framboise314Ce QR Code vous emmène directement sur le site
http://www.framboise314.fr

  1. Pour l’utiliser, vous devez avoir une application capable de lire les QR-Codes sur votre IPhone ou votre smartphone. Si besoin, je vous conseille d’installer : i-nigma disponible sur iPhone, Android et Blackberry.
  2. Scannez le QR-Code de framboise314 avec votre nouvelle application
  3. Profitez des articles de framboise314.fr. Ils sont lisibles sans problème sur votre smartphone.
Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

7 réflexions au sujet de « Un 4×4 Lego piloté par Raspberry Pi »

  1. Ping : Un 4×4 Lego piloté par Raspberry P...

  2. Ping : Un 4×4 Lego piloté par Raspberry P...

  3. Ping : Un 4×4 Lego piloté par Raspberry P...

  4. Trefyju

    La vidéo a été supprimé de l’article :(.

    PS: Merci d’avoir créé ce blog très intéressant et j’attend votre livre avec impatience ! BOnne continuation

    Répondre
    1. admin Auteur de l’article

      Bonjour
      Karl a modifié la vidéo, ce qui a changé le lien. C’est maintenant réparé! Merci de m’avoir signalé ce problème.
      Cordialement
      François

      Répondre
  5. Ping : Un 4×4 Lego piloté par Raspberry P...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.