Roomba - Đèn LED hồng ngoại


7

Tôi đã tự hỏi nếu có thể tạo ra một bức tường ảo DIY cho iRobot roomba. Bất cứ ai có thể giải thích làm thế nào tôi đi tìm hiểu làm thế nào điều này hoạt động?

Câu trả lời:


2

Tôi đã thực hiện cách đây nhiều năm chỉ bằng cách thu tín hiệu gốc từ Rumba Wall bằng máy hiện sóng kỹ thuật số của tôi (nhưng có thể được thực hiện miễn phí bằng thẻ âm thanh PC) và viết chương trình PIC thực sự đơn giản để phát lại tín hiệu tương tự với sóng mang 38Khz sử dụng NOP và một vài chu kỳ.

Sau đó, tôi đã xây dựng trên một bảng proto một mạch đơn giản với PIC12F675, một bóng bán dẫn, một đèn led IR hẹp và các tế bào NiMh 4xAA.

30 phút làm việc và một chiến thắng hoàn hảo :-)

Tôi vẫn có mã, nhưng tôi thực sự xấu hổ khi thể hiện nó, nó thực sự là một nỗi kinh hoàng mã hóa: D

EDIT: Bạn đã yêu cầu nó, bạn đã nhận nó. VÀ BẠN ĐÃ HỨA: Không có bình luận ... nó chỉ hoạt động. ;-)

list    p=12F629
    radix   dec
    include "p12f629.inc"
    __CONFIG    _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.
d1      equ     20h 
d2      equ     21h
d3      equ     22h
d4      equ     23h
d5      equ     24h
d6      equ 25h
fileA       equ 26h ;delay fileA
fileB       equ 27h ;delay fileB
filec       equ 28h ;delay fileC
pin7        equ 0   ;GP0  
pin6        equ 1   ;GP1
pin5        equ 2   ;GP2
pin4        equ 3   ;GP3 
pin3        equ 4   ;GP4 
pin2        equ 5   ;GP5 

Start   org 0x0000
    nop
    nop
    nop
    nop         
    nop
    nop
SetUp   bsf STATUS, RP0     ;Bank 1
    movlw   b'10000110' 
    movwf   OPTION_REG
    movlw   b'00000000' 
    movwf   TRISIO
    call    0x3ff       
    movwf   OSCCAL  
    bcf STATUS, RP0 ;bank 0
    clrf    GPIO        
    goto    Main        
delay_1s
    movlw    0x07
    movwf    d1
    movlw    0x2F   
    movwf    d2
    movlw    0x01
    movwf    d3
Delay_0
    decfsz   d1, f
    goto     $+2
    decfsz   d2, f
    goto     $+2
    decfsz   d3, f
    goto    Delay_0
    goto    $+1
    goto    $+1
    goto    $+1
    return
do_pulse
    movlw   b'11111111' 
    movwf   GPIO
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    movlw   b'00000000' 
    movwf   GPIO
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    return
do_not_pulse
    movlw   b'00000000' 
    movwf   GPIO
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    movlw   b'00000000' 
    movwf   GPIO
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    return
Do_1
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    call do_pulse
    return
Do_0
    call do_not_pulse
    call do_not_pulse   
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    call do_not_pulse
    return
Main
    call Do_1
    call Do_1   
    call Do_1
    call Do_0
    call Do_1
    call Do_0
    call Do_0
    call Do_0

    call Do_1
    call Do_1   
    call Do_1
    call Do_0
    call Do_1
    call Do_0
    call Do_0
    call Do_0

    call Do_1
    call Do_0
    call Do_0
    call Do_0

    call Do_1
    call Do_0
    call Do_0
    call Do_0

    call Do_1
    call Do_1   
    call Do_1
    call Do_0
    call Do_1
    call Do_0
    call Do_0
    call Do_0

    call delay_1s

    goto Main

    end@

Điều này nghe có vẻ ý tưởng. Bạn có thể chia sẻ mã hoặc dữ liệu tín hiệu bạn đã khám phá?
ElectroNoob

Tôi nghĩ rằng tôi vẫn còn ở đâu đó 'ảnh chụp màn hình phạm vi, tối nay tôi sẽ tìm kiếm nó và tôi sẽ đăng nó và / hoặc mã. Nhưng tôi không muốn đọc KHÔNG NÓI về sự khủng khiếp trong chương trình đó! :-)
Axeman

1
@FakeName Grrrrrr .... :-)
Axeman

1
Trên thực tế, tôi thực sự tin rằng về cơ bản không thể phân biệt được trình biên dịch xấu ngoài trình biên dịch tốt. Như vậy, tôi không nghĩ rằng bất cứ ai ở đây sẽ đặc biệt bận tâm.
Sói Connor

