WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La géolocalisation de réseaux capteurs (algorithme DVHOP )

( Télécharger le fichier original )
par Mohammed et Hichem MEKIDICHE et RAIS
Université Abou Bakr Belkaid à  Tlemcen Algérie - Master 2 en informatique, option: réseaux 0000
  

précédent sommaire suivant

Extinction Rebellion

Annexe1

Code source de notre application :

//Développeurs Rais Hichem & Mekidiche Mohamed

//cet algorithme traite 3 ancres (les ancres sont 0 et 1 et 2) et n noeuds tq n>=1

//lancer le shell et taper les cammandes suivantes

// cd /opt/tinyos-1.x/apps/dvhop3_n pour accéder au
répertoire qui contient notre application

//make pc pour compiler l'application

//export DBG=usr1 pour afficher notre message
//export PATH="$TOSROOT/tools/java/net/tinyos/sim:$PATH"

//TinyViz -run build/pc/main.exe 8 pour lancer la
simulation avec 8 noeuds

//cliquer sur le menu "Layout" puis "file load" et sélectionner un fichier qui prend l'extention ".mps" (c'est une topologie déja créée)

//pour un capteur qui envoie des messages seulement aux capteurs qui ont dans sa zone de couverture: cliquer sur le menu plugins et sélectionner "radio Model" puis décocher "out edges" puis cliquer sur "update"

//cocher debug messages dans le menu plugins pour visualiser les messages

includes DvhopMsg;//appler le fichier DvhopMsg.h qui contient la structure de notre message

module DVhopM {

provide interface StdControl;//interface fournie

//interface utilisée

uses {

interface Timer;

interface Leds;

interface SendMsg as envoiMsg;

interface ReceiveMsg as RecoieMsg;

}

}

implémentation

{

float premier_hop_arriver;

DVhopMsg * pemission;//pointeur sur le message emis

DVhopMsg * poi;//pointeur sur le message reçu

TOS_Msg msg;//message emis

int hop[3][2];//tableau utilisé par chaque ancre pour

stoquer les hop d'autres ancres

bool ancre_recu[3][2];//tableau des boolean chaque ancre

reçoit les hop d'autre ancres

DVhopMsg * p;//pointeur sur le message emis aprés la

réception d'un message

bool noeud_reçu_avant[3];//par exemple si un noeud reçoit un

message d'ancre 1 neud_reçu_avant[1] devient true(avant de

calculer le hopsize)

bool affiche1,v,vv,vvv,r;//variable utilser pour afficher un

message une seule fois

float tab[3][2];//tableau pour stoquer les x et les y des

ancres

float hopsize[3];//tableau pour stoquer les hopsizes

int hop_noeud[3];//tableau utiliser par les noeuds pour

stoquer les hop des ancres

float L1L2,L0L2,L0L1;//les distances entre les ancres

int i,j,k;

bool neud_recu_apres[3];//par exemple si une noeud recoi un

message d'ancre 1 neud_recu_apres[1] devient true(apres de

calculer le hopsize)

command result_t StdControl.init() {

// initialisation des noeuds

pemission =( DVhopMsg* ) msg.data;// pointer sur le

message emis qui est de type TOS_Msg sur le champs data

switch(TOS_LOCAL_ADDRESS) {

case 0 : //si l'adreese du capteur=0 (TOS_LOCAL_ADDRESS=0)

pemission->id_ancre = 0; pemission->hop =0;

pemission->x = 81.75;

pemission->y = 41;

pemission->id_node=TOS_LOCAL_ADDRESS; pemission->hopsize= 0; break;

case 1 : //si l'adreese du capteur=1

(TOS_LOCAL_ADDRESS=1)

pemission->id_ancre = 1; pemission->hop =0;

pemission->x = 16.54; pemission->y = 33.01;

pemission->id_node=TOS_LOCAL_ADDRESS; pemission->hopsize= 0;

break;

case 2 : //si l'adreese du capteur=2 (TOS_LOCAL_ADDRESS=2)

pemission->id_ancre =2;

pemission->hop =0;

pemission->x = 47.76;

pemission->y = 66.02;

pemission->id_node=TOS_LOCAL_ADDRESS;

pemission->hopsize= 0;

break;

default: pemission->id_node=TOS_LOCAL_ADDRESS;

pemission->id_ancre =100;// les autres noeuds prends la valeur 100 par exemple

pemission->hopsize= 0;

call Leds.init(); return SUCCESS;

}

}

