programine įranga grindžiamų APLINKOS šviesos aptikimo

F

fantabulous68

Guest
/ * kuriančio 40KHz mažas ciklas impulsus, kurie bus vairuoti infraraudonųjų spindulių siųstuvas.Kai objektas
Infront infraraudonųjų spindulių siųstuvas tada Demultiplexers bus nustatyti objekto ir diodas švyti.

noriu, kad projektas būtų apsaugota nuo aplinkos apšvietimo, pavyzdžiui, stalo lempa.
1) Kai aš valymo šviesos siųstuvas Noriu lėmė būti išjungti.
2) jeigu nėra objekto Infront dėl siųstuvo Noriu lėmė būti išjungti.
3) kai yra objektas Infront dėl siųstuvo Norėčiau buvo pašvaistė.

Aš Programavo PIC16F690 ir įdėti jį į mano grandinė.Tai kas atsitiks:
1) LED indikatorius impulsams nuolat, kai nėra prieš tai daiktas.
2) kai daiktas Infront siųstuvo sustos žėrintis
3) kai valymo šviesos impulsų siųstuvo indikatorius labai greitaiaparatūros jungtys:
LED sujungta su RC3
produkcijos imtuvas prijungtas prie RC2
mikro generuoja impulsus ne RA2

Here is my code:

*

# include <pic.h>
# include "pic.h"
# include "math.h"
# include <stdio.h>
# include <stdlib.h>
# include "delay.h"

void Transmit40 (void);

bit ir1, IR2; / 2 skirtingus rezultatus jutiklio metu On & Off pulsas
unsigned char ir / / parduotuvės galutinis rezultatastuščia Transmit40 (tuščia)
(int t = 0;
int cnt = 0;

while (CNT <20) / / tx 10 IR impulsų / Burst
(If (t == 0)
(
PORTA = 0x04 ^ PORTA; / / Siųsti IR, įjungia RA2
DelayUs (5);
ir1 = RC2; / / IR bit1 = RC2
cnt ;
t = 1;

)
else if (t == 1)
(

PORTA = 0x04 ^ PORTA; / / stop IR, įjungia RA2, RA2 yra šaltinis mažai ciklas impulsų
DelayUs (20);
IR2 = RC2 / / O / P IR bit2 = O / P PIN imtuvo IC
cnt ;
T = 0;
)if ((ir1 == 1) & (IR2 == 0)) / / Kliūčių aptikta
(
ir = 1;
)kitas
(
IR = 0; / / kaip matyti priešais jutiklis
)RC3 = Ir; / / LED sujungta su RC3, LED indikatorius rodo, nustatymo

)
)

void main (void)
(
Ansel = 0 / / Set įėjimai į skaitmeninį
TRISC = 0x04; / / priėmimo PIN RC2 įvedimo.produkcijos detektorius IC prijungtas prie RC2
while (1)

Transmit40 ();

)/ *
aparatinė dalis mano grandinė veikia.Aš iš pradžių naudojamas 555timer generuoti impulsus ir aparatūros dirbo.
visus im doin dabar naudoja mikrovaldiklį generuoti impulsus, o ne 555timer.Taigi problema yra ta, kad programinės įrangos.

prašome padėti man ištaisyti savo kodą.Būtent dėl projekto Im Beginner su pic * /

 
Nesuprantu apšvietimui taškas.Taip panaikinamos visos nuotolinio valdymo imtuvas mikroschemos dizainas.

 
fantabulous68 rašė:

/ * kuriančio 40KHz mažas ciklas impulsus, kurie bus vairuoti infraraudonųjų spindulių siųstuvas.
Kai objektas

Infront infraraudonųjų spindulių siųstuvas tada Demultiplexers bus nustatyti objekto ir diodas švyti.noriu, kad projektas būtų apsaugota nuo aplinkos apšvietimo, pavyzdžiui, stalo lempa.

1) Kai aš valymo šviesos siųstuvas Noriu lėmė būti išjungti.

2) jeigu nėra objekto Infront dėl siųstuvo Noriu lėmė būti išjungti.

3) kai yra objektas Infront dėl siųstuvo Norėčiau buvo pašvaistė.Aš Programavo PIC16F690 ir įdėti jį į mano grandinė.
Tai kas atsitiks:

1) LED indikatorius impulsams nuolat, kai nėra prieš tai daiktas.

2) kai daiktas Infront siųstuvo sustos žėrintis

3) kai valymo šviesos impulsų siųstuvo indikatorius labai greitaiaparatūros jungtys:

LED sujungta su RC3

produkcijos imtuvas prijungtas prie RC2

mikro generuoja impulsus ne RA2Here is my code:*# include <pic.h>

# include "pic.h"

# include "math.h"

# include <stdio.h>

# include <stdlib.h>

