2016-06-03 2 views
0

Schnittstelle Guten Abend Jungs!wie Ultraschallsensor hc-sr04 mit easyPic v7 Mikrocontroller

Gibt es jemanden, der eine Idee über die Schnittstelle Ultraschallsensor mit Pic-Mikrocontroller easyPic v7 mit PIC18F45K22 Chip, um Person Zähler zu haben.

ich einen nützlichen Code gefunden und ich versuchte, es zu bearbeiten, aber es ist immer noch nicht funktioniert ...

ist hier mein Code:

// Lcd module connections 
sbit LCD_RS at LATB4_bit; 
sbit LCD_EN at LATB5_bit; 
sbit LCD_D4 at LATB0_bit; 
sbit LCD_D5 at LATB1_bit; 
sbit LCD_D6 at LATB2_bit; 
sbit LCD_D7 at LATB3_bit; 

sbit LCD_RS_Direction at TRISB4_bit; 
sbit LCD_EN_Direction at TRISB5_bit; 
sbit LCD_D4_Direction at TRISB0_bit; 
sbit LCD_D5_Direction at TRISB1_bit; 
sbit LCD_D6_Direction at TRISB2_bit; 
sbit LCD_D7_Direction at TRISB3_bit; 

void main() 
{ 
    int a; 
    Lcd_Init(); 
    Lcd_Cmd(_LCD_CLEAR); 
    Lcd_Cmd(_LCD_CURSOR_OFF); 

    Lcd_Out(1,5,"ITCE444"); 
    Lcd_Out(2,3,"Term Project"); 

    Delay_ms(3000); 
    Lcd_Cmd(_LCD_CLEAR); 

    TRISA.RA0 = 0; //RB0 as Input PIN (TRG) 
    TRISA.RA4 = 0; //RB4 as Input PIN (ECHO) 

    while(1) 
    { 
    if(PORTA.RA4==1 && PORTA.RA0==1) 
    { 
     a = a + 1; 
     Lcd_Cmd(_LCD_CLEAR); 
     Lcd_Out(1,1,"Person in: "); 
     Lcd_Out(1,12,a); 
     Lcd_Out(1,15,"Person"); 
    } 
    else 
    { 
     a = a - 1; 
     Lcd_Cmd(_LCD_CLEAR); 
     Lcd_Out(1,1,"Person out: "); 
     Lcd_Out(1,13,a); 
    } 
    Delay_ms(400); 
    } 
} 

Danke und Grüße ..

+0

Jede Hilfe, bitte .... –

Antwort

0

Der Code dass du oben gepostet hast, ist 100% falsch. Here is wie der Code aussehen soll.

HC-SR04 ist ein Ultraschall Abstand Sensor. Es misst den Abstand zwischen dem Sensor und einem Hindernis. Während du definitiv die Entfernungsinformationen verwenden kannst, um einen Zähler zu machen, scheint es, als ob das etwas über deinen Fähigkeiten ist.

So drei Möglichkeiten:

  1. Erfahren pic Mikrocontrollern zu verwenden und eine Menge Timer Code zu erhalten den Abstand Lesung aus dem Sensor zu schreiben.

  2. Wechseln Sie zu Arduino und verwenden Sie seine eingebauten Bibliotheken, um die Entfernung zu erhalten.

  3. Ändern Sie Ihre Hardware. Sie benötigen keinen Ultraschallsensor (oder einen Mikrocontroller für diese Angelegenheit), um eine Person zu kontern. Ich schlage vor, Sie verwenden einfach ein Paar Infrarot-LEDs, um sich eine einfache Schaltung, die einen Impuls gibt, wenn eine Person durch sie geht.

0

Dank für Sie Herr Hassan Nadeem antworten, ich habe ein Update für den Code, und es ist fast arbeiten, wenn ich es umgesetzt.

Werfen Sie einen Blick und sagen Sie mir, was Sie denken:

// LCD module connections 
sbit LCD_RS at LATB4_bit; 
sbit LCD_EN at LATB5_bit; 
sbit LCD_D4 at LATB0_bit; 
sbit LCD_D5 at LATB1_bit; 
sbit LCD_D6 at LATB2_bit; 
sbit LCD_D7 at LATB3_bit; 
sbit LCD_RS_Direction at TRISB4_bit; 
sbit LCD_EN_Direction at TRISB5_bit; 
sbit LCD_D4_Direction at TRISB0_bit; 
sbit LCD_D5_Direction at TRISB1_bit; 
sbit LCD_D6_Direction at TRISB2_bit; 
sbit LCD_D7_Direction at TRISB3_bit; 
// End LCD module connections 

// Ultrasonic module connection 
sbit Ultrasonic at RD0_bit; 
sbit Ultrasonic_Direction at TRISD0_bit; 
// End of Ultrasonic module connections 

#define Pole_Height 200 

void main() 
{ 
    unsigned long Tm; 
    unsigned char Tl, Th; 
    unsigned int h, Person_Height,dist; 

    char Txt[7]; 

    int cont =0 ; 

    ANSELB = 0; 
    ANSELD = 0; 

    Lcd_Init(); 
    Lcd_Cmd(_LCD_CURSOR_OFF); 
    Lcd_Out(2,3,"Term Project"); 
    Lcd_Out(1,5,"ITCE444"); 
    Delay_Ms(2000);T0CON = 0x00; 

    for(;;) 
    { 
     Ultrasonic_Direction = 0; 
     TMR0H = 0; 
     TMR0L = 0; 

     Ultrasonic = 0; 
     Delay_us(3); 
     Ultrasonic = 1; 
     Delay_us(10); 
     Ultrasonic = 0; 

     while(PORTD.RD5 == 0); 
     T0CON.TMR0ON = 1; 
     while(PORTD.RD5 == 1); 
     T0CON.TMR0ON = 0; 

     Tl = TMR0L; 
     Th = TMR0H; 
     Tm = Th*256 + Tl; 
     Tm = Tm/2; 
     Tm = 34 * Tm; 
     Tm = Tm/1000; 
     h = (unsigned int)Tm; 
     Person_Height= Pole_Height - h; 

     if (Person_Height > 168 && Person_Height < 196) 
     cont = cont + 1 ; 
     else if(Person_Height > 132 && Person_Height < 160 && cont>0) 
     cont = cont - 1 ; 

     IntToStr(cont, Txt); 

     Lcd_Cmd(_LCD_CLEAR); 
     Lcd_Out(1,1, "Person in"); 
     Lcd_Out(2,1, Txt); 
     Delay_Ms(1000); 
    } 
} 
Verwandte Themen