Forum Électro-Bidouilleur

Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
Recherche avancée  

Nouvelles:

Bienvenue au Forum de discussion Électro-Bidouilleur! Inscrivez-vous pour participer aux discussions!: 
https://forum.bidouilleur.ca/index.php?action=register Les demandes d'inscription sont révisées quotidiennement.

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - sylvainmahe

Pages: 1 ... 10 11 [12] 13 14
166
Bonjour à  vous,

Je partage avec vous ma première fabrication qui m'a aidée à  comprendre ce que je commençais tout juste à  programmer : l'unité arithmétique et logique des microcontrôleurs.

La machine à  calculer 8 bits est comme son nom ne l'indique pas, compacte et légère, vous pouvez l'emmener partout dès que vous avez un problème pour additionner des nombres de 0 à  255 dont la somme (résultat) ne dépasse pas 255 !




Pour s'en servir c'est assez simple, il suffit de comprendre et lire le binaire avec un petit peu de pratique de la logique combinatoire...

Cette machine dispose de 8 bascules (registre), qui représentent à  l'état repos 8 zéros, c'est-à -dire 1 octet de poids faible (00000000). Quand vous souhaitez additionner 2 nombres, il vous faut insérer les bits (ou billes) par le dessus, de droite à  gauche (logique de la programmation). Les bascules selon leurs états (0 ou 1) changent d'état quand un bit est inséré dans le mécanisme. Ceci est le premier nombre à  additionner avec un second.

Le second nombre s'insère dans la machine de la même manière. Le résultat du calcul étant la position finale des bascules.




Exemple :
- J'insère l'octet 00001010 dans la machine (10 en décimal).
- J'insère un nouvel octet 00000111 dans la machine (7 en décimal).
- Le registre indique en binaire 00010001, soit 17 en décimal, c'est le résultat du calcul.

Citer
Quand le résultat du calcul est supérieur à  255, la machine se trouve dans une situation de dépassement de la taille du registre. Un bit (une bille) est alors éjecté à  gauche dans la 9ème case disponible, si il existait plusieurs machines en cascade, ce bit viendrait alors changer l'état d'un 9ème transistor (bascule) d'un second registre de 8 bits.

167
Bonjour à  vous,

Oui c'est bien le MPU6050 la centrale inertielle électronique.

Le PWM a une fréquence de 800Hz.

La fréquence et les largeurs d'impulsions (entre autres paramètres) sont enregistrées dans le modèle. Lorsque le modèle communique avec la radiocommande, ces réglages apparaissent sur l'affichage dans le menu de la radiocommande et sont réglés comme ceci :
Citer
- "FRES" = 800Hz (fréquence PWM des ESC).
- "CUES" = 187μs (coupure des ESC, moteur arrêté).
- "MIEN" = 198μs (gaz minimum des ESC en vol normal).
- "MAEN" = 250μs (gaz maximum des ESC en vol normal).
- "MIEI" = 176μs (gaz minimum des ESC en vol inversé).
- "MAEI" = 125μs (gaz maximum des ESC en vol inversé).

Voir ici une vidéo du 8ème vol du prototype (il y a 4 ans). On peut y voir l'inversion du sens de rotation des moteurs en vol :
https://youtu.be/26rtRJEKDJQ

168
Une chose assez intéressante est la seule différence entre arctan et arctan2, différence vraiment très simple :

float arctan2 (const float X, const float Y)
et

const float TANGENT = Y / X;
et

if (X < 0)
{
if (Y >= 0)
{
angle += 180;
}
else
{
angle -= 180;
}
}

J'ai compris cela en lisant la page arctan et arctan2 de wikipedia. Ce même wikipedia m'a beaucoup aidé pour écrire les autres fonctions également.

la page wikipedia de arctan : https://fr.m.wikipedia.org/wiki/Arc_tangente
la page wikipedia de arctan2 : https://fr.m.wikipedia.org/wiki/Atan2


Autre fonction d'un intérêt particulier pour moi, c'est la fonction racine carrée, notamment quand le radicande est de 2.

