AMBIENT berbasis perangkat lunak deteksi cahaya

F

fantabulous68

Guest
/ * menghasilkan siklus rendah 40KHz pulsa yang akan menggerakkan sebuah pemancar inframerah.Ketika sebuah objek
Infront dari pemancar inframerah maka penerima IC akan mendeteksi objek dan LED akan menyala.

i wanna proyek menjadi kebal terhadap cahaya ambient seperti lampu meja.
1) ketika saya bersinar cahaya pada pemancar saya ingin yang dipimpin untuk pergi.
2) bila tidak ada objek Infront dari i wanna pemancar yang dipimpin untuk pergi.
3) bila ada objek Infront dari pemancar saya ingin menuju cahaya.

i memprogram pic16f690 dan memasukkannya dalam rangkaian.ini adalah apa yang terjadi:
1) LED pulsa terus menerus bila tidak ada objek di depannya.
2) ketika objek Infront dari pemancar berhenti bersinar
3) ketika cahaya bersinar pemancar LED pulsa sangat cepathardware koneksi:
LED terhubung ke RC3
penerima output terhubung ke RC2
mikro menghasilkan pulsa di RA2

di sini adalah kode saya:

* /

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

Transmit40 void (void);

sedikit IR1, ir2; / 2 output dari sensor yang berbeda selama On & Off denyut
unsigned char ir; / / menyimpan hasil akhirTransmit40 void (void)
(int t = 0;
int cnt = 0;

while (cnt <20) / / Tx 10 IR pulsa / meledak
(If (t == 0)
(
PORTA = PORTA ^ 0x04; / / mengirim IR, matikan RA2
DelayUs (5);
IR1 = RC2; / / IR bit1 = RC2
cnt ;
t = 1;

)
else if (t == 1)
(

PORTA = PORTA ^ 0x04; / / berhenti IR, matikan RA2, RA2 adalah sumber siklus rendah pulsa
DelayUs (20);
ir2 = RC2; / / O / P IR bit2 = O / P pin penerima IC
cnt ;
t = 0;
)if ((IR1 == 1) & (ir2 == 0)) / / Kendala terdeteksi
(
ir = 1;
)lain
(
ir = 0; / / Cara ini jelas di depan sensor
)RC3 = ir; / / dipimpin terhubung ke RC3, LED menunjukkan deteksi

)
)

void main (void)
(
Ansel = 0; / / Set input digital
TRISC = 0x04; / / membuat RC2 pin masukan.output dari IC terhubung ke detektor RC2
while (1)

Transmit40 ();

)/ *
hardware bagian dari rangkaian karya.i awalnya menggunakan 555timer untuk menghasilkan kacang-kacangan dan perangkat keras bekerja.
semua im doin now is menggunakan mikrokontroler untuk membangkitkan pulsa bukan sebuah 555timer.jadi masalahnya terletak pada perangkat lunak.

jangan membantu saya untuk memperbaiki kode saya.itu adalah untuk sebuah proyek Im pemula dengan pic * /

 
Aku tidak mengerti titik cahaya ambient.It's ditekan oleh semua penerima remote control IC oleh desain.

 
fantabulous68 wrote:

/ * menghasilkan siklus rendah 40KHz pulsa yang akan menggerakkan sebuah pemancar inframerah.
Ketika sebuah objek

Infront dari pemancar inframerah maka penerima IC akan mendeteksi objek dan LED akan menyala.i wanna proyek menjadi kebal terhadap cahaya ambient seperti lampu meja.

1) ketika saya bersinar cahaya pada pemancar saya ingin yang dipimpin untuk pergi.

2) bila tidak ada objek Infront dari i wanna pemancar yang dipimpin untuk pergi.

3) bila ada objek Infront dari pemancar saya ingin menuju cahaya.i memprogram pic16f690 dan memasukkannya dalam rangkaian.
ini adalah apa yang terjadi:

1) LED pulsa terus menerus bila tidak ada objek di depannya.

2) ketika objek Infront dari pemancar berhenti bersinar

3) ketika cahaya bersinar pemancar LED pulsa sangat cepathardware koneksi:

LED terhubung ke RC3

penerima output terhubung ke RC2

mikro menghasilkan pulsa di RA2di sini adalah kode saya:* /# include <pic.h>

# include "pic.h"

# include "math.h"

# include <stdio.h>

# include <stdlib.h>

# include "delay.h"Transmit40 void (void);sedikit IR1, ir2; / 2 output dari sensor yang berbeda selama On & Off denyut

unsigned char ir; / / menyimpan hasil akhirTransmit40 void (void)

