树莓派引脚图
此时选用的继电器为5v驱动,低电平触发的方式。
如图
由于是5v驱动,可以直接用树莓派进行供电,然后gpio来控制触发。
连接方式:
VCC端 连接树莓派物理引脚2或者4(我用的2)
GND端 连接树莓派物理引脚6、9、14、20、25、30、34、39都行(我用的20)
IN端 连接树莓派物理引脚很多,标志为gpio的都可以用(我用的22)
树莓派配置
python方式
pip install RPi.GPIO
pip install spidev
编写代码
import RPi.GPIO as GPIO
import time
# GPIO.setmode(GPIO.BOARD) # BOARD编号方式,基于插座引脚编号(如果是此模式,后面的引脚即为22)
GPIO.setmode(GPIO.BCM) # 若使用BCM编号方式,上两行代码应这样写
while True:
GPIO.setup(25, GPIO.OUT) # 对应为22号脚(设置为输出模式)
GPIO.output(25, GPIO.HIGH)
time.sleep(3) # 单位秒
# GPIO.output(11, GPIO.LOW) # 这里其实不用将其致为第电压,后面详细会说
GPIO.setup(25, GPIO.IN) # 对应为22号脚
time.sleep(3)
然后运行该程序
python **(该文件名).py
此时继电器立马吸合然后三秒后断开,再过三秒,又吸合,如此循环
解释:
代码中有个小问题,就是触发继电器用的高电平,为什么恢复的时候用的引脚不是低电平,而是用的输入模式呢?
此时:
要考虑一个问题,继电器什么时候会吸合,什么时候会恢复呢?
应该是形成合适的电压差的时候会吸合,电压差不合适的时候恢复。(先不考虑电流)
那么此继电器是什么时候吸合呢。据官方文档说如下图
由此可以得出结论,当GND和IN端口形成通路,同时IN端口的电压小的时候会进行吸合,电压大的时候会恢复。
实验阶段:(用电流表进行测试,说某个端口的电压是其和接地的电压差)
question:那么当树莓派控制gpio端口高电平和低电平的时候,此gpio的端口电压是如何变化的?
answer:经测量, 当gpio输出高电平,电压3.3v 当输出低电平的时候,电压为0v
question:默认情况下,IN的电压是如何呢?
answer:经测量,电压大约4.9v
question:当gpio输出高低电平的时候,IN端口的电压分别如何呢?
answer:经测量,gpio输出高电平的时候,IN端口3.3v,输出低电平的时候,IN端口是0v
question: 当gpio为输入模式的时候,IN端口电压如何?
answer:经测量,电压为默认值,4.9v左右
结论:
由此可以得出结论了: 低电压触发,电压得足够低的时候才能触发继电器吸合,当输出高电平的时候(3.3v)其实已经达到的继电器吸合的电压要求,再继续输出低电平, 电压达到0v,还是在工作电压内,只有将电压恢复到默认,继电器才会恢复,所以,将gpio的模式调整为输入模式。此时继电器吸合。
c语言实现
配置
sudo apt-get install wiringpi
mkdir WiringPI #创建WiringPI文件夹
cd WiringPI #
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
代码编写
#include <stdio.h>
#include <wiringPi.h>
int main(void)
{
int LED = 0;
wiringPiSetup();
pinMode(LED, OUTPUT); // 在wiringPi编号格式中,GPIO0编号为0
printf("relay is working...\r\n");
while(1)
{
pinMode(LED, OUTPUT);delay(1000);
printf("relay :%d is on \r\n", LED);
pinMode(LED, INPUT);delay(1000);
printf("relay :%d is off \r\n", LED);
}
return 0;
}
运行程序
gcc -o runfile filename.c -lwiringPi # 编译并生成可执行文件
./runfile # 运行可执行文件
结果:
此时继电器一秒闭合一秒打开,如此循环
评论 (0)