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

news2024/9/24 13:15:27

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 time

PIN = 16
global Keynum

def GPIO_Init():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(PIN,GPIO.IN,GPIO.PUD_UP)


def Get_Keynum():
    if GPIO.input(PIN) == 0:
        count = 0
        while GPIO.input(PIN) == 0 and count < 200:
            count += 1
            time.sleep(0.00006)

        count = 0
        while GPIO.input(PIN) == 1 and count < 80:
            count += 1
            time.sleep(0.00006)
        idx = 0
        cnt = 0
        data = [0,0,0,0]
        for i in range(0,32):
            count = 0
            while GPIO.input(PIN) == 0 and count < 15:
                count += 1
                time.sleep(0.00006)

            count = 0
            while GPIO.input(PIN) == 1 and count < 40:
                count += 1
                time.sleep(0.00006)
            if count > 8:
                data[idx] |= 1<<cnt
            if cnt == 7:
                cnt = 0
                idx += 1
            else:
                cnt += 1
        if data[0]+data[1] == 0xFF and data[2]+data[3] == 0xFF:
            #exec_cmd(data[2])  #可以不要,如果不用系统提醒按的是哪个键
            keynum = data[2]
            return keynum

4、实验代码和现象

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

import Infrared
import TM1638


def 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了,红外模块显得有些尴尬了,只能适应一些低速的设备控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IT事件经理在数字企业中的角色和责任

什么是IT事件经理&#xff1f; IT事件经理有时也被称为事件指挥官&#xff0c;他们承担着管理组织事件响应的总体责任&#xff0c;从委派各种事件响应任务到与每个利益相关者进行沟通和协调。 示例&#xff1a;当一个全球性的电子商务平台在一次销售活动中流量激增&#xff0c…

George Danezis谈Mysticeti的共识性能

Sui的新共识引擎Mysticeti已经在主网上开始分阶段推出。Mysten Labs联合创始人兼首席科学家George Danezis在采访中&#xff0c;讨论了其低延迟如何通过高性能应用程序提升用户体验。 采访视频&#xff1a; https://youtu.be/WHvtPQUa2Q0 中文译文&#xff1a;延迟和吞吐量对…

LSTM与GNN强强结合!全新架构带来10倍推理速度提升

今天来推荐一个深度学习领域很有创新性的研究方向&#xff1a;LSTM结合GNN。 GNN擅长处理图数据关系和特征&#xff0c;而LSTM擅长处理时间序列数据及长期依赖关系。通过将两者结合&#xff0c;我们可以有效提升时间序列预测的准确性和效率&#xff0c;尤其是在处理空间和时间…

手搓交换排序、归并排序、计数排序

