Nouveau Support pour mon Quadricoptère (Quadri-rotor)

Les premiers tests n’ont pas donnés satisfaction sur la solidité de mon premier support. Donc j’ai réalisé de A à Z un nouveau support en Aluminium.

Etape 1 – Découpage des pièces:

WP_000113

Etape 2 – Assemblage :

WP_000114

Etape 3 – un peu de couleur (noir) :

WP_000119

Etape 4 – Mise en place des composants:

Voilà il me reste plus qu’a faire le reste, manque un moteur, et deux contrôleurs.

Liste du matériel pour mon quadricoptère

2 Module diviseur de tension 25V

1 FEZ Domino

4 Moteur DM2205 KV1200

4 Controller Pro-Tronik PM 30A

2 Batteries Black Lithium 1350mAh 35C 3S (116 grs)

4 Télémètre infrarouge SHARP™ “GP2D120″

1 Télémètre infrarouge SHARP™ “GP2Y0A02YK”

1 Capteur d’inclinaison RPI-1031

1 Module accéléromètre/gyroscope 6 axes

1 Module boussole “HMC6352″

Connaitre la tension d’une batterie avec une FEZ Domino

Dans mon projet de quadricoptère j’ai besoin de contrôler la tension de mes batteries en cours de vol.

Pour ce faire il y a plusieurs solution j’ai choisi d’utiliser une petite carte qui divise la tension par 5 et accepte une tension en entrée de 25V.

La carte est disponible ici :

http://www.zartronic.fr/module-diviseur-de-tension-25v-p-73.html

Au niveau branche c’est relativement très simple Sourire

La sortie 2 sur GND et la sortie 1 sur une entrée analogique, j’ai choisi l’entrée A0.

Voici en image ce que cela donne :

WP_000105

WP_000106

WP_000107

Je fait appel ainsi pour avoir ma tension:

public static void GetTension()
  {

      Tensiometre tensionBatterie = new Tensiometre((Cpu.Pin)AnalogIn.Pin.Ain0);;
      while (true)
      {
          var t = tensionBatterie.ReadSensorValue();
      }
  }

Voici la classe que j’utilise :

/// <summary>
    /// Classe permettant de gérer le capteur de tension
    /// </summary>
    public class Tensiometre : IDisposable
    {
        /// <summary>
        /// Capteur
        /// </summary>
        protected AnalogIn sensor;

        /// <summary>
        /// Constructeur prenant l’entrée analogique sur la quelle est branché le capteur
        /// </summary>
        /// <param name=”pin”></param>
        public Tensiometre(Cpu.Pin pin)
        {
            this.Initialise(pin);
        }

        /// <summary>
        /// Initialisation du capteur
        /// </summary>
        /// <param name=”pin”></param>
        internal void Initialise(Cpu.Pin pin)
        {
            sensor = new AnalogIn((AnalogIn.Pin)pin);
            sensor.SetLinearScale(0, 3000);
        }

        /// <summary>
        /// Lit la valeur du capteur, le capteur divise la tension par 5 et est prévu pour un maximum de 25V
        /// </summary>
        /// <returns>Retour en Volt la tension de la batterie</returns>
        public double ReadSensorValue()
        {
            double x = (((double)sensor.Read()) / 1000 * 5) + 1;
#if DEBUG
            Debug.Print(x.ToString());
#endif
            return x;
        }

        /// <summary>
        /// Gestion de la destruction de la classe
        /// </summary>
        public void Dispose()
        {
            sensor.Dispose();
        }
    }

Le châssis du quadricoptère

Pour permettre à mon quadricoptère de voler il faut un châssis, pour ce faire j’ai fait un châssis en aluminium de 280g (merci à mon petit frère). Voici l’image ,

WP_000092 (2)

Ok il me manque encore 1 moteurs qui est en cours d’approvisionnement et mes divers capteurs qui devraient arriver samedi.

Sur ce châssis j’ai rajouté des goulotte en aluminium pour y fixer les détecteur infrarouge pour éviter à mon quadricoptère de se cogner sur des obstacles.

WP_000094 (2) 

