如何制作自定义宏机械键盘

电子说

1.3w人已加入

描述

步骤1:获取零件

机械键盘

最长的步骤就在这里,购买零件并等待它们发货。 亚马逊链接将是加拿大亚马逊。您需要的部分是:

机械钥匙开关

我从这里选择带有透明顶部的Gateron开关(透明顶部使下一步变得更容易,同时也覆盖了大多数常见类型的开关)

其他购买地点可以在你最喜欢的开关部分找到

我强烈建议你在这里根据‘感觉’部分进行一些关于你想要的开关的研究

机械键帽

确保它们与您选择的开关兼容!

同时确保它们与背光兼容所以你可以改变颜色

供应商可以在‘新奇键(标准制造)’部分下找到,除非你想要一个完整的键帽设置

可寻址的RGB LED灯条(可选,但强烈推荐)

我从亚马逊购买了类似的东西

确保LED是WS2812B LED,他们可以接受更低的电压。

你也可以购买你喜欢的颜色的3mm常规LED,但是你需要电阻

一个HID兼容的微控制器(我使用的是Pro Micro)

我从亚马逊购买了这些以获得最佳优惠

您可以购买其他微控制器,但要确保它们都是Arduino和HID (人工输入设备)兼容

128x32 I2C OLED显示器

我是从亚马逊购买的

访问3D打印机

尝试使用您周围的本地图书馆或学校,看看他们是否有3D打印机

我个人从未使用过一个在线服务,但你也可以使用它们(类似这样)

细线

需要的常规工具

烙铁和焊锡

侧铣刀

小锉刀(有些可选)

热胶枪和胶水

螺丝刀和您选择的螺钉

第2步:钥匙开关修改

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

开始反汇编您购买的交换机。我们这样做是为了让灯光更好地照亮我们的键帽。如果您选择了不支持RGB的键帽,请跳过此步骤。

取2个小楔子(我使用2个平头螺丝刀头)并按下开关侧面的卡舌下方。然后把东西放在顶部和底部之间,这样它就不会关闭。继续推动另一侧的标签,因此没有标签应该仍然保持顶部。之后,完成并弹出开关顶部。通常有四个部分,即外壳的顶部和底部,弹簧和杆(开关的滑动部分,用于固定键帽)。

开始从底部切下小块小块允许更多光线通过的情况。首先切断将开关固定在板上的标签。然后切掉一些原始LED通过,(带有4个孔的部分,用于LED的支脚)。慢慢减少内部的标签,直到底部。然后继续切割到固定弹簧的开关的圆柱形中心。我们不需要更进一步。之后,通过使用预模制支撑件缓慢切断两侧,使孔稍微变宽。另一个可选步骤是将其归档,使其更好,更少锯齿。确保外壳内部几乎没有塑料钻头,因为您不希望开关卡住。 确保这些切割缓慢而小,因为我从侧切刀的宽度上打破了一些情况,迫使表壳分开。

如果你的上半部分开关也不清楚,尝试修改它以让光线透过。在不破坏开关的情况下一点一点地尝试,因为你不希望杆掉出来。一种可能的解决方案可能是切掉可以容纳普通LED的塑料块,并留下塑料使阀杆保持封闭状态,并将其归档。

步骤3:3d打印

机械键盘

您需要下载下面的一个zip文件,并打印3d文件。根据您的需要,会有不同的版本。将有一个包含所有正常stl文件的文件夹(KeybArrowSTLFiles),以及一个包含Autodesk发明者文件(KeybArrowSourceFiles)的文件夹,以便您可以修改文件并根据自己的需要进行更改。这些文件与我打印的文件略有不同,这是因为存在一些设计缺陷,我觉得我可以改进它们。例子是案件的两侧,我的有点太高,所以键帽不会一直向下推,新文件应该解决这个问题。

它们的设计相当复杂,超过30多步。我要说的是,如果你想设计一个不同尺寸的表壳,你应该确保你有一些复杂的3D设计经验。对于不熟悉3d设计的人来说,这并不是真的。

请注意,两个套管文件都是3度角,你应该将它们平放在床上。

第4步:组装你到目前为止的东西

机械键盘

机械键盘

机械键盘

机械键盘

机械键盘

现在我们拥有了所有零件,并且我们有三维打印零件,现在是时候组装一下了!

将所有6个开关放入板中,并将它们粘合到位。我们需要粘合它们,因为我们切掉了将它固定到位的标签。我建议等待放入OLED,因为你不希望它倾斜。

