dimanche 9 février 2014

Détecteur d’obstacles et distance avec Ultrason

Ce montage consiste à réaliser un capteur/détecteur de distance/obstacle à ultrason à base de PIC16F628 avec une portée qui peut atteindre les 2 mètres.
Les ultrasons sont couramment employés en robotique et ce, afin d’effectuer des mesures de distance et/ou de détecter des objets quelconques en état statique ou en mouvement.
Dans le but d’assurer un cycle autonome à notre robot nous avons eu recours à cette qualité des ultrasons tel que :
  • Détection indépendante du matériau, de la couleur, de la surface et de la taille.
  • Fonctionnement en environnement poussiéreux, sale, brumeux, fortement éclairé.
  • Détection des objets brillants ou transparents.
  • Large gamme de mesure de quelques mm à plus de 5 mètres.
 

Principes de fonctionnement des ultrasons :

principe ultrason
Les capteurs ultrasons fonctionnent en mesurant le temps de retour d’une onde sonore inaudible par l’homme émise par le capteur. La vitesse du son étant à peu près stable, on en déduit la distance à l’obstacle.
 
Les ultrasons sont des ondes infra-acoustique, qui oscillent à des fréquences supérieures au seuil acoustique.
Ceci est important à plusieurs niveaux :
  • Le premier est que cette fréquence n’interfère pas avec le bruit audible produit par la majorité des corps physiques de notre environnement.
  • La deuxième est que ces fréquences sont très précises, rapides et peuvent être personnalisées.

Les capteurs fournis ont souvent la forme d’une paire car il y a deux parties essentielles :
  • L’émetteur
  • Le récepteur
ultrason
L’émetteur émet un son à une fréquence définie et le récepteur collecte le son répercuté par les obstacles. La distance aux objets est calculée par le temps mis par le son pour revenir au récepteur
- Première partie : l’émission
La fréquence du signal de l’émetteur couramment utilisé est égale à 40 KHz, sa production nécessite l’un des TIMER du microcontrôleur.
Cette fréquence n’est efficace que si l’émetteur ultrason est alimenté par une tension au moins égale à 12 V.

- Deuxième partie : la réception  
  • Le capteur transforme les variations de pression acoustique en signal électrique.
  • Ce signal électrique analogique de quelques millivolts est amplifié.
  • Le signal amplifié est mis en forme pour pouvoir être traité par microcontrôleur, le fonctionnement est signalé par un Led et un Buzzeur.
Le signal fourni par le capteur a une amplitude de l'ordre de 10 mV, celle ci diminue avec la distance.
Son exploitation au niveau du microcontrôleur nécessite une amplitude de quelques volts qui varie de 0 à 5 V donc nécessite son amplification.
Réalisation pratique
montage



Programme

////////////////////////////////////////////////////////////////////////////////
//****************** http://www.technologuepro.com  **************************//
// ISET Nabeul   --------+-------                                //
////////////////////////////////////////////////////////////////////////////////program ultrason;///Variables globales
// distancevar distance_H : byte;var distance_L : byte;/// flag obstaclevar obstacle: byte;Var distance : longint;/// RS232var dat : array[3] of char;              // buffer for receving/sending messages

////////////////////////////////////////////////////////////////////////////////
////////////////////////////         RS232        //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure RS232;begin
if dat[0] = 'D' then
begindat[0] := '=' ;
dat[1]:=distance_H;
dat[2]:=distance_L;
UART1_Write_Text(dat);end;end;////////////////////////////////////////////////////////////////////////////////
////////////////////////////     Interruption     //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure interrupt;begin
if PIR1.CCP1IF = 1 then            begin            obstacle:=1;            end;if PIR1.RCIF =1 then            begin            dat[0]:=UART1_Read();            RS232;            end;
PIR1:=0;end;////////////////////////////////////////////////////////////////////////////////
////////////////////////////   Initialisation     //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Initialisation;beginobstacle:=0;
trisb.7:=0;
portb.7:=0;
trisa:=0;
sound_init(porta,7);
UART1_Init(9600);                   // initialize UART1 moduledelay_ms(100);
porta:=0;
CMCON:=$07;
CCP1CON:=$05;
CCPR1L:=0;
CCPR1H:=0;
TMR1L:=0;
TMR1H:=0;
T1CON:=010100;  // division par 2   horloge interne/2
// 1 ----> 4usINTCON:=$C0;
PIE1:=$24;end;////////////////////////////////////////////////////////////////////////////////
///////////////////////////  Envoi Signal ultrason   ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure envoi_ultrason;beginT1CON.TMR1ON:=0;// desactivation timerTMR1L:=0;
TMR1H:=0;
CCP1CON:=$05;
T1CON.TMR1ON:=1;// demarrage timerportb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);end;////////////////////////////////////////////////////////////////////////////////
///////////////////////////    Reception echo        ///////////////////////////
////////////////////////////////////////////////////////////////////////////////Var temp : longint;procedure lecture_echo;begin     if obstacle=1 then     begin            distance_H := CCPR1H;            distance_L := CCPR1L;            porta:=$FF;            distance:= 50*distance_H;
            if distance < 100 then temp := 50;            if distance > 100 then temp := 150;            if distance > 150 then temp := 400;            if distance > 200 then temp := 600;            if distance > 300 then temp := 900;            if distance > 400 then temp := 1200;            if distance > 2000 then distance  := 2000;            sound_play(1000,15);            vdelay_ms(temp);            porta:=$00;     end;end;////////////////////////////////////////////////////////////////////////////////
///////////////////////////    enclenchement       ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Enclenchement;begin     obstacle:=0;     distance_H := 0;     distance_L := 0;     PIE1:=$24;end;////////////////////////////////////////////////////////////////////////////////
///////////////////////////    Declenchement       ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Declenchement;begin     PIE1:=$20;     T1CON.TMR1ON:=0;// desactivation timerend;////////////////////////////////////////////////////////////////////////////////
///////////////////////////        Process           ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Process;var i : byte ;begin     for i:=0 to 3 do         begin         porta.i:=1;         Enclenchement;         envoi_ultrason;         delay_ms(20);         Declenchement;         lecture_echo;         delay_ms(20);         end;     for i:=0 to 3 do         begin         porta.i:=0;         Enclenchement;         envoi_ultrason;         delay_ms(20);         Declenchement;         lecture_echo;         delay_ms(20);         end;end;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////  Programme principal   ////////////////////////////
////////////////////////////////////////////////////////////////////////////////begin  Initialisation;  while true do  begin  Process;  end;end.

Télechargement :
Schéma + Routage

Programme en mikropascal

Aucun commentaire:

Enregistrer un commentaire