# include "delay.h"void Transmit40 (void);bit ir1, IR2; / 2 skirtingus rezultatus jutiklio metu On & Off pulsas

unsigned char ir / / parduotuvės galutinis rezultatastuščia Transmit40 (tuščia)

(int t = 0;

int cnt = 0;while (CNT <20) / / tx 10 IR impulsų / Burst

(If (t == 0)

(

PORTA = 0x04 ^ PORTA; / / Siųsti IR, įjungia RA2

DelayUs (5);

ir1 = RC2; / / IR bit1 = RC2

cnt ;

t = 1;)

else if (t == 1)

(PORTA = 0x04 ^ PORTA; / / stop IR, įjungia RA2, RA2 yra šaltinis mažai ciklas impulsų

DelayUs (20);

IR2 = RC2 / / O / P IR bit2 = O / P PIN imtuvo IC

cnt ;

T = 0;

)if ((ir1 == 1) & (IR2 == 0)) / / Kliūčių aptikta

(

ir = 1;

)kitas

(

IR = 0; / / kaip matyti priešais jutiklis

)RC3 = Ir; / / LED sujungta su RC3, LED indikatorius rodo, nustatymo)

)void main (void)

(

Ansel = 0 / / Set įėjimai į skaitmeninį

TRISC = 0x04; / / priėmimo PIN RC2 įvedimo.
produkcijos detektorius IC prijungtas prie RC2

while (1)Transmit40 ();)/ *

aparatinė dalis mano grandinė veikia.
Aš iš pradžių naudojamas 555timer generuoti impulsus ir aparatūros dirbo.

visus im doin dabar naudoja mikrovaldiklį generuoti impulsus, o ne 555timer.
Taigi problema yra ta, kad programinės įrangos.prašome padėti man ištaisyti savo kodą.
Būtent dėl projekto Im Beginner su pic * /
 
Kokios IR jutiklis naudojate?Dauguma nuotolinio valdymo rūšys, pastatytas filtravimas maždaug 38KHz konkrečiai išskirti aplinkos apšvietimo efektų.Į kodą, galite perjungti IR LED yra du skirtingi greičiai, iš jų bent vienas neturi kirsti normalus IR jutiklio bloke.

Nežinant clock speed naudojate neįmanoma įvertinti mokymo greitis ir tai bus didelė dalis iš ciklo metu.Gali būti, tavo šviesos impulsų yra tiesiog neteisinga ilgio arba neatitinka pakankamai.

Geresnis metodas yra naudoti laikmatį IPS užsiregistruoti generuoti pertraukia fiksuota palūkanų norma, o ne naudojant programinę įrangą, linijos.

Priklausomai nuo prietaiso jūs naudojate lėtą PWM signalas taip pat gali būti alternatyva.Galima palaikyti nuolatinį impulsų dažnis, tačiau pakeisti jo ilgio koreguojant ženklas / vieta santykis.

Brian.

 
im, naudojant TSOP48,produkcija yra aktyvus žemas, skaitmeninis išėjimas

Skelbimas po 1 minučių:Ką vaikinai manote apie tai apskaičiuoti atstumą metodas?
Bet koks paprastesnis būdas? Im naudojant laikmatį nustatant intervalą tarp kurių perdavimas ir gautus signalus

Kodas////////////////////// APSKAIČIAVIMAS NUOTOLINIS ///////////////////////tuščia enable_interrupt (tuščia)

/ / Ši funkcija iš esmės yra skirtos nustatyti specialias bitų laikmatį ir surinkimo registrai

(

CCP1CON = 0x05; / / bitai 3-0 iš surinkimo kontrolė registre yra nustatyta, kad 0101.

/ / Šis būdas yra fiksuoti kas auga kraštas impulso metu

/ / perduodamas ir tada gavo

TMR1IF = 0; / / pertraukti vėliava tiek PIR1 registras yra išvalytas iki

/ / leidžiančios nutraukti.

CCP1IF = 0; / / prieš surinkimą daroma, prašymą Pertraukties vėliava bit

/ / CCP1IF iš PIR1 registras yra išvalytas.

CCP1IE = 1; / / surinkimo Pertraukties bitų yra nustatyta, kad nutraukia

TMR1IE = 1;/ / Pertraukti įvyks iškart su sąlyga, kad GIE ir PEIE bitai INTCON

/ / registruotis yra nustatyti.

PEIE = 1;

GIE = 1;

)tuščia nutraukti ISR (tuščia)