接下来,关闭6个LED并将它们放在LED板上。板上的方块可以帮助您对齐LED。方形LED将适合它们,因此您可以3D打印另一个以帮助对齐,或者只是从背面排列。确保箭头指向其他LED,因为DO将焊接到DI。使用这些方块用热胶粘在LED上,并将它们固定到位并等待胶水保持。

我使用原型板作为开关来固定LED(在图像中),因为我不喜欢浪费灯丝,并决定重复使用。新文件不会影响任何内容,只需简化对齐。

步骤5:设置OLED

机械键盘

机械键盘

机械键盘

机械键盘

I建议使用此Instructable进行彻底的漫游。他们在解释它方面做得非常好。

您需要下载并导入此库和此库才能使代码生效。

首先将其连线。将VCC连接至VCC,将GND连接至GND。然后连接SDA和SCL引脚。 SDA和SCL引脚可能因每个Arduino而异,但在pro micro上,SDA连接到引脚2,SCL连接到引脚3.如果您不确定SDA引脚,请查看微控制器的引脚分配和SCL连接到。

接下来是显示和制作图像。下面将提供如何使其正常工作的文件。第一步是使用ScreenScan代码(最初由Arduino提供)。将代码上传到Pro Micro并打开Serial阅读器(位于顶部的工具选项卡下)。它会读回你的OLED和地址。如果你的地址是0x3C,那么你不需要改变任何东西。如果不是,那么您需要更改ssd1306_128x32_i2c代码中的地址和最终代码(名为ArrowKeypad)以使其正常工作。

现在测试Adafruit ssd1306库中包含的示例代码,该代码用于128x32 i2c代码(名为ssd1306_128x32_i2c)

之后,保持Arduino开启,并尝试排列OLED开关板,然后将其关闭并尝试将其粘合到位。你很可能不会第一次尝试,但继续调整以尝试使其对齐,以便在完成时不会成角度。我建议稍微粘一边,并在粘贴另一面之前检查以确保它不倾斜。

立即下载代码,并使用步骤中的其他代码文件8在本Instructable中稍后。

步骤6:焊接

机械键盘

Fritzing文件将可用下面。这将允许您与电路交互,如果您单击并按住,您可以看到哪些电线都连接(以黄点突出显示)需要导入Fritzing的文件,然后打开文件将在下面(对于Pro Micro和LED)。

确保引脚标记为“MOSI,MISO或SCLK”未使用,否则会导致OLED出现毛刺。

将6个LED切割成单个条带,并将它们粘在板上。将烙铁放在铜焊盘上,并在每个焊盘上添加焊料。切割一小块电线并剥去一半的电线,将其扭曲,然后取下另一半并扭转电线。需要用钳子或一些焊接助手握住电线,同时用焊料将电线固定到位。添加更多的焊料,以便很好地保持它。将行中的所有LED焊接在一起。切断导线,将其焊接到第一行LED的末端,标记为“DO”或“D-”,并将其连接到第二行的第一个LED,标签为“DI”或“D +” ”。您也可以使用5v和GND进行此操作,但如果每行的第一个LED 5v和GND连接在一起,则会更容易。将5v线连接到VCC,数据引脚连接到任何数字引脚(代码设置为10),GND连接到Arduino上的GND。

为了让Arduino识别输入,开关需要将地连接到数据引脚。因此,您可以焊接一根导线将所有6个开关连接到地。将一根电线焊接到每个开关,如果可能的话,尝试更改电线的颜色以跟踪哪根开关是什么电线。将电线穿过LED板并将它们连接到Arduino上的数据引脚(为此,我使用数据引脚5-9)

侧面的两个开关具有不同的功能,一个是复位开关用于编程,而另一个是功能开关,它将在键盘的各层之间切换,以快速改变按钮的功能。顶部开关连接到复位(RST)和GND,连接时会导致复位。底部开关连接到引脚18,在Pro Micro上标记为A0。因为您仍然需要在板中滑动,因此您需要在板中滑动,并且太少的电线将不允许通过顶部插入板。

步骤7:编程简介

机械键盘

在您想要关闭案例之前,你想测试它并确保它的工作原理。您可以跳到步骤11以立即组装它。我发现事先测试它有助于减少打开和关闭它的次数。即使它不应该影响它,我使用Arduino IDE版本1.8.3,所以如果你有问题,尝试使用这个版本。 代码在第5步,它是一个zip文件,你需要通过Arduino提取和上传。

