Electronique

Drone Quadri rotor project

Le mot « drone » vient de l’Anglais drone, qui veut dire « bourdon ». Un drone est un véhicule aérien robotique capable de mener une mission d’une façon plus ou moins autonome. En d’autres termes, cet appareil peut être contrôlé du sol ou d’un autre aéronef par un utilisateur ou bien dans le cas idéal, il est parfaitement autonome pour l’exécution de sa mission.
Les deux principaux avantages du drone par rapport à un aéronef standard sont :
– La miniaturisation (voire la très grande miniaturisation) possible, permettant ainsi d’accéder à toute zone d’intervention y compris l’intérieur de bâtiment.
– L’évolution dans un environnement dangereux et inadapté aux pilotes humains.

projet drone arduino

1. Cahier des charges

La réalisation d’un drone (quadri rotor) commandé par une application Android à travers le Bluetooth.

projet drone arduino

2. Les mouvements du drone :

Pour obtenir un mouvement de tangage (Pencher vers l’avant par exemple) il faut :
         – Augmenter la vitesse du moteur arrière (Ar)         – Diminuer celle du moteur avant (Av)         – Sans modifier la vitesse des moteurs G et D

Pour obtenir un mouvement de roulis (Pencher vers la droite par exemple) il faut :
         – Augmenter la vitesse du moteur G         – Diminuer d’autant celle du moteur D         – Sans modifier la vitesse des moteurs Av/Ar 

Pour le mouvement de lacet (rotation sur lui-même ) il faut :
         – Augmenter la vitesse d’une paire de moteur.         – Diminuer d’autant celle de l’autre paire.

3. Le système d’exploitation Android :

Le système dans sa genèse, part d’une idée de base simple, et très vite son succès fut tel qu’il a su devenir indispensable pour certains constructeurs et utilisateurs, en particulier dans la sphère de la téléphonie mobile.

3.1. L’environnement Android :

       a) Android :

L’écosystème d’Android s’appuie sur deux piliers:
 Le langage Java Le SDK qui permet d’avoir un environnement de développement facilitant la tâche du développeur.
Le kit de développement donne accès à des exemples, de la documentation mais surtout à l’API de programmation du système et à un émulateur pour tester ses applications.
Stratégiquement, Google utilise la licence Apache pour Android ce qui permet la redistribution du code sous forme libre ou non et d’en faire un usage commercial. 
Le plugin « Android Development Tool » permet d’intégrer les fonctionnalités du SDK à «Eclipse ». Il faut l’installer comme un plugin classique en précisant l’URL du plugin.
Ensuite, il faut renseigner l’emplacement du SDK (préalablement téléchargé et décompressé) dans les préférences du plugin ADT.

       b) L’Operating system :

Android est en fait un système de la famille des Linux, pour une fois sans les outils GNU.
L’OS s’appuie sur:

 Un noyau Linux (et ses drivers)
 Une machine virtuelle: Dalvik Virtual Machine
 Des applications (navigateur, gestion contact, application de téléphonie…)
 Des bibliothèques (SSL, SQLite, OpenGL ES, etc…)
« Dalvik » est le nom de la machine virtuelle open-source utilisée sur les systèmes Android.
Cette machine virtuelle exécute des fichiers « .dex », plus ramassés que les .class classiques.
Ce format évite par exemple la duplication des String constantes. La machine virtuelle utilise elle-même moins d’espace mémoire et l’adressage des constantes se fait par un pointeur de 32 bits.

« Dalvik » n’est pas compatible avec une JVM du type Java SE ou même Java ME. La librairie d’accès est donc redéfinie entièrement par Google.

       c) Les éléments d’une application :

Une application Android est composée des éléments suivants:
• Des activités (android.app.Activity): il s’agit d’une partie de l’application présentant une vue à l’utilisateur des services (android.app.Service): il s’agit d’une activité tâche de fond sans vue associée
• Des fournisseurs de contenus (android.content.ContentProvider): permettent le partage d’informations au sein ou entre applications
• Des widgets (android.appwidget.*): une vue accrochée au Bureau d’Android.
• Des Intents (android.content.Intent): permettent d’envoyer un message pour un composant externe sans le nommer explicitement des récepteurs d’Intents (android.content.BroadcastReceiver): permet de déclarer être capable de répondre à des Intents.

• Des notifications (android.app.Notifications): permettent de notifier l’utilisateur de la survenue d’événements.

4. La programmation Arduino :