1
Tôi gần như đồng ý với bạn, nhưng có một số danh sách lắp ráp không có lý do. như cái ở trên ... :-)
Axeman

10

Điều đó nên được thực hiện. Bức tường ảo chỉ là đèn hiệu sử dụng bộ phát hồng ngoại. Chúng ta đang nói về điều này:

nhập mô tả hình ảnh ở đây

Vì vậy, nó chỉ là một đèn LED IR, một điện trở loạt và pin? Rất có thể là không, thật không may. Đèn hiệu có thể sẽ sử dụng tín hiệu được mã hóa, do đó Roomba có thể phân biệt nó với các nguồn IR khác. Bạn sẽ phải biết bước sóng IR nào nó sử dụng, mặc dù 950nm là một dự đoán tốt. Sau đó, bạn cần một Tường ảo hiện có để ghi lại tín hiệu của nó bằng điốt quang hồng ngoại và vi điều khiển. Khi bạn có tín hiệu, cùng một vi điều khiển có thể gửi nó qua đèn LED hồng ngoại.
Đó là trường hợp xấu nhất. Nếu họ chọn tín hiệu đơn giản hơn thì đó có thể là một chuỗi xung ổn định, như Fake Name gợi ý. Trong trường hợp đó, bạn có thể sử dụng máy hiện sóng hoặc vi điều khiển để đo tần số và chu kỳ nhiệm vụ. Cũng trong trường hợp đó, vi điều khiển là cách đơn giản nhất để tạo lại tín hiệu.

Không phải ai cũng bị thuyết phục về điều này. Tuy nhiên, vi điều khiển không cần một thành phần bên ngoài duy nhất và chương trình cần thiết có thể được viết bằng phút, về thời gian bạn cần tính toán các thành phần cho một điện áp 555 AMV. Độ chính xác: 1%. (tụ điện gốm 1% cho điện áp 555 AMV có giá gần bằng bộ vi điều khiển.) Và 555 không thể thực hiện chu kỳ nhiệm vụ dưới 50% mà không có thành phần nào khác. Các vi điều khiển có thể làm bất kỳ chu kỳ nhiệm vụ. Chào mừng đến với thế kỷ 21.

Bạn sẽ cần một số kiến ​​thức về vi điều khiển lập trình. Phần còn lại chỉ là một vài thành phần quang điện tử, như đèn LED và photodiode. Và tất nhiên bạn sẽ phải mượn Tường ảo thương mại.


Tôi nghi ngờ họ thực hiện bất kỳ điều chế thực sự nào, tôi sẽ cá rằng đó chỉ là một tàu sân bay đơn giản. Nếu bạn có một bức tường ảo bán lẻ thực tế, hãy sử dụng photodiode để đánh hơi tín hiệu (hoặc tách nó ra và thăm dò trực tiếp các phần bên trong) bằng máy hiện sóng.
Sói Connor

2
Also in that case the microcontroller is the simplest way to regenerate the signal. Có gì ? Cách dễ nhất để tạo tín hiệu tần số cố định là bộ tạo dao động phần cứng, giống như thông thường 555. MCU là WAY quá mức và sẽ kéo theo các bó phức tạp phần mềm. Về cơ bản, nó cần một cái gì đó sẽ mất 20 phút để hàn lại với nhau trên một bảng hoàn hảo, và biến nó thành một công việc kéo dài nhiều giờ.
Sói Connor

4
@Fake - sử dụng một vi điều khiển, nó cần chính xác 1 (một) thành phần và bạn có một sóng hình chữ nhật với độ chính xác 1% ở bất kỳ chu kỳ nhiệm vụ nào bạn muốn.
stevenvh

1
@stevenvh Như bạn đã nói : For someone who's acquainted with the microcontroller. Mặt khác, đó là hàng giờ và hàng giờ để đi vào quirks của nền tảng, tìm kiếm errata và như vậy. Tất nhiên, có mạch hỗ trợ cần thiết và một lập trình viên. Một bộ định thời đơn giản có điện áp đầu vào rộng, trong khi một vi điều khiển thường sẽ yêu cầu đầu vào 5 V hoặc 3,3 V, điều này tự nó mang lại sự phức tạp hơn như bộ điều chỉnh điện áp, v.v.
AndrejaKo

3
BTW: Roomba có thể phân biệt giữa một bức tường ảo và trạm nối của nó, ngụ ý có một số loại dữ liệu chứa trong chuỗi xung.
jippie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.