En effet, un nombre qui multiplié par lui même donne 2 (√2), est ≈ 1,414. C'est très exactement la longueur de la diagonale d'un carré de côté 1. Plus jeune je pensais que l'univers ne savait pas ce qu'était la deuxième dimension spatiale, que c'était une propriété émergente et pas quelque chose de fondamental. Ce simple fait que des nombres entiers 1 et 2 et une multiplication puisse donner la diagonale parfaite du carré, me fait à  présent douter...

La page wikipedia de la racine carrée de 2 : https://fr.m.wikipedia.org/wiki/Racine_carr%C3%A9e_de_deux

Un livre que je ne trouve plus existe intitulé "La racine carrée de 2, une porte vers l'infini ?".

169
De nouveau bonjour à  vous,

Je souhaite apporter un complément d'information peut-être mieux rédigé pour la création d'un horizon artificiel avec la fonction arctan2 expliqué précédemment.

(arctan2 est une variante de la fonction arctan avec laquelle il est possible de le calculer aussi via quelques conditions logiques en plus).

Les variables pitch et roll représentent l'assiette, soit l'horizon artificiel. Les données des variables pitch et roll débattent sur ± 180° angulaires en MODE_AERO_**** = false, alors que les données débattent sur ± 90° angulaires en MODE_AERO_**** = true.

Ceci trouve son utilité en aéronautique : Imaginons un avion en vol inversé et en piqué avec une inclinaison de 45° angulaires par rapport au sol. Le pilote automatique reprenant les commandes afin de remettre l'aéronef à  plat, si l'axe de tangage est réglé sur ± 180° angulaires, le plus court chemin avec le vol à  plat, soit le 0° angulaire, est de rattraper l'assiette avec une action cabreur, ce qui fait parcourir seulement 135° angulaires au lieu de 225° angulaires si l'action était piqueur. Si l'avion est proche du sol, le crash est inévitable. En revanche, si l'axe de tangage est réglé sur ± 90° angulaires, une remise à  plat de l'avion ne demande de parcourir que 45° angulaires. Une fois cette action effectuée, l'avion est en vol horizontal mais toujours sur le dos (vol inversé), une action d'un demi-tour sur l'axe de roulis est moins périlleuse et permet de rétablir le vol à  plat.

Pour le maintient de l'assiette d'un tel aéronef, il est donc recommandé d'utiliser ± 90° angulaires pour l'axe de tangage, soit la variable pitch en mode aero = vrai, et ± 180° angulaires pour l'axe de roulis, soit la variable roll en mode aero = faux.

De même, un risque important existe si vous utilisez ± 90° angulaires pour l'axe de tangage et également de roulis, l'avion risque fortement dans certaines situations de se retrouver en vol inversé, et le pilote automatique n'y pourra rien, il aura fait ses corrections pour revenir à  plat !

Dans vos projets avec horizon artificiel, il est donc primordial avec ce calcul d'arc tangente d'utiliser les variables qui débattent de façon adapté à  l'application demandée, et de s'interroger sur les actions à  effectuer pour une remise à  plat dans certaines situations (surtout si c'est un aéronef, mais ça peut être important pour bien d'autres applications à  base de centrale inertielle).

170
Bonjour à  vous,

J'ai souhaité écrire cette aide au fil de l'écoute des conversations dans les laboratoires de fabrication notamment, en effet il me semble important d'apporter des éléments de compréhension et de calculs à  chacun pour les cartes Arduino UNO afin de programmer le microcontrôleur ATmega328P en restant dans les spécifications constructeur.

Cette aide peut ouvrir des portes d'entrées et de sorties de ou vers d'autres paradigmes de comment penser la machine que nous programmons. Mais ceci est une démarche qui doit être entreprise volontairement. Je ne peux que montrer un des chemins possibles.

Je pense que le mieux ici est de commencer par quelque chose de simple : lire une broche de la carte Arduino UNO reliée en interne au convertisseur analogique/numérique du microcontrôleur ATmega328P, ceci sans utiliser l'ide Arduino car il bride la compréhension du fonctionnement interne du microcontrôleur.