La programmation sur Arduino se fait dans un langage qui s’inspire à la fois du C et du C++. Le C++ intervient surtout pour la création de librairies, ce que nous verrons plus tard.
Pour l’instant, nous resterons essentiellement dans le domaine de la programmation en C.
Sachons déjà pour commencer que dans tout code, il est fondamental de glisser des commentaires qui peuvent être utiles soit lorsqu’on le reprend après un long moment, soit lorsque l’on diffuse notre code.
Les commentaires ne sont pas évalués par le compilateur, ils ne s’adressent qu’au développeur.
En C et en C++, les commentaires sur une seule lignes commencent par // et ceux placés sur plusieurs lignes sont encadrés par les signes /* et */.

4.1. Les types :

Pour programmer, nous allons utiliser plusieurs sortes de données. Par exemple, si nous voulons incrémenter un compteur, nous utiliserons une variable de type entier. Si nous voulons calculer la moyenne d’une série de données fournies par un capteur, nous aurons besoin d’un nombre réel. S’il s’agit de tester une condition, nous pourrions avoir besoin d’un simple booléen. Voici un rappel des principaux types :
Void : c’est un mot clef utilisé pour spécifier qu’il n’y a pas de variable, on le retrouve généralement dans le prototype d’une fonction pour indiquer que celle-ci ne renvoie pas de paramètre (ou qu’elle n’en prend pas).

Boolean : c’est une variable logique qui ne peut prendre que deux états : false, true. Elle sert essentiellement à tester des conditions, des états binaires.

Char : traditionnellement, le char est utilisé pour les caractères. En fait, il s’agit d’une variable codée sur un octet, qui peut donc prendre 256 valeurs (2^8) différentes. Les caractères ayant longtemps été indexés sur un table à 256 entrées, on a tendance à ne réserver l’usage du type char qu’aux seuls caractères. Mais il peut de fait être utilisé pour toute variable qui n’a pas besoin d’excéder l’intervalle [-128 ; 127].

Unsigned char : le mot clef unsigned signifie que l’on considère des valeurs positives uniquement. Ainsi, si un char permet de représenter des valeurs allant de -128 à +127, le type unsigned char utilise quant à lui l’intervalle [0, 255].
Byte : le byte est un synonyme du unsigned char, c’est-à-dire qu’il se code sur un seul octet et prend des valeurs pouvant aller de 0 à 255. Il est particulièrement adapté pour les sorties PWM.
Int : un int (pour integer) est un entier relatif codé sur deux octets, ce qui signifie qu’il possède 2^16 valeurs différentes. Il peut prendre des valeurs comprises dans l’intervalle [-32,768 ; 32,767].
Unsigned int : c’est un entier positif codé sur deux octets, prenant ses valeurs dans l’intervalle [0 ; 65,535].

Word : synonyme de unsigned int.

Long : entier relatif codé sur 4 octets, pouvant donc prendre des valeurs allant de -2,147,483,648 à 2,147,483,647.
Unsigned long : entier positif codé sur 4 octets, prenant dès lors ses valeurs dans l’intervalle [0 ; 4,294,967,295].
Float : il s’agit d’une variable de type réel, codée sur 4 octets. Sa précision n’excède pas 6 ou 7 décimales.
Double : traditionnellement, le type double offre une précision deux fois supérieure à celle du float. Dans le cas du microcontrôleur Arduino, les deux types sont synonymes : double = float.
String : le type String est le premier type complexe que nous rencontrons. Ce n’est d’ailleurs plus vraiment un type, mais un Objet, au sens de la POO(programmation object oriented). Pour faire simple dans un premier temps, considérons qu’il s’agit d’une chaîne de caractères, que l’on peut donc y stocker des mots, des phrases, … Le type String vient avec plusieurs méthodesqui permettent de traiter, comparer, manipuler, … les chaînes de caractères.
Array : ce n’est pas un type à proprement parler. Il est possible de déclarerpour chaque type un tableau de données de ce type, un tableau d’entiers par exemple pour stocker des états, ou un tableau de booléens, pour caractériser une série de données. On utilisera pour cela les crochets [ ] placés après le nom de la variable.
Ainsi, lorsque l’on souhaitera créer une variable, on commencera par spécifier son type, puis son nom, et éventuellement on lui assignera une valeur qu’il sera ensuite possible de modifier

4.2. Les fonctionnement :

