Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

IR-afstandsbediening gebruiken met Raspberry Pi zonder LIRC

Ik wilde een IR-afstandsbedieningsingang voor Raspberry Pi krijgen. Ik slaagde erin om LIRC geïnstalleerd en getest te krijgen. Alles was ok, behalve de allerlaatste stap. Toen ik de IR Remote Key-waarde aan het Python-programma wilde doorgeven, wordt deze niet correct doorgegeven. Het geeft een null-waarde door voor anykey. Ik kon niet achterhalen wat er mis is. Ik gaf het op en probeer een python-code te schrijven om de IR-afstandsbediening vast te leggen zonder LIRC te gebruiken.

Na wat lezen over hoe IR-afstandsbedieningen communiceren, onthulde de informatie die UART seriële communicatie gebruikt. Ik gebruikte IR-afstandsbediening DIY Kit HX1838. De IR-sensor decodeert de IR-golven en geeft de gegevens serieel door. Wat ik deed, was de gegevenswaarde serieel uit de IR-sensor lezen. Dit is een ruwe maar eenvoudige manier om IR-afstandsbedieningen te lezen voor eenvoudige toepassingen die in Raspberry Pi kunnen worden gebruikt.

De Raspberry Pi voorbereiden voor seriële UART-communicatie.

1. Moet ttyAMA0-vermeldingen in cmdline.txt verwijderen .

  • Maak eerst een back-up van het bestand met de kernelparameters cmdline.txt als cmdline_bp.txt

sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt

  • Bewerk het bestand cmdline.txt door de parameters met 'ttyAMA0' te verwijderen. d.w.z. 'console=ttyAMA0,115200' en 'kgdboc=ttyAMA0,115200'.

sudo nano /boot/cmdline.txt

Het resterende bestand ziet eruit als,

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Sla vervolgens de editor op en sluit deze. Sla het bestand op, Ctrl + O. Sluit de editor, Ctrl + X

2. Update de inittab bestand om de ttyAMA0 te maskeren

sudo nano /etc/inittab

Geef commentaar op de regel
'X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100′

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

Sla vervolgens de editor op en sluit deze. Sla het bestand op, Ctrl + O. Sluit de editor, Ctrl + X

Stap 1:Aan de slag

PySerial installeren

  • Om de seriële (UART) communicatie te laten werken, moet u de seriële module installeren.

sudo apt-get install python-serial

Zodra dit is geïnstalleerd, kan Python-code het gebruiken door serienummer te importeren .

  • Vervolgens moet GPIO 14 (TX) en GPIO 15 (RX) worden aangesloten. Aangezien het mijn doel is om de IR-signalen te ontvangen, heb ik alleen GPIO 15 (RX) aangesloten.
  • De IR-sensor heeft een 5V- en GND-verbinding nodig. Dan uitgangssignaal van IR-sensor aangesloten op GPIO 15.

De Python-code om het IR-signaal te lezen bleek heel erg eenvoudig te zijn. Als volgt.

import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400for i in range (0,15):# meestal is het IR-signaal voor een sleutel ongeveer 12-16 bytes data =ser.read( 1) # lees 1 byte per keer print ord(data) # de data gelezen in karakter, ord wordt geconverteerd naar ASCII-waarde

Nu leest deze code het IR-signaal met 1 byte per keer en drukt de waarde af.

Ik probeerde de baudrates met vallen en opstaan ​​en kwam uit op 2400 BPS. Hoewel seriële communicatie tot 115KBPS ondersteunt, is het interessant waarom IR een lagere snelheid gebruikt. Mijn gok is dat het betrouwbaarder zou zijn om een ​​lagere snelheid te gebruiken, omdat er minder kans is dat het IR-signaal 1 of 2 bits via de ether verliest.

Decodeer IR-afstandsbedieningssleutels

Nu is de volgende stap het decoderen van de sleutelwaarden. Ik heb hiervoor een standaard Samsung TV IR-afstandsbediening gebruikt.

Het eerste belangrijke punt is om erachter te komen hoeveel bytes aan gegevens voor elke sleutel. Het kan 12-16 bytes variëren. (degene die ik heb geprobeerd). Gewoonlijk is de bytelengte hetzelfde voor alle sleutels. Die bytes hebben headerbytes, databytes (om de sleutel te identificeren) en staartbytes. De headerbytes hebben een handtekening voor het model van de IR-afstandsbediening. Ik heb een Excel-blad gebruikt om de belangrijkste gegevenswaarden te verzamelen volgens de Antzy Carmasaic-pagina

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

Diep duikend in de vastgelegde sleutelwaarden, het laat zien dat byte 0-5 bestaat uit koptekst, herhaald voor alle sleutels. Byte 6 tot 11 gegevenswaarden vertegenwoordigen de sleutelwaarde. Er kunnen enkele staartwaarden zijn. Byte 12 is de staart voor de Samsung-afstandsbediening.

Toetsen in kaart brengen

De exacte manier voor deze afstandsbediening is om bytes 6-11 in een array op te slaan en te vergelijken met een nieuwe inkomende sleutel. In plaats daarvan heb ik als volgt een eenvoudig algoritme gedaan.

keyidentity =byte[6]+2*byte[7]+3*byte[8]+4*byte[9]+5*byte[10]+6*byte[11]

Het geeft bijna een unieke waarde voor elke sleutel. Je kunt een beter algoritme bedenken dan dit.

Ik heb de Python-code uitgebreid om informatie over de externe sleutel van Samsung vast te leggen. Nadat ik de toegewezen sleutelwaarde had berekend, heb ik deze in het python-programma zelf opgeslagen.

Bestand is bijgevoegd. naam – ir_serial3samsung.py. Samsung-afstandsbediening verzendt 2 sets gegevens. Dus ik leg 24 bytes vast om de buffer voor seriële gegevensopname van de Raspberry Pi te spoelen. Maar ik gebruik alleen de eerste set om te decoderen.

Wanneer u deze code uitvoert, worden de ingedrukte toetsen correct geïdentificeerd. U kunt de rest van de sleutels in de afstandsbediening decoderen door te kijken naar de waarde "keyidentity" die het programma afdrukt. Voeg vervolgens het programma toe om ze op te nemen.

Conclusie

Dit is een zeer eenvoudige en effectieve manier om een ​​afstandsbediening met Raspberry Pi met Python te gebruiken. U moet berekenen hoeveel totale bytes voor een sleutel, hoe lang de header-bytes, databytes en staartbytes. Aangezien u van A tot Z van dit proces op de hoogte bent, kunt u het eenvoudig aanpassen aan uw toepassing. Aangezien dit kleine python-codes zijn, is het heel gemakkelijk om fouten te debuggen als je een probleem tegenkomt.

Voor meer details:IR-afstandsbediening gebruiken met Raspberry Pi zonder LIRC


Productieproces

  1. Raspberry Pi-temperatuurprofiel met LabVIEW
  2. Temperatuur aflezen met DS18B20 | Raspberry Pi 2
  3. Temperatuur meten met RASPBERRY PI
  4. Python- en Raspberry Pi-temperatuursensor
  5. Temperatuur bewaken met Raspberry Pi
  6. Bewaking op afstand van het weer met Raspberry Pi
  7. SensorTag naar Blynk met Node-RED
  8. Bliksem detecteren met een Raspberry Pi
  9. Analoge sensoren zonder analoge ingangen op de Raspberry Pi
  10. Raspberry Pi universele afstandsbediening
  11. Bewegingssensor met Raspberry Pi