Cette idée m'est venue en entendant la phrase suivante :

Citer
"Je peux faire lire à  ma carte Arduino UNO un signal avec une impédance de 1MΩ en entrée du convertisseur analogique/numérique."

Vous allez voir que cette affirmation est importante, car qui prendra cette information pourra y croire et faire des montages qui ne fonctionneront pas, ou fonctionneront dans certaines conditions extrêmes et extrêmement spécifiques qui dérogent complètement à  la fiche technique du microcontrôleur considéré.

Exemple complet en langage C de lecture ADC avec l'ATmega328P :

La première chose à  prendre en considération lorsque nous souhaitons programmer le microcontrôleur d'une carte Arduino UNO, est la fiche technique de l'ATmega328P : https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

À l'aide de cette fiche technique nous pouvons écrire le programme suivant qui est complet (je vais expliquer les différentes lignes ci-après) :

#define _ADCSRA (*(volatile unsigned char *)(0x7a))
#define _ADMUX (*(volatile unsigned char *)(0x7c))
#define _ADCLH (*(volatile unsigned int *)(0x78))

void startAnalog()
{
      _ADCSRA = 0b10000101;
}

unsigned int readAnalog()
{
      _ADMUX = 0b01000000;
      _ADCSRA |= 0b01000000;

      while ((_ADCSRA & 0b01000000) != 0b00000000)
      {
      }

      return _ADCLH;
}

int main()
{
      startAnalog();

      while (true)
      {
            readAnalog();
      }

      return 0;
}

Cet exemple est minimaliste mais permet sans bibliothèque additionnelle et sans ide Arduino de faire fonctionner le convertisseur analogique/numérique du microcontrôleur connecté sur la broche PC0.

Dans le programme la première chose à  écrire se sont les directives préprocesseur qui permettent d’appeler les pointeurs des adresses de registres dont vous allez avoir besoin :

#define _ADCSRA (*(volatile unsigned char *)(0x7a))
#define _ADMUX (*(volatile unsigned char *)(0x7c))
#define _ADCLH (*(volatile unsigned int *)(0x78))

ADCSRA permet de démarrer le convertisseur analogique/numérique, de choisir le pré-diviseur d'horloge, et aussi de démarrer une conversion et de savoir si elle s'est terminée.

ADMUX permet d'indiquer le bon canal connecté à  la bonne broche que nous souhaitons lire, et d'indiquer si la référence de tension est interne ou externe.

ADCLH est la valeur numérique sur 10 bits de la tension mesurée sur le canal choisi.

La fonction principale :

int main()
{
      startAnalog();

      while (true)
      {
            readAnalog();
      }

      return 0;
}

Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d'une façon périodique, c'est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog
Nul besoin de plus dans cette fonction principale.

La fonction startAnalog est très simple, mais renseigner un octet cohérent pour ce registre ADCSRA mérite que l'on s'y attarde plus qu'un petit peu :

void startAnalog()
{
      _ADCSRA = 0b10000101;
}

Détail de l'octet 0b10000101 :

_ADCSRA = 0b10000101;
ADC activé & pré-diviseur d'horloge = 32

La fréquence du microcontrôleur est de 16MHz. La fréquence du multiplexeur du convertisseur analogique numérique est donc égale à  :

16000000Hz à· 32 = 500000Hz = 500kHz

La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.

Le calcul du temps alloué à  la charge de la capacité de 14pF à  la fréquence du multiplexeur sera de :

1000000µs ෠(16000000Hz ෠32) = 2µs

Nous allons considérer un potentiomètre de résistance 10kΩ ± 5% connecté au convertisseur analogique/numérique par la broche PC0 du microcontrôleur.

La fiche technique du microcontrôleur nous indique une largeur mémoire du convertisseur analogique/numérique sur 10 bits.

La résolution du convertisseur analogique/numérique est donc de :

(2 ^ 10) - 1 = 1023

La charge et la décharge d'un condensateur est un phénomène physique exponentiel, ceci fait appel à  la constante d'Euler qui se calcule de cette façon :