Une fonction possède un nom, des paramètres d’entrée et des paramètres de sortie. On appelle prototype d’une fonction la spécification de ces trois données. Par exemple, on peut vouloir créer une fonction qui prend deux entiers en paramètre, puis renvoie leur produit. Son prototype sera : int multiplication(int, int)
Si la fonction ne renvoie aucune donnée, son type de retour sera void. Si elle ne prend aucun paramètre, on pourra soit ne rien mettre entre les parenthèses, soit écrire également void.

Si la fonction renvoie une donnée, elle devra le faire avec le mot-clef return.

Enfin, tout ce que fait la fonction doit être placé entre deux accolades.

5. Le  matériel utilisé :

5.1. Carte Arduino Uno :

carte arduino uno

5.2. Contrôleur ESC 30A – Simonk Firmware :

controleur ESC 30A

5.3. Le module Bluetooth HC-06 :

Le HC-05 a le firmware «complet» sur elle: beaucoup de commandes AT, et peut être à la fois maître et le module esclave. Le firmware HC-06 d’autre part ne peut être un esclave, avec très limitée des commandes AT. Ou en d’autres termes: Le HC-05 module peut construire une connexion à d’autres modules. Par exemple, un robot d’être un maître et la connexion à l’esclave le module bluetooth. Ou en mode esclave pour faire un pont sans fil à un ordinateur portable. Le HC-06 module ne peut être un esclave. Il est donc utile que pour dire la connexion d’un ordinateur portable comme un maître à un robot avec un module esclave par exemple pour un pont série sans fil. Pour la plupart des cas d’utilisation de la HC-06 est suffisant, car généralement je veux avoir une connexion UART sans fil pour mes périphériques de mon ordinateur portable.

bluetooth HC06

5.4. Les moteurs brusheless :

       a) Un moteur sans balais, ou <moteur brusheless> :

Un moteur sans balais, ou « moteur brushless », est une machine électrique de la catégorie des machines synchrones, dont le rotor est constitué d’un ou de plusieurs aimants permanents et pourvu d’origine d’un capteur de position rotorique (capteur à effet Hall) pour assurer l’autopilotage du moteur c’est -à-dire l’orthogonalité du flux magnétique rotorique par rapport au flux statorique. Vu de l’extérieur, il fonctionne en courant continu. Son appellation (de l’anglais Brushless) vient du fait que ce type de moteur ne contient aucun collecteur tournant et donc pas de balais. Les moteurs brushless sont largement utilisés dans l’industrie, en particulier en robotique et dans les ventilateurs assurant le refroidissement des micro-ordinateurs.

       b) Caractéristiques du moteur BLDC :

• Puissance massique élevée,

• Moins d’entretien (pas de balais),

• Pas de limitation due aux phénomènes de commutation:
       Possibilité de fonctionnement à vitesse très élevée (dizaines de krpm).       Possibilité de fonctionnement dans un environnement explosif.
• Comportement thermique meilleur (échauffement au niveau du stator).
• Moins d’inertie (le rotor ne comporte pas de collecteur).
Mais : Le coût de l’ensemble ‘Moteur, Capteur et Electronique de commande ’est relativement élevé.

       c) Constitution d’un moteur BLDC :


Vue le nombre de phases, il y a deux types :

Moteur monophasé (très utilisé dans les ventilateurs de CPU)

Moteur triphasé (applications de hautes performances)
• Rotor à aimant permanent• Stator à enroulement triphasé• 3 sondes à effet Hall (Hall-effet sensors) faisant 120° entre eux.

       d) Principe de fonctionnement :

On considère un moteur bipolaire : p=1.

       e) Logique de commande :


La logique de commande détermine la position du rotor à partir des capteurs à effet Hall.

Elle en déduit l’orientation à donner au champ magnétique du stator. Au cours de la rotation,elle commande les trois bobines pour ajuster régulièrement l’orientation du champ à la position du rotor, de façon à entraîner celui -ci dans le sens choisi et avec un couple maximal.
Afin d’avoir un couple maximale et avec un minimum d’ondulation, il faut que le rotor soit perpendiculaire au champ magnétique statorique ainsi il faut garder le rapport EI>0.

La logique de commande permet de contrôler les trois phases du moteur BLDC à travers six transistors en exploitant les sorties des capteurs à effet de Hall :

On trouve les signaux de commande suivants :

Dans notre projet la commande des moteurs sera faite par un variateur (ESC)

variateur ESC

5.5. Gyroscope de stabilité :

gyroscope de stabilité

About the author

harramhi