Operácie

Parkovací senzor: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDVPS (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(13 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
== Parkovací senzor ==
'''Záverečný projekt'''
*Vypracovala:  
*Vypracovala:  
:::::'''Bc. Zuzana Špitálová'''
:::::'''Bc. Zuzana Špitálová'''
Riadok 9: Riadok 5:
*Ročník:            '''2. Ing.'''
*Ročník:            '''2. Ing.'''


[[Image:senzor.jpg|150px]]
'''Literatúra:'''
* Doplníme


Ako projekt som realizovala zapojenie s parkovacím senzorom. Parkovací senzor obsahuje 3 kontakty (VCC, DATA, GND). Ide o ultrazvukový typ senzora odrážajúci signál od prekážok. Napájacie napätie senzora je 12 V, keďže ide o automobilový komponent. Keďže moje zapojenie je napájané z USB zbernice (5 V), bolo potrebné napájacie napätie transformovať. Na transformáciu som použila DC-DC menič v zapojení step-up. Na zobrazovanie veličín som použila alfanumerický displej 2x16. Celý systém je ovládaný procesorom ATMEGA 8-16PU.
Ako projekt som realizovala zapojenie s parkovacím senzorom. Parkovací senzor obsahuje 3 kontakty (VCC, DATA, GND). Ide o ultrazvukový typ senzora odrážajúci signál od prekážok. Napájacie napätie senzora je 12 V, keďže ide o automobilový komponent. Keďže moje zapojenie je napájané z USB zbernice (5 V), bolo potrebné napájacie napätie transformovať. Na transformáciu som použila DC-DC menič v zapojení step-up. Na zobrazovanie veličín som použila alfanumerický displej 2x16. Celý systém je ovládaný procesorom ATMEGA 8-16PU.
Riadok 16: Riadok 18:
'''Princíp merania s parkovacím senzorom'''
'''Princíp merania s parkovacím senzorom'''


Ako som už spomenula, senzor obsahuje 3 vývody. Komunikačný pin, DATA, je spojený  pull-up odporom s VCC. Nakoľko senzor je prijímač aj vysielač, signál treba podeliť dvomi, aby sme dostali hodnotu jednej vzdialenosti. Pre spustenie merania sa dátová linka uzemni na log 0 na dobu ''300 µs''. Po tomto spúšťacom signáli senzor vyšle ultrazvukový impulz približne ''500 µs''. Dátová linka zareaguje, nakoľko sa jej hodnota zmení na log 0. Následne senzor čaká na odrazenú vlnu, čo predstavuje opätovnú zmenu dátovej linky na log 0. Na vyhodnotenie vzdialenosti stačí merať čas dvoch dobežných hrán, ktoré vznikli. Aby som dostala vzdialenosť, čas je potrebné prenásobiť konštantou šírenia sa zvuku v prostredí, ktorej hodnota je 3,45 cm / s.  
Ako som už spomenula, senzor obsahuje 3 vývody. Komunikačný pin, DATA, je spojený  pull-up odporom s VCC. Nakoľko senzor je prijímač aj vysielač, signál treba podeliť dvomi, aby sme dostali hodnotu jednej vzdialenosti. Pre spustenie merania sa dátová linka uzemni na log 0 na dobu ''300 µs''. Po tomto spúšťacom signáli senzor vyšle ultrazvukový impulz približne ''500 µs''. Dátová linka zareaguje, nakoľko sa jej hodnota zmení na log 0. Následne senzor čaká na odrazenú vlnu, čo predstavuje opätovnú zmenu dátovej linky na log 0. Na vyhodnotenie vzdialenosti stačí merať čas dvoch dobežných hrán, ktoré vznikli. Aby som dostala vzdialenosť, čas je potrebné prenásobiť konštantou šírenia sa zvuku v prostredí, ktorej hodnota je 3,45 cm / s. Nakoniec som vytvorila vzorec, do ktorého som zahrnula všetky potrebné veličiny:
 
<center>''nameraná_vzdialenosť = (čas_hrán * konštanta_šírenia_sa_zvuku_v_prostredí) / polovičná_vzdialenosť * centimeter''</center>




Riadok 22: Riadok 26:


[[Image:senzor.jpg|200px|center]]
[[Image:senzor.jpg|200px|center]]
<center>'''Obr. 1.''' Parkovací senzor</center>
<center>'''Obr. 1.''' Parkovací senzor 4H0 919 275</center>
 
 
 
 
[[Image:Schema_menic.png|500px|center]]
<center>'''Obr. 2.''' Schéma zapojenia meniča</center>
 
<center>Na prevod napätí používam DC-DC menič MC34063, ktorého hodnoty na prevod som vypočítala na [http://dics.voicecontrol.ro/tutorials/mc34063/ online kalkulačke]. Vypočítané hodnoty som nakoniec upravila podľa vyrábaných hodnôt.</center>




Riadok 28: Riadok 40:


[[Image:Schema_senzor.png|1000px|center]]
[[Image:Schema_senzor.png|1000px|center]]
<center>'''Obr. 2.''' Schéma zapojenia</center>
<center>'''Obr. 3.''' Celková schéma zapojenia</center>








Na obojsmernú komunikáciu s parkovacím senzorom som použila bipolárne tranzistory BC337, ktoré zabezpečujú prevod z úrovní 12 V a 5 V. Na displeji zobrazujem údaje o nameranej vzdialenosti a čase odrazenej vlny. Tieto údaje sú spriemerované po 20 hodnôt. Na prevod napätí používam DC-DC menič MC34063, ktorého hodnoty na prevod som vypočítala na online kalkulačke. Samozrejme výstupné napätie sa môže líšiť v závislosti od použitých súčiastok. Celé zapojenie som zrealizovala na kontaktom poli.  
Na obojsmernú komunikáciu s parkovacím senzorom som použila bipolárne tranzistory BC337, ktoré zabezpečujú prevod z úrovní 12 V a 5 V. Na displeji zobrazujem údaje o nameranej vzdialenosti a čase odrazenej vlny. Tieto údaje sú spriemerované po 20 hodnôt. Samozrejme výstupné napätie z meniča sa môže líšiť v závislosti od použitých súčiastok. Samotný senzor sa k obslužnému zariadeniu pripája pomocou svorky S1G3. Celé zapojenie som zrealizovala na kontaktom poli.  








'''Ukážka kódu z nekonečnej slučky'''
'''Zdrojový kód'''


<source lang="c">
<source lang="c">
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "lcd.h"


while(1)
#define SOUND_SPEED 3.45
 
volatile unsigned char measure;
volatile unsigned int count;
volatile unsigned int led = 0;
volatile unsigned int i = 0;
 
int main()
{
{
lcd_gotoxy(0,0); //suradnice
    DDRB |= (1 << PB1);   //nastavenie portov
    DDRB &= ~(1 << PB0);
    DDRC = 0x20;
    DDRD = 0xFF;


PORTB |= (1 << PB1); //inicializacia parkovacieho senzora
    TCCR1B |= (1 << CS11) |  (1 << ICES1);    //nastavenie citaca
    TIMSK |= (1 << TICIE1);
 
    PORTD &= ~(1 << PD0);
 
    double distance = 0;
    char tmp[32];
 
    sei();
    lcd_init(LCD_DISP_ON);    //inicializacia displeja
    lcd_clrscr();
 
    while(1)
    {
        lcd_gotoxy(0,0);    //suradnice
PORTB |= (1 << PB1);   //inicializacia parkovacieho senzora
  _delay_us(300);
  _delay_us(300);
       PORTB &= ~(1 << PB1);
       PORTB &= ~(1 << PB1);
        
        
       measure = 1; //meraj vzdialenost
       measure = 1; //meraj vzdialenost
       _delay_ms(28);
       _delay_ms(28);
if (i < 20)
if (i < 20)
{
{
distance +=  (((double)count * SOUND_SPEED) / 200);     //vypocitaj a zapis vzdialenost
    distance +=  (((double)count * SOUND_SPEED) / 200);   //vypocitaj a zapis vzdialenost
i++;
    i++;
}
else
{
    i = 0;
    distance = distance / 20;
    sprintf(tmp,"Vzdial.:%.2fcm  \nCas:%dus  ", distance, count);
    lcd_puts(tmp);
}
    }
    return 0;
}
 
ISR (TIMER1_CAPT_vect)  //prerusenie na nabeznu hranu
{
    PORTD |= (1 << PD0);
 
    if(measure)
    {
count = TCNT1;  //zapis vzdialenosti
      TCNT1 = 0;      //vynulovanie
measure++;       
   
  if(measure > 2) measure = 0;    //meranie vzdialenosti
//PORTD |= (1 << PD0);
 
if (led)
{
    led = 0;
    PORTD |= (1 << PD0);
}
}
else
else
{
{
i = 0;
    PORTD &= ~(1 << PD0);
distance = distance / 20;
    led = 1;
sprintf(tmp,"Vzdial.:%.2fcm  \nCas:%dus  ", distance, count);
lcd_puts(tmp);
}
}
    }
}
}
</source>
</source>
Riadok 73: Riadok 147:
<center>'''Tab. 1.''' Tabuľka nameraných hodnôt</center>
<center>'''Tab. 1.''' Tabuľka nameraných hodnôt</center>


[[Image:senzor_graf.png|center]]
<center>'''Obr. 4.''' Graf nameraných hodnôt presností meraní</center>




[[Image:0748.jpg|800px|center]]
[[Image:0748.jpg|800px|center]]
<center>'''Obr. 3.''' Realizácia zapojenia 1</center>
<center>'''Obr. 5.''' Realizácia zapojenia 1</center>




[[Image:0749.jpg|800px|center]]
[[Image:0749.jpg|800px|center]]
<center>'''Obr. 4.''' Realizácia zapojenia 2</center>
<center>'''Obr. 6.''' Realizácia zapojenia 2</center>





Aktuálna revízia z 14:06, 18. november 2013

  • Vypracovala:
Bc. Zuzana Špitálová
  • Študijný odbor: Aplikovaná mechatronika
  • Ročník: 2. Ing.


Literatúra:

  • Doplníme

Ako projekt som realizovala zapojenie s parkovacím senzorom. Parkovací senzor obsahuje 3 kontakty (VCC, DATA, GND). Ide o ultrazvukový typ senzora odrážajúci signál od prekážok. Napájacie napätie senzora je 12 V, keďže ide o automobilový komponent. Keďže moje zapojenie je napájané z USB zbernice (5 V), bolo potrebné napájacie napätie transformovať. Na transformáciu som použila DC-DC menič v zapojení step-up. Na zobrazovanie veličín som použila alfanumerický displej 2x16. Celý systém je ovládaný procesorom ATMEGA 8-16PU.


Princíp merania s parkovacím senzorom

Ako som už spomenula, senzor obsahuje 3 vývody. Komunikačný pin, DATA, je spojený pull-up odporom s VCC. Nakoľko senzor je prijímač aj vysielač, signál treba podeliť dvomi, aby sme dostali hodnotu jednej vzdialenosti. Pre spustenie merania sa dátová linka uzemni na log 0 na dobu 300 µs. Po tomto spúšťacom signáli senzor vyšle ultrazvukový impulz približne 500 µs. Dátová linka zareaguje, nakoľko sa jej hodnota zmení na log 0. Následne senzor čaká na odrazenú vlnu, čo predstavuje opätovnú zmenu dátovej linky na log 0. Na vyhodnotenie vzdialenosti stačí merať čas dvoch dobežných hrán, ktoré vznikli. Aby som dostala vzdialenosť, čas je potrebné prenásobiť konštantou šírenia sa zvuku v prostredí, ktorej hodnota je 3,45 cm / s. Nakoniec som vytvorila vzorec, do ktorého som zahrnula všetky potrebné veličiny:

nameraná_vzdialenosť = (čas_hrán * konštanta_šírenia_sa_zvuku_v_prostredí) / polovičná_vzdialenosť * centimeter



Obr. 1. Parkovací senzor 4H0 919 275



Obr. 2. Schéma zapojenia meniča
Na prevod napätí používam DC-DC menič MC34063, ktorého hodnoty na prevod som vypočítala na online kalkulačke. Vypočítané hodnoty som nakoniec upravila podľa vyrábaných hodnôt.



Obr. 3. Celková schéma zapojenia



Na obojsmernú komunikáciu s parkovacím senzorom som použila bipolárne tranzistory BC337, ktoré zabezpečujú prevod z úrovní 12 V a 5 V. Na displeji zobrazujem údaje o nameranej vzdialenosti a čase odrazenej vlny. Tieto údaje sú spriemerované po 20 hodnôt. Samozrejme výstupné napätie z meniča sa môže líšiť v závislosti od použitých súčiastok. Samotný senzor sa k obslužnému zariadeniu pripája pomocou svorky S1G3. Celé zapojenie som zrealizovala na kontaktom poli.



Zdrojový kód

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h> 
#include "lcd.h"

#define SOUND_SPEED 3.45

volatile unsigned char measure;
volatile unsigned int count;
volatile unsigned int led = 0;
volatile unsigned int i = 0;

int main()
{
    DDRB |= (1 << PB1);    //nastavenie portov
    DDRB &= ~(1 << PB0);
    DDRC = 0x20;
    DDRD = 0xFF;

    TCCR1B |= (1 << CS11) |  (1 << ICES1);    //nastavenie citaca
    TIMSK |= (1 << TICIE1);

    PORTD &= ~(1 << PD0);

    double distance = 0;
    char tmp[32];

    sei();
 
    lcd_init(LCD_DISP_ON);    //inicializacia displeja
    lcd_clrscr();

    while(1)
    {
        lcd_gotoxy(0,0);    //suradnice
	PORTB |= (1 << PB1);    //inicializacia parkovacieho senzora
 	_delay_us(300);
      	PORTB &= ~(1 << PB1);
      
      	measure = 1;  //meraj vzdialenost
      	_delay_ms(28);
		
	if (i < 20)
	{
	    distance +=  (((double)count * SOUND_SPEED) / 200);	   //vypocitaj a zapis vzdialenost
	    i++;
	}
	else
	{
	    i = 0;
	    distance = distance / 20;
	    sprintf(tmp,"Vzdial.:%.2fcm  \nCas:%dus  ", distance, count);
	    lcd_puts(tmp);
	}
    }
    return 0;
}

ISR (TIMER1_CAPT_vect)   //prerusenie na nabeznu hranu
{
    PORTD |= (1 << PD0);

    if(measure)
    {
	count = TCNT1;  //zapis vzdialenosti
      	TCNT1 = 0;      //vynulovanie
	measure++;         
     
  	if(measure > 2) measure = 0;    //meranie vzdialenosti
		
	//PORTD |= (1 << PD0);

	if (led)
	{
	    led = 0;
	    PORTD |= (1 << PD0);
	}
	else
	{
	    PORTD &= ~(1 << PD0);
	    led = 1;
	}
    }
}


Tab. 1. Tabuľka nameraných hodnôt


Obr. 4. Graf nameraných hodnôt presností meraní


Obr. 5. Realizácia zapojenia 1


Obr. 6. Realizácia zapojenia 2



Zhodnotenie


Namerané hodnoty sa líšia od zobrazených v dôsledku chyby pri konverzii čísel, nepresnosti súčiastok a iných vplyvov. V prípade úpravy periódy zobrazovania, by nebolo potrebné priemerovať až 20 hodnôt získaných údajov. Tento fakt som využila inverzne, čím viac priemerovaných hodnôt, tým menej blikania (menšia presnosť).