【树莓派C语言开发】实验08:振动开关模块

前言

今天折腾vim编辑器折腾了老久,我只是想实现在vim编辑器中可以复制代码到windows电脑下,方便我写博客,但是咋弄都搞不定,放弃了,还是用树莓派的系统来复制吧

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

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


1.实验器材

  • 树莓派开发板
  • 40p软排线+T型转接板+面包板
  • 振动传感器模块
  • 双色LED模块
  • 跳线一堆

IMG_20220413_190021

上:双色LED模块;下:震动传感器模块

振动传感器模块和倾斜传感器模块很像,都是通过物理结构来判断当前的状态。而且它也有PWR-LEDDO-LED两个指示灯


2.实验原理

振动开关传感器用的是常闭型振动传感器,可用于跟踪振动触发作用,如防盗报警,地震报警和智能小车。与常开型振动传感器相比,常闭型振动传感器触发时间长,可以用于驱动继电器模块


该模块采用常开高灵敏度震动开关。开关在静止時为开路OFF状态,当受到外力碰触而达到相应震动力时,或移动速度达到适当离(偏)心力时,导电接脚会产生瞬间导通呈瞬间ON状态;当外力消失時,开关恢复为开路OFF状态。可用于各种震动触发作用,报盗报警,智能小车,电子积木等。传感器特设M3固定安装孔,调节方向与固定方便易用,使用宽电压LM393比较器,信号干净,波形好,驱动能力强,超过15mA,配可调精密电位器调节灵敏度。
在此实验中,将双色LED模块连接到Raspberry Pi作为指示作用。敲击或敲击振动传感器时,它将打开双色LED将闪烁红色。再次点击它,LED将变为绿色-每次敲击或敲击两种颜色之间交替闪烁。

2.1电路图

8.振动开关传感器实验原理图

2.2接线图

树莓派T型转接板振动开关
GPIO 0GPIO 17Do
5V5VVCC
GNDGNDGND
树莓派T型转接板双色LED
GPIO 1GPIO 18R(中间)
GNDGNDGND(-)
GPIO 2GPIO 27G(S)

因为接口和倾斜开关一模一样,所以接线方式也是一样的

08_Vibration Switch_bb

实物接线图这里就不放了,和倾斜开关不同的是,振动开关在接上后,两个指示灯都会亮起,振动该传感器,DO-LED会闪动

image-20220413192023148


3.代码示例

老样子,给出C语言的代码示例

这里的wiringPi库函数在上两次的实验中都有使用过,详情请查看实验6里的解释

#include <wiringPi.h>
#include <stdio.h>

#define makerobo_VibratePin	0   // 震动传感器
#define makerobo_Rpin		1   // 红色LED PIN 
#define makerobo_Gpin		2   // 绿色LED PIN

int clb_tmp = 0;//全局变量用于比较
//双色LED控制函数
void double_colorLED(int color)
{
	pinMode(makerobo_Rpin, OUTPUT); //设置为输出模式
	pinMode(makerobo_Gpin, OUTPUT); //设置为输出模式

	if (0 == color)             //点亮红色LED灯
	{
		digitalWrite(makerobo_Rpin, HIGH);
		digitalWrite(makerobo_Gpin, LOW);
	}
	else if (1 == color)       //点亮绿色LED灯
	{
		digitalWrite(makerobo_Rpin, LOW);
		digitalWrite(makerobo_Gpin, HIGH);
	}
	else
		printf("Makerobo Double color LED Error\n"); // 双色LED错误
}

// 打印信息,打印出振动传感器的状态	
void makerobo_Print(int x)
{
	if (x != clb_tmp)
	{
		if (x == 0)
			printf("...Makerobo ON\n");
		if (x == 1)
			printf("Makerobo OFF..\n");

		clb_tmp = x;//复位x
	}
}

int main()
{
	int clb_status = 0;  //状态值
	int clb_tmp = 0;     //比较值
	int clb_value = 1;   //当前值

	//wiringPi初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup() == -1){ 
		printf("setup wiringPi failed !");
		return 1; 
	}

    //振动传感器Pin设置为输入模式
	pinMode(makerobo_VibratePin, INPUT);
	
	while(1){
		clb_value = digitalRead(makerobo_VibratePin); //获取振动传感的值
		if (clb_tmp != clb_value)
		{	//振动传感器的输出值发生改变
			clb_status ++;   //振动传感器状态加1
			if (clb_status > 1)
			{				
				clb_status = 0; //状态发生改变判断,如果变成2了复位成0
			}
			double_colorLED(clb_status);  //控制双色LED模块
			makerobo_Print(clb_status);   //打印出状态
			delay(1000);                  //延时1s
		}
	}
	return 0;
}

3.1代码思路讲解

clb_value接收振动传感器的返回值,每次振动,返回值都会改变

  • value初始值为1,振动时,接收了返回值为0,和tmp不同,所以status++,双色LED的颜色改变
  • 如果没有检测到振动,返回值为1,和tmp相同,status不改变,双色LED的颜色不变

参数clb_tmp问题

void makerobo_Print(int x)函数中调用的其实是全局变量下的clb_tmp

而main函数中调用的是int clb_tmp = 0;//比较值这个单独定义的局部变量,和全局中的tmp没有关系,所以makerobo_Print函数中对clb_tmp函数的操作不影响main中和状态码的比较

为了不搞混全局变量和局部变量,建议将main函数中的tmp更名为clb_tmp1

image-20220413194830824

3.2linux运行代码

gcc -Wall 08vibrationswitch.c -o TEST -lwiringPi

GIF

每次晃动传感器,双色LED就会变色,屏幕上打印出on和off(每晃动一次,打印一次)

CTRL+C终止程序运行

Screenshot_2022_0413_193113

和倾斜开关的实时改变不同,振动开关的改变不是实时的,而是需要新的振动来触发它(类似一个按钮)

假设我们要用它来做一个报警装置,假设在某一段时间内检测到振动状态多次改变,就可以发出信号报警,代表你的门(或者某个东西)被移动了


结语

这次实验的代码比上一次的倾斜开关相比,更复杂了一些。希望我的讲解对你有帮助!

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

image-20220413195026194

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
树莓C语言编程手册是一本详细介绍如何在树莓上进行C语言编程的指南。本手册向读者提供了丰富的知识和实践经验,帮助初学者和专业开发者深入了解树莓的功能和应用。 首先,本手册详细介绍了树莓的硬件组成和操作系统安装。读者可以了解到树莓的各个引脚的功能和用途,以及如何选择适合的操作系统并进行安装。 其次,手册详细介绍了C语言的基础知识,包括语法、变量、运算符等。读者可以通过学习这些基础知识来掌握C语言的编程思想和方法。 接着,手册详细介绍了在树莓上使用C语言进行GPIO编程的方法。读者可以学习如何使用各个引脚来控制外部设备,如LED灯、传感器等。手册还提供了丰富的示例代码和实验项目,帮助读者熟悉GPIO编程的过程和技巧。 此外,手册还介绍了使用C语言进行串口通信和网络编程的方法。读者可以学习如何通过串口和其他设备进行通信,以及如何使用网络接口进行数据传输和远程控制。 最后,手册还介绍了一些常用的库和工具,如WiringPi和Python等。读者可以了解如何使用这些库来简化编程过程,并提高树莓的性能和功能。 总的来说,树莓C语言编程手册是一本非常实用的指南,提供了丰富的知识和实践经验,帮助读者快速掌握在树莓上进行C语言编程的技巧和方法。无论是初学者还是专业开发者,都可以从中受益,并在树莓开发出更加个性化和创新的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值