(

if (TMR1IF) / / jei yra perteklius

(

TMR1IF = 0; / / ir vėliava tada pašalinta

TMR1_OF ;

)if (CCP1IF) / / jei yra užfiksuoti

(

CCP1IF = 0; / / Zero Capture vėliava

if (Cap_1st) / / galima tik 1 surinkimas turi būti imtasi

(

Cap_1st = 0; / / Cap_1st išvalytas tarsi kitoje vertė yra užfiksuotas prieš Ankstesnis vertė skaityti

/ / tada

t_capL = CCPR1L / / sumažinti baitas surinkimo registras

t_capH = CCPR1H / / aukštojo baitas surinkimo registras

capture_status = 1; / / signalas, kad užfiksuoti įvyko įjungtas.

)

)

)tuščia calc_distance (tuščia)

(

ilgai Sample = 0;

i = 1, j = 0;Cap_1st = 1;

capture_status = 0; / / signalas, kad užfiksuoti įvyko išjungta

TMR1ON = 0; / / sustabdyti laikmatį

/ / TH = TMR1H; tL = TMR1L;

tH = 0; tL = 0; t_capL = 0; t_capH = 0; / / initialise surinkimas

TMR1_OF = 0;Transmit40khz ();

DelayUs (100);enable_interrupt (); / / Interrupt įjungta fiksuoti tada, kai kyla kraštas atsiranda

TMR1ON = 1; / / start timer 1/ / Kai laikmatis prasideda 1, enable_interrupt funkcija bus atidaroma

/ / surinkimo iš 40kHz signalo laiko, kai pirmą auga krašto perdavė

/ / impulso kyla/ / Nepertraukiamu ciklu vykdoma tokia, kad kai signalas, kad surinkimo įvyko

/ / Yra 0, tada 40 kHz, jei tai bus perduodama ir priimama, kai siunčiant 10 impulsų.

/ / Kai ši sąlyga yra įvykdyta, pasaulio Pertraukties bitų bus pašalinta su

/ / neleisti nutraukti atsirasti, kai pertraukos tęsiamas.

/ / Laikmatis tada sustojo išjungti TMR1ON ir TMR1IE.while ((capture_status == 0) & & (TMR1_OF <1));

GIE = 0 / / disable pasaulio pertraukti

TMR1ON = 0; / / sustabdyti laikmatį 1

TMR1IE = 0; / / išjungimo laikmatis 1 pertraukia perkrautas / // / Dar viena sąlyga, kad jei kyla toks ženklas nurodo, kad surinkimo įvyko

/ / Tada įjungta, tada mėginį metu yra apskaičiuojamas ir saugomi matricoje.
Pavyzdys

/ / Laikas skaičiuojamas nuo per didelio baitas surinkimo laiko ir didelio skirtumo

/ / Baitų Timer1 papildomas mažai baitas surinkimo laiką ir mažos baitas Timer1.

/ / Indeksas didėja.
Tai tada, nustato, kad funkcija pabaigos gauti pavyzdžių.

/ / Vis dėlto, jei indeksas yra mažesnis nei 20, tai funkcija bus toliau.if (capture_status == 1)

(

Pavyzdžio = ((t_capH) * 0x100) (t_capL);

i = 2;

GIE = 0; / / Global nutraukti yra išjungta, kad būtų išvengta kito nutraukia nuo paaiškėję tuo metu,

/ / Pertraukti vyksta

t_capH = 0;

t_capL = 0;)if (i == 1)

atstumas = 0;/ / jei ir tik tada fiksuoti daroma bus atstumo skaičiavimas procesą toliau.

if (i == 2)

(

time = mėginio * 1e-6; / / nes kiekvienas įsigijęs mano 1us užbaigti, jei ši vertė yra dauginama

/ / to mėginio metu./ / Atstumas skaičiuojamas dauginant per laiką ir atstumą šviesos Kelionės

/ / šviesos Kelionės 300m 1 us.This rezultatas padalijamas iš 2/ / greičio Kelionės kartus matuojant atstumą.atstumas = (time * 30000) / 2;/ / liquidLEVEL = heightOFtank atstumo jiems vis dar dirba šioje dalyje

)

return;

)

//////////////////// END APSKAIČIAVIMAS NUOTOLINIS //////////////////////
 
My gut feeling tai niekada dirbti.

TSOP apima praeinamumo filtru, kuris vienintelis bus atidėti signalą daugiau nei kartą, kai yra matuojama, pridėkite už> 10 ciklų reikia, kad išėjimo signalas kaitos, ir manau, kad jums jau bus netikslūs, ji nepaprastai matavimo nieko.

Dabar pažiūrėkite į savo laiko matavimas.PIC laikrodžiai bent 4MHz su vidaus laikmatis prieaugį 1uS, tai prilygsta 300m savaime.Tai yra 600 kartų daugiau nei atstumas ilgiausias atstumas norite priemonė.Jūs nebus pajėgi įvertinti pakankamai greitai intervalais, kad būtų teisinga.

Taip pat pažvelgti į savo matematika, aš vertinu jūsų dar nėra įtraukti galutinių skaičiavimų, bet esate matavimo intervalas yra jau padalintas 1.000.000 dauginama iš 15.000 todėl jūs prarasite daug tikslumo ir Apipjaustymas apvalinimo klaidų.