文章目录 交换排序冒泡排序快速排序hoare版本挖坑法lomuto前后指针 非递归快速排序 归并排序实现计数实现排序代码测试排序算法性能 交换排序 冒泡排序 void BubbleSort(int* arr, int n) {for (int i 0; i < n; i){int flag 0;for (int j 0; j < n - i - 1; j){if …

day13 Java基础——逻辑运算符,位运算符及面试题

day13 Java基础——逻辑运算符&#xff0c;位运算符及面试题 1. 逻辑运算符&#xff1a;与&#xff0c;或&#xff0c;非 package operator;public class Demo07 {public static void main(String[] args) {boolean a true;boolean b false;System.out.println("a &…

【网络问题】网络诊断:远程计算机或设备将不接受连接的解决办法/DNS服务器可能不可用

当网络出现问题时&#xff0c;一定要点击“请尝试运行Windows网络诊断”来获取具体的网络问题&#xff0c; 今天碰到且得以解决的两个问题&#xff1a; 一、远程计算机或设备将不接受连接的解决办法 打开控制面板——点击“网络和Internet”——点击“Internet选项”&#xf…

电脑自动重启是什么原因?重启原因排查和解决办法!

当你的电脑突然毫无预警地自动重启&#xff0c;不仅打断了工作流程&#xff0c;还可能导致未保存的数据丢失&#xff0c;这无疑令人很懊恼&#xff0c;那么&#xff0c;电脑自动重启是什么原因呢&#xff1f;有什么方法可以解决呢&#xff1f;别担心&#xff0c;在大多数情况下…

《从零开始:使用Python构建简单Web爬虫》

前言 随着互联网信息的爆炸性增长&#xff0c;如何高效地获取和处理这些数据变得越来越重要。Web爬虫作为一种自动化工具&#xff0c;可以帮助我们快速抓取所需的网页内容。本文将介绍如何使用Python编写一个简单的Web爬虫&#xff0c;并通过实例演示其基本用法。 准备工作 …

创建互动照片墙:HTML、CSS 和 JavaScript 实战

在这个数字化时代&#xff0c;照片已经成为我们生活中不可或缺的一部分。无论是记录重要时刻&#xff0c;还是分享日常生活&#xff0c;我们都离不开照片。今天&#xff0c;我们将一起探索如何使用 HTML、CSS 和 JavaScript 创建一个互动的照片墙程序&#xff0c;让您可以轻松展…

四步构建App跨渠道归因分析方法

通常来讲&#xff0c;在互联网场景中&#xff0c;最简单也最常用的App归因模型就是基于最后一次点击来源进行归因转化&#xff0c;因为越靠近决策环节的时刻通常影响就越大。 不过有机构对营销测量的研究发现&#xff0c;只有11%的营销人员对他们的归因模型的准确性感到“非常…

大语言模型(LLM)快速理解

自2022年&#xff0c;ChatGPT发布之后&#xff0c;大语言模型&#xff08;Large Language Model&#xff09;&#xff0c;简称LLM掀起了一波狂潮。作为学习理解LLM的开始&#xff0c;先来整体理解一下大语言模型。 一、发展历史 大语言模型的发展历史可以追溯到早期的语言模型…

视频孪生:如何有效利用智慧机房里的视频监控系统?

机房是存储设备和数据的重要场所。常见的机房安全隐患有电源不稳定、设备温度异常、空调及新风系统故障、机房漏水等&#xff0c;因此需要管理人员全天轮班值守巡检。传统机房运维工作繁琐且效率低下&#xff0c;对监控设备的利用率不高&#xff0c;而视频孪生技术能很好地解决…

02 pip指令的使用

pip 是一个现代的&#xff0c;通用的 Python 包管理工具 。提供了对Python 包的查找、下载、安装、卸载的功能。 1. 在安装好的python环境下&#xff0c;进入以下目录可以查看到pip命令。 同样在windows命令窗口进行测试&#xff0c;pip命令是否可用。WindowsR键&#xff0c;使…

“职场中,不要和上司作对”,真的很重要吗?你认同这句话吗?

在职场上&#xff0c;领导对下属的期望永远都只有两个字&#xff0c;不是忠诚&#xff0c;也不是能力&#xff0c;而是省心。 领导对下属的要求就是别让我操心。 在职场中&#xff0c;通常面临的首要问题就是如何与领导相处。 把职场中的前辈当作老师来尊重&#xff0c;你尊…

基础复习(多线程)

线程创建方式 1.继承Thread类 2.实现Runable接口 3.Callable接口实现有返回值的线程 &#xff08;1&#xff09;第一种 提供了一个类叫做Thread&#xff0c;此类的对象用来表示线程。创建线程并执行线程的步骤如下 1.定义一个子类继承Thread类&#xff0c;并重写run方法 2.创建…

无密码sudo

文件路径&#xff1a;/etc/sudoers 修改sudoers文件 进去root 权限&#xff1a;sudo su 加入sudoers 写权限&#xff1a;chmod w sudoers 修改sudoers文件&#xff1a;vim sudoers 根据下面图片修改 wq退出编辑

华为LTC流程体系详解

LTC&#xff0c;全称Lead to Cash&#xff0c;中文翻译为从线索到现金&#xff0c;是一种企业运营管理思想&#xff0c;也是一个集成的业务流程。它涵盖了企业从接触客户到收到客户回款的整个流程&#xff0c;通过科学化管理&#xff0c;实现更高效地将线索客户转化为付费客户。…

学习web前端三大件之HTML篇

HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本&#xff0c;HTML命令可以说明文字&#xff0c;图形…

每日一面系列之美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以

ConcurrentHashMap 为什么 key 和 value 不能为 null&#xff1f; ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。null 是一个特殊的值&#xff0c;表示没有对象或没有引用。如果你用 null 作为键&#xff0c;那么你就无法区分这个键是否存在于 Concu…

1. shiro的基本使用

一、现存问题 1. 认证&#xff08;登录&#xff09;&#xff1a;认证操作流程都差不多&#xff0c;但是每次都需要手动的基于业务代码去实现&#xff0c;很麻烦&#xff01; 2. 授权&#xff1a;如果权限控制粒度比较粗&#xff0c;可以自身去实现&#xff0c;但是如果控制粒度…