Loading
0

8090小组DIY:制作一款属于自己的街机游戏机

33.jpg

还记得那些给人带来乐趣的街机吗?你是不是也想拥有一款属于自己的街机呢?如果你有想法,那么就请看看我们的极客大神是如何DIY属于自己的街机的吧,相信你会大呼过瘾的。

工具

宜家 Lack 咖啡桌

树莓派

Arduino Leonardo(基于ATmega32u4一个微控制器板)

游戏摇杆

按钮

17寸液晶显示器(4:3相对好一些)

USB供电的电脑音箱

树莓派2.5A 电源

其它(电线、连接器、螺丝钉)

这里我用到的显示器是宏碁AL1716,这个显示器有17寸。我拆掉了显示器的塑料外壳,然后拧开螺丝,当然这里你需要在准备的咖啡桌上准备合适的凹槽,这样就可以将显示器嵌入进去了,下面就来一起看看如何做到的。

拆下支架,拧掉显示器外壳螺丝

1.jpg

这有可能是粘在一起了,小心翘银色的边框

2.jpg

当然外壳完全分开之后,先不要着急将显示屏拿下来,同时需要注意显示屏与外壳之间的电路板以及按钮,千万不要损坏这些。

3.jpg

去掉显示器外面固定边框的螺丝

4.jpg

现在取下显示屏然后放到桌面上

5.jpg

屏幕安装

在第一次尝试过程中,我们使用了Dremel电动打磨机在桌面上打磨凹槽,貌似很不错的样子。但后来发现其实也没有那么麻烦,使用刀( Stanley)也可以完成,当然选择在你。下面就可以

看到是如何钻孔(13mm)的,然后按照你之前的画好线的位置进行工作,值得注意的是,不要将位置弄反了。如果掌握不好距离怕超出范围,工作的时候可以到10cm位置停下来然后再从另外一端继续。最后在四个角将需要去掉的部分弄出来,这一步需要小心,不要损坏桌面。

将显示屏放在桌面上画出位置大小,当然少不了摇杆以及按钮位置。

6.jpg

标记四个角的位置,一会从这些标记的位置下手。

7.jpg

钻出四个角

8.jpg

这样做的目的主要是防止桌面损坏

9.jpg

沿着线进行切割,如果不慎手滑,那么就会前功尽弃,所以要小心。从第一个孔到第二个孔之间需要小心,如果怕超过范围可以到第二个孔之前留下一段距离,这样可以避免手滑导致的杯具

10.jpg

当你将上面完成之后就可以将需要去掉的部分翘出了,这一步需要小心,而这个时候还容易将里面连带的东西翘出所以需要特别小心。

11.jpg

用小刀将蜂窝纸切掉

12.jpg

现在桌子部分完成了

13.jpg

按键安装

现在需要制作按钮的位置了,在桌面上面安装按钮以及摇杆。首先需要mark一下摇杆以及按钮的位置,每个孔需要28mm(半径),这样就可以给摇杆足够的空间来移动了,然后再用螺丝固定摇杆。当然这里也需要从桌子下面将其固定,当在桌面上固定摇杆的时候可能会松动,所以将摇杆上的球通过底部向桌面上穿入进去时,底部向下这样就可以看不到任何痕迹了。装按钮比较简单,就是在孔( 28mm)直接装入即可。

在桌面背后进行切割,首先需要标记一下

14.jpg

需要的位置已经预留

15.jpg

标记摇杆以及按钮位置,然后开始钻孔大小28mm

16.jpg

摇杆底部被拆下,最后从桌面底部安装时在用这些螺丝固定

17.jpg

标记摇杆底部的孔,进行安装

18.jpg

将摇杆上面的球拧下来开始从桌下面进行安装

19.jpg

将球安装回原位,然后固定螺丝

20.jpg

控制部分

控制部分(Arcade control)相对比较简单,摇杆就相当于四个方向,但树莓派与这个不太相吻合,于是我选用了 Arduino Leona与树莓派进行匹配,这样就可以进行电脑那种控制,还有树莓派键盘。按钮连接到Arduino Leona,然后作为按键使用,作为一条回路开关就在另外一边,当然你也可以设置按键名称。

21.jpg

下载安装Arduino IDE,然后利用USB线连接 Arduino Leona到电脑,然后就可以输入下面的程序了。然后按照图示连接,之后还需要进行下面这些步骤你可以复制粘贴程序代码到Arduino IDE中,然后再运行。在Arduino IDE中,每个Arduino程序都称为sketch,它是一个可以上传进Arduino Board中的程序包,同时可以上传之后运行。

当然可以程序可以了解到对应按键情况,再上传程序之前,你可以修改程序。

在“Tools”菜单下,“Board”选项选择 “Arduino Leonardo” 

再次选择“Tools”菜单,从“Ports”选项下设置 Leonardo,之后准备上传程序

点击“Upload”按钮,开始上传程序