Pour les pieds j’ai utilisé des bouchons de bouteille de vin Sourire

Prochaine étape la programmation de la manette de jeu type Freebox ou PS2.

Quadricoptere base d’une FEZ Domino

Cela fait bien longtemps que je n’ai pas fait un petit poste, pourquoi ? pour plein de raisons …

Mon nouveau projet c’est un quadricoptère à base d’une FEZ Domino. simple et compliqué à la fois. Je vous détaillerai tout au long du projet les pièces, le code.

Dans ce premier poste voyons ce que nous devons avoir pour les moteurs. Je suis parti sur des moteurs “Moteurs brushless”, pour la carte vous l’aurez compris je reste avec ma FEZ Domino qui réagit très bien.

WP_000083

J’ai rencontrés des souci car je n’avais pas commencé avec le bon matériel, donc mon poste ne concerne que le matériel que j’utilise.

Pour les moteurs il faut une alimentation pour ce faire j’ai opté pour ceci :

WP_000082

Pour contrôler les moteurs il vous faut un contrôleur (variateur) c’est pièce est indispensable sans elle, il ne vous sera pas possible de piloter votre moteur. J’ai opté pour celui-ci:

WP_000085

Maintenant le moteur, je dit le moteur car dans un premier temps je teste juste la réaction d’un moteur, dans le prochain poste j’ajouterai les 3 autres moteurs.

WP_000084_Moteur

Voici ce que ressemble le tout avec le contrôleur brancher en PWM sur la FEZ Domino.

WP_000081

Il faut retenir une chose, le Micro-Framework simplifie beaucoup le travail, mais le matériel peut rapidement compliquer la vie Sourire

Au niveau programmation merci au site  http://forum.pobot.org

Donc voici le principe de base :

Petite méthode pour mettre la puissance :

private setServo(PWM s, uint valeur)
{
    s.SetPulse(20 * 1000 * 1000, valeur * 1000);
}

et dans la méthode, par exemple, vous pouvez faire ceci :

while (true)
 {
       setServo(servo,1125); 
       Thread.Sleep(3*60*1000); // Attente de 3 min
       setServo(servo,1200);       // 
       Thread.Sleep(2*60*1000); // Attente de 2 min
 }

Le moteur que j’utilise commence à 1101 jusqu’à 2000 cela laisse une marge pour gérer la vitesse Sourire

Pour mes premiers tests j’utilise la manette FreeBox pour gérer mon moteur.

Bonne lecture Sourire

Utilisation de l’accéléromètre de la Tahoe II

Pour commencer, il faut télécharger la .dll FusionWare.SPOT.dll

Disponible ici.

Ensuite il vous faut le driver de l’accéléromètre qui est un MMA7455 , il est dans le projet BallInMaze-TahoeII-4.1 qui est disponible ici. Le driver est composé de deux fichiers :

  • MMA7455.cs
  • MMA7455.Registers.cs

Importer la .dll Fusionware et ces deux fichiers à votre projet.

Maintenant nous pouvons commencer la programmation,

Pour déclarer l’accéléromètre, il vous faut d’abord créer un un I2CBus qui est une classe contenue dans Fuionware.SPOT.

I2CBus bus = new I2CBus();

Ensuite nous pouvons déclarer l’accéléromètre

MMA7455 accelerometre = new MMA7455(bus, 0x1d);

Pour l’utilisation, il faut informer le mode d’utilisation de l’accéléromètre avec la fonction

public void SetMode( Mma7455Mode Mode, Mma7455gSelect gLevel )

Les différents modes sont :

 public enum Mma7455Mode
 {
       modeStandby        = 0,
       modeMeasurement    = 1,
       modeLevelDetection = 2,
       modePulseDetection = 3 
}

et les différents niveau de sensibilité sont :

 public enum Mma7455gSelect
 {
      g8 = 0,
      g2 = 1,
      g4 = 2
 }

Pour plus d’informations sur les modes et les niveaux de sensibilités, lisez la documentation disponible au début du blog en cliquant sur MMA7455.

Communication Xbee entre FEZ Domino et Tahoe II

