|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
|
Ðiều Chỉnh | Xếp Bài |
12-12-2005, 07:14 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
Xin moi nguoi giup do!
Chào mọi người, em vừa mới biết đến PIC chưa lâu mà bây giờ đã có 1 bài tập, và em chưa biết giải quyết thế nào , mong mọi người giúp đỡ em trong bước khởi đầu gian nan
Bài tập của em là xây dựng một mạch điện, sử dụng PIC (16F84) để đo khoảng cách, và display thông qua 3 đèn LED ( vang - <500mm; xanh - 500 to 1300mm; đỏ - >1300mm). Tín hiệu được nhận từ một bộ Polaroid ultrasonic sensor (là một bộ truyền nhận-transceiver sóng âm có tần số cao) thông qua giao diện cổng COM-DB9 (tín hiệu chỉ được nhận từ duy nhất pin 4 - Echo của bộ ultrasonic) Tình huống: Khi sensor phát hiện được objec trong pham vi hoạt động -> sẽ có 1 tín hiệu phản hồi (echo) được nhận và đi vào port A của PIC thông qua Pin 4. khi PIC nhận được tín hiệu sẽ so sánh thởi gian trễ -> và tính ra được khoảng cách là <500mm; from 500 to 1300; hay là >1300mm, và sẽ bật các đèn LED tương ứng. Về mạch điện thì rất đơn giản, nhưng về phần code cho PIC thì em chưa rành lắm. Nhất là phần so sánh khoảng cách xa gần mà dùng độ trễ. Mong mọi người góp ý cho em. Cảm ơn mọi người nhiều thay đổi nội dung bởi: anzuus, 12-01-2006 lúc 07:30 AM. |
12-12-2005, 04:56 PM | #2 |
PIC Bang chủ
|
Em chú ý một điều, đó là nguồn của siêu âm Polaroid cần là rất lớn, lên đến 2A cho một siêu âm. Chính vì vậy, nếu em làm không đủ nguồn, thì siêu âm không đọc được.
Với vấn đề của em, nên xử lý một cách "thông minh hơn" như sau: - Dùng cảm biến siêu âm, đặt trước bề mặt tường (độ dày tường phải trên 20 cm - phần này em nghiên cứu kỹ về siêu âm sẽ biết vì sao phải vậy). - Đo khoảng cách chính xác từ siêu âm đến tường. Khoảng cách này với siêu âm Polaroid là 80cm, 1m, 2m, 3m, 6m, 8m và 10m. - Ở mỗi khoảng cách, em phát và thu 10 lần, sau đó di chuyển đến khoảng cách khác. - Em lặp lại thí nghiệm này 3 lần. - Như vậy, em sẽ có một mảng dữ liệu ở mỗi khoảng cách là 30 mẫu. - Dùng phương pháp trung bình để tính ra mean, bởi vì phân bố đo được của cảm biến siêu âm có dạng Gaussian. - Từ dữ liệu của mấy khoảng cách khác nhau, em tìm hàm tuyến tính giữa timer và khoảng cách. Để làm việc này, em dùng thuật toán linear fit data, hoặc linear best fit data. Nó cho phép em fit được đường tuyến tính tốt nhất qua các điểm. - Với hệ số này, em chỉ cần đo timer, thì sẽ xác định được. Nếu lớn hơn hoặc nhỏ hơn giá trị timer nào đó, em bật hoặc tắt đèn. Không cần phải tính toán ngược lại khoảng cách rồi mới so sánh khoảng cách. Việc làm này, giúp em calibrate được cái siêu âm, và cũng dùng để tính được khoảng cách một cách chính xác. Ngoài ra, từ việc làm này, em có thể truyền thẳng giá trị timer về máy tính, sau đó mới dùng chương trình máy tính để tính toán, thì nó sẽ thuận tiện và nhanh hơn rất nhiều lần. Về thuật toán đo khoảng cách. Em có thể dùng chức năng capture, nhưng chức năng này chỉ có ở PIC16F88, hoặc 16F628A, chứ không có ở 16F84. Vì thế, em nên dùng chức năng EXTINT trên chân RB0 để nhận echo. Khi đó ngắt xảy ra, thì em đọc echo. Còn khi em phát, thì em bật timer lên, thì timer bắt đầu đếm từ 0, đến khi có tín hiệu EXTINT, thì đọc giá trị timer ra. Em có thể dùng timer1 với 16 bit, hoặc timer0, timer2 với 8 bit. Nhớ dùng bộ chia timer Prescaler hợp lý, bởi vì em có những khoảng cách đo trong tầm ngắn. Tuy nhiên, em kiểm tra lại, bây giờ anh không nhớ chính xác lắm thông số, nhưng Polaroid có rất nhiều mức giới hạn, nếu em muốn đo ở khoảng cách rất ngắn, thì phải chuyển mode. Khoảng cách của em là 50cm đến 1m3. Đó là khoảng cách rất ngắn. Còn thông thường, Polaroid 6500 đo được từ 80cm đến 10m. Trong trường hợp này, em phải chọn mode đo khoảng cách ngắn. Các khoảng cách trên kia, em sẽ chuyển lại thành: 40cm, 50cm, 60cm...130cm. Rồi lại thực hiện như anh đã nói trên kia. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
12-12-2005, 06:27 PM | #3 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
Cảm ơn anh falleaf!
Anh có the nói rõ hơn cho em về thuật tóan linear fit data và linear best fit data duoc không ạ. Và cả chức năng capture nua, hình như cái phần này chưa có trong bài giảng của anh thì phải. Có một vấn đề mà em thấy vướng, đó là làm sao có thể đồng bộ thời gian send tín hiệu của sensor với thời gian khởi động timer Cảm ơn anh nhiều! thay đổi nội dung bởi: anzuus, 12-12-2005 lúc 07:09 PM. |
12-12-2005, 11:00 PM | #4 |
PIC Bang chủ
|
Theo anh nhớ, khi send tín hiệu, em chỉ cần 1 lệnh là send được. Như vậy, em làm như sau:
Tắt timer Xóa timer Khởi động timer Send tín hiệu. Như vậy, timer sẽ được khởi động trước 1 chu kỳ máy so với lệnh send tín hiệu. Tuy nhiên, việc này cũng sẽ không quan trọng, bởi vị khi em dùng linear fit data thì nó sẽ không đi qua điểm 0. Điểm 0 này chính là thời gian trễ của tín hiệu so với khoảng cách, phương trình có dạng: y = ax + b. Cái anh nói là b. Như vậy, b bao hàm rất nhiều cái trễ. Vd như khoảng cách từ bề mặt siêu âm, đến bề mặt cảm biến, nằm bên trong vỏ siêu âm, vấn đề trễ tín hiệu do mạch điện tử, và kể cả việc khởi động timer cũng ảnh hưởng đến. Nhưng em lưu ý, việc khởi động trễ 1 chu kỳ máy là rất nhỏ ở tần số 10MHz, hay 2.5Mflop đối với 16F84, và nhỏ hơn so với khoảng cách từ bề mặt siêu âm cho tới miếng áp điện. Chính vì thế, em không cần phải lo đến việc trễ này. Còn về fit data, thực ra anh hay dùng tiếng Anh mấy cái thuật ngữ này, chữ nó chẳng có gì quan trọng đâu. Đó là em xác định một đường thẳng dạng y = ax + b; sao cho khoảng cách từ các điểm thực nghiệm đến đường thẳng đó là nhỏ nhất. Có rất nhiều tiêu chuẩn trong này, như tổng bình phương nhỏ nhất, hoặc trị tuyệt đối lớn nhất nhỏ nhất, hoặc... tóm lại là rất nhiều tiêu chuẩn. Nhưng bởi vì anh dự đoán (theo kinh nghiệm), thì hàm của cảm biến siêu âm trong khoảng cách đó là tuyến tính. Tuy nhiên, để giải bài toán cụ thể của em, tại sao em không đặt cảm biến siêu âm ở chính xác những khoảng cách em cần 50cm, ...1m3.. Sau đó chỉ cần đo khoảng 30 lần ở các vị trí đó. Cuối cùng lấy giá trị timer trung bình của các lần đo. Vd: Đo 30 lần tại 50cm, em có giá trị timer là 500 chẳng hạn. Thế thì cứ lớn hơn hoặc nhỏ hơn giá trị đó, thì em bật đèn tương ứng. Nhưng khổ nỗi, em lại phải truyền giá trị đó về máy tính, cho nên đằng nào thì em cũng phải tính giá trị đó ra. Nhưng anh thấy, mục tiêu đề tài của em, hình như giống như dành cho việc đậu xe ô tô thì phải. Đặt sẵn các siêu âm trong nhà để xe, nếu xe de vào gần tường rồi thì báo đèn đỏ để dừng lại, còn nếu không thì báo đèn xanh, hoặc đèn vàng, để phía trước mặt người lái xe (hướng đối diện với bãi de xe) trong các khu vực nhà chật, hoặc để xe dưới tầng hầm? Không biết phải em định làm cái giống kiểu vậy không? Nếu làm vậy, anh nghĩ thôi làm hồng ngoại cho rẻ tiền . Chỉ là đoán mò tán dóc thôi, đừng để ý Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
12-12-2005, 11:54 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
Chao anh!
ý tưởng bãi đậu xe của anh hay thật, nhưng đề tài của em khác cơ. Bài tập này chỉ là phần mở đầu thôi, còn bài tập của em là phải thiết kế một Ultrasonic RADAR Sytem. Nó gồm 4 phần: 1. Điều khiển Polaroid ultrasonic sensor, xử lý tín hiệu rồi gửi vào máy tính 2. Điều khiển stepper motor (or sevor), quay 360 do roi quay nguoc lai... 3. Điều khiển kết nối với máy vi tính thông qua MAX202 4. Viết GUI program Em nghĩ đây 1 là đề tài khá hay, ứng dụng được nhiều, như ứng dụng trong Robotic, Security, v.v. Nhưng nó tương đối khó với em, em mới vô diễn đàn, đọc nhiều bài viết của anh, nói chung 1 từ "ấn tượng". Nếu anh thấy hứng thú với đề tài của em thì giúp em 1 tay. Vì em mới bắt đầu tìm hiểu thôi, không phải chuyên nghiệp. |
13-12-2005, 12:14 AM | #6 |
PIC Bang chủ
|
Sorry, anh không có thời gian hướng dẫn cho em đâu. Hơn nữa, đề tài của em cũng khá đơn giản, không có gì phức tạp lắm, không cần anh hướng dẫn đâu. Nếu anh hướng dẫn đề tài thế này, anh đưa source code cho em, đêm nay em thức đến sáng để test, sáng mai lên nộp bài cũng được nữa.
Rất tiếc, anh không hướng dẫn sinh viên theo kiểu đó. Trả lời em như thế này anh nghĩ là cách hướng dẫn hay nhất. Có nhiều sinh viên làm việc với anh, công việc đầu tiên là học viết báo cáo. N thằng không thằng nào học cái phần viết báo cáo cho thông. Đến N+1 thì lại là đứa con gái, và nó đang rất thành công. Nhóm mod của picvietnam cũng đang làm khá tốt đấy. Nếu muốn học, em cứ vào PIC Việt Nam - Chuyên Nghiệp để xem mẫu báo cáo của nhóm đang làm. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
13-12-2005, 01:38 AM | #7 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
hic, thì đúng là với anh thì dễ rùi, nhưng với em thì vẫn khó. Nhưng em sẽ thử, có gì ko hiểu thì hỏi anh vậy.
Hay anh thử hướng dẫn em bằng cách đưa cho em 1 đoạn code nào đấy rồi em tập viết báo cáo. Em kinh nghiệm từ bản thân, cái gì bước khởi đầu học mà ko tốt, ko chất lượng là rất khó thành công, nên có gì anh hướng dẫn em nhé. Many thanks |
13-12-2005, 08:21 PM | #8 |
PIC Bang chủ
|
Coding, đối với anh không phải việc phức tạp, bởi vì nếu cần coding, anh sẽ thuê một người chuyên coding làm chuyện đó. Em cần học về điều khiển, hay học về coding?
Nếu em học về coding, anh không thể cho em source được, bởi vì đó là cái em cần học. Nếu em học về điều khiển, em giải bài toán hoàn toàn lý thuyết ra, viết bằng form báo cáo anh đưa ở box PIC Việt Nam - Chuyên nghiệp. Sau khi em làm xong toàn bộ về lý thuyết điều khiển, các thông số tính toán, anh sẽ đưa code cho em. Những vấn đề gì em cần học trong phần lý thuyết, anh sẽ hướng dẫn thêm. Sau đó, anh sẽ đưa cho em source code mẫu, có thể trong ứng dụng của em, chỉ cần sửa vài dòng là chạy tốt. Đó là điều anh chắc chắn. Do đó, hiện tại việc đưa source code cho em là không cần thiết. Anh đã nói, anh không hướng dẫn sinh viên gõ code, hoặc không làm cái kiểu ăn sẵn để lấy tiếng tăm. Em luôn chú ý, học cái gì cần học, và hãy chú tâm học cái đó thật tốt. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
16-12-2005, 08:27 AM | #9 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
hi,
Em bít rùi, sau khi suy nghĩ em chọn theo học điều khiển. Hoc coding co le nhanh hon dễ hơn nhưng nếu muốn đi xa thì kiểu gì cũng phải quay lại học điều khiển, nên em sẽ học điều khiển trước, coding tự khắc sẽ tiến bộ dần dần. Vì mới bắt đầu nên anh đừng giao cho em đề tài gì khó quá nhé , ko lại bị choáng -> dễ chán. chào anh |
16-12-2005, 02:50 PM | #10 |
PIC Bang chủ
|
Em cứ giải lý thuyết ra chính cái đề tài của em cần giải quyết. Đầu tiên, em thiết kế lại xem, mình phải giải quyết những bài toán gì? Mục đích để làm gì...
Tất cả những bài báo cáo đó, em sử dụng form anh cung cấp. Ngoài ra, vấn đề naò em gặp khó khăn, em cứ nói, cần các thông tin gì thêm, hiểu biết gì thêm để có thể phân loại bài toán, và phân tách các bài toàn, em cú nói với anh cụ thể, anh và các thành viên khác sẽ giúp đỡ em. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
12-01-2006, 07:29 AM | #11 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
Em chao anh, Xmas rồi nhà em có việc nên em phải về, ko ghé forum.
Em đã tiến hành làm đề tài, phần điều khiển Unipolar Stepper Motor em làm cũng được khá nhiều, về phần em đã hỏi anh - Polaroid Ultrasonic Ranging System thì em đang trong giai đoạn hoàn thành. Em đã down form của anh về, tuần tới em bắt đầu viết báo cáo. Em cũng tham khảo nhiều chỗ, em post cái schematic voi đoạn chương trình của em, vẫn chưa đc, anh góp ý hộ em. Tuần tới em cũng phải báo cáo phần này. Sơ đồ này em chưa điền giá trị của linh kiện, cái SW2 thi chi là cái khóa thôi ạ. Đây là code ạ Code:
list p=16F628A ; ;**************Progaram Equates***************** ; pc equ 0x02 status equ 0x03 trisa equ 0x05 porta equ 0x05 trisb equ 0x06 portb equ 0x06 counter equ 0x0c maxvalue equ 0x0d minvalue equ 0x0e loop equ 0x0f timerctr1 equ 0x10 finaltime equ 0x11 buzztime equ 0x12 temp1 equ 0x13 temp2 equ 0x14 temp3 equ 0x15 range equ 0x16 retvalue equ 0x17 rp0 equ 5 w equ 0 f equ 1 carry equ 0 zero equ 2 ; ; ;****************Main Program******************* ; start clrf timerctr1 ;Clear sleep timer clrf finaltime bcf portb,1 bcf portb,2 bcf portb,3 bsf status,rp0 ;select bank1 movlw b'01110000' ;select I/O pin movwf trisb ;of port b movlw b'00011111' ;select I/O pin movwf trisa ;of port a bcf status,rp0 ;bank 0 ; ;******************Check for Start Swiitch******* poll btfsc porta,0 ;check start goto poll ;******************Measure distance************ ; begin call delay_40ms call delay_40ms ;call delay 80ms movlw 0x00 ;reset counter movwf counter bsf portb,0 ;set INIT ; again call delay_30us ;call delay 30 us incf counter ;increase cointer by 1 ; btfss portb,4 ;check echo coming goto again ;back bcf portb,0 ; reset INIT ; call delay_40ms call delay_40ms ; ;****************Read User Set Range************ ; movf porta,w ;read maximum range value call getmax movwf maxvalue movf porta,w ;read minimum range value call getmin movwf minvalue ; ;***********Compare User Set Range With Measure Value******** ; movf minvalue,w ;compare minimum value subwf counter,w ;with counter btfsc status,carry ;if counter > minimum value goto compmax ;compare with maximum value goto light_red ;if couter < minimum value ; compmax movf maxvalue,w ;compare maximum value subwf counter,w btfss status,carry goto light_green goto light_yellow ; ;******************LED************************************ light_red bcf portb,3 ;off yellow led bcf portb,2 ; off green led bsf portb,1 ;on red led clrf timerctr1 clrf finaltime goto begin light_green bcf portb,3 ;off yellow led bcf portb,1 ; off green led bsf portb,2 ;on red led clrf timerctr1 clrf finaltime goto begin light_yellow bcf portb,2 ;off yellow led bcf portb,1 ; off green led bsf portb,3 ;on red led ; ;********************Sleep timer************************ incfsz timerctr1 goto begin incf finaltime movlw .6 subwf finaltime,w btfss status,zero goto begin bcf portb,3 sleep goto start ; ;********************* Delay Subroutine****************** ; delay_5ms movlw .10 movwf temp1 ; outer1 movlw .167 movwf temp2 ; inner1 decfsz temp2 goto inner1 decfsz temp1 goto outer1 return ; ; delay_30us movlw .7 movwf loop go decfsz loop goto go nop nop return delay_40ms clrf temp1 clrf temp2 movlw .40 movwf temp1 ; outer2 movlw .167 movwf temp2 ; inner2 decfsz temp2 goto inner2 decfsz temp1 goto outer2 ; return ; ;*********************Look up table**************** getmin addwf pc,f retlw .96 retlw .100 retlw .114 retlw .128 retlw .142 retlw .158 retlw .172 retlw .186 retlw .200 retlw .216 retlw .230 retlw .244 ; getmax addwf pc,f retlw .100 retlw .114 retlw .128 retlw .142 retlw .158 retlw .172 retlw .186 retlw .200 retlw .216 retlw .230 retlw .244 retlw .252 ; end ; ;***************************************************************************** Cảm ơn anh thay đổi nội dung bởi: anzuus, 12-01-2006 lúc 08:07 AM. |
12-01-2006, 12:50 PM | #12 |
PIC Bang chủ
|
Em gửi báo cáo có phần cứng, lưu đồ giải thuật, chứ bây giờ anh không có thời gian để xem code đâu.
Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
18-01-2006, 10:54 PM | #13 |
Nhập môn đệ tử
Tham gia ngày: Dec 2005
Bài gửi: 7
: |
Chao anh!
Em có một câu hỏi về Delay time. Em đã tham khảo công thức tính delay time của anh. Nhưng công thức đó là tính delay trong chương trình (bao gồm cả chu kỳ máy của các câu lệnh) Trường hợp em làm là em tính thời gian từ khi sensor gửi tín hiệu (INIT signal) cho đến khi nhận được ECHO signal. Công thức của em là: Time = (Distance * 2) / V V: vận tốc của âm thanh ỏ 20 độ C ( V = 331.4 + 0.6*T do C) Ví dụ em đo khoảng cách 550mm ở nhiệt độ 20 độ C, Time = 3.203 ms Vấn đề của em là em phải convert ms thành chu kì máy. Em tính theo cách hiểu của em thì la 3203 cycle. Vì em dùng Crystal 4Mhz nên một chu kì máy là 1us, 3.203 tức là 3203 chu kì máy. Số chu kì máy đấy em nghĩ là đúng nhưng ko thể đưa vào chương trình, cái này em ko chắc vì em chưa thấy bao giờ. Bởi vì thông thường chu kỳ máy sẽ nhân với một hằng số để tính ra delay time :P Anh xem giúp em với. |
19-01-2006, 02:49 PM | #14 |
PIC Bang chủ
|
Em thử tính ra xem, 333m/s là bằng bao nhiêu mm/chuky máy?
Cần gì em phải giữ đơn vị đo m/s? tính ra mm/ckm là được. Như vậy, với một khoảng cách bất kỳ em nhân với flying time thì em sẽ có được khoảng cách chính xác thôi. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Ai da lam ADC cua con 12f683 thi giup nhe | students12 | Cơ bản về vi điều khiển và PIC | 3 | 05-04-2014 11:24 AM |
Mpasm cho nguoi moi bat dau | mafd_47a | MPASM | 14 | 03-02-2007 09:08 AM |
giup minh voi | students12 | Cơ bản về vi điều khiển và PIC | 6 | 04-10-2006 11:24 PM |
Xin Giup do | Do Van Cuong | Cơ bản về vi điều khiển và PIC | 0 | 12-01-2006 10:34 AM |