Produktinformationen "IR-Empfänger TSOP 31238, 38kHz "
Dies ist ein miniaturisierter Empfänger für Infrarot-Fernsteuerungssysteme. Die PIN-Diode und der Vorverstärker sind auf einem Leadframe montiert, das Epoxidgehäuse fungiert als IR-Filter. Das demodulierte Ausgangssignal kann direkt von einem Mikroprozessor dekodiert werden. Der TSOP312... ist mit allen gängigen IR-Fernbedienungsdatenformaten kompatibel. Der TSOP314... ist optimiert, um fast alle Störimpulse von energiesparenden Leuchtstofflampen zu unterdrücken.
Leistungsdaten:
Modell: IR-Empfänger Modul
Hersteller: VISHAY
Typ: Elektronik
Einsatz: IR Signalempfang
Enfallwinkel: 90 Grad
Chip: TSOP31238
Betriebsspannung: 2.5-5.5V DC
Frequenz: 38kHz
Distanz: bis 45m
Schnittstelen: Digital 0/5V
Logik: 1=NoSignal, 0=Signal
Wellenlänge: 950nm (IR)
Stromaufnahme: 0.15mA
Ausgangsstrom: max 3mA
Ausgangssignal: Digital
Demodulator: 10-70 Zyklen pro Burst
Kompatibilität: NEC, RC5, RC6, Sony, Thomson, Mitsubishi, Sharp
Abmessungen: 12.5mm hoch, 5.8x10mm
Info: Nur der TSOP312XX kann alle IR-Codes, der TSOP314 kann kein Sony, Mitsubishi Protokolle
Leistungsdaten:
Modell: IR-Empfänger Modul
Hersteller: VISHAY
Typ: Elektronik
Einsatz: IR Signalempfang
Enfallwinkel: 90 Grad
Chip: TSOP31238
Betriebsspannung: 2.5-5.5V DC
Frequenz: 38kHz
Distanz: bis 45m
Schnittstelen: Digital 0/5V
Logik: 1=NoSignal, 0=Signal
Wellenlänge: 950nm (IR)
Stromaufnahme: 0.15mA
Ausgangsstrom: max 3mA
Ausgangssignal: Digital
Demodulator: 10-70 Zyklen pro Burst
Kompatibilität: NEC, RC5, RC6, Sony, Thomson, Mitsubishi, Sharp
Abmessungen: 12.5mm hoch, 5.8x10mm
Info: Nur der TSOP312XX kann alle IR-Codes, der TSOP314 kann kein Sony, Mitsubishi Protokolle
Beispiel Empfänger für IR NEC Protokoll (Raspberry PICO in Python):
#####################################################################
# I R - D E C O D E R - N E C
# Sensor: IR-Empfänger TSOP 31238, 38kHz
# Anschluss: IR Sensor auf GP18 (Raspberry PICO Pin24)
# Decoder: IR NEC Protokoll # Betriebssp: RaspBerry PICO: +5.0V USB, IR Sensor +3.3V
# Version: V0.00 26.11.2022 /MM
# Change: 26.11.2022 Erstellung Grundprogramm
#
# Funktion: Es wird das NEC IR Signal decodiert
# Der TSOP Sensor ist ein Demodulator, ab 10 Pulse mit 38kHz
# ale ein 1 Signal decodiert (Der Aushang ist invers) Open Collector)
# Der Empfang ist ohne Repeat, d.h. wenn eine Taste lang
# gedrückt wird, wird der Code nur ein mal ausgegeben
# NEC Protokoll: [Start] - [Adr-Low] - [Adr-High] - [Wert] - [/Wert]
# Adr & Wert sind 8-Bit,
#
#
#
from machine import Pin # importing classes
from time import sleep # Import sleep
from time class import time # importing classes
import utime
IRPin=18 # GP18 (Raspberry PICO Pin24)
TiBitStart = time.ticks_ms() # Timer Sichern
TiBitStop = time.ticks_ms() # Timer Sichern
irtelegram = "" # 4x8Bit
irtelegramok = "" # 4x8Bit
OnBoardLED = machine.Pin(25, machine.Pin.OUT)
OnBoardLED.toggle() # LED OnBord Toggle - Init Blink
sleep(0.1) # Delay Init Blink
OnBoardLED.toggle() # LED OnBord Toggle - Init Blink
sleep(0.1)
irin = Pin(IRPin, Pin.IN, Pin.PULL_DOWN) # IR Eingang (1) im Ruhezustand
#defining interrupt on IR Signal Fall
def IR_INT_Fall(Pin): # Interrupt bei jeder sinkenden Flanke
global TiBitStart
global TiBitStop
global irtelegramok # Vollständiges Telegramm sichern
global irtelegram
TiBitStop = time.ticks_us()-TiBitStart # Zeit sichern
TiBitStart = time.ticks_us() # Timer Sichern
if TiBitStop>20000 and TiBitStop<50000 or len(irtelegram)>42: # STOP/START 41mS
#str(TiBitStop)
irtelegram = irtelegram + "Z"
if len(irtelegram>24:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = "" # Neues Telegramm Start
if TiBitStop>11000 and TiBitStop<15000: # START 9+4.5=13.5mS 11'000-14'000
#irtelegram = irtelegram + "X"
if len(irtelegram)>3:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = " " # Neues Telegramm Start
if TiBitStop>8000 and TiBitStop<10000: # 9.0mS 8'000-10'000
# NIE OK
irtelegram = irtelegram + "Y"
if len(irtelegram)>3:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = "" # Neues Telegramm Start
if TiBitStop>100 and TiBitStop<2000: # "0" = 1.125mS
irtelegram = irtelegram + "0"
if TiBitStop>2000 and TiBitStop<3000: # "1" = 2.25mS
irtelegram = irtelegram + "1"
IR_IN_Fall=Pin(18,Pin.IN) # setting GP17 as IR-Signal input
#Attach external interrupt to GP18 fall edge as an external event source
IR_IN_Fall.irq(trigger=Pin.IRQ_FALLING, handler=IR_INT_Fall)
def bin2dec(lsbmsb): # Binär zu Dezimal beginnend mit lsb
bitnr=0
wert=0
while bitnr<len(lsbmsb):
if lsbmsb[bitnr:bitnr+1]=="1": # nur 1en nach Wertigkeit aufsummieren
wert=wert + 2**bitnr # Wertigkeiten 2**n bitnr=bitnr+1 # Bitposition
return(wert)
while True: # Endlos schleife - Ausgabe
if len(irtelegramok)>12:
print("*"+irtelegramok[0:32]+"* ",end="") # Telegramm Rohdaten
print("ADR L:"+str(bin2dec(irtelegramok[0:8]))+" H:"+str(bin2dec(irtelegramok[8:16]))+", ",end="")
print("Taste:"+str(bin2dec(irtelegramok[16:24]))+" ",end="")
if bin2dec(irtelegramok[16:24])+bin2dec(irtelegramok[24:32])==255 and len(irtelegramok)>=32 and len(irtelegramok)<=33: # Fehler Kontrolle
print("OK")
else:
if len(irtelegramok)==44:
print("NoNEC")
else:
print("NOK")
irtelegramok = "" # Telegramm löschen wenn es angezeigt wurde
OnBoardLED.high() # LED OnBord ON - IR-Recive Blink
sleep(0.1)
OnBoardLED.low() # LED OnBord OFF - IR-Revive Blink
sleep(0.1) # Zeit bis zur nächsten Ausgabe von vorhandenen Telegrammen
#EndWhile
#####################################################################
# I R - D E C O D E R - N E C
# Sensor: IR-Empfänger TSOP 31238, 38kHz
# Anschluss: IR Sensor auf GP18 (Raspberry PICO Pin24)
# Decoder: IR NEC Protokoll # Betriebssp: RaspBerry PICO: +5.0V USB, IR Sensor +3.3V
# Version: V0.00 26.11.2022 /MM
# Change: 26.11.2022 Erstellung Grundprogramm
#
# Funktion: Es wird das NEC IR Signal decodiert
# Der TSOP Sensor ist ein Demodulator, ab 10 Pulse mit 38kHz
# ale ein 1 Signal decodiert (Der Aushang ist invers) Open Collector)
# Der Empfang ist ohne Repeat, d.h. wenn eine Taste lang
# gedrückt wird, wird der Code nur ein mal ausgegeben
# NEC Protokoll: [Start] - [Adr-Low] - [Adr-High] - [Wert] - [/Wert]
# Adr & Wert sind 8-Bit,
#
#
#
from machine import Pin # importing classes
from time import sleep # Import sleep
from time class import time # importing classes
import utime
IRPin=18 # GP18 (Raspberry PICO Pin24)
TiBitStart = time.ticks_ms() # Timer Sichern
TiBitStop = time.ticks_ms() # Timer Sichern
irtelegram = "" # 4x8Bit
irtelegramok = "" # 4x8Bit
OnBoardLED = machine.Pin(25, machine.Pin.OUT)
OnBoardLED.toggle() # LED OnBord Toggle - Init Blink
sleep(0.1) # Delay Init Blink
OnBoardLED.toggle() # LED OnBord Toggle - Init Blink
sleep(0.1)
irin = Pin(IRPin, Pin.IN, Pin.PULL_DOWN) # IR Eingang (1) im Ruhezustand
#defining interrupt on IR Signal Fall
def IR_INT_Fall(Pin): # Interrupt bei jeder sinkenden Flanke
global TiBitStart
global TiBitStop
global irtelegramok # Vollständiges Telegramm sichern
global irtelegram
TiBitStop = time.ticks_us()-TiBitStart # Zeit sichern
TiBitStart = time.ticks_us() # Timer Sichern
if TiBitStop>20000 and TiBitStop<50000 or len(irtelegram)>42: # STOP/START 41mS
#str(TiBitStop)
irtelegram = irtelegram + "Z"
if len(irtelegram>24:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = "" # Neues Telegramm Start
if TiBitStop>11000 and TiBitStop<15000: # START 9+4.5=13.5mS 11'000-14'000
#irtelegram = irtelegram + "X"
if len(irtelegram)>3:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = " " # Neues Telegramm Start
if TiBitStop>8000 and TiBitStop<10000: # 9.0mS 8'000-10'000
# NIE OK
irtelegram = irtelegram + "Y"
if len(irtelegram)>3:
irtelegramok = irtelegram # Telegramm vollständig und sichern
irtelegram = "" # Neues Telegramm Start
if TiBitStop>100 and TiBitStop<2000: # "0" = 1.125mS
irtelegram = irtelegram + "0"
if TiBitStop>2000 and TiBitStop<3000: # "1" = 2.25mS
irtelegram = irtelegram + "1"
IR_IN_Fall=Pin(18,Pin.IN) # setting GP17 as IR-Signal input
#Attach external interrupt to GP18 fall edge as an external event source
IR_IN_Fall.irq(trigger=Pin.IRQ_FALLING, handler=IR_INT_Fall)
def bin2dec(lsbmsb): # Binär zu Dezimal beginnend mit lsb
bitnr=0
wert=0
while bitnr<len(lsbmsb):
if lsbmsb[bitnr:bitnr+1]=="1": # nur 1en nach Wertigkeit aufsummieren
wert=wert + 2**bitnr # Wertigkeiten 2**n bitnr=bitnr+1 # Bitposition
return(wert)
while True: # Endlos schleife - Ausgabe
if len(irtelegramok)>12:
print("*"+irtelegramok[0:32]+"* ",end="") # Telegramm Rohdaten
print("ADR L:"+str(bin2dec(irtelegramok[0:8]))+" H:"+str(bin2dec(irtelegramok[8:16]))+", ",end="")
print("Taste:"+str(bin2dec(irtelegramok[16:24]))+" ",end="")
if bin2dec(irtelegramok[16:24])+bin2dec(irtelegramok[24:32])==255 and len(irtelegramok)>=32 and len(irtelegramok)<=33: # Fehler Kontrolle
print("OK")
else:
if len(irtelegramok)==44:
print("NoNEC")
else:
print("NOK")
irtelegramok = "" # Telegramm löschen wenn es angezeigt wurde
OnBoardLED.high() # LED OnBord ON - IR-Recive Blink
sleep(0.1)
OnBoardLED.low() # LED OnBord OFF - IR-Revive Blink
sleep(0.1) # Zeit bis zur nächsten Ausgabe von vorhandenen Telegrammen
#EndWhile
Anmelden