(1 + 1 ෠inf) ^ inf ≈ 2,718

La charge d'un condensateur fait appel à  la constante de temps Tau. Cette constante de temps se calcule via la multiplication de la résistance par la capacité. Nous pouvons donc multiplier la résistance maximale du potentiomètre par la capacité de la ligne du convertisseur analogique/numérique :

10500 à— 0,000000000014 = 0,000000147s = 147ns

La constante de temps Tau est donc de 147ns.

Afin d'être certain que la capacité de 14pF soit assez chargée ou assez déchargée dans le temps imparti par le multiplexage du convertisseur analogique/numérique, il nous faut calculer jusqu'à  quelle valeur nous souhaitons que cette capacité ce charge. Une bonne idée consiste à  la charger assez pour tomber supérieur ou égal à  la résolution du convertisseur analogique/numérique.

Comme indiqué le phénomène physique étant exponentiel, nous pouvons utiliser la bijection réciproque de la fonction exponentiel, soit la fonction logarithme naturel, car :

e ^ ln (x) = x

Le calcul va permettre de connaître le nombre de fois que nous devons multiplier la constante de temps Tau.

Le nombre de fois la constante de temps Tau égale à  la résolution du convertisseur analogique/numérique est donc de :

ln ((2 ^ 10) - 1) ≈ 6,93

Le temps de charge de la capacité de 14pF avec la résistance de 10k ± 5% et adc 10 bits est alors de :

10500 à— 0,000000000014 à— ln ((2 ^ 10) - 1) ≈ 1,018µs

Je rappelle la période du multiplexeur du convertisseur analogique/numérique avec pré-diviseur d'horloge de 32 qui est de :

1000000 ෠(16000000 ෠32) = 2µs

Avec donc un pré-diviseur d'horloge de 32 pour le multiplexeur du convertisseur analogique/numérique, et une impédance en entrée de 10500Ω, la capacité de 14pF aura le temps de se charger à  une valeur supérieure ou égale à  la résolution du convertisseur analogique/numérique, ce qui permet d'obtenir un fonctionnement très cohérent.

Nous pouvons également calculer la résistance maximale avec adc 10 bits et période de 2µs du multiplexeur :

(1 à· (16000000 à· 32)) à· (0,000000000014 à— ln ((2 ^ 10) -1)) ≈ 20,612kΩ

Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à  100kΩ, ceci est cohérent avec le choix du pré-diviseur d'horloge qui peut aller de 2 à  128, cela se retrouve par calcul comme précédemment :

(1 à· (16000000 à· 2)) à· (0,000000000014 à— ln ((2 ^ 10) - 1)) ≈ 1,288kΩ

(1 à· (16000000 à· 128)) à· (0,000000000014 à— ln ((2 ^ 10) - 1)) ≈ 82,451kΩ

Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, soit la formule du temps de charge de la capacité de 14pF avec une impédance en entrée de 10kΩ ± 0% :

10000 à— 0,000000000014 à— ln ((2 ^ 10) - 1) ≈ 970ns

Avec une impédance de 10kΩ en entrée la capacité met 970ns à  se charger à  une valeur égale à  la résolution du convertisseur analogique/numérique.

Autre importance, pour ce cas une fréquence de fonctionnement du microcontrôleur plus élevée n'est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :

(1 à· (8000000 à· 2)) à· (0,000000000014 à— ln ((2 ^ 10) − 1)) ≈ 2.576kΩ

(1 à· (8000000 à· 128)) à· (0,000000000014 à— ln ((2 ^ 10) − 1)) ≈ 164.902kΩ

Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera chargée davantage avec un microcontrôleur cadencé à  8MHz.


À présent vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA.
Si vous n'utilisez qu'un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d'utiliser une impédance d'entrée trop élevée par rapport à  la fréquence de multiplexage choisie, car la capacité sera chargée sur plusieurs échantillons successifs, mais la malfaçon n'en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.

La suite est plus succinct, explications de la fonction readAnalog :