(int t = 0;

int cnt = 0;while (cnt <20) / / Tx 10 IR pulsa / meledak

(If (t == 0)

(

PORTA = PORTA ^ 0x04; / / mengirim IR, matikan RA2

DelayUs (5);

IR1 = RC2; / / IR bit1 = RC2

cnt ;

t = 1;)

else if (t == 1)

(PORTA = PORTA ^ 0x04; / / berhenti IR, matikan RA2, RA2 adalah sumber siklus rendah pulsa

DelayUs (20);

ir2 = RC2; / / O / P IR bit2 = O / P pin penerima IC

cnt ;

t = 0;

)if ((IR1 == 1) & (ir2 == 0)) / / Kendala terdeteksi

(

ir = 1;

)lain

(

ir = 0; / / Cara ini jelas di depan sensor

)RC3 = ir; / / dipimpin terhubung ke RC3, LED menunjukkan deteksi)

)void main (void)

(

Ansel = 0; / / Set input digital

TRISC = 0x04; / / membuat RC2 pin masukan.
output dari IC terhubung ke detektor RC2

while (1)Transmit40 ();)/ *

hardware bagian dari rangkaian karya.
i awalnya menggunakan 555timer untuk menghasilkan kacang-kacangan dan perangkat keras bekerja.

semua im doin now is menggunakan mikrokontroler untuk membangkitkan pulsa bukan sebuah 555timer.
jadi masalahnya terletak pada perangkat lunak.jangan membantu saya untuk memperbaiki kode saya.
itu adalah untuk sebuah proyek Im pemula dengan pic * /
 
Apa jenis IR sensor yang anda gunakan?Kebanyakan remote control jenis penyaringan telah dibangun di sekitar 38KHz secara khusus untuk mengecualikan efek pencahayaan sekitarnya.Dalam kode Anda, Anda mengaktifkan IR LED pada dua kecepatan yang berbeda, setidaknya satu dari mereka tidak akan melewati sensor IR normal unit.

Tanpa mengetahui kecepatan clock yang Anda gunakan adalah mustahil untuk menilai kecepatan instruksi dan akan menjadi bagian penting dari loop waktu.Sangat mungkin, Anda pulsa cahaya hanyalah panjang yang salah atau tidak cukup konsisten.

Metode yang lebih baik adalah dengan menggunakan timer PIC mendaftar untuk menghasilkan interrupt pada tingkat bunga tetap bukan perangkat lunak menggunakan loop.

Tergantung pada perangkat yang Anda gunakan, sinyal PWM yang lambat juga dapat menjadi pilihan.Anda bisa mempertahankan frekuensi denyut konstan tetapi mengubah panjang dengan menyesuaikan tanda / ruang rasio.

Brian.

 
im, menggunakan TSOP48,keluaran aktif rendah, output digital

Ditambahkan setelah 1 menit:Apa yang kalian pikirkan tentang metode ini untuk menghitung jarak?
Setiap metode sederhana? Im menggunakan timer untuk menentukan interval antara sinyal dikirim dan diterima

Kode:////////////////////// MENGHITUNG JARAK ///////////////////////enable_interrupt void (void)

/ / Fungsi ini pada dasarnya dirancang untuk mengatur potongan-potongan khusus dan menangkap timer register

(

CCP1CON = 0x05; / / bit 3-0 dari register kontrol pengambilan diatur ke 0.101.

/ / Mode ini adalah untuk menangkap setiap naik tepi nadi yang

/ ditransmisikan dan kemudian menerima

TMR1IF = 0; / / The menyela bendera sedikit dari register PIR1 dibersihkan sebelum

/ / mengaktifkan interupsi.

CCP1IF = 0; / / Sebelum penangkapan dilakukan, Interrupt sedikit Permintaan Bendera

/ / CCP1IF dari register PIR1 dihapus.

CCP1IE = 1; / / The capture menyela bit memungkinkan diatur untuk mengaktifkan menyela

TMR1IE = 1;/ / Sebuah interrupt akan terjadi segera asalkan Gie dan PEIE bit dari INTCON

/ / register ditetapkan.

PEIE = 1;

Gie = 1;

)void interrupt ISR (void)

(

if (TMR1IF) / / jika ada overflow

(

TMR1IF = 0; / / dan bendera ini kemudian dibersihkan

TMR1_OF ;

)if (CCP1IF) / / jika ada menangkap

(

CCP1IF = 0; / / Zero TANGKAP bendera

if (Cap_1st) / / membolehkan hanya 1 capture yang harus diambil

(

Cap_1st = 0; / / Cap_1st akan dihapus seolah-olah nilai lain yang ditangkap sebelum nilai sebelumnya dibaca

/ / maka

t_capL = CCPR1L; / / rendah ambil byte dari register

t_capH = CCPR1H; / / lebih tinggi ambil byte dari register

capture_status = 1; / / sinyal bahwa terjadi menangkap diaktifkan.

)

)

)calc_distance void (void)

