前言

学习树莓派的时候经常要查找前辈们留下的资料

但我发现,有一些博客,写的真的不敢恭维。

无注释源码一贴,电路图一贴,什么解释都没有,就发出来了。

这是写给谁看的?恐怕自己过几个月回头看自己都不知道那是什么意思。这样的学习有啥意义呢?

有的人可能觉得我是想抄作业,的确!嵌入式学习需要了解各个元件的工作原理,我的资料单有电路图远远不够啊……即便有源码,也需要自己去弄明白每个函数的作用,不然这样的学习依旧没有意义😥

关注本专栏,和我一起学习树莓派开发板30+经典实验

C语言代码,0基础剖析!

1.实验器材

  • 树莓派开发板
  • 40p软排线+T型转接板+面包板
  • 继电器模块+十字螺丝刀
  • 双色LED模块(实验1使用过)
  • 跳线一堆

2.实验原理

2.1继电器模块

继电器模块是一种电控制期间,当输入量的变化达到规定要求时,在电气输出电路中使被控制量发生预定阶跃变化的一种电器。它具有控制系统和被控制系统之间的互动关系,通常运用于自动化的控制电路中。它实际上是用小电流去控制大电流运作的一种“自动开关”,在电路中起到自动调节、安全保护、转换电路等作用。


说人话就是,继电器是一个电动开关,通过接收外部源的电信号来打开和关闭电路

例如:按下电视机遥控器的开启按钮,它向电视节内部的“继电器”发出电信号,从而打开电视机的主电源开关。不过电视机内部还有另外的信号接收器,继电器本身不一定能接收红外信号(个人理解)


2.2继电器工作

  • 当继电器供电时,电流开始经过控制线圈
  • 电磁体开始通电,将上部衔铁吸附到线圈上,带动触点向右移动,从而与常开触点链接
  • 带负载的电路通电
  • 继电器断开供电,弹簧会将触头复位,电路断开

image-20220406120535701

image-20220406120712182

3.电路图和接线图

3.1电路图

继电器模块的电路图如下

4.继电器模块原理图

模块实物图如下

IMG_20220406_104634

引用另外一篇博客对各个接口的介绍👉原文链接

image-20220406120947670

3.2接线图

继电器的主控制型号源接在GPIO17,和端口0对应(后面代码会用到)

04_Relay module_bb

树莓派T型转接板继电器模块
GPIO 0GPIO 17IN
5V5VDC+
GNDGNDDC-
5V5VCOM
双色LEDT型转接板继电器
中间(R)*NC
GNDGND*
S(G)*NO

由于双色LED模块的G接口(Green)接到了继电器的常闭端口NC(即继电器未接通时默认接上的端口)

所以在接线完毕后,LED模块会亮绿灯

IMG_20220406_110827

这里需要注意的是,在对继电器接线的时候,需要用螺丝锁住各条线位,不然它们是接不稳的

光影魔术手拼图


4.代码示例

这里给出C语言的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <wiringPi.h>
#include <stdio.h>

#define makerobo_RelayPin 0 //设置继电器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

该函数的作用是设置针脚当前的模式

pinMode函数解释

4.1.2digitalWrite

可以看到,这里提到了在使用该函数之前,需要用pinMode函数将针脚设置为OUTPUT模式

  • 0 代表low值
  • 非0都代表high

image-20220406122020432

4.2Geany编译器运行代码

老样子,三板斧

image-20220401163706498

在Geany里面用生成命令引用wiringPi库(后续的博客不再说明)

1
2
在Geany的build(生成)-->set build commands(设置生成命令)中输入以下指令
gcc -Wall -c "%f" -lwiringPi

最终运行的效果如下,当digitalWrite写入high时,继电器接通,红灯电路亮起

写入low时继电器关闭,恢复原本绿灯常亮状态

效果图

使用ctrl+c关闭程序运行面板,停止程序运行


4.3Linux-gcc编译器

在linux控制台里面,用cd打开你的文件夹后,输入如下编译指令

1
gcc -Wall 04relay.c -o TEST -lwiringPi

如果编译没有报错,那就是成功编译了,ls会发现多出了TEST可执行文件,使用./TEST执行它

执行结束后,会显示下一行的待定输入

image-20220406123120015

为了避免linux-gcc中程序运行后无法终止,请不要使用while(1)死循环!

使用结束后请先断开5V跳线后,再断开其他跳线


结语

本实验只是简单演示了继电器的使用,再后续更复杂的实验中,我们可以使用它控制更复杂的模块

如果对你有帮助,还请点个👍,万分感谢!

image-20220406123703458