用树莓派打造一个模拟飞行器

您需要做一个飞行控制器

  • 树莓派 3 或更高版本
  • 微型街机风格操纵杆
  • 10 个按钮
  • 4 x 螺钉端子 (4 极)
  • 45 针至公跳线
  • 4 英尺电线
  • 面包板
  • 安装控件的情况。
  • 具有小钻头和阶梯式钻头的电钻
  • 焊接设备,包括热缩管和剥线钳
  • 万用表

树莓派飞行控制器的接线和硬件

1 在这种情况下,标记控件的放置位置。这样做是为了确保所有组件都有空间,并且使用起来舒适。

2 使用小钻头,在组件上钻一个导向孔。交换到阶梯式钻头上,并进行钻孔以匹配组件的尺寸。经常停下来检查尺寸。同时钻一个 ½ 英寸的孔,将电线引到 Pi 上。

3 测试是否适合所有组件。

4 从外壳上取下操纵杆,并确保在焊接之前将其牢牢固定。准备工作区,然后加热烙铁。

5 如果游戏杆在外壳周围有四个开关,请在每个开关上寻找 COM 。在 COM 连接器上施加少量焊料。如果操纵杆只有一个带有五个引脚的连接器,则在 COM/GND 引脚上施加少量焊料。

6 取导线的长度,从末端剥去 1/4 英寸,然后将裸线扭成螺旋状。在导线上涂少量焊料。将导线焊接到操纵杆上的 COM/GND 引脚上。如果您使用带有五针操纵杆的单个连接器,请跳至步骤 9 。

7 移至下一个 COM 引脚,并测量至 COM 引脚的导线。在测量中再增加 ½ 英寸,然后使用剥线钳露出电线。请勿切断电线!

8 在电线裸露的情况下,将少量焊料流到裸线上,然后将其小心地焊接到 COM 引脚上。对其余的 COM 引脚重复此过程

9 将操纵杆安装到外壳中,并用螺钉固定在将按钮安装到外壳中固定在中。**

10 将电线从操纵杆的 COM/GND 引脚连接到第一个按钮的一根支脚。在电线的长度上再加上 ½ 英寸,并从电线上剥去套管。但是不要切断电线。 在裸线和按钮的一只脚上流一点焊料使用更多的焊料将导线连接至按钮的腿。 在每个按钮上用一只脚重复此操作

11 修剪电线,使其有大约 6 英寸的松弛。剥去电线的末端,扭绞裸线,并在电线上流一点焊料。

12 从四根跳线中切出母头。剥去套管,将裸线拧成螺旋状。对于每根线将焊料流到裸铜线上。可选步骤是使用热缩管将电线固定到插针,并防止意外的电气短路。

13 将焊料流到操纵杆上每个开关的 NO (常开) 连接上。如果使用单个连接器的五针操纵杆,则将少量焊料流到四个连接器上。将跨接线连接到连接。

14 切开十根跳线的凹入端,剥去套管,扭绞线,并在每根裸线上流一点焊料 **。** 可使用热缩来防止电气短路。

15 使用少量焊料,将跳线连接到每个备用按钮支腿上,,然后将热缩管滑到支腿上,并加热管以将其收缩到位。

现在应该有 15 个连接。从所有按钮,操纵杆的方向来看,以及一个单独的 GND 连接,该 GND 连接到操纵杆上的每个 COM 引脚以及每个按钮的一条腿。

16 将万用表设置为连续模式,并将一根探针放在 COM/GND 连接的一端,另一根置于尖端的裸线 **。您应该会听到一声哔哔声,确认已正确连接所有设备。

17 将四个螺钉端子插入面包板,然后从操纵杆上取下跨接线,注意上,下,左和右。**** 将电线插入面包板 * * 使它们与螺钉成一直线。

18 对每个按钮的所有跳线重复此操作,最后对具有自己的螺钉端子的 GND 连接进行重复。使用中应有 15 个螺钉端子,以及一个备用端子。

