Détecteur d’obstacles et distance avec Ultrason


  Catégorie : Réalisation de cartes électroniques   Mise à jour le : 13/02/2013 22:00
  Ajouté par : Technologuepro   Lectures : 55511
  Commentaires : 3   [ Poster un commentaire ]   Note : 
  

 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
// distance
var distance_H : byte;
var distance_L : byte;
/// flag obstacle
var obstacle: byte;
Var distance : longint;
/// RS232
var dat : array[3] of char;              // buffer for receving/sending messages

////////////////////////////////////////////////////////////////////////////////
////////////////////////////         RS232        //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure RS232;
begin
if
 dat[0] = 'D' then
begin
dat[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;
begin
obstacle:=0;
trisb.
7:=0;
portb.
7:=0;
trisa:=
0;
sound_init(porta,
7);
UART1_Init(
9600);                   // initialize UART1 module
delay_ms(100);
porta:=
0;
CMCON:=
$07;
CCP1CON:=
$05;
CCPR1L:=
0;
CCPR1H:=
0;
TMR1L:=
0;
TMR1H:=
0;
T1CON:=
%00010100;  // division par 2   horloge interne/2
// 1 ----> 4us
INTCON:=$C0;
PIE1:=
$24;
end;
////////////////////////////////////////////////////////////////////////////////
///////////////////////////  Envoi Signal ultrason   ///////////////////////////
////////////////////////////////////////////////////////////////////////////////
procedure envoi_ultrason;
begin
T1CON.TMR1ON:=0;// desactivation timer
TMR1L:=0;
TMR1H:=
0;
CCP1CON:=
$05;
T1CON.TMR1ON:=
1;// demarrage timer
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);
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 timer
end;
////////////////////////////////////////////////////////////////////////////////
///////////////////////////        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


  

   Lectures recommandées sur ce thème :

Annuaire

Arobose -  (02/12/2013)
Kit robot Lego Mindstorms NXT -  (12/08/2013)

Tags

                                           


  Commentaires

 rachid-aitlaassri

j'ai pas bien compris ce langage de programmation est ce que il ya le programme en l*angage assembleur ??

capteur us
 E.pascal

Peut on avoir + d'explications sur le fonctionnement du programme ecrit en mikrobasci

 ouhmiz

bon jour le schéma n'est pas claire.il faut bien expliquer le rôle de chaque bloque du schéma général

*Poster un commentaire :
Uniquement les membres peuvent poster des commentaires

Haut de page

© 2017 Technologue pro, cours électricité électronique informatique · © 2007 - 2017 Technologue pro - Ressources pédagogiques pour l'enseignement technologique en Tunisie
Usage dans un cadre strictement académiqueMontages electroniques simples, pour les amateurs et pro de l'électronique, offre de montage electronique et cours en ligne gratuit: programmateurs de PIC USB, chargeur pour batteries, insoleuse 3 tubes ultra violet pour circuits imprimés et carte développement microcontrôleur PIC

Licence - Sitemap - Qui somme nous ? - confidentialité- Tunisie Index