//element14 PIK3A Gaming Table Controls, using an Arduino Leonardo//  

  void setup() {  

  Keyboard.begin();  

  //Joystick and buttons pin allocations  

  pinMode(0, INPUT_PULLUP); //Joystick Up  

  pinMode(1, INPUT_PULLUP); //Joystick Down  

  pinMode(2, INPUT_PULLUP); //Joystick Left  

  pinMode(3, INPUT_PULLUP); //Joystick Right  

  pinMode(4, INPUT_PULLUP); //Button 1  

  pinMode(5, INPUT_PULLUP); //Button 2  

  pinMode(6, INPUT_PULLUP); //Button 3  

  pinMode(7, INPUT_PULLUP); //Button 4  

  pinMode(8, INPUT_PULLUP); //Coin  

  pinMode(9, INPUT_PULLUP); //Start  

}  

  void loop() {  

  // Button labels:  

  int joystickUp = digitalRead(0);  

  int joystickDown = digitalRead(1);  

  int joystickLeft = digitalRead(2);  

  int joystickRight = digitalRead(3);  

  int button1 = digitalRead(4);  

  int button2 = digitalRead(5);  

  int button3 = digitalRead(6);  

  int button4 = digitalRead(7);  

  int coin = digitalRead(8);  

  int start = digitalRead(9);  

   // Joystick Up - Arrow Up Key  

  if (joystickUp == LOW) {  

    Keyboard.press(218);  

  }  

  else {  

    Keyboard.release(218);  

  }  

  // Joystick Down - Arrow Down Key  

  if (joystickDown == LOW) {  

    Keyboard.press(217);  

  }  

  else {  

    Keyboard.release(217);  

  }  

   // Joystick Left - Arrow Left Key  

  if (joystickLeft == LOW) {  

    Keyboard.press(216);  

  }  

  else {  

    Keyboard.release(216);  

  }  

  // Joystick Right - Arrow Right Key  

  if (joystickRight == LOW) {  

    Keyboard.press(215);  

  }  

  else {  

    Keyboard.release(215);  

  }  

  // Button 1 - Left CTRL  

  if (button1 == LOW) {  

    Keyboard.press(128);  

  }  

  else {  

    Keyboard.release(128);  

  }  

  // Button 2 - Left ALT  

  if (button2 == LOW) {  

    Keyboard.press(130);  

  }  

  else {  

    Keyboard.release(130);  

  }  

  // Button 3 - Left CTRL  

  if (button3 == LOW) {  

    Keyboard.press(32);  

  }  

  else {  

    Keyboard.release(32);  

  }  

    // Button 4 - Left CTRL  

  if (button4 == LOW) {  

    Keyboard.press(129);  

  }  

  else {  

    Keyboard.release(129);  

  }  

    // Coin - 5  

  if (coin == LOW) {  

    Keyboard.press(53);  

  }  

  else {  

    Keyboard.release(53);  

  }  

   // Start - 1  

  if (start == LOW) {  

    Keyboard.press(49); delay(100);  

  }  

  else {  

    Keyboard.release(49);  

  }  

    }  

音频

之前准备的音响已经排上用场了,下面我想将音响移植到桌子里面。其实这些工作没有什么特别之处,就是需要延长线,然后再通过树莓派的3.5mm音频插孔输出,在桌子两侧钻出孔,并在桌子边缘处钻孔(10mm )来放一个音量调节器,然后再用热胶固定。

拆下音响的音量控制器部分,然后放置在一边

22.jpg

利用焊接方式制作延长线

23.jpg

在桌子的边上钻孔放置音量控制器

24.jpg

标记扬声器的安装位置

25.jpg

钻的这些孔主要是为了以后能够听到声音,然后固定之前的扬声器以及音量控制器部分。

26.jpg

电池

我打算将电池放入桌子中,我将连接器放入桌子底部然后用延长线将电源线延伸,当然我们之前已经将树莓派与扬声器连接之后可以处理信号问题,值得注意的是,我在这里都在桌子下面走线。

为电源预留的位置,然后将IEC连接器连接电源

27.jpg

现在可以焊接IEC连接器以及电源,然后进行安装

28.jpg

在桌子底部固定电源上螺丝之后,尽量将螺丝拧紧。这样就可以将树莓派、USB适配器、树莓派以及屏幕等安装一起了,当然一根电源线就可以供电了。

29.jpg

最后修改

这里重中之重的是显示屏,这里就需要用到亚克力材料,将其切成550mmx550mm大小的薄片垫到四个角处,我又在桌子侧面预留了USB接口给树莓派,这样就可以在有需要的时候连接键盘。

将这个连接到树莓派也可以通过其连接到外部端口,可以看成是一个防尘作用

30.jpg

如果按照之前的步骤保护显示器,我在这里加了塑料保护桌面,这个时候一定不要忘记揭开安装

31.jpg

之前的线口有些大了,从之前切掉的多余板子中切下一部分盖在上面

32.jpg

最后将RetroPie安装在sd卡中,然后需要将后缀名为.elf文件( start.elf、start_cd.elf、start_db.elf 以及tart_x.elf)复制到sd卡中,当然还有 NOOBs,关于这一点可以参考:点击我

好了,上面的过程可以被看做抛砖引玉,如果有感兴趣的小伙伴,一起尝试一下吧。。。。

【声明】:8090安全小组门户(http://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。