19 请使用两根母对公跳线。将它们连接在一起以形成更长的跳线。在连接处滑动一段热缩并加热连接以固定它可以使用胶带代替热缩。重复此过程,以便有 15 根延长线。

20 将电线的公端拧入螺钉端子,然后穿过外壳的孔。记下每根电线的连接方式。我们使用了标签打印机,但是胶带和笔也可以正常工作。

21 按照图示将按钮连接到树莓派上的 GPIO 。

22 连接您的 Pi 配件并将树莓派引导到桌面。

树莓派 Flight Controller 的软件设置

23 ** 打开终端并安装 pynput **,这是一个用于模拟键盘输入的 Python 模块。

sudo pip3 安装 pynput 

24 从编程菜单中打开 Thonny 。

25 导入三个模块,用于键盘模拟的 Pynput ,用于与 GPIO 引脚配合使用的 gpiozero ,以及控制项目进度的时间。

从 pynput.keyboard 导入密钥,控制器
从 gpiozero 导入按钮
从进口睡眠开始

26 在 Pynput 代码和虚拟键盘之间建立连接

键盘= Controller ()

27 每个按钮和操纵杆都物理连接到树莓派的 GPIO ,现在我们需要” 告诉 Python 在哪里可以找到每个按钮”**,并且需要为每个按钮提供一个参考,以告诉我们该按钮的用途。

向上=按钮(27)
向下=按钮(17)
左=按钮(10)
右=按钮(22)
F1 =按钮(9)
F2 =按钮(11)
F3 =按钮(5)
F4 =按钮(6)
F5 =按钮(13)
F6 =按钮(19)
F7 =按钮(26)
F8 =按钮(21)
齿轮=按钮(20)
查看=按钮(16)

28 创建一个无限循环,该循环将不断运行代码。

而 True:

在循环内部,我们开始一系列条件语句,这些测试将在循环结束时检查每个按钮 / 操纵杆方向的状态。如果按下按钮,则运行该测试的代码。第一个测试是查看操纵杆是否被按下。如果是这样,则代码将模拟每 0.1 秒按下向上箭头键。

        如果 Up.is_pressed:
    打印("向上")
    keyboard.press (Key.up)
    睡眠(0.1)
    keyboard.release (Key.up)

30 下一个测试将检查是否已按下向下方向

        Elif Down.is_pressed:
    打印("下")
    键盘按下(Key.down)
    睡眠(0.1)
    keyboard.release (Key.down)

31 输入左右的代码

        Elif Left.is_pressed:
    打印("左")
    keyboard.press (Key.left)
    睡眠(0.1)
    keyboard.release (Key.left)
elif Right.is_pressed:
    打印("右")
    keyboard.press (Key.right)
    睡眠(0.1)
    keyboard.release (Key.right) 32  **将推力键**映射到 F1 至 F4 。 F1 将引擎打开至 25 %的功率,而 F4 则为全功率。这些被映射到控制器上的第一行按钮。
        elif F1.is_pressed:
    打印("发动机功率 25 %")
    keyboard.press (Key.f1)
    睡眠(0.1)
    keyboard.release (Key.f1)
elif F2.is_pressed:
    打印("发动机功率 50 %")
    keyboard.press (Key.f2)
    睡眠(0.1)
    keyboard.release (Key.f2)
elif F3.is_pressed:
    打印("发动机功率 75 %")
    keyboard.press (Key.f3)
    睡眠(0.1)
    keyboard.release (Key.f3)
elif F4.is_pressed:
    打印("发动机功率 100 %")
    keyboard.press (Key.f4)
    睡眠(0.1)
    keyboard.release (Key.f4)

33 ** Map Flap 控件,用于创建拖动,到 F5 到 F8 **,这是控制器上的第二行。

        elif F5.is_pressed:
    打印("襟翼位置 1")
    keyboard.press (Key.f5)
    睡眠(0.1)
    keyboard.release (Key.f5)