(

panjang sampel = 0;

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

capture_status = 0; / / sinyal bahwa terjadi menangkap dinonaktifkan

TMR1ON = 0; / / stop timer

/ / tH = TMR1H; TL = TMR1L;

tH = 0; TL = 0; t_capL = 0; t_capH = 0; / / menginisialisasinya capture

TMR1_OF = 0;Transmit40khz ();

DelayUs (100);enable_interrupt (); / / Interrupt diaktifkan untuk menangkap waktu ketika sisi kenaikan terjadi

TMR1ON = 1; / / start timer 1/ / bila timer 1 dimulai, enable_interrupt fungsi akan dipanggil untuk

/ / ambil waktu dari sinyal 40kHz sekali terbit pertama tepi ditransmisikan

/ nadi terjadi/ / Yang berkelanjutan loop dijalankan sedemikian rupa sehingga ketika sinyal untuk menyatakan bahwa telah terjadi penangkapan

/ / Adalah 0, maka 40 kHz akan ditransmisikan dan diterima saat mengirim keluar 10 pulsa.

/ / Setelah kondisi ini terpenuhi, mengaktifkan interrupt global bit akan dihapus untuk

/ / mencegah menyela dari gangguan terjadi ketika sedang berlangsung.

/ / Timer ini kemudian dihentikan dengan menonaktifkan TMR1ON dan TMR1IE.while ((capture_status == 0) & & (TMR1_OF <1));

Gie = 0; / / menonaktifkan interrupt global

TMR1ON = 0; / / stop timer 1

TMR1IE = 0; / / menonaktifkan timer 1 potong pada overflow / // / Kondisi lain muncul sedemikian rupa sehingga jika sinyal untuk menyatakan bahwa telah terjadi penangkapan

/ / Ini kemudian diaktifkan, maka waktu sampel dihitung dan disimpan dalam array.
Sampel

/ / Waktu yang dihitung melalui perbedaan antara byte tinggi waktu penangkapan dan tingginya

/ / Byte dari Timer1 ditambahkan ke byte rendah dari waktu penangkapan dan byte rendah Timer1.

/ / Indeks bertambah.
Hal ini kemudian menyimpulkan akhir fungsi untuk mendapatkan sampel.

/ / Namun, jika indeks kurang dari 20, maka fungsi akan terus berlanjut.if (capture_status == 1)

(

sampel = ((t_capH) * 0x100) (t_capL);

i = 2;

Gie = 0; / / Global interupsi ini dinonaktifkan untuk menghindari mengganggu lain dari terjadi sementara

/ / Interupsi berlangsung

t_capH = 0;

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

jarak = 0;/ / jika dan hanya jika menangkap dibuat akan proses penghitungan jarak melanjutkan.

if (i == 2)

(

time = sampel * 1e-6; / / karena masing-masing hitungan 1us diperlukan untuk menyelesaikan, nilai ini dikalikan

/ / untuk sampel waktu./ / Jarak dihitung melalui mengalikan waktu dan jarak perjalanan cahaya

/ / cahaya berjalan 300m dalam 1 us.This hasilnya dibagi dengan 2/ / sebagai kecepatan perjalanan jarak dua kali diukur.jarak = (waktu * 30.000) / 2;/ / liquidLEVEL = heightOFtank-jarak im masih bekerja di bagian ini

)

return;

)

MENGHITUNG JARAK //////////////////// END //////////////////////
 
Firasat saya ini tidak akan berhasil.

TSOP termasuk yang bandpass filter yang hanya akan menunda sinyal lebih dari waktu yang Anda mengukur, tambahkan kebutuhan> 10 siklus untuk output untuk mengubah keadaan dan saya pikir Anda sudah akan liar itu tidak akurat mengukur apa pun.

Sekarang lihat pada pengukuran waktu Anda.PIC jam di 4MHz dengan timer internal kenaikan 1uS, ini setara dengan 300 juta dalam dirinya sendiri.Ini adalah 600 kali lebih jauh dari jarak terpanjang Anda ingin mengukur.Anda tidak akan dapat mengukur interval cukup cepat untuk membuatnya akurat.

Anda juga melihat matematika, saya menghargai Anda belum menambahkan perhitungan akhir tapi interval Anda mengukur sudah dibagi dengan 1.000.000 kemudian dikalikan dengan 15.000 jadi Anda akan kehilangan akurasi yang signifikan dalam pembulatan dan kesalahan pemotongan.

Ada beberapa cara untuk mencapai apa yang Anda inginkan, tetapi IR termodulasi pulsa dan prosesor yang lambat tidak rute yang harus diambil.Anda mungkin bisa lolos dengan menggunakan ultrasonics di mana waktu penerbangan yang lebih lama karena gelombang lebih lambat untuk bepergian atau anda dapat mencoba pengukuran reflektif di mana sudut refleksi sinar cahaya diukur.

Brian.

 
Im menggunakan rangkaian perangkat keras dari link ini:

Quote:
http://www.ikalogic.com/ir_prox_sensors_40khz.phpDitambahkan setelah 1 menit:i wanna untuk menentukan jarak dari selang waktu antara pulsa.
Bayangkan saja Anda menjatuhkan batu ke lubang yang dalam dan menunggu suara batu memukul lantai.
Semakin pendek waktu antara titik pelepasan batu dan suara itu memukul lantai, yang lebih pendek
jarak perjalanan batu.

Yang adalah bagaimana saya ingin program rangkaian untuk beroperasi.Pada dasarnya urutan untuk pemrograman harus sebagai berikut:

Atur timer untuk ZERO!
Mengirim sinyal untuk transmisi IR dioda
Timer
Jika Anda menerima IR dioda (aktif rendah) - yang menunjukkan itu menerima sinyal STOP timer.

Bekerja keluar jarak dari mengurangi separuh waktu dan menggunakan rumus kecepatan: jarak = kecepatan * waktu.jika i cant mendapatkan timer untuk bekerja dengan baik mungkin saya mencoba pendekatan ini ...nya agak kasar
tetapi harus memberi saya beberapa hasil dalam hal apapun ...

menggunakan variabel yang sewenang-wenang mengatakan T (menjadi sebuah integer)

Set T = ZERO.
Mengirim sinyal untuk transmisi dioda.

Jika Anda menerima IR Diode masih rendah (berarti tidak ada sinyal yang diterima sebagai nilai)
meningkatkan T by 1

Loop di atas akan terus berjalan hingga penerima IR Diode pergi TINGGI.

Sekarang Anda akan memiliki nilai positif yang tidak diketahui di T yang tidak terkait dalam setiap persamaan.
Tetapi jika Anda merencanakan keluar nilai T versus jarak Anda mengatur pada dioda, maka anda dapat menghitung persamaan
untuk jarak - persamaan garis lurus

y = mx c

m = (y2-y1) / (x2-x1)
(x1, y1) dan (x2, y2) yang bersama-koordinat dengan x mewakili jarak dan y mewakili berbagai nilai T.

^
| /
T | /
| /
| /
| / Ini adalah garis lurus
| /
| /
|----------------------------->
0

Anda dua co-koordinat (x1, y1) dan (x2, y2) adalah untuk jarak terjauh terpendek dan pengukuran.
Jadi ketika mengatur jarak terpendek - menggunakan penggaris dan menghambat dioda IR sekitar 5cm menjauh.
Jarak ini dikenal cos Anda diukur dengan benar Tapi Anda akan mendapatkan nilai T untuk jarak ini.

Sekarang, atur jarak terjauh (50cm) - menggunakan penguasa, menghalangi lagi di 50cm pergi dan mendapatkan nilai T.
Plot grafik dan bekerja ke luar persamaan T versus jarak.

Tapi ini adalah jika saya tidak bisa mendapatkan fungsi timer untuk bekerja namun prosedurnya sama dalam hal apapun.

 
Saya memahami prinsip Anda menjelaskan.Hal ini disebut "waktu terbang" pengukuran karena menghitung jarak dari keberangkatan (sinyal) untuk kedatangan (dari refleksi) berdasarkan berapa lama dalam perjalanan itu.

Masalah Anda bukan teori, itu hanya interval sangat singkat Anda mencoba untuk mengukur.Mengutip sosok Anda 300m per uS, dan dengan anggapan anda ingin mengukur akurat untuk 1cm, timer Anda untuk menghitung sekitar 30GHz, bukan 1MHz per Anda usulkan.Jika Anda memerlukan akurasi yang lebih baik, frekuensi perlu lebih tinggi lagi.

Jika Anda dapat menemukan PIC mampu clocking di 120GHz Saya ingin satu, bahkan saya pikir semua orang akan seperti satu!

Melihat masalah dari sudut yang lain, mungkin dalam waktu minimum yang diperlukan untuk beralih dari mengirimkan untuk menerima, berkas pasti sudah bepergian 300m.

Its like menggunakan kalender ke waktu berapa lama yang dibutuhkan untuk merebus telur.

Brian.

 
terima kasih atas pendapat Anda.Aku undastand apa yang Anda katakan sekarang.

 

Welcome to EDABoard.com

Sponsor

Back
Top