산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

LIRC 없이 Raspberry Pi와 함께 IR 리모컨 사용

나는 Raspberry Pi에 대한 IR 원격 입력을 원했습니다. LIRC를 설치하고 테스트했습니다. 맨 마지막 단계를 제외하고는 모든 것이 괜찮았습니다. IR 원격 키 값을 Python 프로그램에 전달하려고 할 때 올바르게 전달하지 않습니다. anykey에 대해 null 값을 전달합니다. 무엇이 잘못되었는지 알 수 없었습니다. 포기하고 LIRC를 사용하지 않고 IR 리모컨을 캡처하는 파이썬 코드를 작성하려고 합니다.

IR 원격 통신 방법에 대해 읽은 후 UART 직렬 통신을 사용하는 정보가 공개되었습니다. IR 리모트 DIY Kit HX1838을 사용했습니다. IR 센서는 IR 파장을 디코딩하고 데이터를 직렬로 전달합니다. 내가 한 것은 IR 센서에서 나오는 데이터 값을 직렬로 읽는 것이었습니다. 이것은 조잡하지만 Raspberry Pi에서 사용할 수 있는 간단한 애플리케이션에 대한 IR 리모컨을 읽는 간단한 방법입니다.

UART 직렬 통신을 위한 Raspberry Pi 준비

1. cmdline.txt에서 ttyAMA0 항목을 제거해야 함 .