下面会有多段代码。一个将是最终的代码,两个将测试OLED(一个测试,一个找到地址),一个将测试RGB。使用最终代码测试开关。

如果你想设计自己的代码,我会在接下来的3个步骤中教导它,但如果你想使用我的代码,或者接受并修改代码,那就完全没问了。

编程的基础

在“工具”选项卡下,然后在“板”选项卡中,将其设置为Arduino Leonardo(除非您有一个与Pro Micro不同的微控制器)

每次将代码上传到Pro Micro时都使用重置开关。我发现,一旦编译栏已满,并且仍在上传,现在是打开和关闭开关进行编程的好时机。 (如果不这样做,上传将无法上传。)

必须安装和导入所有使用的库

要导入,请转到工具选项卡,然后单击包含图书馆。 (另请注意,我在网页上的代码示例需要在库名称周围加上《》,我在接下来的几个步骤中无法在示例代码部分输入它们)

LED和OLED库将被初始化为对象,你可以为它们命名,但为了演示,我将它们命名为‘strip’和‘display’

通过键入从对象调用函数对象名称,放置句点,然后键入要使用的函数

接下来测试LED,上传代码,并确保它们全部工作。如果没有工作,你错过了一个针脚,检查你的焊接第一个LED。

最后,使用最终代码测试你的开关。这应该是最容易做到的。请注意,现在,在上传一些HID代码后,每次上传代码时都需要重置Arduino。只需将其重置一半即可上传,它应该可以正常工作。

步骤8:编程开关

机械键盘

在所有编程中,开关最不复杂。要将其识别为键盘,您需要使用的是Arduino键盘库和条件语句。确保在工具选项卡下,如果您使用像我这样的Pro Micro,则将Board设置为Arduino Leonardo。

在我们开始使用条件语句之前,我们需要设置引脚。我们只需要运行一次,所以将它放入void设置中。从pinMode开始(PinNum,INPUT_PULLUP);这告诉Arduino PinNum期望输入,并且它增加了一个上拉电阻(这样我们就不需要在硬件中连线)

输入上拉有两种状态,LOW和高。当引脚连接到地(GND)时,Arduino将在引脚上读为低电平,并在断开时读为高电平。要查找引脚读取的内容,我们使用digitalRead(PinNum)。

从基础开始,我们使用条件if语句来查找是否按下了键。我们希望它反复运行所以我们希望将其置于void循环中。如果该键被注册为“LOW”,那么我们希望按下该键,并在输入为“HIGH”时释放该键。所以要做到这一点,我们编码if(digitalRead(PinNum)== LOW){[按下按钮的代码]}和代码if(digitalRead(PinNum)== HIGH){[按钮释放时的代码] }

对于键盘代码,请导入键盘库。放一个keyboard.begin();在虚空设置中。然后在条件语句中,我们使用keyboard.press([key]);和keyboard.release([key]);或者keyboard.releaseAll();如果您按下了多个键。你也可以使用keyboard.print([String]);和keyboard.println([String])一样打印字符串,就像密码一样。 print和println类似,但println只是添加一个ENTER,所以它会自动转到下一行。

步骤9:编程OLED

从编程OLED开始,您需要有基本的设置代码。这基本上告诉计算机你的OLED所在的位置,它的大小,以及它的编程方式。一旦你有OLED的设置代码,假设你只显示文本,编程应该非常简单。首先包括Wire和SSD1306库。

将OLED_RESET定义为4,并在代码中包含SSD1306库。放Adafruit_SSD1306显示(OLED_RESET);在您的代码中开始使用Adafruit SSD1306库。

从Serial.begin(9600)开始;然后display.begin(SSD1306_SWITCHCAPVCC,0x3C);初始化地址为0x3C的i2C显示(除非在步骤5中更改)。将这两个放在void设置中,因为它们只需运行一次。

在编程显示之前,应确保使用display.clearDisplay。如果你没有输入的内容将重叠,并且根据改变的内容,将不会清晰。您还想设置原点,因此请使用display.setCursor(0,0);要将其设置在显示器上的某个点上,请将(0,0)重置为开头。要设置文本的大小,请使用display.setTextSize(1);我不会比1大得多,它比预期的要大得多。

即使我们的显示器是单色的,我们也需要设置文本颜色,所以我们将它编程为display.setTextColor(WHITE);

现在您已导入库和显示对象,您可以开始编程。要添加文本,请使用display.print();和display.println();打印字符串。同样,打印不会添加返回,而println会在再次打印某些内容时自动返回到下一行。

