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:
Etape 2 – Assemblage :
Etape 3 – un peu de couleur (noir) :
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
- Disponible ici : http://www.zartronic.fr/module-diviseur-de-tension-25v-p-73.html
1 FEZ Domino
- Disponible ici :http://www.lextronic.fr/P20000-module-fez-domino.html
4 Moteur DM2205 KV1200
- Disponible ici : http://www.net-loisirs.com/pro-tronik-dm2205-1200kv-p1372.html
4 Controller Pro-Tronik PM 30A
2 Batteries Black Lithium 1350mAh 35C 3S (116 grs)
- Disponible ici : http://www.a2pro-online.com/accumulateurs/accumulateurs-li-po/black-lithium-1350mah-25c-3s.html
4 Télémètre infrarouge SHARP™ “GP2D120″
1 Télémètre infrarouge SHARP™ “GP2Y0A02YK”
1 Capteur d’inclinaison RPI-1031
- Disponible ici : http://www.lextronic.fr/P23459-capteur-dorientation.html
1 Module accéléromètre/gyroscope 6 axes
1 Module boussole “HMC6352″
- Disponible ici : http://www.lextronic.fr/P1772-module-boussole-hmc6352.html
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 ![]()
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 :
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 ,
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.
Pour les pieds j’ai utilisé des bouchons de bouteille de vin ![]()
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.
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 :
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:
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.
Voici ce que ressemble le tout avec le contrôleur brancher en PWM sur la FEZ Domino.
Il faut retenir une chose, le Micro-Framework simplifie beaucoup le travail, mais le matériel peut rapidement compliquer la vie ![]()
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 ![]()
Pour mes premiers tests j’utilise la manette FreeBox pour gérer mon moteur.
Bonne lecture ![]()
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 :
- FEZ Domino
- FEZ Connect Shield
- XBee Expansion de GHI (http://www.ghielectronics.com/catalog/product/158)
- Tahoe II
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.
Dans VS 2010 veuillez créer un projet de type “FEZ Domino Application”.
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 :
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.
Connexion de la manette au port USB de la carte.
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 :
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.
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 ![]()
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
.
Si vous avez des question laissez un commentaire!!!
Premier essai du FEZ-IO40
La 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