Matériels utilisés :

Pour communiquer, on va utiliser la Fez pour la réception et la Tahoe pour l’envoie d’informations.

Pour tous les codes suivants, il faut importer Microsoft.SPOT.Hardware et Microsoft.SPOT.Hardware.SerialPort

Pour la réception :

  • Il faut ouvrir un port série. J’ai choisi de brancher le module Xbee sur le “COM1” donc les broche 0(IN) et 1(OUT). La vitesse de transfert sera de 9600 Baud(Nombre de bits transférés par seconde). Lors de mes recherches c’est la valeur que j’ai croisé le plus souvent.
 SerialPort Xbee =new SerialPort("COM1", 9600);

Ensuite il faut ouvrir le port pour qu’il écoute :

      Xbee.Open();

Après il faut créer un événement qui se déclenchera à chaque fois que le module Xbee recevra des informations

Xbee.DataReceived += new SerialDataReceivedEventHandler(Xbee_DataReceived);

Et pour finir mettre un timeout.infini pour que le programme reste sur l’écoute du réseau Xbee.

Exemple d’utilisation :

using System;
using System.Threading;

using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using System.IO.Ports;
using GHIElectronics.NETMF.FEZ;
using System.Text;

namespace FEZ_Domino_Application1
{      public class Program
       {
          public static int long = 0;
          public static SerialPort Xbee = null;
          public static void Main()
          {
              Xbee = new SerialPort("COM1", 9600);
              Xbee.Open();
              Xbee.DataReceived += new SerialDataReceivedEventHandler(Xbee_DataReceived);
              Thread.Sleep(Timeout.Infinite);
          }
          private static void Xbee_DataReceived(object sender, SerialDataReceivedEventArgs e)
          {
              byte[] buffin = new byte[50];
              read_count = Xbee.Read(buffin, 0, Xbee.BytesToRead);
              String message = new String(Encoding.UTF8.GetChars(buffin));
              Debug.Print(message);
          }
      }
}

Pour l’émission, il faut aussi créer un port série et l’ouvrir. Ensuite il faut créer un tableau de byte qui contiendra le message à envoyer.

Exemple :

byte[] tx_data = Encoding.UTF8.GetBytes("Message");
Xbee.Write(tx_data, 0, tx_data.Length);
Xbee.Flush();

Maintenant pour l’émission avec la Tahoe II

Il faut aussi créer et ouvrir un port série

SerialPort xbee = new SerialPort(port, baudrate);
xbee.Open();

Ensuite on peut créer une fonction envoyer()

 public static void envoyer(string message)
 {
    byte[] tx_data = Encoding.UTF8.GetBytes(message);
    xbee.Write(tx_data, 0, tx_data.Length);
    String bh = new String(Encoding.UTF8.GetChars(tx_data));
    xbee.Flush();
 }

Comme les réseaux Xbee ne sont pas sécurisés, il suffit d’envoyer le message en radio et tous les modules Xbee en écoute recevront le message.

Utilisation de la manette FreeBox

Il est possible de brancher divers matériaux sur le port USB de la carte FEZ Domino, dans ce post je vais vous montrer comment récupérer les informations de la manette de la FreeBox.

Rien de bien complexe, il faut dire que MFNET nous simplifie grandement les choses. L’image suivante vous montre la manette FreeBox, j’ai inscris des numéros, ils correspondent à ce que nous renvois la FEZ lors de l’appuys sur un bouton.

M001   M002

Dans VS 2010 veuillez créer un projet de type “FEZ Domino Application”.

image

Puis dans la méthode “MAIN” ajouter le code suivant qui permet de récupérer les évènements lors de la connexion de la manette. Attention vous devez importer deux références dll :

  • GHIElectronics.NETMF.System

  • GHIElectronics.NETMF.USBHost

Insérer le code suivant :

image

Maintenant à vous de mettre le code que vous souhaitez dans les méthodes de mouvement ou d’action sur les boutons. Dans l’exemple suivant j’augment la vitesse des moteurs lors de l’appuys sur le bouton “3” de la manette qui correspond au bouton action 2 en programmation.

