在本项目中,我们将使继电器与PIC单片机PIC16F877A相连。继电器是一种机械设备,可从较低的电压电平控制高电压,高电流电器“ ON ”或“ OFF ”。继电器提供两个电压电平之间的隔离,通常用于控制AC设备。从机械继电器到固态继电器,电子产品中都有各种类型的继电器。在这个项目中,我们将使用机械继电器。
在此项目中,我们将做以下事情-
- 我们将连接一个开关,以供用户输入。
- 用5V继电器控制220V AC灯泡。
- 为了控制继电器,我们将使用BC547 NPN晶体管,该晶体管将由PIC16F877A控制。LED将通知继电器ON或OFF状态。
如果您不熟悉PIC单片机,请从PIC单片机入门开始。
所需组件:
- PIC16F877A
- 20Mhz晶体
- 2个33pF陶瓷
- 3个4.7k电阻
- 1K电阻
- 1个LED
- BC547晶体管
- 1N4007二极管
- 5V立方继电器
- AC灯泡
- 面包板
- 用于连接零件的电线。
- 5V适配器或具有至少200mA电流能力的任何5V电源。
中继及其工作:
继电器的工作原理与典型开关相同。机械继电器使用由电磁线圈制成的临时磁铁。当我们在此线圈上提供足够的电流时,它就会通电并拉动手臂。因此,跨继电器连接的电路可以闭合或断开。输入和输出没有任何电气连接,因此将输入和输出隔离。在此处了解有关继电器及其构造的更多信息。
可以在5V,6V,12V,18V等不同电压范围内找到继电器。在本项目中,我们将使用5V继电器,因为此处的工作电压为5伏。该5V立方继电器能够在240VAC时切换7A负载或在110VAC时切换10A负载。但是,要代替这么大的负载,我们将使用220VAC灯泡,并使用继电器进行切换。
这是我们在该项目中使用的5V继电器。额定电流显然是两个电压等级,规定的10A在120VAC和7A在240VAC。我们需要通过继电器连接的负载小于指定的额定值。
该继电器有5个引脚。如果我们看到引脚,我们可以看到-
在L1和L2是内部电磁线圈的针。我们需要控制这两个引脚以将继电器“打开”或“关闭”。接下来的三个引脚是POLE,NO和NC。极与内部金属板连接,当继电器打开时,内部金属板会改变其连接。在正常情况下,POLE与NC短路。NC表示正常连接。当继电器接通时,磁极改变其位置并与NO相连。NO代表常 开。
在我们的电路中,我们已经与晶体管和二极管建立了继电器连接。市场上有带晶体管和二极管的继电器作为继电器模块提供,因此当您使用继电器模块时,不需要连接其驱动器电路(晶体管和二极管)。
继电器在所有家庭自动化项目中均用于控制AC家用电器。
电路原理图:
下面给出了将继电器与PIC微控制器连接的完整电路:
在上面的示意图pic16F877A中,在端口B上连接了LED和晶体管,并通过RBO处的TAC开关对其进行控制。所述R1提供偏置电流提供给晶体管。R2是下拉电阻,用于触觉开关。当不按下开关时,它将提供逻辑0。的1N4007是一个钳位二极管,用于中继的电磁线圈。当继电器关闭时,有可能出现高压尖峰二极管会抑制它。需要晶体管来驱动继电器,因为它需要超过50mA的电流,这是微控制器无法提供的。我们也可以使用ULN2003代替晶体管,如果应用需要两个或三个以上继电器,这是一个明智的选择,请检查继电器模块电路。该LED跨端口RB2会通知“继电器上”。
最终电路如下所示:
您可以在此处学习如何使用Arduino控制继电器,如果您真的对继电器感兴趣,请在此处检查所有继电器电路。
代码说明:
在年初的main.c文件中,我们增加了配置线为PIC16F877A,也定义在整个引脚名PORTB。
和往常一样,我们需要在pic微控制器中设置配置位,定义一些宏,包括库和晶体频率。您可以在末尾给出的完整代码中检查所有代码。我们将RB0作为输入。开关连接在该引脚上。
#包括
之后,我们调用了system_init()函数,在其中初始化了引脚方向,并配置了引脚的默认状态。
在system_init()函数中,我们将看到
void system_init(void){ TRISBbits.TRISB0 = 1; //将Sw设置为输入 TRISBbits.TRISB1 = 0; //将LED设置为输出 TRISBbits.TRISB2 = 0; //将继电器引脚设置为输出 LED = 0; 继电器= 0; }
在 主要 功能中,如果我们通过感测RB0上的逻辑高电平来检测开关压力,则我们会不断检查开关压力;我们等待一段时间,看看是否仍然按下开关,如果仍然按下开关,我们将反转继电器和LED引脚的状态。
void main(void){ system_init(); //系统准备就绪, 而(1){ if(SW == 1){//按下开关 __delay_ms(50); // 如果(SW == 1){则 去抖动延迟{ / //反转引脚状态。 RELAY =!RELAY; } } } return; }
下面提供了此中继接口的完整代码和演示视频。