top of page

Ultrasonic Range meter Module using PIC16F877A 

By Bernice Zuiya

Introduction

                       Ultrasonic Range Meter module est également l'un des module intéressant largement utilisé dans les applications électroniques. Il est utilisé pour mesurer la distance en utilisant les propriétés sonores où sa fréquence est au-dessus de la capacité de l'audition humaine, essentiellement ils fonctionnent avec des hautes fréquences. Ici, il consiste à déclencher la broche TRIG du module et ceci enverra un son inaudible et attendra pour recevoir l'écho si le son envoyé traverse un obstacle tout en voyageant, alors la distance est mesurée avec le temps fait de l'instance de temps le son Ont été envoyés à l'endroit où l'écho est reçu; Alors cela devient facile de trouver une distance précise.

WORKING :                          

 

    HC-SR04 Le module de mesure de distance ultrasonique comme expliqué dans l'introduction utilise les propriétés sonores à exécuter. Le HC-SR04 a pour des broches qui sont:

  1. VDD

  2. TRIG

  3. ECHO

  4. GND   

                 La broche VDD est connectée à une alimentation de +5 volts et GND à la terre commune respectivement alors que les deux broches restantes TRIG et ECHO sont en interface avec les broches d'entrée, de sortie du PIC microcontrôleur dans notre cas (16F877A) ces broches travaillent à TTL Niveau (0-5 volts); Voyons maintenant comment cela fonctionne en suivant les étapes ci-dessous:

  • Le microcontrôleur déclenche essentiellement la broche TRIG du module avec une durée de signal arrondie à 10 micro-secondes. Cela signifie qu'une broche du microcontrôleur connecté à la broche TRIG du module doit rester élevée (5 volts) pour une durée de 10 micro-secondes.

  • Lorsque la broche TRIG du module est déclenchée puis il commence à envoyer automatiquement la sortie ultrasonique de 40 MHz comme sortie, ici nous devons nous rappeler que cette étape il n'est pas possible d'entendre le son émis par le module, pas parce que le son est très Mais parce qu'ils ont une fréquence que l'humain ne peut pas écouter

  • La troisième étape est lorsque la rafale ultrasonore envoyée traverser un objet dans la plage de capacité du module (environ 4 mètres max), il retournera comme un écho et la broche ECHO du module sera élevé lors de la réception.

  • Si les quatre étapes ci-dessus sont terminées alors ce qui est intéressant ici est enfin de connaître le temps pris à la rafale ultrasonore en laissant le module jusqu'à quand le module reçoit un écho. Le temps calculé à l'aide du module de minuterie dans le micro-contrôleur est le plus important.

Circuit Diagram

Le schéma de circuit ci-dessous est le diagramme de base très nécessaire pour le compteur d'ultrasons à l'aide du microcontrôleur 16F877A, vous devez respecter les connexions.

  • Une résistance de valeur 4k7 ohm est connectée en série avec +5 volt et la broche de réinitialisation (1ère broche)

  • Q1 est l'oscillateur de cristal dans ce cas, il est oscillation de fréquence est de 20 MHz.

  • Alimentation: le circuit est connecté à une tension maximale égale à 5 volts

  • R3 est une résistance de courant de limitation pour protéger la LED.

  • C1 & C2 are of 22pF.

  • LCD display is used to display the output

  • HC-SR04 is the ultrasonic range meter module

Code and Comment

char txt_message[] = "Real Distance Cm";
char Warning_message[] = "- Out Of Range - ";
char txt0[7];
unsigned int i,j;
int t1;
   int Afficheur_ligne1(char Text_a_ecrire ,int Initial_position){
   //LCD_CMD(_LCD_CLEAR);
   Delay_ms(50);
   LCD_OUT(Initial_position,1,Text_a_ecrire);
   LCD_OUT(2,1,"                       ");
   }
  int Afficheur_ligne2 (char Text_a_ecrire ,int Initial_position){
  //LCD_CMD(_LCD_CLEAR);
   Delay_ms(50);
   lcd_out(1,1,txt_message);
   LCD_OUT(2,1,"Distance:" );
   LCD_OUT(2,Initial_position,Text_a_ecrire);
   }
   void main(void) {
    lcd_Init();
    LCD_CMD(_LCD_CURSOR_OFF);
    Delay_ms(50);
    TRISB.B7 = 0;
    TRISB.B6 = 1; 
    T1CON = 0X30;
       while(1)
            { 
               TMR1H = 0;  
               TMR1L = 0;   

               PORTB.F7 = 1; 
               Delay_us(10); 
               PORTB.F7 = 0;

                    while(!PORTB.F6); 
                          T1CON.F0 = 1;  
                          while(PORTB.F6);
                          T1CON.F0 = 0;
                          t1 = (TMR1L | (TMR1H<<8));  
                          t1 = t1/36.76;
                         if ( t1<=30){
                         ShortToStr(t1,txt0);
                        Afficheur_ligne2(txt0,10);
               }else{ Afficheur_ligne1(Warning_message,1);}
       Delay_ms(100);
    }
}

Vous aurez besoin d'ajouter la directive lignes pour l'affichage LCD, Ce code a été écrit à l'aide du logiciel de compilateur mikroC, vous pouvez le copier et le compiler ou le modifier aussi. 

Download the full project here

bottom of page