_ADMUX = 0b01000000;
C'est le port PC0 relié à  l'ADC0 (convertisseur analogique/numérique canal 0) & le choix de la broche AVCC pour l'alimentation du convertisseur analogique/numérique et référence de tension avec condensateur externe via la broche AREF.

_ADCSRA |= 0b01000000;
Correspond au démarrage d'une conversion analogique/numérique.

while ((_ADCSRA & 0b01000000) != 0b00000000)
{
}

Ceci boucle tant que la conversion n'est pas terminée, le bit repasse à  0 si elle est terminée.

return _ADCLH;
C'est la valeur numérique sur 10 bits de la tension mesurée sur PC0.

Il ne manque plus qu'à  compiler le programme avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d'architecture AVR, et le téléverser dans le circuit intégré avec avrdude.

N'hésitez pas si vous avez des interrogations, des idées, contributions, suggestions à  apporter.

171

Une dernière fois, avez-vous une quelconque intelligence à  apporter à  ce sujet qui concerne les algorithmes et les mathématiques ? Merci.


Comme mentionné précédemment je ne suis pas mathématicien.

Vous n'avez pas besoin d'être mathématicien pour proposer des mathématiques, mais soit, vous n'avez rien à  proposer ici.

L'affaire est donc close, soit :
1 - Je n'ai aucune obligation de l'ISBN et autre dépôt légal dans mon pays de résidence et d'impression qui est la France, pour la diffusion de mes livres dans mon cercle local, comme déjà  indiqué à  plusieurs reprises.

Citer
JE SUIS ÉTABLI EN FRANCE ET VAIS PUBLIER OU PRODUIRE
Je vais publier ou produire un livre imprimé, une revue imprimée, un album sur CD, un jeu vidéo sur support, une gravure, une carte postale, une partition, un plan etc. :
Le dépôt à  la BnF est obligatoire dès lors que le document est mis en nombre à  la disposition d’un public (hors du cercle familial ou d’amis) à  titre onéreux ou gratuit.

Source : https://www.bnf.fr/fr/centre-d-aide/depot-legal-editeur-mode-demploi

2 - Vous écrivez n'avoir rien à  apporter à  ce sujet qui concerne les mathématiques et logiques appliquées sous forme d'algorithmes.

Merci.

172
L'affaire est donc close, soit :
1 - Je n'ai aucune obligation de l'ISBN et autre dépôt légal dans mon pays de résidence et d'impression qui est la France, pour la diffusion de mes livres dans mon cercle local, comme déjà  indiqué à  plusieurs reprises.

Oui, si votre imprimeur vit dans l'illégalité.


Je pense que je ne peux pas faire mieux qu'une copie du texte de la BNF (bibliothèque nationale de France) car vous ne comprennez pas :

Citer
Inscrit dans le Code du patrimoine, le dépôt légal est l’obligation pour tout éditeur, imprimeur, producteur, importateur, de déposer chaque document qu’il édite, imprime, produit ou importe, auprès de l’organisme habilité à  recevoir le dépôt en fonction de la nature du document. Cette obligation s’applique à  tout document diffusé en nombre à  un public s’étendant au-delà  du cercle de famille.

Donc je réitère : Tous les imprimeurs en France à  qui j'ai demandé une impression le mentionnent également, et ne sont aucunement dans l'illégalité contrairement à  ce que vous indiquez.

Ok, ce n'est plus des amis, c'est votre famille.

Une dernière fois, avez-vous une quelconque intelligence à  apporter à  ce sujet qui concerne les algorithmes et les mathématiques ? Merci.

173
L'affaire est donc close, soit :
1 - Je n'ai aucune obligation de l'ISBN et autre dépôt légal dans mon pays de résidence et d'impression qui est la France, pour la diffusion de mes livres dans mon cercle local, comme déjà  indiqué à  plusieurs reprises.

Oui, si votre imprimeur vit dans l'illégalité.

Je pense que je ne peux pas faire mieux qu'une copie du texte de la BNF (bibliothèque nationale de France) car vous ne comprennez pas :

