Archive pour le ‘3- Development’ catégorie

7- Le voilier

5 janvier 2011

Post to Twitter

A) Introduction

Le voilier utilisé pour ce projet appartient à la famille des classes M ( Marblehead) monocoque de 1.30m. Plus d’informations sur la Classe M

B) Fabrication du bulbe en plomb

Le moule femelle a été réalisé en plâtre puis le moule mâle en bois. La fabrication du moule a fortement été inspiré du site voiletech.


C) La Quille et le safran


D) L’accastillage


Hauban Inox gainé Ø 0,7 mm Résistance : 27 Kg Longueur (14,70 €)

Mât profilé de 16 mm En Alu Anodisé Naturel Longueur : 2,25 m (40,50€)

Vit de Mulet à rotule (bôme de 16 mm) (9.65€)

Barre de flèche (9.35€)

Cadène

Ferrures Universelles (L 23 mm)

Pied de Mât

6- L’Energie

3 janvier 2011

Post to Twitter

A)Introduction


B) La Batterie

C) Le panneau solaire

Dimensions : 180x220mm
Type : Monocrystalline high efficiency cells at 15-15.2%.
Production théorique : 5.2W

LM317

D) La répartition de la consommation

Le schéma ci-dessous représente la répartition de la consommation entre les différents composants de mon projet. Les deux servomoteurs sont les plus gros consommateurs d’énergies, ils peuvent consommer jusqu’à 60% de l’énergie. Le premier servomoteur permet de manœuvrer la voile puis le deuxième de diriger le gouvernail. Il est donc important de diminuer au maximum leurs utilisations pour augmenter l’autonomie. Ensuite le deuxième facteur de consommation c’est la liaison radio avec 17%.

Avec une batterie 3000mA 3S la durée théorique d’autonomie de la batterie avant la décharge est d’après mes calculs d’environ 8 heures. Avec un panneau solaire 200mA/5v l’autonomie passe environ à 10 heures.

5 – Tilt Compensation Azimuth ? with Pitch Ø et le Roll ?

19 septembre 2010

Post to Twitter

A) Introduction

Il est nécessaire pour mon voilier de calculer son Azimuth ? ou cap. Selon Wikipedia, le cap d’un mobile est la direction vers laquelle il est orienté (ou dans le cas d’un navire, la direction où pointe son étrave). C’est l’angle exprimé en degrés (de 0 à 360°), dans le sens des aiguilles d’une montre, entre sa ligne de foi (son axe longitudinal) et le nord.Cet angle se mesure à l’aide d’une boussole, d’un compas magnétique ou gyroscopique.

Les composants que j’ai choisie pour calculer mon Azimuth :

La boussole magnétique HMC5843 est un magnétomètre trois axes. Il permet d’identifier l’angle de rotation par rapport au nord magnétique de la Terre avec une résolution de 7 milli-gauss.

L’accéléromètre AXL335 délivres des tensions proportionnelles aux accélérations avec une sensibilité :+/- 3 g.

B) Calculer l’Azimuth ? sans aucune compensation :

\psi = (180 *(\frac{atan2(-1 * YMagneto, XMagneto)}{pi}))+180;

Avec cette équation, les valeurs ne sont correctes que si le HMC5843 est à plat.

ps : Attention sous Excel, il faut inverser les valeurs pour atan2, ça peut vous faire gagner du temps….

Vous pouvez télécharger un exemple de programme fournit ci-dessous qui montre comment lire les HMC5843 sur un microcontrôleur ATMEGA328
Download : ici

C) Les angles Pitch Ø et le Roll ? pour un accéléromètre deux axes ou trois axes :

Grâce à l’accéléromètre ADXL335 , il est possible de calculer le Pitch Ø et le Roll ? pour corriger notre azimuth ?. Voici un schéma pour visualiser les angles du bateau.


Pour un accéléromètre deux axes voici l’équation :

\theta=\arcsin(Xaccel)*\frac{180}{pi}

\phi= \arcsin(Yaccel)*\frac{180}{pi}

Pour un accéléromètre trois axes comme le HMC5843 voici l’équation :

\theta= \dfrac {atan(-Xaccel)} {\sqrt(Yaccel^2+Zaccell^2))}*\frac{180}{pi}

\phi= \dfrac {atan(Yaccel)}{\sqrt(Xaccel^2+Zaccel^2))}*\frac{180}{pi}

D) Azimuth ? tilt compensation :

Le HMC5843 donne des valeurs correctes s’il est à plat. Donc, chaque fois que mon bateau va être incliné l’angle de rotation par rapport au nord magnétique donné par le compas ne sera plus correct. Il est possible de compenser cette erreur (Tilt compensation) en utilisant les valeurs du compas et d’un accéléromètre.

C’est compensation est aussi possible pour les compas deux axes avec l’algorithme de Seong Yun Cho et Chan Gook Park qui permet grâce au Dip Angle de faire une estimation du troisième axe . Vous pouvez télécharger ci-dessous leurs travaux :
Download : TiltCompensation.pdf

Pour un magnétomètre deux axes vous devez calculer le dip angle pour faire une approximation du troisième axe Z.

Pour le calculer :