command result_t StdControl.start() {

v=TRUE;vv=TRUE;vvv=TRUE;

//stocker les x et les y des ancres dans un tabeau tab[0][0]=81.75;

tab[0][1]=41;

tab[1][0]=16.54; tab[1][1]= 33.01;

tab[2][0]=47.76; tab[2][1]=66.02;

//le calcule des distances entres les ancres

L0L1= sqrt(pow((tab[0][0]-tab[1][0]),2)+ pow((tab[0][1]-tab[1][1]),2));

L0L2= sqrt(pow((tab[0][0]-tab[2][0]),2)+ pow((tab[0][1]-tab[2][1]),2));

L1L2= sqrt(pow((tab[1][0]-tab[2][0]),2)+ pow((tab[0][1]-tab[2][1]),2));

if(TOS_LOCAL_ADDRESS==0){

dbg(DBG_USR1, "La distance entre les ancres 0 et 1= %f\n",L0L1);

dbg(DBG_USR1, "La distance entre les ancres 0 et 2= %f\n",L0L2);

dbg(DBG_USR1, "La distance entre les ancres 1 et 2= %f\n",L1L2);

}

for(i=0;i<=2;i++) for(j=0;j<2;j++) ancre_recu[i][j]=FALSE;

for(i=0;i<=2;i++){ neud_recu_avant[i]=TRUE; neud_recu_apres[i]=FALSE;

}

affiche1=TRUE;

k=0;r=FALSE;

premier_hop_arriver=0;

call Timer.start(TIMER_REPEAT, 2000);// envoyer un

message apres chaque 2 secondes

return SUCCESS;

}

command result_t StdControl.stop() { call Timer.stop();

return SUCCESS;

}

event result_t envoiMsg.sendDone(TOS_MsgPtr sent, result_t success) {

call Leds.redOff();

return SUCCESS;

}

event result_t Timer.fired() {

atomic {

if( k<15){

k=k+1;

//dbg(DBG_USR1, "bien envoyer\n");

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

{

call Leds.yellowToggle(); }else {call Leds.redToggle(); dbg(DBG_USR1, "echec\n");

}

}

}

return SUCCESS;

}