在显示任何内容之前,您需要更新OLED,并告诉它更新,您使用display.display();没有参数,它会更新。

现在代码看起来应该是这样的:

//Code Made by Foster Phillips

#include Adafruit_SSD1306.h

#include Wire.h

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);

void setup() {

pinMode(SWITCH,INPUT_PULLUP);

Serial.begin(9600);

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.display();

delay(2000);

display.clearDisplay();

display.setTextSize(1);

display.setTextColor(WHITE);

}

void loop() {

display.display();

delay(2000);

display.clearDisplay();

display.setTextSize(1);

display.setCursor(0,0);

display.println(“Hello World!”);

display.println(“Hello Instructables!”);

}

这个Instructable和这个Github链接都是非常好的故障排除参考,分别是关于编程显示的更多信息。

步骤10:对LED进行编程

LED也相当简单。我们将使用Adafruit Neopixel库。就个人而言,NeoPixel库与Processing中的编程非常相似,如果你曾编程过。

首先是设置代码,解决我们正在使用的库,并设置一个基本上说的数组引脚上有多少个LED,数据的引脚是什么,以及它是如何编程的。这是通过Adafruit_NeoPixel strip = Adafruit_NeoPixel(6,10,NEO_GRB + NEO_KHZ800)等示例完成的。这解释了有6个LED,引脚是引脚号10,它使用NEO_GRB + NEO_KZH800类型的可寻址条。通常不需要触摸最后一个参数,我使用的LED灯条不需要更改。

之后你需要strip.begin();功能显示您已准备好开始使用它们。没有任何东西需要在括号中。

一旦你有了它,你可以用条带调用不同的函数。[function]

你需要知道的是strip.setPixelColour 。这在括号中有4个功能。您在LED的“阵列”中有LED(请记住,阵列从0开始),相应的红色,绿色和蓝色值在0-255之间。这将允许您混合所需的红绿色和蓝色值以获得所需的颜色。代码应如下所示:strip.setPixelColour(0,0,255,255);如果你想在第一个LED上有青色。

LED也需要发送那个数据,这就是strip.show();确实。用它们改变后,它会更新像素。没有什么需要进入括号。

代码应如下所示:

//Code Made by Foster Phillips

#include Adafruit_NeoPixel.h

#define PIN 10

#define Num 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(Num, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

strip.begin();

strip.show();

}

void loop() {

strip.setPixelColor(0,255,0,0);

strip.setPixelColor(1,255,0,0);

strip.setPixelColor(2,255,0,0);

strip.setPixelColor(4,255,0,0);

strip.setPixelColor(3,0,0,255);

strip.setPixelColor(5,0,0,255);

strip.show();

}

可在此处找到更多信息。

步骤11:组装!

这可能是最简单的步骤,最酷的。

首先将Pro Micro放置并滑入外壳盖上。用一些热胶将其粘贴到位。

外壳/封盖的设计使您可以将开关板和LED板放在一边。只需将其滑入,根据您的打印方式,您可能需要归档或切割内部。滑动去除一些悬垂的塑料。

然后,拿起你的螺丝,然后将它塞进那里并制作你自己的螺丝孔。当我设计文件时,我没有特定的螺丝,所以我只是做了一个大小与螺丝大小相同的孔并将其拧入自己。用打火机加热它将有助于形成你需要的螺丝,并通常加强层。确保不要过度拧紧螺丝,否则可以剥开头部。我使用艾伦内六角螺钉来降低这种风险。

然后将钥匙帽推到钥匙上。然后它已经完成了!我的Arrow Key Macropad版本已经完成了!

第12步:你自己的改进!

既然你知道如何制作我的版本,你可以做你自己的!键盘可以说是表达自己,所以除非你修改它以适合你,否则只是拥有别人的设计并不好玩!你可以做很多改进!以下是我想添加或想到的一些改进!

程序俄罗斯方块和其他简单游戏

使其成为蓝牙

允许它从幻灯片中读取数据并将其显示在OLED上(显示幻灯片)幻灯片的编号和名称)

使用这些技术制作全尺寸键盘或更大的macropad

您需要学习如何为此制作开关矩阵

编写更多颜色选项

用于游戏,视频编辑等的程序宏。

使用Autodesk Inventor源文件制作您自己的案例,或者将其修改为独一无二的!

添加一个音板,让它兼作音乐播放器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分