<울>
  • 먼저 커널 매개변수 cmdline.txt가 포함된 파일을 cmdline_bp.txt로 백업합니다.
  • sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt

    <울>
  • 'ttyAMA0'이 포함된 매개변수를 제거하여 cmdline.txt 파일을 편집합니다. 즉. 'console=ttyAMA0,115200' 및 'kgdbok=ttyAMA0,115200'.
  • sudo nano /boot/cmdline.txt

    나머지 파일은 다음과 같습니다.

    dwc_otg.lpm_enable=0 콘솔=tty1 루트=/dev/mmcblk0p6 rootfstype=ext4 엘리베이터=데드라인 루트 대기

    그런 다음 편집기를 저장하고 닫습니다. 파일 저장 Ctrl + O. 편집기 닫기 Ctrl + X

    2. inittab 업데이트 ttyAMA0을 마스킹하는 파일

    sudo nano /etc/inittab

    줄을 주석 처리하십시오.
    'X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100'

    #X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

    그런 다음 편집기를 저장하고 닫습니다. 파일 저장 Ctrl + O. 편집기 닫기 Ctrl + X

    1단계:시작하기

    pySerial 설치

    <울>
  • 직렬(UART) 통신이 작동하려면 직렬 모듈을 설치해야 합니다.
  • sudo apt-get install python-serial

    이것이 설치되면 Python 코드는 직렬 가져오기를 수행하여 사용할 수 있습니다. .

    <울>
  • 다음으로 GPIO 14(TX)와 GPIO 15(RX)를 연결해야 합니다. 내 목표는 IR 신호를 수신하는 것이므로 GPIO 15(RX)만 연결했습니다.
  • IR 센서는 5V 및 GND 연결이 필요합니다. 그런 다음 GPIO 15에 연결된 IR 센서의 신호를 출력합니다.
  • IR 신호를 읽는 Python 코드는 매우 간단합니다. 다음과 같습니다.

    import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400for i in range (0,15):# 일반적으로 키에 대한 IR 신호는 약 12-16바이트입니다. data =ser.read( 1) # 한 번에 1바이트씩 읽기 print ord(data) # 문자로 읽은 데이터, ord는 ASCII 값으로 변환

    이제 이 코드는 IR 신호를 한 번에 1바이트씩 읽고 값을 출력합니다.

    나는 시행 착오에 의해 전송 속도를 시도하고 2400 BPS에 정착했습니다. 직렬 통신은 최대 115KBPS를 지원하지만 왜 IR이 더 낮은 속도를 사용하는지 흥미롭습니다. 내 생각에는 IR 신호가 무선으로 1 또는 2비트를 느슨하게 할 가능성이 적기 때문에 저속을 사용하는 것이 더 안정적일 것입니다.

    IR 원격 키 디코딩

    이제 다음 단계는 키 값을 디코딩하는 것입니다. 이를 위해 표준 삼성 TV IR 리모컨을 사용했습니다.

    첫 번째 중요한 점은 각 키의 데이터 바이트 수를 파악하는 것입니다. 12-16바이트로 다양할 수 있습니다. (내가 시도한 것들). 일반적으로 바이트 길이는 모든 키에 대해 동일합니다. 이러한 바이트에는 헤더 바이트, 데이터 바이트(키 식별용) 및 테일 바이트가 있습니다. 헤더 바이트에는 IR 리모컨 모델에 대한 서명이 있습니다. Antzy Carmasaic 페이지에 이어 주요 데이터 값을 엑셀 시트로 수집했습니다.

    http://www.instructables.com/id/How-To-Useemulate-…

    캡처된 키 값을 자세히 살펴보면 바이트 0-5가 모든 키에 대해 반복되는 헤더로 구성되어 있음을 보여줍니다. Byte 6 ~ 11 데이터 값은 Key 값을 나타냅니다. 꼬리 값이 있을 수 있습니다. 바이트 12는 삼성 리모컨의 꼬리입니다.

    매핑 키

    이 리모컨의 정확한 방법은 바이트 6-11을 배열에 저장하고 새로운 수신 키와 비교하는 것입니다. 대신 다음과 같은 간단한 알고리즘을 수행했습니다.

    키 ID =바이트[6]+2*바이트[7]+3*바이트[8]+4*바이트[9]+5*바이트[10]+6*바이트[11]

    모든 키에 대해 거의 고유한 값을 제공합니다. 이보다 더 나은 알고리즘을 찾을 수 있습니다.

    Python 코드를 확장하여 Samsung 원격 키 정보를 캡처했습니다. 매핑된 키 값을 계산한 다음 파이썬 프로그램 자체에 저장했습니다.

    파일이 첨부되어 있습니다. 이름 – ir_serial3samsung.py. 삼성 리모컨은 2세트의 데이터를 전송합니다. 그래서 Raspberry Pi 직렬 데이터 캡처 버퍼를 플러시하기 위해 24바이트를 캡처합니다. 하지만 디코딩에는 첫 번째 세트만 사용합니다.

    이 코드를 실행하면 누른 키를 올바르게 식별합니다. 프로그램이 출력하는 "keyidentity" 값을 보면 리모컨의 나머지 키를 디코딩할 수 있습니다. 그런 다음 프로그램을 추가하여 포함합니다.

    결론

    이것은 Python과 함께 Raspberry Pi로 원격 제어를 사용하는 매우 간단하고 효과적인 방법입니다. 키의 총 바이트 수, 헤더 바이트, 데이터 바이트 및 테일 바이트의 길이를 파악해야 합니다. 이 프로세스의 A부터 Z까지 알고 있기 때문에 애플리케이션에 맞게 쉽게 수정할 수 있습니다. 이것들은 작은 파이썬 코드이기 때문에 문제가 발생하면 디버그하기가 매우 쉽습니다.

    자세한 내용:LIRC 없이 Raspberry Pi와 함께 IR Remote 사용


    제조공정

    1. LabVIEW를 사용한 Raspberry Pi 온도 프로파일
    2. DS18B20으로 온도 읽기 | 라즈베리 파이 2
    3. RASPBERRY PI로 온도 측정
    4. Python 및 Raspberry Pi 온도 센서
    5. Raspberry Pi로 온도 모니터링
    6. Raspberry Pi를 사용한 원격 날씨 모니터링
    7. Node-RED를 사용하여 Blynk하는 SensorTag
    8. Raspberry Pi로 번개 감지
    9. Raspberry Pi에서 아날로그 입력이 없는 아날로그 센서
    10. Raspberry Pi 범용 리모컨