image

Connexion de la manette au port USB de la carte.

M003 M004

 

Code de démo pour une manette FreeBox Code Source

Une plateforme robotique en NETMF

Tout d’abord que vous faut-il ?

Un kit robotique que vous trouverez ici pour un tarif abordable et livré rapidement.

Une carte FEZ Domino (ou FEZ Panda II) que vous pourrez trouver ici

Une carte d’extension (DC Motor Shield) que vous pouvez trouver ici

Si comme moi vous ne souhaitez pas souder sur la carte directement utilisez un Shield bornier.

 

Tout d’abord il vous faut monter le kit qui est composé de 4 moteurs.

 

En suite branchez deux par deux les moteurs sur les deux sorties de la “DC Motor Shiel” dans mon cas j’ai inversé le branchement d’un des deux coté pour me simplifier la gestion au niveau de la programmation :

011 

Ensuite j’ai connecter un ensemble de LED pour faire un effet voiture, vous auriez remarquer sur le site que nous utilisons déjà des LED pour les lumières d’une voiture.

016

Voici la liste des slots utilisés pour les lumières:

// Initialisation des lumières
Lumiere.Param_ClignotantArrierDroit = FEZ_Pin.Digital.Di13;
Lumiere.Param_ClignotantArriereGauche = FEZ_Pin.Digital.Di12;
Lumiere.Param_ClignotantAvantDroit = FEZ_Pin.Digital.Di0;
Lumiere.Param_ClignotantAvantGauche = FEZ_Pin.Digital.Di1;
Lumiere.Param_PhareArriereDroit = FEZ_Pin.Digital.Di11;
Lumiere.Param_PhareArriereGauche = FEZ_Pin.Digital.Di10;
Lumiere.Param_PhareAvantDroit = FEZ_Pin.Digital.Di9;
Lumiere.Param_PhareAvantGauche = FEZ_Pin.Digital.Di8;

En ce qui concerne l’alimentation, j’utilise le support livré avec le kit pour alimenter les moteurs via la carte “DC Motor Shied”, j’ai utiliser un vieux support de piles (4 piles) pour alimenter le FEZ Domino en les connectant sur l’entrée 5V. Cela permet de rendre le véhicule autonome.

En suite il ne vous reste plus qu’à utiliser votre IDE favori (VS 2010 ou VS 2010 Express) et de faire un petit programme pour faire rouler le tout.

Voici une petit vidéo de mon module roulant, le programme fait avancé à 50% de puissance puis tourne à droite (avec clignotant) et en suite monte à 100% de puissance pendant 3 secondes puis réduit sa vitesse pour s’arrêter. Ok je vais faire un effort pour le scotch Sourire

Kit robotique avec le MicroFramework .Net de Microsoft

 

Prochaine évolution, ajout de capteurs qui devraient arriver la semaine prochaine ceci permettra au robot d’éviter les obstacles. Par la suite, ajout d’une télécommande pour un guidage manuel et pour quoi pas l’ajout d’un bras pour y fixer une CAM Sourire.

 

Si vous avez des question laissez un commentaire!!!

 

Premier essai du FEZ-IO40

imageLa FEZ-IO40 est une carte de GHI qui permet de rajouter 40 prises numériques d’entrée/sortie à votre micro-contrôleur organisées en 5 ports de 8 prises chacun.

La page du produit chez GHI.
Le PDF de la carte.
La classe qui permet de la manipuler.

 

Le fonctionnement du IO40 est relativement simple: la carte repose sur une puce contrôleur I2C qui s’occupera de “dispatcher” les signaux que vous aurez configuré à l’aide de la classe fournit.

Câblage

Je ne vais pas m’étaler sur le fonctionnement du port I2C, mais sachez que c’est un bus de communication en série très répandu (et pas qu’en robotique) et qu’il nécessite 4 fils:

  • GND : la masse
  • +5V
  • SCL (Serial Clock) : l’horloge, pour rythmer l’envoie des données
  • SDA (Serial Data) : pour le transport des données

Lire la suite

Suivre

Get every new post delivered to your Inbox.