elif F6.is_pressed:
    打印("襟翼位置 2")
    keyboard.press (Key.f6)
    睡眠(0.1)
    keyboard.release (Key.f6)
elif F7.is_pressed:
    打印("襟翼位置 3")
    keyboard.press (Key.f7)
    睡眠(0.1)
    keyboard.release (Key.f7)
elif F8.is_pressed:
    打印("襟翼位置 4")
    keyboard.press (Key.f8)
    睡眠(0.1)
    keyboard.release (Key.f8)

34 将最后两个按钮映射到起落架,并更改视图。

        elif Gear.is_pressed:
    打印("齿轮切换")
    keyboard.press ("g")
    睡眠(0.1)
    keyboard.release ("g")
Elif View.is_pressed:
    打印("查看切换")
    keyboard.press ("s")
    睡眠(0.1)
    keyboard.release ("s")

35 将代码另存为 flight.py **,然后单击开始按钮 ** 以运行。

36 打开网络浏览器,以 ** https://s-macke.github.io/FSHistory/** 并确保浏览器窗口被选中。现在抓住您的控制器,按 100 %的推力,看着周围的世界变成您控制之下的 1980 年代飞行模拟器!

完整的代码清单

从 pynput.keyboard 导入密钥,控制器
从 gpiozero 导入按钮
从进口睡眠开始
键盘= Controller ()
向上=按钮(27)
向下=按钮(17)
左=按钮(10)
右=按钮(22)
F1 =按钮(9)
F2 =按钮(11)
F3 =按钮(5)
F4 =按钮(6)
F5 =按钮(13)
F6 =按钮(19)
F7 =按钮(26)
F8 =按钮(21)
齿轮=按钮(20)
查看=按钮(16)
而 True:
如果 Up.is_pressed:
    打印("向上")
    keyboard.press (Key.up)
    睡眠(0.1)
    keyboard.release (Key.up)
Elif Down.is_pressed:
    打印("下")
    键盘按下(Key.down)
    睡眠(0.1)
    keyboard.release (Key.down)
Elif Left.is_pressed:
    打印("左")
    keyboard.press (Key.left)
    睡眠(0.1)
    keyboard.release (Key.left)
elif Right.is_pressed:
    打印("右")
    keyboard.press (Key.right)
    睡眠(0.1)
    keyboard.release (Key.right)
elif F1.is_pressed:
    打印("发动机功率 25 %")
    keyboard.press (Key.f1)
    睡眠(0.1)
    keyboard.release (Key.f1)
elif F2.is_pressed:
    打印("发动机功率 50 %")
    keyboard.press (Key.f2)
    睡眠(0.1)
    keyboard.release (Key.f2)
elif F3.is_pressed:
    打印("发动机功率 75 %")
    keyboard.press (Key.f3)
    睡眠(0.1)
    keyboard.release (Key.f3)
elif F4.is_pressed:
    打印("发动机功率 100 %")
    keyboard.press (Key.f4)
    睡眠(0.1)
    keyboard.release (Key.f4)
elif F5.is_pressed:
    打印("襟翼位置 1")
    keyboard.press (Key.f5)
    睡眠(0.1)
    keyboard.release (Key.f5)
elif F6.is_pressed:
    打印("襟翼位置 2")
    keyboard.press (Key.f6)
    睡眠(0.1)
    keyboard.release (Key.f6)
elif F7.is_pressed:
    打印("襟翼位置 3")
    keyboard.press (Key.f7)
    睡眠(0.1)
    keyboard.release (Key.f7)
elif F8.is_pressed:
    打印("襟翼位置 4")
    keyboard.press (Key.f8)
    睡眠(0.1)
    keyboard.release (Key.f8)
elif Gear.is_pressed:
    打印("齿轮切换")
    keyboard.press ("g")
    睡眠(0.1)
    keyboard.release ("g")
Elif View.is_pressed:
    打印("查看切换")
    keyboard.press ("s")
    睡眠(0.1)
    keyboard.release ("s")
    睡眠(0.1)
其他:
打印("未按下任何按钮")
分享到