概述
在这一课中我们将学习如何驱动继电器,利用继电器当一个开关控制LED亮灭。
所需物料
1 * Raspberry Pi
1 * Breadboard
1 * Relay
1 * LED
1 * Resistor (200Ω)
Several jumper wires
工作原理
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。继电器有很多种类,在这一课中我们使用的是电磁继电器。
电磁继电器的构造如图所示。主要有电磁铁(Electromagnet)、衔铁(Armature )、弹簧(Spring )、动触点(Normally close contacts )、静触点(Normally open contacts)。电磁继电器工作电路可分为输入回路和输出回路。输入回路是由电磁铁、衔铁、低压电源E1和开关S组成;输出回路是由负载(Load)、电源E2和相当于开关的静触电、动触点组成。连接好工作电路,在常态时,静触点和动触点间未导通,输出回路断开。闭合开关S,电磁铁通电会产生磁场,在磁场的作用下,这时弹簧被拉长,衔铁被电磁铁吸下来,动触点同时与两个静触点接触,使输出回路导通;断开开关S,电磁铁失去磁性,弹簧收缩,对衔铁无吸引力,衔铁在弹簧的拉力作用下回到原来的位置,动触点与静触点分开,输出回路被断开。
继电器工作原理可以用下面的动态图形象地描述
本课中所用继电器模块原理图,如下图所示。
将LED作为负载接到继电器模块的输出端,将继电器信号控制引脚接到Raspberry Pi的GPIO 0(BCM_GPIO 17)上,用继电器控制LED亮灭。向继电器信号输入端(S)输入一个高电平,继电器导通,使LED点亮;给继电器信号控制引脚(S)置一个低电平,继电器断开,LED熄灭。
实物连接图
没画(o(╯□╰)o)
软件
对于C语言用户,请看下面
1) 在/home/pi目录下新建一个.c源文件,名字随意(你开心就好)
cd ~
sudo nano relay_with_led.c
2) 编码
#define RelayPin 0
将继电器接到Raspberry Pi的GPIO0(BCM_GPIO17)上
pinMode(RelayPin, OUTPUT); //set GPIO0 output
并将RelayPin脚设置成输出模式。
for(;;){ // disconnect printf("|********************|\n"); printf("| ...Relay Close |\n"); printf("|********************|\n"); digitalWrite(RelayPin, LOW); delay(1000); // connect printf("|********************|\n"); printf("| Relay Open... |\n"); printf("|********************|\n"); digitalWrite(RelayPin, HIGH); delay(1000); }
在循环程序中先让继电器断开,经过短暂延时后,再让继电器闭合,这样继电器就不停地断开、闭合。
完整的源代码可以通过下面命令获取
sudo wget http://osoyoo.co/driver/pi3_start_learning_kit_lesson_9/relay_with_led.c
3) 编译
sudo -Wall -o relay_with_led relay_with_led.c -lwiringPi
4) 执行程序
sudo ./relay_with_led
5) 最终结果
运行编译后的程序,会听到继电器通断是啪啪啪的声音,同时LED灯会闪烁。
对于python用户
1) 在/home/pi下新建一个.py脚本文件,文件名随意(你爱咋咋地)
cd ~
sudo nano relay_with_led.py
2) 编码
import RPi.GPIO as GPIO import time # set BCM_GPIO 17 as relay pin RelayPin = 17 #print message at the begining ---custom function def print_message(): print ('|**********************************************|') print ('| Relay |') print ('| ----------------------------------- |') print ('| GPIO0 connect to relay control pin |') print ('| led connect to relay NormalOpen pin |') print ('| 5V connect to relay COM pin |') print ('| Make relay to control a led |') print ('| ----------------------------------- |') print ('| |') print ('| OSOYOO|') print ('|**********************************************|\n') print ('Program is running...') print ('Please press Ctrl+C to end the program...') print ('\n') #setup function for some setup---custom function def setup(): GPIO.setwarnings(False) #set the gpio modes to BCM numbering GPIO.setmode(GPIO.BCM) #set RelayPin's mode to output,and initial level to LOW(0V) GPIO.setup(RelayPin,GPIO.OUT,initial=GPIO.LOW) #main function def main(): #print info print_message() while True: print ('|******************|') print ('| ...Relay close |') print ('|******************|\n') #disconnect GPIO.output(RelayPin,GPIO.LOW) time.sleep(1) print ('|*****************|') print ('| Relay open... |') print ('|*****************|\n') print ('') #connect GPIO.output(RelayPin,GPIO.HIGH) time.sleep(1) #define a destroy function for clean up everything after the script finished def destroy(): #turn off relay GPIO.output(RelayPin,GPIO.LOW) #release resource GPIO.cleanup() # # if run this script directly ,do: if __name__ == '__main__': setup() try: main() #when 'Ctrl+C' is pressed,child program destroy() will be executed. except KeyboardInterrupt: destroy()
将RelayPin引脚接到BCM_GPIO17口上,并将其设置成输出模式,初始电平为低电平,在main函数中不断改变RelaPin脚电平状态,使继电器不断开关,LED不停地闪烁。
完整的程序源码,可以通过以下命令获取
sudo wget http://osoyoo.co/driver/pi3_start_learning_kit_lesson_9/relay_with_led.py
3) 运行程序
sudo python ./realy_with_led.py
4) 最终结果
运行Python脚本后,屏幕上会打印出继电器与Raspberry Pi连接和LED与继电器的连接信息,然后继电器不停地通断,使LED闪烁,还会听到继电器通断时候发出的声音,屏幕上也会输出继电器状态。
DownLoad Url osoyoo.com