logo头像

学如逆水行舟

一起玩转树莓派(10)——触控激光灯

一起玩转树莓派(10)——触控激光灯

如果你已经阅读并且练习了本系列博客前面实验,那么我相信你已经能够使用树莓派做很多有趣的事情。本博客将要介绍的内容就是一个例子。

你在小时候有玩过激光灯么?其模样类似于一个小型的手电筒,只是其光线十分集中,亮度强,并且通过不同的滤片,可以在墙上或地上打射出不同的图案,十分有趣。本实验,我们将找回童趣,使用触摸传感器和激光灯传感器来实现一个简易的触控激光灯。

本实验的原理非常简单,无非是通过树莓派的GPIO引脚来读取触摸传感器的数据,之后将其用于操作激光传感器的开关控制上。本次实验使用的触摸传感器如下图所示:

此触摸传感器有3个引脚,除了正负极引脚外,最外侧的引脚用来输出信号,当手指触摸传感器上的圆形区域时,其信号引脚会输出高电平,否则输出低电平。对于这种类型的传感器,我们可以直接使用GPIO的下拉电阻功能,将其默认设置为低电平,轮询等待高电平信号。

首先,先来体验下触摸传感器的应用,连线如下:
触摸传感器 树莓派
GND GND
VCC 3.3V
SIG BCM编码17的引脚(对应物理引脚为11)

编写如下测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#coding:utf-8

import RPi.GPIO as GPIO
import time

touchPin = 11

GPIO.setmode(GPIO.BOARD)
GPIO.setup(touchPin,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

while True:
swi = GPIO.input(touchPin)
print(swi)
time.sleep(0.5)

在树莓派上运行上面代码。通过触摸传感器,可以看到控制台上打印出对应的电平信息。

下面,我们再来看一下本次实验所使用的激光模块,如下图所示:

此激光模块也有3个引脚,其中“-”号一侧的引脚接地,中间引脚接3.3V电压,“S”一侧引脚接GPIO信号引脚。当S信号引脚输入高电平时,激光模块被激活发射激光,当S信号引脚输入低电平时,激光发射关闭。激光模块的接线如下:

激光模块 树莓派
- GND
中间引脚 3.3V
S BCM编码18的引脚(对应物理引脚为12)

修改上面的示例代码如下:

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
26
27
#coding:utf-8

import RPi.GPIO as GPIO
import time

# 触摸传感器的信号引脚
touchPin = 11
# 激光模块的信号引脚
lightPin = 12

# 设置采用物理编码
GPIO.setmode(GPIO.BOARD)
# 对触摸传感器的引脚进行初始化
GPIO.setup(touchPin,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# 对激光传感器的引脚进行初始化
GPIO.setup(lightPin,GPIO.OUT)

while True:
swi = GPIO.input(touchPin)
# 当触摸发生时,触摸传感器的引脚输入高电平
if swi == 1:
# 向激光模块的引脚输出高电平,发射激光
GPIO.output(lightPin, GPIO.HIGH)
else:
# 与上面相反,关闭激光
GPIO.output(lightPin, GPIO.LOW)
time.sleep(0.5)

在树莓派上运行上面代码,体验下这个自制的激光灯玩具吧!