event TOS_MsgPtr RecoieMsg.receive(TOS_MsgPtr m) {

// reception d'un message

call Leds.greenToggle();

atomic {

poi = (DVhopMsg*) m->data;// pointeur sur le message reçu

p =( DVhopMsg* ) msg.data;// pointeur sur le message emis

switch(TOS LOCAL ADDRESS) {

_

_

case 0 :

atomic{

if( (ancre_recu[0][0]==FALSE) && (poi->id_ancre==1) ){//si

l'ancre 0 reçoit un message d'ancre 1

ancre_recu[0][0]=TRUE;

hop[0][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 00=%d reçu a partir de%d

id_node=%d\n", hop[0][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[0][1]==FALSE)

&&(poi>id_ancre==2)){ //si l'ancre 0 reçoit un message
d'ancre 2

ancre_recu[0][1]=TRUE;

hop[0][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 01=%d recue a partir de%d idnode=%d\n", hop[0][1],poi->id_ancre,poi->id_node); }

if( (ancre_recu[0][0]==TRUE) &&(ancre_recu[0][1]==TRUE)&& (v==TRUE)){//si l'ancre 0 reçoit un message d'ancre 1 et 2 alors on calcule le hopsize

v=FALSE;

hopsize[0]=((L0L1+L0L2)/(hop[0][0]+hop[0][1]));

dbg(DBG_USR1, "le hopsize de L0=%f\n",hopsize[0]);

//envoyer un broadcast avec les info suivants

p->hopsize= hopsize[0];

//p->hop=0;

p->id_ancre=0;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

call Leds.redOn();

}

}

break;

case 1 :

atomic{

if( (ancre_recu[1][0]==FALSE) && (poi->id_ancre==0) ){

ancre_recu[1][0]=TRUE;

hop[1][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 10=%d recue a partir de %d

idnode=%d\n", hop[1][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[1][1]==FALSE) &&(poi->id_ancre==2)){ ancre_recu[1][1]=TRUE; hop[1][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 11=%d recue a partir de%d idode=%d\n", hop[1][1],poi->id_ancre,poi->id_node);

}

if( (ancre_recu[1][0]==TRUE) &&(ancre_recu[1][1]==TRUE)&& (vv==TRUE)){

vv=FALSE;

hopsize[1]=((L0L1+L1L2)/(hop[1][0]+hop[1][1])); dbg(DBG_USR1, "le hopsize de L1=%f\n",hopsize[1]); p->hopsize= hopsize[1];

//p->hop=0;

p->id_ancre=1;

for(i=0;i<8;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

}

break;

case 2 :

atomic{

if( (ancre_recu[2][0]==FALSE) && (poi->id_ancre==0) ){

ancre_recu[2][0]=TRUE;

hop[2][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 20=%d recue a partir de%d idnode=%d\n",

hop[2][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[2][1]==FALSE) &&(poi->id_ancre==1)){ ancre_recu[2][1]=TRUE;

hop[2][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 21=%d recue a partir de %d idnode=%d\n", hop[2][1],poi->id_ancre,poi->id_node); }

if( (ancre_recu[2][0]==TRUE) &&(ancre_recu[2][1]==TRUE)&& (vvv==TRUE)){

vvv=FALSE;

hopsize[2]=((L0L2+L1L2)/(hop[2][0]+hop[2][1])); dbg(DBG_USR1, "le hopsize de L2=%f\n",hopsize[2]); p->hopsize= hopsize[2];

// p->hop=0;

p->id_ancre=2;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn(); }

}

break;

default :

atomic{

if( poi->hopsize!=0 ){// si le hopsize est calculer

if((r==FALSE) && (poi->id_ancre<3) ){

r=TRUE;

premier_hop_arriver=poi->hopsize;

dbg(DBG_USR1, "le premier hopsize reçu = %f a partir de

noeud %d elle a id_ancre= %d\n",premier_hop_arriver,poi-

>id_node,poi->id_ancre);

}

if( (neud_recu_avant[0]==TRUE) && (poi->id_ancre==0) ){// si le message reçue a id_ancre=0 neud_recu_avant[0]=FALSE; hop_noeud[0]=poi->hop+1;

//dbg(DBG_USR1, "le hopsize reçu=%f a partir de %d et idnode=%d\n",poi->hopsize,poi->id_ancre,poi->id_node);

dbg(DBG_USR1, "le hop 30=%d recue a partir de %d et

idnode=%d\n", hop_noeud[0],poi->id_ancre,poi->id_node);

hopsize[0]=poi->hopsize;

p->hopsize= poi->hopsize;

p->id_ancre=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<8;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

else if( (neud_recu_avant[1]==TRUE) &&(poi->id_ancre==1)){ neud_recu_avant[1]=FALSE;

hop_noeud[1]=poi->hop+1;

dbg(DBG_USR1, "le hop 31=%d reçue a partir de %d et

idnode=%d\n", hop_noeud[1],poi->id_ancre,poi->id_node);

p->hopsize= poi->hopsize;

hopsize[1]=poi->hopsize;

p->id_ancre=1;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=hop_noeud[1];

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

call Leds.redOn();

}

else if( (neud_recu_avant[2]==TRUE) &&(poi->id_ancre==2)){

neud_recu_avant[2]=FALSE;

hop_noeud[2]=poi->hop+1;

//dbg(DBG_USR1, "le hopsize reçu=%f a partir de %d et

idnode=%d\n",poi->hopsize,poi->id_ancre,poi->id_node);

dbg(DBG_USR1, "le hop 32=%d recue a partir de %d et

idnode=%d\n", hop_noeud[2],poi->id_ancre,poi->id_node);

hopsize[2]=poi->hopsize; p->hopsize= poi->hopsize; p->id_ancre=2; p->hop=hop_noeud[2]; p->id_node=TOS_LOCAL_ADDRESS;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

if(affiche1==TRUE && neud_recu_avant[0]==FALSE && neud_recu_avant[1]==FALSE && neud_recu_avant[2]==FALSE ){//si on a reçoit les hop de tous les ancres

affiche1=FALSE;//variable pour afficher le min une seule fois dbg(DBG_USR1, "la distance entre %d et ancre 0 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[0]); dbg(DBG_USR1, "la distance entre %d et ancre 1 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[1]); dbg(DBG_USR1, "la distance entre %d et ancre 2 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[2]); }

}

else if (poi->hopsize==0) {//le hopesize n'est pas encore

calculer

if(poi->id_ancre<3) {

if((poi->id_ancre==0)&&(neud_recu_apres[0]==FALSE)){

neud_recu_apres[0]=TRUE;

p->hopsize=0;

p->id_ancre=poi->id_ancre;

p->hop=poi->hop+1;

p->id_node=TOS_LOCAL_ADDRESS;

for(i=0;i<12;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg);

}

else if((poi>id_ancre==1)&&(neud_recu_apres[1]==FALSE)){

neud_recu_apres[1]=TRUE;

p->id_ancre=poi->id_ancre;

p->hopsize=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<8;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg); }

else if((poi>id_ancre==2)&&(neud_recu_apres[2]==FALSE)){ neud_recu_apres[2]=TRUE;

p->id_ancre=poi->id_ancre;

p->hopsize=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<12;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg);

}

}

}

}

break;

}

}

return m;

}

}

précédent sommaire suivant






Extinction Rebellion





Changeons ce systeme injuste, Soyez votre propre syndic





"Des chercheurs qui cherchent on en trouve, des chercheurs qui trouvent, on en cherche !"   Charles de Gaulle