Za rješenje tih "problema" izradio sam ovaj uređaj koji se sastoji od prijamnika sa senzorom TSOP 31238 (može i neki drugi, primjerice TSOP 1738 ili TSOP 1838) te malog predajnika (daljinskog upravljača) s IR LED-icom.
Baza prijamnika je 16F84A koji za koji postoje dvije verzije koda; jedna (primitivna) je da reagira na bilo koji signal 38kHz (bilo koju tipku daljinskog), a druga je da reagira na samo određenu tipku. Ja sam ga programirao tako da reagira na POWER tipku daljinskog upravljača za TV (njezina naredba je 12), a onda napravio i vlastiti predajnik koji odašilje tu frekvenciju. Međutim, ako netko želi da prijamnik reagira na neku drugu tipku to je u kodu lako reprogramirati (potrebno je znati kod naredbe i moju 12-icu zamjeniti s dotičnim brojem).
TSOP mora biti sklonjen od svjetlosti koju emitiraju fluo cijevi jer ga ista ometa, to sam riješio tako što sam senzor izvukao izvan armature koja se nalazi na stropu.
Video:
https://www.youtube.com/watch?v=AAF0MIQ ... e=youtu.be
Slike: Shema prijamnika je "klasična", dakle vanjski oscilator - kristal 4MHz + 2 x 22pF kondenzatori, TSOP je vezan na PORTB.0 a relej na PORTA.0.
Source (pisano u MikroC):
Code: Select all
int x;
void citaj(){
int i;
x = 0;
for(i=0;i<8;i++){
delay_us(1778);
}
for(i=0;i<6;i++){
if(PORTB.RB0) x = x*2;
else x = x * 2 + 1;
delay_us(1778);
}
if (x==12) PORTA.RA0=~PORTA.RA0;
delay_ms(1500);
}
void main() {
TRISA = 0;
TRISB = 1;
PORTA.RA0 = 1;
while(1){
if(PORTB.RB0 == 0) citaj();
}
}
Code: Select all
void citaj(){
delay_us(1000);
if(PORTB.RB0 == 0){
PORTA.RA0=~PORTA.RA0;
delay_ms(1500);
}
}
void main() {
TRISA = 0;
TRISB = 1;
PORTA.RA0 = 1; //pali lampu
delay_ms(2000);
while(1){
if(PORTB.RB0 == 0) citaj();
}
}
Code: Select all
const int niz[24] = {889, 889,
889, 889,
1778, 889,
889, 889,
889, 889,
889, 889,
889, 889,
889, 889,
889, 1778,
889, 889,
1778, 889,
889, 0}; //power tipka GORENJE
// const int niz[24] = {889, 889,889, 889,1778, 889,889, 889,889, 889,889, 889,889, 889,889, 1778,1778, 889,889, 889,889, 889,889, 0}; volume +
int indeks = 0;
int mikrosekunde = 0;
int ugasen = 0;
void off(int ugasen){
if(ugasen == 889) delay_us(1027); //greska u tajmingu, podeseno rucno
if(ugasen == 1778) delay_us(2186); //-||-
}
void pulseIR(int mikrosekunde){
while (mikrosekunde > 0){
GP0_bit = 1;
delay_us(10);
GP0_bit = 0;
delay_us(10);
mikrosekunde-=32;
}
}
void salji_kod(){
for (indeks = 0; indeks < 24; indeks+=2){
pulseIR(niz[indeks]);
off(niz[indeks+1]);
}
GP0_bit = 0; //gasi LED-icu
delay_ms(100);
}
void main() {
TRISIO0_bit = 0; //gpio.0 je izlazan
GP0_bit = 0; //gasi LED-icu
while(1){
salji_kod();
}
}
Ovo je sve rađeno za Philipsov RC-5 protokol (http://www.sbprojects.com/knowledge/ir/rc5.php), mogu samo reći da Gorenje daljinski upravljač za TV koristi isti.