Citer
Inscrit dans le Code du patrimoine, le dépôt légal est l’obligation pour tout éditeur, imprimeur, producteur, importateur, de déposer chaque document qu’il édite, imprime, produit ou importe, auprès de l’organisme habilité à  recevoir le dépôt en fonction de la nature du document. Cette obligation s’applique à  tout document diffusé en nombre à  un public s’étendant au-delà  du cercle de famille.

Donc je réitère : Tous les imprimeurs en France à  qui j'ai demandé une impression le mentionnent également, et ne sont aucunement dans l'illégalité contrairement à  ce que vous indiquez.

174
L'affaire est donc close, soit :
1 - Je n'ai aucune obligation de l'ISBN et autre dépôt légal dans mon pays de résidence et d'impression qui est la France, pour la diffusion de mes livres dans mon cercle local, comme déjà  indiqué à  plusieurs reprises.
2 - Vous écrivez n'avoir rien à  apporter à  ce sujet qui concerne les mathématiques et logiques appliquées sous forme d'algorithmes.

175

Mon cercle proche est français et en France donc je n'ai pas besoin d'ISBN comme indiqué, merci.


Si l'imprimeur ou l'éditeur n'est pas situé en France.

Il l'est, d'autant que je suis mon propre éditeur.

Si il est en France il est tenu au dépôt légal.


Avez vous une contribution à  apporter à  ce sujet sur le thème des mathématiques ? Merci.


Pas vraiment n'étant pas mathématicien.

Je réitère, avez-vous une contribution à  ce sujet ? Il n'est nullement besoin d'être professionnel pour proposer des choses, en l'occurrence ici des algorithmes mathématiques.

Quels algorithmes mathématiques aimeriez vous que je vous propose?

Ceux qui vous servent en électronique par exemple. Nous pourrions les partager et les commenter. Proposer des idées, etc...

176

Mon cercle proche est français et en France donc je n'ai pas besoin d'ISBN comme indiqué, merci.


Si l'imprimeur ou l'éditeur n'est pas situé en France.

Il l'est, d'autant que je suis mon propre éditeur.

Si il est en France il est tenu au dépôt légal.


Avez vous une contribution à  apporter à  ce sujet sur le thème des mathématiques ? Merci.


Pas vraiment n'étant pas mathématicien.

Je réitère que je n'ai pas l'obligation du dépôt légal :
https://www.bnf.fr/fr/quest-ce-que-le-depot-legal

Je réitère, avez-vous une contribution à  ce sujet ? Il n'est nullement besoin d'être professionnel pour proposer des choses, en l'occurrence ici des algorithmes mathématiques.

177

Mon cercle proche est français et en France donc je n'ai pas besoin d'ISBN comme indiqué, merci.


Si l'imprimeur ou l'éditeur n'est pas situé en France.

Il l'est, d'autant que je suis mon propre éditeur.

Avez vous une contribution à  apporter à  ce sujet sur le thème des mathématiques ? Merci.

178
Dans votre région vous n'êtes pas tenu de demander un ISBN pour le dépôt légal?

Bonjour à  vous, non je n'ai pas d'obligation.

Ici c'est obligatoire.

àŠtes-vous intéressé pour proposer des fonctions mathématiques et les partager ?

Je ne suis pas mathématicien.

L'ISBN n'est pas obligatoire lorsqu'on donne un livre à  notre cercle de proches (famille, amis, ...), et c'est mon cas. Il n'est donc pas obligatoire.

Qu'en aux mathématiques, il n'est pas requis d'être mathématicien de profession pour effectuer des mathématiques, proposer des fonctions, proposer des algorithmes, les partager et en discuter.

Ici il faut un dépôt légal au BAnQ et pour ce faire un ISBN est requis.

Mon cercle proche est français et en France donc je n'ai pas besoin d'ISBN comme indiqué.

Ok sujet initial : je vous propose un exemple d'application à  la fonction arctan2. Cet exemple va vous permettre de calculer le tangage et le roulis à  partir de trois accéléromètres montés en x y z.