\delta = \dfrac{1}{tan(2*tan(Latitude)}

ex:  \delta = \dfrac{1}{tan(2*tan(48.86213)} ) = 25.0112° ou 48.86213° coïncide avec ma latitude.

Pour les compas deux axes, il est nécessaire de faire une approximation du troisième axe Z grâce à la valeur du DIP angle

Zmagneto = \dfrac {sin(\theta)+Xmc*sin(\theta)-Ymc*cos(\theta)*sin(\phi)} {cos(\phi)*cos(\theta) }

Cependant, pour avoir des valeurs plus précises, il vaut mieux utiliser un compas trois axes comme le HMC5843.

Pour calculer l’azimut avec compensation :

Vecteur horizontal : xh = x*cos(\theta)+y*sin(\phi)-z*cos(\theta)*sin(\theta);

Vecteur verticale : yh= y*cos(\phi)+z*sin(\phi);

Heading : \psi= arctan(-yh/xh)

FoxBoard G20 :

?????Il faut prendre un soin tout particulier avec la fox Board G20 pour utiliser ce composant car elle génère un champ électromagnétique puissant qui perturbe le compas dans un rayon d’environ 3 cm. J’ai aussi constaté le même phénomène pour mon GPS. Il est donc prudent d’isoler les composants sensibles ou de les éloigner.Cette boussole a une interface IC2 qui permet d’interroger ses registres.

Un peu de vocabulaire :

Azimuth = angle de rotation par rapport au nord magnétique

Le gauss (symbole G) est l’unité CGS « électromagnétique » à trois dimensions d’induction magnétique. Il est défini comme étant 1 maxwell par centimètre carré (Mx/cm²).

Liens :

http://fr.wikipedia.org/wiki/Cap_%28navigation%29

4- Radio Communication Xbee

15 septembre 2010

Post to Twitter

A) Introduction

La liaison radio permet de communiquer avec mon bateau depuis une station ( Ordinateur portable, Téléphone Anrdoid,…). Cette liaison me permet de suivre les états du système ( Coordonnées GPS, Inclinaison du bateau, Énergie restantes des batteries,…) mais aussi pour pouvoir donner des instructions.

B) L’implémentation

Les liaisons radios des modules Xbee Pro permettent de communiquer via seulement un seul lien physique le port série. Le port série un est fichier spécial « /dev/ttySX » sur lequel les processus léger décrits en dessous utilisent les primitives read et write pour communiquer.

Pour mon projet, j’ai besoin de pouvoir envoyer et recevoir des données de plusieurs processus en même temps. C’est pourquoi, j’ai besoin de (de)multiplexer des connexions virtuelles entre la station et les différents processus du bateaux.

Voici le protocole que j’ai utilisés, sur le port série je sérialise un message qui contient la structure suivante :

struct {
unsigned char id_fifo
unsigned char nb_byte;
char data[XBEE_SIZE_MSG];
} XbeeMsg;

Sur la station et sur le bateau, deux processus léger sont en charges de la réception des données (RX: démultiplexage) et d’envoyer les messages (TX:multiplexage).

Multiplexage : Le multiplexage consiste grâce à la primitive select qui attend des changements d’état sur l’ensemble des descripteurs des FIFOs définit dans l’ensemble grâce à la primitive FD_SET(int fd, fd_set *set); . Si un changement d’état est détecté via FD_ISSET, la tâche du processus léger multiplexage consiste a écrire sur le port série.

Démultiplexage : Le démultiplexage consiste à lire sur le port série puis à de de-sérialiser la structure. Ensuite, il faut regarder le Byte id_fifo qui permet d’indiquer dans qu’elle FIFO il faut écrire. Ci-dessous un schéma récapitulatif :

C) Schéma de l’architecture

D) Extrait du code source :

void *xbee_demultiplexer()
{

int n,i,size;
XbeeMsg *msgbuf;
static XbeeMsg msg;

unsigned char buffer[sizeof(msg)]

MYLOGMSG(LOG4C_PRIORITY_DEBUG, "Starting of Demultiplexer");

FOREACHTUBE( i ){
if (( xbee.fd_in [ i ] = open ( xbee.nomtube_in [ i ] , O_RDWR | O_NONBLOCK )) == -1)
{
mylog_log(MYLOG_CATEGORY_NAME,LOG4C_PRIORITY_ERROR,"Demultiplexer failure of openning fifo %s ",xbee.nomtube_in[ i ] );
/* TODO */
exit(ERROR_MKFIFO_OPEN);
}

while(1)
{

if(read_xbee((char*)xbee_msg) != OK)
{
mylog_log(MYLOG_CATEGORY_NAME,LOG4C_PRIORITY_ERROR,"Failure demultiplexer read xbee");

}
else{

if(sscanf((char*)xbee_msg,"$ %s\r\n",buffer) == 1)
{

msgbuf = (XbeeMsg *)&buffer;
msg = *msgbuf;

/* ouverture du tube nommée */
n=open(xbee.nomtube_in[msg.id-1],O_WRONLY);
if(n < 0)
{
mylog_log(MYLOG_CATEGORY_NAME,LOG4C_PRIORITY_ERROR,"demultiplexer failure of openning fifo %s ",xbee.nomtube_in[ i ] );

}else
{
size = write(n ,&msg , sizeof(msg));
if(size != (int)sizeof(msg))
{
mylog_log(MYLOG_CATEGORY_NAME,LOG4C_PRIORITY_ERROR,"demultiplexer message corrupted");

}else
{

/* on libère un jeton pour read_fifo */
V_XBEE(msg.id-1);

}

}
close(n);
mylog_log(MYLOG_CATEGORY_NAME,LOG4C_PRIORITY_DEBUG,"DEMULTIPLEXER ID :%d  FIFO : %s  DATA %s ",msg.id,xbee.nomtube_in[msg.id-1]);
}else
{
/* MSG FROM LINUX SYSTEM */
if((int)strlen((char*)xbee_msg) > 2){
mylog_log("core",LOG4C_PRIORITY_DEBUG,"OS message : %s",xbee_msg);

}
}
}
usleep(100);
}
}

MYLOGMSG(LOG4C_PRIORITY_DEBUG, "Sucessfuly close DEMULTIPLEXER");
return 0;

}

Twitter links powered by Tweet This v1.8.1, a WordPress plugin for Twitter.