Ich habe mich gefragt, ob es möglich ist, eine virtuelle DIY-Wand für den iRobot Roomba zu erstellen. Kann mir jemand erklären, wie ich herausfinden würde, wie das funktioniert?
Ich habe das vor Jahren gemacht, indem ich einfach das Originalsignal von der Rumba Wall mit meinem digitalen Oszilloskop aufgenommen habe (kann aber kostenlos mit der PC-Audiokarte gemacht werden) und ein wirklich einfaches PIC-Programm geschrieben habe, um dasselbe Signal nur mit einem 38-kHz-Träger wiederzugeben mit NOPs und einigen Zyklen.
Ich baute dann auf einer Protoboard eine einfache Schaltung mit einem PIC12F675, einem Transistor, einer Schmalstrahl-IR-LED und 4xAA-NiMh-Zellen.
30 Minuten Arbeit und ein makelloser Sieg :-)
Ich habe immer noch den Code, aber ich schäme mich wirklich, ihn zu zeigen, es war wirklich ein Codierungshorror: D.
EDIT: Du hast danach gefragt, du hast es bekommen. UND SIE VERSPRECHEN: Kein Kommentar ... es funktioniert einfach. ;-);
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@
Das sollte machbar sein. Die virtuelle Wand ist nur ein Leuchtfeuer mit einem IR-Emitter. Wir sprechen darüber:
Es ist also nur eine IR-LED, ein Vorwiderstand und eine Batterie? Höchstwahrscheinlich leider nicht. Das Leuchtfeuer wird wahrscheinlich ein codiertes Signal verwenden, sodass der Roomba es von anderen IR-Quellen unterscheiden kann. Sie müssten wissen, welche IR-Wellenlänge verwendet wird, obwohl 950 nm eine gute Vermutung ist. Dann benötigen Sie eine vorhandene virtuelle Wand, um das Signal mit einer IR-Fotodiode und einem Mikrocontroller aufzuzeichnen. Sobald Sie das Signal haben, kann derselbe Mikrocontroller es über eine IR-LED senden.
Das ist der schlimmste Fall. Wenn sie sich für ein einfacheres Signal entscheiden würden, wäre es wahrscheinlich eine stetige Impulsfolge, wie Fake Name vorschlägt. In diesem Fall können Sie ein Oszilloskop oder den Mikrocontroller verwenden, um Frequenz und Arbeitszyklus zu messen. Auch in diesem Fall ist der Mikrocontroller der einfachste Weg, das Signal zu regenerieren.
Sie benötigen einige Kenntnisse in der Programmierung von Mikrocontrollern. Der Rest sind nur ein paar optoelektronische Komponenten wie die LED und die Fotodiode. Und natürlich müssen Sie sich eine kommerzielle virtuelle Wand ausleihen.
quelle
Also in that case the microcontroller is the simplest way to regenerate the signal.
Was ? Der einfachste Weg, ein Signal mit fester Frequenz zu erzeugen, ist ein astabiler Hardware-Oszillator wie der übliche 555. Eine MCU ist ein WAY-Overkill und würde Bündel von Softwarekomplexität mit sich bringen. Grundsätzlich dauert es 20 Minuten, bis eine Perf-Platine zusammengelötet ist, und daraus wird ein mehrstündiges Unterfangen.For someone who's acquainted with the microcontroller
. Ansonsten dauert es Stunden und Stunden, bis man in die Macken der Plattform gerät, nach Errata sucht und so weiter. Natürlich gibt es die benötigte Unterstützungsschaltung und einen Programmierer. Ein einfacher Timer hat eine breite Eingangsspannung, während ein Mikrocontroller normalerweise einen 5-V- oder 3,3-V-Eingang benötigt, was mit sich selbst eine größere Komplexität wie Spannungsregler usw. mit sich bringt.