Suivant le mode indiqué par la constante "MODE_AERO_PITCH" et "MODE_AERO_ROLL", le tangage et/ou le roulis vont pouvoir débattre soit de -90° à  +90°, soit de -180° à  +180° angulaires. Cela signifie qu'en mode aero pitch = vrai, un aéronef en vol dos en piqué à  45° (par exemple) peut se redresser avec un 45° piqueur et un 180° au roulis, ce qui peut éviter le crash.

Ci-après la conversion des accélérations x y z en tangage et roulis en degrés angulaires à  l'aide de la fonction arctan2 :
Citer
float pitch = 0;
float roll = 0;
const bool MODE_AERO_PITCH = true;
const bool MODE_AERO_ROLL = false;

while (true)
{
gyroscope.readTranslation();

if (gyroscope.tz < 0)
{
if (gyroscope.tx < 0)
{
if (MODE_AERO_PITCH == false)
{
pitch = Math::arctan2 (gyroscope.tz + gyroscope.tx, gyroscope.ty);
}
else
{
pitch = Math::arctan2 (-gyroscope.tz - gyroscope.tx, gyroscope.ty);
}
}
else
{
if (MODE_AERO_PITCH == false)
{
pitch = Math::arctan2 (gyroscope.tz - gyroscope.tx, gyroscope.ty);
}
else
{
pitch = Math::arctan2 (-gyroscope.tz + gyroscope.tx, gyroscope.ty);
}
}
}
else
{
if (gyroscope.tx < 0)
{
pitch = Math::arctan2 (gyroscope.tz - gyroscope.tx, gyroscope.ty);
}
else
{
pitch = Math::arctan2 (gyroscope.tz + gyroscope.tx, gyroscope.ty);
}
}

if (gyroscope.tz < 0)
{
if (gyroscope.ty < 0)
{
if (MODE_AERO_ROLL == false)
{
roll = -Math::arctan2 (gyroscope.tz + gyroscope.ty, gyroscope.tx);
}
else
{
roll = -Math::arctan2 (-gyroscope.tz - gyroscope.ty, gyroscope.tx);
}
}
else
{
if (MODE_AERO_ROLL == false)
{
roll = -Math::arctan2 (gyroscope.tz - gyroscope.ty, gyroscope.tx);
}
else
{
roll = -Math::arctan2 (-gyroscope.tz + gyroscope.ty, gyroscope.tx);
}
}
}
else
{
if (gyroscope.ty < 0)
{
roll = -Math::arctan2 (gyroscope.tz - gyroscope.ty, gyroscope.tx);
}
else
{
roll = -Math::arctan2 (gyroscope.tz + gyroscope.ty, gyroscope.tx);
}
}

Désolé pour l'indentation qui n'est plus présente.

Ces calculs vous permettent de créer un horizon artificiel, et donc peuvent trouver une application notamment dans la stabilisation d'un aéronef, ou d'un robot terrestre. D'autres applications sont possibles.

179
Dans votre région vous n'êtes pas tenu de demander un ISBN pour le dépôt légal?

Bonjour à  vous, non je n'ai pas d'obligation.

Ici c'est obligatoire.

àŠtes-vous intéressé pour proposer des fonctions mathématiques et les partager ?

Je ne suis pas mathématicien.

L'ISBN n'est pas obligatoire lorsqu'on donne un livre à  notre cercle de proches (famille, amis, ...), et c'est mon cas. Il n'est donc pas obligatoire.

Qu'en aux mathématiques, il n'est pas requis d'être mathématicien de profession pour effectuer des mathématiques, proposer des fonctions, proposer des algorithmes, les partager et en discuter.

180
Avez vous un fixed-gear?

Désolé mais j'ai été obligé d'effectuer une recherche google car je ne sais pas ce qu'est un "fixed-gear".

J'ai l'impression que ce serait un vélo ou une bicyclette ? J'ai effectivement un vélo Peugeot, mais sincèrement je ne comprends pas le rapport avec une définition de la bidouille.

Pages: 1 ... 10 11 [12] 13 14