当前位置: 首页> 汽车> 车展 > 嵌入式人工智能(42-基于树莓派4B的红外遥控)

嵌入式人工智能(42-基于树莓派4B的红外遥控)

时间:2025/7/11 10:53:28来源:https://blog.csdn.net/u010152658/article/details/140786452 浏览次数: 0次

1、简介

红外遥控想必对大家来说都不陌生,红外也属于无线通信的一种,只要是无线通信,必然要用电磁波,要理解无线通信的本质和原理,不管用哪个频段都要学习电磁场与电磁波,这是一个难度很大的课,同学们好好学哈,我们实验都是很简单的。

红外遥控是一种通过红外光信号来控制电子设备的技术。它基于红外发射器和接收器之间的通信,通过发送特定的红外信号来模拟按下遥控器上的按键。

红外遥控器通常由两部分组成:发射器和接收器。发射器负责发送红外信号,而接收器用于接收并解码这些信号,然后将其传递给电子设备进行相应的操作。

在红外遥控中,不同的按钮通常对应于不同的红外信号,这些信号通过编码技术进行区分。当用户按下遥控器上的按钮时,发射器会发送相应的红外信号,接收器接收到信号后进行解码,然后将命令传递给电子设备执行相应的操作,比如调整音量、切换频道等。

红外遥控技术被广泛应用于电视、空调、音响等各种家电设备,它提供了方便快捷的控制方式,使用户能够轻松地操作设备而不必直接接触它们。同时,红外遥控还具有成本低廉、稳定可靠等优点,在家庭和办公环境中得到了广泛的应用。

上图一个是发射器,一个是接收器,接收器和树莓派开发板连接,发射器拿手里进行红外遥控,实际上就是发送不同的红外信号,接收器解码,开发板执行相应的动作。

2、接线与相应环境配置

这个接收模块只有3个引脚,VCC接5V,GND接地,DO接GPIO23(BOARD16),接线很简单,但是红外模块的系统环境设置比较复杂。

(1)安装 lirc模块

sudo apt-get install lirc

安装lirc软件包,同时系统会安装gir1.2-vte-2.91 liblirc0 libportaudio2 libusb-0.1-4 lirc python3-yaml软件包。

(2)加载模块

sudo nano /boot/firmware/config.txt

(3)修改配置文件

进入/etc/lirc/lirc_options.conf

sudo nano /etc/lirc/lirc_options.conf
driver = default
device = /dev/lirc0

sudo reboot

(4)测试

mode2 -m -d /dev/lirc0  然后按遥控器就可以收到很多数字了

如果不行开启下lircd服务

sudo service lircd status

(5)录入按键

树莓派可以通过lirc库发射接收红外信号,所以要先通过lirc库进行红外信号的配置后再发射
lirc软件包有一个irrecord命令可以配置按键,但是准确度不高。
这里我们仅用它输出配置文件格式sudo irrecord -f -d /dev/lirc0 

这个录入按键实在是太繁琐,我们干脆找一个别人录好的直接用就行了。

sudo cp lircd.conf /etc/lirc/lircd.conf或者复制内容到lircd.conf

这个文件的内容大概是这样,后续会将我的所有代码和文件给大家,这个内容太多就不放里面了。

然后就可以测试按键对应码了

以上是红外遥控模块在Linux系统上的测试。如果都OK的话,说明没问题,我们可以继续。

3、红外遥控原理

红外发射信号0和1的表示方式:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的"0";以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1。

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如下图。 

一个命令只发送一次,即使遥控器上的按键一直按着。但是会每110mS发送一次代码,直到遥控器按键释放。重复码比较简单:一个9mS的AGC脉冲、2.25mS间隔、560uS脉冲。


 下面是红外遥控模块的驱动,Infrared.py

import RPi.GPIO as GPIO
import timePIN = 16
global Keynumdef GPIO_Init():GPIO.setmode(GPIO.BOARD)GPIO.setup(PIN,GPIO.IN,GPIO.PUD_UP)def Get_Keynum():if GPIO.input(PIN) == 0:count = 0while GPIO.input(PIN) == 0 and count < 200:count += 1time.sleep(0.00006)count = 0while GPIO.input(PIN) == 1 and count < 80:count += 1time.sleep(0.00006)idx = 0cnt = 0data = [0,0,0,0]for i in range(0,32):count = 0while GPIO.input(PIN) == 0 and count < 15:count += 1time.sleep(0.00006)count = 0while GPIO.input(PIN) == 1 and count < 40:count += 1time.sleep(0.00006)if count > 8:data[idx] |= 1<<cntif cnt == 7:cnt = 0idx += 1else:cnt += 1if data[0]+data[1] == 0xFF and data[2]+data[3] == 0xFF:#exec_cmd(data[2])  #可以不要,如果不用系统提醒按的是哪个键keynum = data[2]return keynum

4、实验代码和现象

红外遥控实验主要是通过接收不同的键值,获得不同的返回值,然后根据返回值触发相应的功能,那么我们就让接收到的键解码后的返回值显示到数码管上面。(后面我随便写了几个,视频里面没有)

import Infrared
import TM1638def main_loop():while True:keynum = Infrared.Get_Keynum()if keynum !=None:print(keynum)tm.number(int(keynum))if __name__ == '__main__':Infrared.GPIO_Init()tm=TM1638.TM1638(stb=36,clk=38,dio=40) tm.brightness(2)try:main_loop()except KeyboardInterrupt:print("程序结束!")finally:tm.clear()

红外遥控

            if keynum == 12:tm.led(0,1)elif keynum == 24:tm.led(1,1)elif keynum == 22:tm.leds(0b00000000)else:tm.leds(0b11111111)

不过现在都有蓝牙、wifi了,红外模块显得有些尴尬了,只能适应一些低速的设备控制。

关键字:嵌入式人工智能(42-基于树莓派4B的红外遥控)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: