在本节中,我们将使操纵杆与Raspberry Pi交互。游戏杆主要用于玩各种游戏。尽管USB型操纵杆易于连接,但是今天我们将通过Raspberry Pi GPIO引脚连接操纵杆,在许多情况下这将派上用场。
Raspberry Pi和操纵杆模块:
操纵杆有不同的形状和尺寸。下图显示了一个典型的操纵杆模块。该操纵杆模块通常提供模拟输出,并且该模块提供的输出电压会根据我们移动它的方向不断变化。通过使用一些微控制器解释这些电压变化,我们可以获得运动的方向。以前,我们已将AVR微控制器与操纵杆一起使用。
如您所见,此操纵杆模块有两个轴。它们是X轴和Y轴。JOY STICK的每个轴均安装在电位计或电位计上。这些底池的中点被淘汰为Rx和Ry。因此,Rx和Ry是这些电位器的可变点。当操纵杆处于待机状态时,Rx和Ry充当分压器。
当操纵杆沿水平轴移动时,Rx引脚上的电压会发生变化。同样,当它沿垂直轴移动时,Ry引脚上的电压也会发生变化。因此,在两个ADC输出上有四个操纵杆方向。当摇杆移动时,每个插针上的电压会根据方向变高或变低。
众所周知,Raspberry Pi没有内部ADC(模数转换器)机制。因此,该模块无法直接连接到Pi。我们将使用基于运算放大器的比较器来检查电压输出。这些运算放大器向Raspberry Pi提供信号,并且Pi根据信号将LED切换至。在这里,我们使用了四个LED来指示操纵杆在四个方向上的移动。最后查看演示视频。
17个GPIO引脚中的每个引脚都不能承受高于+ 3.3V的电压,因此运算放大器的输出不能高于3.3V。因此,我们选择了运放LM324,该IC具有可在3V电压下工作的四路运算放大器。使用该IC,我们可以为树莓派GPIO引脚提供合适的输出。在此处了解有关Raspberry Pi的GPIO引脚的更多信息。还要查看我们的Raspberry Pi教程系列以及一些优秀的IoT项目。
所需组件:
在这里,我们使用 带有Raspbian Jessie OS的Raspberry Pi 2 ModelB。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介和Raspberry PI LED闪烁中查找它,以开始使用,而我们还不需要:
- 1000µF电容器
- 游戏杆模块
- LM324运算放大器IC
- 1KΩ电阻器(12个)
- LED(4个)
- 2.2KΩ电阻器(4个)
电路原理图:
LM324 IC内部有四个OP-AMP比较器,用于检测操纵杆的四个方向。下面是其数据表中LM324 IC的示意图。
下面的电路图中显示了将操纵杆模块与Raspberry Pi进行接口的连接。U1:A,U1:B,U1:C,U1:D表示LM324内部的四个比较器。我们在电路图中显示了每个比较器以及相应的引脚号。LM324 IC。
工作说明:
为了检测操纵杆沿Y轴的运动,我们有OP-AMP1或U1:A和OP-AMP2或U1:B,为了检测操纵杆沿X轴的运动,我们有OP-AMP3或U1 :C和OP-AMP4或U1:D。
OP-AMP1检测操纵杆沿Y轴的向下移动:
比较器U1:A的负极端子提供2.3V(使用分压电路分别为1K和2.2K),正极端子连接到Ry。沿操纵杆的Y轴向下移动时,Ry电压会增加。一旦该电压高于2.3V,OP-AMP的输出引脚将提供+ 3.3V输出。Raspberry Pi将检测到OP-AMP的HIGH逻辑输出,并且Pi通过切换LED做出响应。
OP-AMP2检测操纵杆沿Y轴的向上运动:
比较器U1:B的负极端子提供1.0V(使用2.2K和1K的分压电路),正极端子连接到Ry。沿操纵杆的Y轴向上移动时,Ry电压会降低。一旦该电压低于1.0V,运算放大器输出就会变为低电平。Raspberry Pi将检测到OP-AMP的LOW逻辑输出,并且Pi会通过切换LED做出响应。
OP-AMP3检测操纵杆沿X轴的左侧移动:
比较器U1:C的负极端子提供2.3V(使用分压电路分别为1K和2.2K),正极端子连接到Rx。沿操纵杆的x轴向左移动时,Rx电压会增加。一旦该电压高于2.3V,OP-AMP的输出引脚将提供+ 3.3V输出。Raspberry Pi将检测到OP-AMP的HIGH逻辑输出,并且Pi通过切换LED做出响应。
OP-AMP4检测操纵杆沿X轴的右侧移动:
比较器U1:4的负极端子提供1.0V(使用2.2K和1K的分压电路),正极端子连接到Rx。沿操纵杆的x轴右移时,Rx电压降低。一旦该电压低于1.0V,运算放大器输出就会变为低电平。Raspberry Pi将检测到OP-AMP的LOW逻辑输出,并且Pi会通过切换LED做出响应。
这样,确定操纵杆四个方向的所有四个逻辑都将连接到Raspberry Pi。Raspberry Pi将这些比较器的输出作为输入,并通过切换LED做出相应的响应。下面是在Raspberry Pi终端上显示的结果,因为我们还使用Python代码在终端上打印了操纵杆的方向。
Python代码和视频如下。代码很简单,并且可以通过代码中的注释来理解。