109 lines
7.9 KiB
Svelte
109 lines
7.9 KiB
Svelte
<script>
|
||
import Banner2 from "$lib/banner2.svelte";
|
||
import SubtitledImage from "$lib/components/subtitled-image.svelte";
|
||
import TableOfContents from "$lib/components/table-of-contents.svelte";
|
||
import Content from "$lib/viewport/content.svelte";
|
||
</script>
|
||
|
||
<svelte:head>
|
||
<title>Small Projects | denizk0461</title>
|
||
</svelte:head>
|
||
|
||
<Content>
|
||
<Banner2
|
||
title="My Small Projects"
|
||
subtitle="the ones that don't get the spotlight"
|
||
banner="crate.webp"
|
||
bannerAlt="A cardboard box filled with electronic components, tools, and screws. They are arranged in 3D printed Gridfinity containers." />
|
||
|
||
<p>Not all of my projects are big, month-long endeavours. Some of them are short and sweet. Sometimes, they're even more rewarding than the bigger ones, because you end up with a finished 'thing' much quicker! And because I like my small projects just as much as my bigger ones, I figured it would be nice to give them a space on my website as well.</p>
|
||
|
||
<p>There's more to come here! This page is very new and I will add things here gradually.</p>
|
||
|
||
<TableOfContents />
|
||
|
||
<h2>3DS USB-C mod</h2>
|
||
<p class="subtitle">DIY charging port mod</p>
|
||
<p class="subtitle">October 2024</p>
|
||
|
||
<SubtitledImage
|
||
image="3ds-usb-c/showcase.mp4"
|
||
subtitle="it charges via USB-C! also do you like my A Hat in Time theme?"
|
||
video />
|
||
|
||
<p>I modded my New 3DS XL (SNES Edition) to give it a USB-C port to charge!</p>
|
||
|
||
<SubtitledImage
|
||
image="3ds-usb-c/finished.webp"
|
||
altText="A back view at a New Nintendo 3DS XL with a USB-C port added between the charging port and the right shoulder buttons."
|
||
subtitle="the USB-C port in all its glory"
|
||
alignment="right" />
|
||
|
||
<p>I used a small USB-C breakout I had lying around that is wired straight into the charging pads of the original charging port, which is left completely intact. The breakout board also has a 5.1kΩ resistor between ground and one of the CC pins (which I had to manually find because it's unlabelled) to allow for using C-to-C cables.</p>
|
||
|
||
<SubtitledImage
|
||
image="3ds-usb-c/hole.webp"
|
||
altText="At the top is a view at a USB-C-shaped hole cut into the back half of a New 3DS XL. At the bottom is a look at the same hole from the inside of the case. There are rough cutouts where the stylus slides in."
|
||
subtitle="a closer look at the holes I cut, and how they affect the stylus slot"
|
||
alignment="left" />
|
||
|
||
<p>What I wrecked in turn was the wrist strap loop, which I completely cut out to create the hole for the port. The stylus port also got cut down to make space, but my stylus is kind of broken and doesn't stay put when I put it into the system, so I didn't really care about that.</p>
|
||
|
||
<p>It works well! The hole isn't the prettiest but it was pretty simple to pull off, and extremely cheap as well. In turn I got a 3DS that I can charge using any USB-C cable and I no longer need to lug around the proprietary 3DS charger!</p>
|
||
|
||
<h2>deej0461</h2>
|
||
<p class="subtitle">PC companion audio source controller</p>
|
||
<p class="subtitle">August 2024</p>
|
||
|
||
<SubtitledImage
|
||
image="deej0461/finished.webp"
|
||
altText="A golden 3D printed shell with a slider on its left, two LEDs recessed, and four black buttons on its right. The buttons have symbols of speakers, monitors, and headphones printed on them. Three screws at the top are visible. A USB-C cable is plugged into the back of it."
|
||
subtitle="a handful of device for controlling a handful of other devices" />
|
||
|
||
<p>This little device was inspired by one a friend of mine built his own version of: a <a href="https://github.com/omriharel/deej">deej</a> volume slider panel. This thing allows you to control different applications with individual, <i>physical</i>, sliders. Super cool thing.</p>
|
||
|
||
<SubtitledImage
|
||
image="deej0461/printing.webp"
|
||
altText="A Bambu Lab A1 mini 3D printer in the middle of printing casing parts using a golden filament. The printer head has two googly eyes attached."
|
||
subtitle="googly-eyed printer hard at work"
|
||
alignment="left" />
|
||
|
||
<p>Except – I didn't need all these sliders, really. A single slider would be cool, I thought. You know what I really wanted? Buttons to control the audio <i>source</i>, because I switch between speakers and headphones constantly, and that's at least 3 clicks every time I want to switch. So I built a device based on deej, but with some expansions.</p>
|
||
|
||
<p>I only used few components: a HID-enabled Arduino-compatible Pro Micro with USB-C controls the whole thing. Hooked up to it are four Cherry switches and a Soldering slider I had lying around from my <a href="/projects/daisy">Daisy project</a>, and I added two LEDs for good measure. It's all packaged into a 3D-printed enclosure I designed myself. The slider is screwed in tightly, and so is the top of the case; the key switches are clipped in from the top so they don't fall out; the Arduino and the LEDs are just hot-glued in. For extra flair, the four output buttons are marked with symbols for my outputs: two monitors, a pair of loudspeakers, and a pair of headphones. In the final device, they're arranged so that my two most frequently-used buttons are at the bottom for easier reach.</p>
|
||
|
||
<p>Software-wise, I set this up with the original deej software to control main volume. For the audio, I used a program called <a href="https://soundswitch.aaflalo.me/">SoundSwitch</a>. The program listened to key presses for the <code>F21-F24</code> keys, which the Arduino triggers when the output keys are pressed. The red LED lights up when a key is pressed; the white LED has no assigned function. This worked pretty well, but this is no longer the setup I use, since I switched to Fedora Linux, as I needed to adapt/change the software for the new OS!</p>
|
||
|
||
<SubtitledImage
|
||
image="deej0461/soldering.webp"
|
||
altText="An Arduino set into a 3D printed case with a slider, two LEDs, and four key switches soldered to it using wires. The components are spread out and hanging out the top of the case."
|
||
subtitle="no PCB? no problem"
|
||
alignment="right" />
|
||
|
||
<p>When pressing a keyboard's volume button, Windows raises or lowers volume in increments of 2. Fedora does 5. I found this much handier, so I stopped reaching for the slider and just defaulted to using my keyboard. This meant I didn't bother setting up the slider in Fedora. The buttons work, though, but they needed some adjustment. I think (and I might be wrong??) that Linux doesn't support function keys past F12, so I changed the Arduino script so the buttons trigger <code>Shift + F9-F12</code>. Instead of a separate program (which kept asking to be updated...), I now use KDE's built-in Shortcuts that trigger a script. The script is one line: <code>pactl set-default-sink [sink-name]</code>. The sink name is hard-coded into the file because, as extensive testing proved, Shortcuts does not allow arguments when entering a command. I currently only have two files set up: one for the primary monitor, one for the headphones.</p>
|
||
|
||
<p>I much prefer the setup now because it doesn't rely on third-party software anymore.</p>
|
||
|
||
<p>This thing is, no exaggeration, one of the handiest things I have ever built, because I use it quite literally <i><b>every single day</b></i>. I often switch between my monitor's speakers and my headphones, and being able to do that with the press of a single button is <i>unbelievably</i> handy. I don't even think about it anymore, I just reach for the buttons whenever I switch. It's a part of my routine now and I wouldn't want to miss it.</p>
|
||
|
||
</Content>
|
||
|
||
<style>
|
||
.subtitle {
|
||
font-family: var(--font-mono);
|
||
margin: 0;
|
||
font-size: 1.0rem;
|
||
line-height: 1.4rem;
|
||
font-style: italic;
|
||
font-weight: 700;
|
||
color: var(--color-highlight-alt);
|
||
}
|
||
|
||
.subtitle::before {
|
||
content: '<!-- ';
|
||
}
|
||
|
||
.subtitle::after {
|
||
content: ' -->';
|
||
}
|
||
</style> |