Yra būdų, kaip pasiekti tai, ko norite, bet IR moduliuoti impulsai ir lėtas procesorius nėra maršrutą imtis.Jums gali išsisukti naudojant Ultrasonics kai skrydžio laikas yra ilgesnis, nes banga lėčiau važiuoti arba galite pabandyti atspindinti matavimas, kai šviesos kampas matuojamas šviesos atspindys.

Brian.

 
Im naudojant aparatūros grandinė iš šios nuorodos:

Citata:
http://www.ikalogic.com/ir_prox_sensors_40khz.phpSkelbimas po 1 minučių:Noriu nustatyti atstumą nuo laiko intervalas tarp impulsų.
Tik įsivaizduokite, kaip jums metant akmenį į gilią duobę, ir laukia iš akmenų pataikyti aukštas garsas.
Trumpesnį laiką nuo jų išleidimo į akmenį tašką ir jo garsas pradeda aukšte, trumpesnis
atstumas akmuo keliavo.

Tai kaip aš noriu, kad programa grandinė veikia.Iš esmės programavimo seka turėtų būti tokia:

Nustatykite laikmatį iki nulio!
Siųsti signalo perdavimo IR diodas
Pradėti laikmatis
Jei jūsų gavimo IR diodas (aktyvus žemas) - rodo, kad gautas signalas STOP laikmatis.

Parengti iš perpus sumažinti laiko ir greitis naudojant šią formulę atstumas: Atstumas = greitis * laiko.jei i cant get laikmatis tinkamai veiktų Gal aš išbandyti šį būdą ...jos truputį žalias
bet turėtų duoti man bet kokiu atveju rezultatų ...

naudojant savavališkai kintama ty T (yra sveikasis skaičius)

Set T = Zero.
Siųsti signalo perdavimo diodas.

Jei jūsų gavimo IR diodas yra vis dar maža (ty ne signalą kol kas)
padidinti T 1

Aukščiau linijos veiks iki gavimo IR diodas eina DAUG.

Dabar turėsite nežinomas teigiamą reikšmę t, o tai nėra susiję bet lygtys.
Bet jeigu jūs išsklypuoti T vertė palyginti su atstumu galite nustatyti diodai ne, tuomet galite dirbti iš lygties
nuotolinės - tiesės lygtis

y = mx c

m = (y2-y1) / (x2-x1)
(x1, y1) ir (x2, y2) koordinatės yra su X atstovaujančių atstumas ir y atstovaujančių įvairias vertybes T.

^
| /
T | /
| /
| /
| / Tai tiesi linija
| /
| /
|----------------------------->
0

Jūsų du koordinatės (x1, y1) ir (x2, y2) yra už trumpiausią ir toliausiai atstumo matavimas.
Taigi nustatant trumpiausią atstumą - naudoti valdovas ir trukdo IR diodus maždaug 5cm atstumu.
Jūsų atstumas yra žinomas cos jums išmatuoti jo teisė, bet jūs gausite T vertė šio atstumo.

Dabar nustatyta toliausiai atstumas (50cm) - naudoti liniuotės, neleidžia dar kartą 50cm atstumu ir gauti, kad T vertė.
Nubraižykite grafiką, ir parengti T palyginti atstumas lygtis.

Bet tai, jei aš negaliu gauti laikmačio funkcija veikia, bet procedūra yra bet kuriuo atveju tas pats.

 
Aš suprantu, iš esmės esate aprašymo.Jis vadinamas "time of flight" matavimas, nes jis paskaičiuoja, atstumas nuo išvykimo (dėl signalo) iki atvykimo (apmąstymų) remiantis tuo, kaip ilgai jis buvo tranzito.

Jūsų problema yra ne teorija, tai tiesiog neįtikėtinai trumpą laiką, kurį bandote priemonė.Pasiūlymo jūsų figūra 300m už mus, ir darant prielaidą, kad jūs norite įvertinti tikslumo 1cm, jūsų laikmatis turi įsigijęs maždaug 30GHz, ne 1MHz Jums siūlome.Jeigu jums reikia geresnės tikslumo, dažnumas turi būti dar didesnis.

Jei galite rasti IPS galintis Clocking ne 120GHz Norėčiau vieną, iš tiesų manau, kad kiekvienas norėtų vieną!

Pažvelgus iš kito kampo problema, kuo mažiau laiko reikia pereiti iš perduoda gauti, šviesos būtų jau keliavo 300m.

Jo, kaip naudoti kalendorių, kad laikas, kaip ilgai jis trunka virti kiaušinį.

Brian.

 
Ačiū už jūsų nuomonę.Aš undastand ką tu sakai dabar.

 

Welcome to EDABoard.com

Sponsor

Back
Top