文章目录
- 4.代码示例
- 结语
前言
学习树莓派的时候经常要查找前辈们留下的资料
但我发现,有一些博客,写的真的不敢恭维。
无注释源码一贴,电路图一贴,什么解释都没有,就发出来了。
这是写给谁看的?恐怕自己过几个月回头看自己都不知道那是什么意思。这样的学习有啥意义呢?
有的人可能觉得我是想抄作业,的确!嵌入式学习需要了解各个元件的工作原理,我的资料单有电路图远远不够啊……即便有源码,也需要自己去弄明白每个函数的作用,不然这样的学习依旧没有意义????
关注本专栏,和我一起学习树莓派开发板30+经典实验!
C语言代码,0基础剖析!
- 还等什么?心动不如行动!
- 本专栏代码仓库:Raspberry-practice
1.实验器材
- 树莓派开发板
- 40p软排线+T型转接板+面包板
- 继电器模块+十字螺丝刀
- 双色LED模块(实验1使用过)
- 跳线一堆
2.实验原理
2.1继电器模块
继电器模块是一种电控制期间,当输入量的变化达到规定要求时,在电气输出电路中使被控制量发生预定阶跃变化的一种电器。它具有控制系统和被控制系统之间的互动关系,通常运用于自动化的控制电路中。它实际上是用小电流去控制大电流运作的一种“自动开关”,在电路中起到自动调节、安全保护、转换电路等作用。
说人话就是,继电器是一个电动开关,通过接收外部源的电信号来打开和关闭电路。
例如:按下电视机遥控器的开启按钮,它向电视节内部的“继电器”发出电信号,从而打开电视机的主电源开关。不过电视机内部还有另外的信号接收器,继电器本身不一定能接收红外信号(个人理解)
2.2继电器工作
- 当继电器供电时,电流开始经过控制线圈
- 电磁体开始通电,将上部衔铁吸附到线圈上,带动触点向右移动,从而与常开触点链接
- 带负载的电路通电
- 继电器断开供电,弹簧会将触头复位,电路断开
3.电路图和接线图
3.1电路图
继电器模块的电路图如下
模块实物图如下
引用另外一篇博客对各个接口的介绍
3.2接线图
继电器的主控制型号源接在GPIO17,和端口0对应(后面代码会用到)
树莓派 | T型转接板 | 继电器模块 |
GPIO 0 | GPIO 17 | IN |
5V | 5V | DC+ |
GND | GND | DC- |
5V | 5V | COM |
双色LED | T型转接板 | 继电器 |
中间(R) | * | NC |
GND | GND | * |
S(G) | * | NO |
由于双色LED模块的G接口(Green)接到了继电器的常闭端口RC
(即继电器未接通时默认接上的端口)
所以在接线完毕后,LED模块会亮绿灯
这里需要注意的是,在对继电器接线的时候,需要用螺丝锁住各条线位,不然它们是接不稳的
4.代码示例
这里给出C语言的代码
//设置继电器GPIO管脚,0对应G17
int main()
{
//初始化连接失败时,将消息打印到屏幕
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
//将继电器管脚设置为输出模式
pinMode(makerobo_RelayPin, OUTPUT);
int k=2;
while(k--)
{
digitalWrite(makerobo_RelayPin, HIGH); // 打开继电器
delay(1000); // 延时1s
digitalWrite(makerobo_RelayPin, LOW); // 关闭继电器
delay(1000); // 延时1s
}
return 0;
}
4.1部分函数解释
4.1.1pinMode
该函数的作用是设置针脚当前的模式
4.1.2digitalWrite
可以看到,这里提到了在使用该函数之前,需要用pinMode
函数将针脚设置为OUTPUT
模式
- 0 代表low值
- 非0都代表high
4.2Geany编译器运行代码
老样子,三板斧
在Geany里面用生成命令引用wiringPi库(后续的博客不再说明)
在Geany的build(生成)-->set build commands(设置生成命令)中输入以下指令
gcc -Wall -c "%f" -lwiringPi
最终运行的效果如下,当digitalWrite
写入high时,继电器接通,红灯电路亮起
写入low时继电器关闭,恢复原本绿灯常亮状态
使用ctrl+c
关闭程序运行面板,停止程序运行
4.3Linux-gcc编译器
在linux控制台里面,用cd打开你的文件夹后,输入如下编译指令
gcc -Wall 04relay.c -o TEST -lwiringPi
如果编译没有报错,那就是成功编译了,ls会发现多出了TEST可执行文件,使用./TEST
执行它
执行结束后,会显示下一行的待定输入
为了避免linux-gcc中程序运行后无法终止,请不要使用while(1)
死循环!
使用结束后请先断开5V跳线后,再断开其他跳线
结语
本实验只是简单演示了继电器的使用,再后续更复杂的实验中,我们可以使用它控制更复杂的模块