基于Micropython的红外线发射

陆续更新

红外发射模块

踩坑:

1、未理解:38K红外原理
学习:38K红外通信原理_vs1838b红外接收头工作原理-CSDN博客

2、红外发射模块功率不足:产品设计问题

解决方案:1、放近一点(2-3cm);2、板件改造(详见b站视频)

红外遥控DIY之三:发射信号_哔哩哔哩_bilibili

import machine
import time

# 定义GPIO引脚
ir_pin = machine.Pin(4, machine.Pin.OUT)

# 定义38kHz的载波频率
carrier_frequency = 38000
# 计算每个周期的时间(单位:秒)
period = 1.0 / carrier_frequency
# 计算高电平和低电平的时间(单位:秒)
half_period = period / 2

# 定义发送红外信号的方法
def send_ir_signal(pulse_times):
    for idx,pulse_time in enumerate(pulse_times):
        #print(pulse_time)
        if idx%2 ==0:
            # 打开红外LED
            end_time = time.ticks_add(time.ticks_us(), pulse_time)
            while time.ticks_diff(end_time, time.ticks_us()) > 0:
                ir_pin.on()
                time.sleep_us(int(half_period * 1e6))
                ir_pin.off()
                time.sleep_us(int(half_period * 1e6))           
           
        else:
            # 信号间隔
            end_time = time.ticks_add(time.ticks_us(), pulse_time)
            while time.ticks_diff(end_time, time.ticks_us()) > 0:  
                time.sleep_us(int(half_period * 1e6))            
                time.sleep_us(int(half_period * 1e6))
        
    time.sleep_us(1000)


pulse_times_list = []

# 示例:发送红外信号(注意,这里pulse_times需要根据你实际的编码方案来设置)
pulse_times_list.append([2406,3324,470,1215,1288,420,1285,398,416,1246,1307,377,1308,373,1282,427,1304,386,1278,398,1258,404,464,1218,441,1245,463,1221,1307,400,1284,399,414,1250,460,6910,2514,3330,464,1219,1307,377,1305,403,441,1218,1301,387,1301,381,1302,380,1303,402,1283,400,1281,403,415,1245,463,1223,465,1218,1311,398,1281,402,444,1221,456,6912,2537,3305,466,1220,1306,400,1280,404,438,1223,1304,402,1277,385,1301,380,1300,385,1298,383,1300,383,459,1225,460,1224,460,1225,1304,379,1302,381,461,1220,461])



for pulse_times in pulse_times_list:
    print("发送红外信号...")
    print(pulse_times)
    send_ir_signal(pulse_times)
    time.sleep(1)



红外接受模块

踩坑:

1、在irq中断回调函数中进行时间长度计算,导致偏差太多。

优化方案:中断回调函数中仅记录,每个1秒进行计算。

# 捕获脉冲模块
def capture_ir_signal_handler(pin):
    global pulse_times
    # 记录时间戳
    current_time = time.ticks_us()
    # 存储时间戳
    pulse_times.append(current_time)


#计算脉冲模块
def calculate_pulse_times():
    global pulse_times
    # 计算每个脉冲的持续时间
    durations = []
    for i in range(1, len(pulse_times)):
        durations.append(time.ticks_diff(pulse_times[i], pulse_times[i-1]))
    
    return durations


# 存储捕获到的脉冲时间
pulse_times = []

led = machine.Pin(2, machine.Pin.OUT)

irRecv = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_UP)
irRecv.irq(trigger=machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING, handler=capture_ir_signal_handler) 



if __name__ == '__main__':
    

    for i in range(10*60):
        print("new task")
        led.on()
        time.sleep(1)
        led.off()
        time.sleep(1)

        durations=calculate_pulse_times()
        if len(durations)>0:
                
            send_msg_text=",".join([str(x) for x in durations])
            print(send_msg_text)
            pulse_times.clear()

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序社团微信小程序就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序社团微信小程序利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序社团微信小程序有管理员,社团,用户三个角色。管理员功能有个人中心, 用户管理,社团管理,社团信息管理,社团申请管理,社团活动管理,活动报名管理,社团分类管理,活动分类管理,系统管理。社团用户可以注册登陆,管理社团信息,审核社团申请,管理社团活动和审核活动报名。用户可以注册登陆,查看社团信息,申请加入社团,参加社团活动报名等操作。微信小程序社团微信小程序的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值