From 3e7802908a4e6d20de3edde3ef1bef20f724f0db Mon Sep 17 00:00:00 2001 From: len0rd Date: Thu, 6 Oct 2022 19:48:52 -0400 Subject: [PATCH] added a hacky link to get back to the home page from a project/sphinx page --- {views/pages => assets/img}/favicon.ico | Bin pip-requirements.txt | 2 +- project_writeups/conf.py | 17 +- project_writeups/contents.rst | 7 +- project_writeups/darkstar.md | 108 ------- project_writeups/darkstar.rst | 118 +++++++ project_writeups/ls1synth.md | 31 -- project_writeups/myWebsite.md | 43 --- .../{palletDesk.md => palletDesk.rst} | 295 +++++++++--------- server.js | 8 +- 10 files changed, 297 insertions(+), 332 deletions(-) rename {views/pages => assets/img}/favicon.ico (100%) delete mode 100644 project_writeups/darkstar.md create mode 100644 project_writeups/darkstar.rst delete mode 100644 project_writeups/ls1synth.md delete mode 100644 project_writeups/myWebsite.md rename project_writeups/{palletDesk.md => palletDesk.rst} (84%) mode change 100755 => 100644 diff --git a/views/pages/favicon.ico b/assets/img/favicon.ico similarity index 100% rename from views/pages/favicon.ico rename to assets/img/favicon.ico diff --git a/pip-requirements.txt b/pip-requirements.txt index 89cf9bc..59545de 100644 --- a/pip-requirements.txt +++ b/pip-requirements.txt @@ -1,3 +1,3 @@ sphinx -sphinx-rtd-theme +sphinx_bootstrap_theme sphinxcontrib-youtube diff --git a/project_writeups/conf.py b/project_writeups/conf.py index ab128b7..2c34de6 100644 --- a/project_writeups/conf.py +++ b/project_writeups/conf.py @@ -1,8 +1,9 @@ # Sphinx docs configuration for building project documentation from datetime import datetime +import sphinx_bootstrap_theme import os -project = "Lenords Projects" +project = "lenordsNet Projects" author = "lenord" copyright = f"{datetime.now().year}, lenordsNet" @@ -12,10 +13,16 @@ extensions = [ root_doc = "contents" -html_theme = "sphinx_rtd_theme" -html_additional_pages = { - "index": os.path.abspath(os.path.join("..", "views", "pages", "index.ejs")) +html_theme = "bootstrap" +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() +html_baseurl = "/" +html_use_index = False +html_theme_options = { + "navbar_title": "lenordsNet", + "navbar_sidebarrel": False, + "navbar_class": "navbar navbar-inverse navbar-dark", + "source_link_position": "footer", + "bootswatch_theme": "cyborg", } -# html_static_path = ["_static"] pygments_style = "sas" diff --git a/project_writeups/contents.rst b/project_writeups/contents.rst index 4c719ff..549c674 100644 --- a/project_writeups/contents.rst +++ b/project_writeups/contents.rst @@ -1,9 +1,12 @@ -Lenords project documentation -============================= +lenordsNet project documentation +================================ .. toctree:: :maxdepth: 2 :caption: Contents: + Home <../../#http://> ls1synth myWebsite + palletDesk + darkstar diff --git a/project_writeups/darkstar.md b/project_writeups/darkstar.md deleted file mode 100644 index a41a014..0000000 --- a/project_writeups/darkstar.md +++ /dev/null @@ -1,108 +0,0 @@ -# Darkstar Quadcopter - -The Darkstar is a RC quadcopter with the ability to fly autonomously through pre-designated waypoints, using advanced estimation techniques and object avoidance. - -..At least that is the end-goal. Getting there however requires resources I simply do not have as a college student (read: money). Given such constraints, building an advance copter on the cheap sounded like a good challenge. Perhaps you can learn from my mistakes if you're interested in such a venture. - -Having landed a gig at an autonomous flight research center for the summer, I figured now was as good a time as any to dive into the exciting world of quadrotors - a world I've always been interested in, but never had the time to sit down and learn. - -## Part 1: Part Selection - -As is the case with most hobbies, much of my money was spent on initial startup costs: an RC transmitter and battery charger, while essential, would only need to be purchased once. If I want to build more rc-craft in the future, this will make it a lot easier. - -![FrSky Taranis QX7](/img/writeup/darkstar/frsky-controller.jpg) - -**Transmitter:** I went with a [FrSky Taranis QX7](https://www.amazon.com/dp/B06XC4C4WH) for a few reasons: - -1. It's "cheap": This is a pretty feature-rich transmitter for the price. Amazon has it priced fairly high, but I managed to pick mine up from [ProgressiveRC](https://www.progressiverc.com/) for $105, shipping was free and fast. - -2. Experience: I've been using/fiddling around with this transmitter at work while building some vehicles, so I had at least an introduction to the system, leaving me with one less thing to learn. - -3. Aesthetic: From what I've seen, there are few transmitters out there that have any semblance of competent industrial design. This happens to be one of them. It's well-built with decent ergonomics and doesn't look overly tacky or intimidating. Plus it comes in white, which I really have been enjoying lately for some reason. - -**Frame:** Really nothing special here. I got a [Reptile 500](https://www.ebay.com/sch/i.html?_nkw=reptile500+v3+quadcopter+frame) frame... or something. Honestly not sure on the name here. Basically my strategy was to browse [hobbyking](https://hobbyking.com) til I found something I liked, then I headed over to ebay, to buy something similar. You can get frames for pretty cheap off there if you're willing to wait for it to ship from China. I wasn't, so I paid an extra $10 to get it from a US seller. - -As Shipped: -![Frame as shipped](/img/writeup/darkstar/frame-boxed-sm.jpg) - -(Mostly) Assembled: -![Assembled](/img/writeup/darkstar/frame-assembled-sm.jpg) - -Some of the arms were a pain to secure: -![Arm Trouble](/img/writeup/darkstar/frame-armtrouble-sm.jpg) - -Overall I'm pretty happy with the frame. It's simple and it was cheap. At first I thought 500mm between motors would be huge, but I've grown to like it and how much space it gives me. I have plenty of room to jam all of my various gizmos throughout. Being cheap and from ebay, it was a bit of an effort to secure all the arms to the frame; aligning the holes was more difficult than anticipated. But once mounted they're pretty solid, and have already survived a few crashes with ease. - -**Motors:** [LHI 2212 920KV](https://www.amazon.com/dp/B00XQYTZQ2) motors. Again, cheap and functional. The product I ordered from Amazon came with ESC's, which I thought was great, but I eventually had to swap out those ESC's, so overall, not worth the 'savings' I thought I was getting. I didn't have any idea as to what speed or motor rating I wanted, and initially I was worried that 920KV wouldn't be fast enough. However, seeing that 920 is used by the phantom reassured me and they work great. The copter isn't too acrobatic, but still has some 'umph'. Another great thing about these motors is they're built as DJI replacements, which means they also work with DJI's self-tightening props. Thank goodness! That makes portability/replacement so much easier. - -I was stupid and tried to screw the motor in through all 4 holes on the arm with some aggressive dremeling, before realizing there were two holes for my motor size, and two for a different size. - -![Motors attached](/img/writeup/darkstar/motor-attached-sm.jpg) - -DJI props! So much easier than the other nightmares I've worked with in the past. - -![DJI Props](/img/writeup/darkstar/motor-djiprops-sm.jpg) - -**Receiver:** [FrSky D4R-II](https://www.amazon.com/gp/product/B00SWHWFWO/) Cheap, compatible, capable. I would be comfortable with any FrSky CPPM receiver here. - -**ESC:** [Makerfire 20A](https://www.amazon.com/gp/product/B01DEN46I6) As I mentioned above, the ESC's that came with my motors had some weird issues... Actually come to think of it, it was likely my own stupidity that was the issue. It's okay though, the makerfire esc's get the job done, and are a factor of magnitude smaller/lighter than my original esc's, so I'll consider that a win. - -**Flight Controller:** Flip32+ This is one of those parts that I didn't want to skimp out on or mess around with. This is the board that we use fairly exclusively at work, so I'm familiar with it, and it's a reasonable price. The cheaper Chinese versions of these have been known to have some IMU/Gyro issues, so we only buy these from [readytoflyquads](http://www.readytoflyquads.com/the-flip32-187) - -**Battery:**Currently I'm using a 2200mAh 3S LiPo battery, but as of writing this, I'm looking at stepping up to a 4 or 5000mAh. 2200 is adequate in terms of flight time, but as I throw more gear on this thing, it'd be good to have something a bit larger. - -### Assembly -Mostly I just added things on here and there as I got them in the mail. I had most of the frame pieces setup and ready to go by the time I had my big 'assembly party'... alone... on a Friday night.... Help me: - -Receiver mounted on top with a twist tie, ESC's secured on the arm with some good velcro/zip ties: -![Receiver mounted](/img/writeup/darkstar/assembly-1-sm.jpg) - -This plate+anti-shock mount combo was intended to go in the front of the drone for fpv. While that is something I would like to eventually add, this plate also happened to be the perfect size for the Flip32. So I drilled a few holes, allowing me to mount the naze as close to the center of gravity as was reasonable: -![Flip32 Mount](/img/writeup/darkstar/assembly-2-sm.jpg) - -Assembly can get messy: -![Assembly environment](/img/writeup/darkstar/assembly-3-sm.jpg) - -This is the handiest edition I think I've made. This allows me to plug in the battery with the confidence that the motors aren't going to immediately attack me. Currently I only use one side of the switch, but in the future I plan on having one side turn everything on, while the other side only turns on the small electronics(and not the finger-slicing motors): -![Power switch](/img/writeup/darkstar/assembly-4-sm.jpg) - -Power distribution soldered and mounted! The velcroed piece at the top is my 5V BEC: -![Power distribution](/img/writeup/darkstar/assembly-5-sm.jpg) - -Naze (aka Flip32) mounted! This is all a bit tighter than anticipated: -![Naze mounted](/img/writeup/darkstar/assembly-6-sm.jpg) - -Todo: cable management -![Cable management](/img/writeup/darkstar/assembly-7-sm.jpg) - -Also Todo: Secure the battery in a non-terrible way -![Secure battery](/img/writeup/darkstar/assembly-8-sm.jpg) - -## Part 2: Fixes and Tweaks -Its been a few weeks since writing part 1 and a lot has changed. For starters the thing actually flies now. As I mentioned in part 1 I had some troubles getting my first set of esc's to work correctly. So I replaced them with new, smaller ones, and *still* had trouble with them. That is until I finally sat down and figured out how to calibrate them (protip: read the instructions that come with your products!). With that squared away, this hunk of junk finally became a flyable drone as opposed to a 180deg flipping machine, as shown in the video below. - - - -Unfortunately I dont have any footage of the first successful flights(I was out by myself, as usual), but just know it was legendary. Flight 1 went well until I accidentally crashed into a pine tree, which provided a surprisingly cushy landing. Flight 2 was absolutely beautiful until I somehow managed to clothesline my drone on literally the only power line in the immediate vicinity. The rest of the initial flights followed a similar pattern. All-in-all, I ended up buying another 4 sets (with 2/set) of props, after breaking 4 of them. Seeing as this was my first real drone-flying experience, and I was still tweaking some of the settings, I chalk it up to the cost of learning. - -![Broken Props](/img/writeup/darkstar/tweaks-1-sm.jpg) - -### Sim Practice - -Around this time I also discovered a nifty, cheap piece of software: [fpv-freedrider](https://fpv-freerider.itch.io/fpv-freerider). This is simple but functional simulator that is handy to practice on. I simply plugged my transmitter via usb into my machine and it recognized it straight away. All I had to do was calibrate once in the software and I was off to the sim. This definitely helps with mastering some basic flight skills, but naturally its not as difficult as the real thing. And I've found the best way to learn to fly is having the constant threat of a catastrophic crash looming over you and every decision you make (while flying that is). - -### LED Upgrade - -These days its basically an undeniable fact that RGB LEDs make everything in this world better. And you'd be a fool to think I wasn't planning on adding them from the beginning. With the quad finally getting up in the air, I needed something to make my crashes look *cooler*. and boy-oh-boy did the LEDs fit the bill. The LEDs are programmed through an Arduino and change state/pattern based on the CPPM input coming from the rc receiver! - -I've been planning for some time to integrate an Arduino nano into the copter because of the rapid prototyping I'll be able to do with various sensors that work with it. LED control was the perfect first-step to get the Arduino project online. This was also my first time working with the Arduino and LED control is the simple (and traditional!) place to start.  Here's an overview of how the LED control works as of this writing: - -- When the craft is disarmed, the LEDs fade in and out - -- When armed, the LEDs switch to solid illumination - -- If armed, and not in autopilot mode, if the incoming CPPM command does change *enough* (ie the current command hasn't deviated by some delta compared to multiple past commands), then the LEDs alternate from solid to blinking about one every 1.5 seconds, until a new unique command is read. - -The backbone of this project is an absolutely killer [CPPM library](https://github.com/jmparatte/CPPM) developed by Jean-Marc Paratte. The library is very simple to use, and the examples are self-explanatory. It was pretty accurate with my 8-channel FrSky receiver. With that library in place, the rest was just some good 'n simple state machine logic. If you're interested in taking a peek, here's [the repository](https://github.com/len0rd/darkstar_copter). Release 0.1 has the basic LED state machine using CPPM. After that release I've added some more features, making it a bit more complex (I'll write about those later, when I know they all work properly). - -Assembly was easy. For now, I'm running all 4 LEDs off one MOSFET and 1 pin on the Arduino. This is so I have more pins available for other sensors in the future, but it would also be cool to have each arm individually controlled. [Here](https://www.amazon.com/gp/product/B017X92K9Y) are the LEDs I used. [This guy](https://www.youtube.com/watch?v=sVyi7yWuXxs) is pretty helpful if you need help figuring out how to use a MOSFET + Arduino to control 12V LEDs. These LEDs are actually a really good reason to use a 3S LiPo battery, since its standard voltage is ~12V ish. \ No newline at end of file diff --git a/project_writeups/darkstar.rst b/project_writeups/darkstar.rst new file mode 100644 index 0000000..fe28ad8 --- /dev/null +++ b/project_writeups/darkstar.rst @@ -0,0 +1,118 @@ +.. darkstar: + +Darkstar Quadcopter +=================== + +The Darkstar is a RC quadcopter with the ability to fly autonomously through pre-designated waypoints, using advanced estimation techniques and object avoidance. + +At least that is the end-goal. Getting there however requires resources I simply do not have as a college student (read: money). Given such constraints, building an advance copter on the cheap sounded like a good challenge. Perhaps you can learn from my mistakes if you're interested in such a venture. + +Having landed a gig at an autonomous flight research center for the summer, I figured now was as good a time as any to dive into the exciting world of quadrotors - a world I've always been interested in, but never had the time to sit down and learn. + +Part 1: Part Selection +---------------------- + +As is the case with most hobbies, much of my money was spent on initial startup costs: an RC transmitter and battery charger, while essential, would only need to be purchased once. If I want to build more rc-craft in the future, this will make it a lot easier. + +.. image:: ../assets/img/writeup/darkstar/frsky-controller.jpg + +**Transmitter:** I went with a `FrSky Taranis QX7 `_ for a few reasons: + +1. It's "cheap": This is a pretty feature-rich transmitter for the price. Amazon has it priced fairly high, but I managed to pick mine up from `ProgressiveRC `_ for $105, shipping was free and fast. + +2. Experience: I've been using/fiddling around with this transmitter at work while building some vehicles, so I had at least an introduction to the system, leaving me with one less thing to learn. + +3. Aesthetic: From what I've seen, there are few transmitters out there that have any semblance of competent industrial design. This happens to be one of them. It's well-built with decent ergonomics and doesn't look overly tacky or intimidating. Plus it comes in white, which I really have been enjoying lately for some reason. + +**Frame:** Really nothing special here. I got a `Reptile 500 `_ frame... or something. Honestly not sure on the name here. Basically my strategy was to browse `hobbyking `_ til I found something I liked, then I headed over to ebay, to buy something similar. You can get frames for pretty cheap off there if you're willing to wait for it to ship from China. I wasn't, so I paid an extra $10 to get it from a US seller. + +As Shipped: +.. image:: ../assets/img/writeup/darkstar/frame-boxed-sm.jpg + +(Mostly) Assembled: +.. image:: ../assets/img/writeup/darkstar/frame-assembled-sm.jpg + +Some of the arms were a pain to secure: +.. image:: ../assets/img/writeup/darkstar/frame-armtrouble-sm.jpg + +Overall I'm pretty happy with the frame. It's simple and it was cheap. At first I thought 500mm between motors would be huge, but I've grown to like it and how much space it gives me. I have plenty of room to jam all of my various gizmos throughout. Being cheap and from ebay, it was a bit of an effort to secure all the arms to the frame; aligning the holes was more difficult than anticipated. But once mounted they're pretty solid, and have already survived a few crashes with ease. + +**Motors:** `LHI 2212 920KV `_ motors. Again, cheap and functional. The product I ordered from Amazon came with ESC's, which I thought was great, but I eventually had to swap out those ESC's, so overall, not worth the 'savings' I thought I was getting. I didn't have any idea as to what speed or motor rating I wanted, and initially I was worried that 920KV wouldn't be fast enough. However, seeing that 920 is used by the phantom reassured me and they work great. The copter isn't too acrobatic, but still has some 'umph'. Another great thing about these motors is they're built as DJI replacements, which means they also work with DJI's self-tightening props. Thank goodness! That makes portability/replacement so much easier. + +I was stupid and tried to screw the motor in through all 4 holes on the arm with some aggressive dremeling, before realizing there were two holes for my motor size, and two for a different size. + +.. image:: ../assets/img/writeup/darkstar/motor-attached-sm.jpg + +DJI props! So much easier than the other nightmares I've worked with in the past. + +.. image:: ../assets/img/writeup/darkstar/motor-djiprops-sm.jpg + +**Receiver:** `FrSky D4R-II `_ Cheap, compatible, capable. I would be comfortable with any FrSky CPPM receiver here. + +**ESC:** `Makerfire 20A `_ As I mentioned above, the ESC's that came with my motors had some weird issues... Actually come to think of it, it was likely my own stupidity that was the issue. It's okay though, the makerfire esc's get the job done, and are a factor of magnitude smaller/lighter than my original esc's, so I'll consider that a win. + +**Flight Controller:** Flip32+ This is one of those parts that I didn't want to skimp out on or mess around with. This is the board that we use fairly exclusively at work, so I'm familiar with it, and it's a reasonable price. The cheaper Chinese versions of these have been known to have some IMU/Gyro issues, so we only buy these from `readytoflyquads `_ + +**Battery:** Currently I'm using a 2200mAh 3S LiPo battery, but as of writing this, I'm looking at stepping up to a 4 or 5000mAh. 2200 is adequate in terms of flight time, but as I throw more gear on this thing, it'd be good to have something a bit larger. + +Assembly +^^^^^^^^ + +Mostly I just added things on here and there as I got them in the mail. I had most of the frame pieces setup and ready to go by the time I had my big 'assembly party'... alone... on a Friday night.... Help me: + +Receiver mounted on top with a twist tie, ESC's secured on the arm with some good velcro/zip ties: +.. image:: ../assets/img/writeup/darkstar/assembly-1-sm.jpg + +This plate+anti-shock mount combo was intended to go in the front of the drone for fpv. While that is something I would like to eventually add, this plate also happened to be the perfect size for the Flip32. So I drilled a few holes, allowing me to mount the naze as close to the center of gravity as was reasonable: +.. image:: ../assets/img/writeup/darkstar/assembly-2-sm.jpg + +Assembly can get messy: +.. image:: ../assets/img/writeup/darkstar/assembly-3-sm.jpg + +This is the handiest edition I think I've made. This allows me to plug in the battery with the confidence that the motors aren't going to immediately attack me. Currently I only use one side of the switch, but in the future I plan on having one side turn everything on, while the other side only turns on the small electronics(and not the finger-slicing motors): +.. image:: ../assets/img/writeup/darkstar/assembly-4-sm.jpg + +Power distribution soldered and mounted! The velcroed piece at the top is my 5V BEC: +.. image:: ../assets/img/writeup/darkstar/assembly-5-sm.jpg + +Naze (aka Flip32) mounted! This is all a bit tighter than anticipated: +.. image:: ../assets/img/writeup/darkstar/assembly-6-sm.jpg + +Todo: cable management +.. image:: ../assets/img/writeup/darkstar/assembly-7-sm.jpg + +Also Todo: Secure the battery in a non-terrible way +.. image:: ../assets/img/writeup/darkstar/assembly-8-sm.jpg + +Part 2: Fixes and Tweaks +------------------------ + +Its been a few weeks since writing part 1 and a lot has changed. For starters the thing actually flies now. As I mentioned in part 1 I had some troubles getting my first set of esc's to work correctly. So I replaced them with new, smaller ones, and still had trouble with them. That is until I finally sat down and figured out how to calibrate them (protip: read the instructions that come with your products!). With that squared away, this hunk of junk finally became a flyable drone as opposed to a 180deg flipping machine, as shown in the video below. + +.. youtube:: TKvzu6X0z1E + +Unfortunately I dont have any footage of the first successful flights(I was out by myself, as usual), but just know it was legendary. Flight 1 went well until I accidentally crashed into a pine tree, which provided a surprisingly cushy landing. Flight 2 was absolutely beautiful until I somehow managed to clothesline my drone on literally the only power line in the immediate vicinity. The rest of the initial flights followed a similar pattern. All-in-all, I ended up buying another 4 sets (with 2/set) of props, after breaking 4 of them. Seeing as this was my first real drone-flying experience, and I was still tweaking some of the settings, I chalk it up to the cost of learning. + +.. image:: ../assets/img/writeup/darkstar/tweaks-1-sm.jpg + +Sim Practice +^^^^^^^^^^^^ + +Around this time I also discovered a nifty, cheap piece of software: `fpv-freedrider `_ . This is simple but functional simulator that is handy to practice on. I simply plugged my transmitter via usb into my machine and it recognized it straight away. All I had to do was calibrate once in the software and I was off to the sim. This definitely helps with mastering some basic flight skills, but naturally its not as difficult as the real thing. And I've found the best way to learn to fly is having the constant threat of a catastrophic crash looming over you and every decision you make (while flying that is). + +LED Upgrade +^^^^^^^^^^^ + +These days its basically an undeniable fact that RGB LEDs make everything in this world better. And you'd be a fool to think I wasn't planning on adding them from the beginning. With the quad finally getting up in the air, I needed something to make my crashes look cooler. and boy-oh-boy did the LEDs fit the bill. The LEDs are programmed through an Arduino and change state/pattern based on the CPPM input coming from the rc receiver! + +I've been planning for some time to integrate an Arduino nano into the copter because of the rapid prototyping I'll be able to do with various sensors that work with it. LED control was the perfect first-step to get the Arduino project online. This was also my first time working with the Arduino and LED control is the simple (and traditional!) place to start. Here's an overview of how the LED control works as of this writing: + +- When the craft is disarmed, the LEDs fade in and out + +- When armed, the LEDs switch to solid illumination + +- If armed, and not in autopilot mode, if the incoming CPPM command does change enough (ie the current command hasn't deviated by some delta compared to multiple past commands), then the LEDs alternate from solid to blinking about one every 1.5 seconds, until a new unique command is read. + +The backbone of this project is an absolutely killer `CPPM library `_ developed by Jean-Marc Paratte. The library is very simple to use, and the examples are self-explanatory. It was pretty accurate with my 8-channel FrSky receiver. With that library in place, the rest was just some good 'n simple state machine logic. If you're interested in taking a peek, here's `the repository `_ . Release 0.1 has the basic LED state machine using CPPM. After that release I've added some more features, making it a bit more complex (I'll write about those later, when I know they all work properly). + +Assembly was easy. For now, I'm running all 4 LEDs off one MOSFET and 1 pin on the Arduino. This is so I have more pins available for other sensors in the future, but it would also be cool to have each arm individually controlled. `Here `_ are the LEDs I used. `This guy `_ is pretty helpful if you need help figuring out how to use a MOSFET + Arduino to control 12V LEDs. These LEDs are actually a really good reason to use a 3S LiPo battery, since its standard voltage is ~12V ish. diff --git a/project_writeups/ls1synth.md b/project_writeups/ls1synth.md deleted file mode 100644 index 47e1fff..0000000 --- a/project_writeups/ls1synth.md +++ /dev/null @@ -1,31 +0,0 @@ -# LS-1: Modular Synth - -The LS-1 is a modular oscillator and sequencer, and includes 2 LFO’s (low-frequency oscillators), one external oscillator, and the oscillator attached to the sequencer. The sequencer itself is made up of a counter which acts as a LFO/clock divider, and dual muxes to select the feedback resistance and led to display. The counter outputs and mux select inputs have ports on the front-panel allowing the user to mix and match LFO divisions with mux selects, thus creating custom sequences. - -This build included a lot of firsts for me. This is the first time I’ve used Eagle to create a PCB/schematic (which should honestly be considered an atrocity given I am a Computer Engineering student), my first in creating a metal case using a water jet, and in general this is my first large-scale hobby project. - -## Case - -### Design - -Originally I was hoping to pack everything into a 1U 19″ package, using the case of an old network switch I had laying around, but I soon realized to include all the I/O I wanted I would have to increase the size, so I made the logical step up to 2U. Even with the increased size, its a pretty cozy fit for the front panel. I did some prototype configurations for different control sections using cardboard and the components I was planning on using, testing which layout I found to be the most natural. - -![Layout prototype](/img/writeup/ls1synth/case-1-sm.jpg) - -Following this, I designed the case in Autodesk Inventor (since it’s free to students, I’m more of a Solidworks guy personally). It had been a few years since I had needed to touch Inventor, so it was a little rough, but I got the job done. Going in I knew I was planning on cutting this on my university’s water jet, so I built it all off a single sketch, taking into account how the faces would link together. I also decided to make a timelapse of the process, mostly for my own enjoyment, but feel free to watch and mock my terrible CAD skills: - - - -This timelapse shows the majority of the design, but not all of it. Following this I consulted with my ME friend about how to build a proper metal case. He suggested cutting small circles where corners would fold to make sure excess material didn't get in the way. Before the water jet, I also made some slight modifications the the front panel layout - mostly related to spacing between components. - -### Build - -With the panel designed, I simply needed to export the sketch face to a format the water jet would understand. I purchased a decently high gauge sheet of steel (maybe 12? I cannot remember) from my university and they cut it to roughly the dimensions I would need. Despite being a student, many of the resources I used for this part of the project are open to the public. If you're looking to do something similar, it never hurts to check with your local university's engineering/technology department to see what resources they have available. - -![Metal sheet cut and ready for the jet](/img/writeup/ls1synth/case-2-sm.jpg) - -With the metal sheet cut, I was ready to cut out the case with the water jet. My university charges for how much time you use a product, and since the case is not too large, this only cost me around $20. Putting the case portion of the project at ~$30 total! This was my first time using a water jet, so it was a very big deal for me. Computer Engineering is fun and all, but you don't get enough chances to play with big toys like other disciplines do. - -### TODO: video embed -![Metal sheet cut and ready for the jet](/img/writeup/ls1synth/case-waterjet.mp4) - diff --git a/project_writeups/myWebsite.md b/project_writeups/myWebsite.md deleted file mode 100644 index d1b35ba..0000000 --- a/project_writeups/myWebsite.md +++ /dev/null @@ -1,43 +0,0 @@ -# My Website - -Starting out with this website, I had essentially no knowledge of modern web technologies. I knew that I wanted something modern but also easy to maintain that I could use well into the future. - -The end result is the site you see here. By no means perfect or beautiful, but functional and a place where I can store guides mainly for my benefit. But maybe for your benefit too? I certainly dont know who's reading this ¯\\\_(ツ)_/¯ - -As I'm writing this page after the fact (about a year since originally making this site), I'll likely glaze over a lot of the details. - -## Technologies Used - -- [Node](https://nodejs.org/) for quick 'n easy webserver creation - -- [NPM](https://www.npmjs.com) for a bunch of support packages - -- [ExpressJS](https://expressjs.com) with [ejs](https://ejs.co/) for amped up static pages. Express is great for beginners that want a simple framework for a static website with no code duplication - -- [Bootstrap](https://getbootstrap.com) to make it all pretty - -- Other stuff - -## Express - -Originally I started this site as a pure html/bootstrap affair. This worked for all of 2 days until I got sick of copying and pasting code all over the place. While I had no desire to maintain duplicate copies of code, I was even less interested in using some massive overkill framework (as an embedded dev, I have a need for speed). Low and behold: ExpressJS! The perfect minimal framework solution for my problem. Express has a concept of 'pages' and 'partials'. A page defines the overall structure of a static webpage (say my home page). Partials define chunks/components of that page that are shared in other locations. So for example, all the html for my navigation/ header bar has its own partial, as does the footer. Then in a page, to use this content you can simply add a `<% include` as if you were writing a C program! Express was speaking my language. - -## Static Project Pages - -The bulk of the effort for me was sunk into generating the project writeup pages (like the page you're reading this off of _right now_!). I wanted them to be simple static text, images and video. But I didn't want the complexity of using a whole framework like wordpress, and I definitely wasn't into the idea of writting everything in html. I wanted my writeups to be in a portable format I could easily migrate or use in other places in the future. - -Given these requirements I thought it best to write about all of my projects in markdown. I've used markdown for years and like its readability and easy syntax. To convert my markdown to HTML, I grabbed [showdown](https://github.com/showdownjs/showdown). Showdown does it's job well and has some hooks (called 'extensions') that made it easier for me to get the formatting jusssst right. At present the only extension I've created helps make the title/H1 of each writeup nice and big (ie: look at those big 'My Website' letters up top). All the showdown generator stuff lives in `prestart.js` which is run before the server is started so the markdown is generated once and can then be served statically for all time. - -I saved showdown's resulting files as ExpressJS partials. These partials are linked to a template page which adds the header, footer and table of contents you see here. Then, any requests that contain `/projects` actually load the `project_template` page with the requested project-name partial. Express makes this all surprisingly simple (I say after struggling with it for hours): - -```js -if (pathname.includes('projects') && page !== 'index') { - // projects has a custom template that is used for all projects - // so we need to change the pathname that the renderer is using - // that template: - pathname = pathname.substr(0, pathname.lastIndexOf(page)); - pathname += 'project_template' - // provide the pagename for project_template to use for main content - page = 'partials/md/' + page; -} -``` diff --git a/project_writeups/palletDesk.md b/project_writeups/palletDesk.rst old mode 100755 new mode 100644 similarity index 84% rename from project_writeups/palletDesk.md rename to project_writeups/palletDesk.rst index ccbeb9c..8574582 --- a/project_writeups/palletDesk.md +++ b/project_writeups/palletDesk.rst @@ -1,141 +1,154 @@ -# Pallet Desk - -As I finished up my sophomore year at university, I realized that I needed my own desk. At that point I had lived in three different apartments. All 3 of them had desks provided, and all of those desks were mediocre at best, downright broken at worst. What's worse is at the time I worked from home, which meant I *needed* a reliable desk. With the summer about to hit, and plans to work full-time from home, I knew I needed something fast. Here's the end result: - -![IMG OF FINISHED DESK](/img/writeup/palletDesk/finished-1-sm.jpg) - -Before we get into this build, I will note that I'm writing this guide > 2 years later. This means I have forgotten some details of the build process, but have also have the gift of hindsight thanks to this desk being my main piece of furniture for the last 2.5 years. Like seriously, I eat, study and work at this thing everyday. - -## Plans - -### Requirements - -Before I started building I had to think through what I wanted. I came up with some basic ideas: - -- I didn't need storage. Drawers would be difficult and expensive to integrate, and I don't think they look that good anyways. - -- It needed to be cheap. I had a job as a software engineer at the time, but it did not pay much at all. The desk couldn't eat too much of my budget. - -- Durability. I wanted a desk that could last me a long time. Like 5+ years. I'm unsure if I'll actually use it for that long, but I'm confident it could last. - -- Portability. During the planning stages I had already moved twice and was about to move a third time. I needed a desk that wouldn't be a hassle to move. I designed the desk so that it could be easily torn down by one person, and fit inside my Toyota Camry. Ironically, I haven't moved since I finished building the desk, but I have still had occasion to tear it down and move it, which is surprisingly convenient. - -- Sitting/Standing. I'm a decently tall person. Measuring in at around ~6'5" (2m), I'm not a huge fan of short things. I like sitting in high chairs where my legs can dangle. I wanted something similar in a desk that would allow me to stand or sit depending on what I was feeling. - -### Design - -With the requirements thought out, I started planning how I was going to build everything. Between planning/designing I probably spent a month or two just *thinking* about how I would build the desk. I spent a lot of time online looking at what other people have done. Seeing other peoples designs is the one reason I currently have a Pinterest account. - -There were some really cool designs online, but I needed something simple. This was my first woodworking project, and I knew I *would* (hehe) be making a lot of mistakes. All of these thoughts culminated into a single whiteboard sketch: - -![Whiteboard sketch of initial design](/img/writeup/palletDesk/plans-1-sm.jpg) - -Yep. That's it. It was all a lot clearer in my head. Essentially the red 'rectangles' are 2x4 cross beams that would support the desktop and create a structure to build onto. The measurements were mainly based on what would fit in my Camry. Note: this only fits in the car when I put the back seats down so the desk can go through the trunk and into the back of the car. pics further down. I also measured a few desks nearby to see what an appropriate depth for a monitor + keyboard would be. - -## Build - -### Pallet Acquisition - -There are a lot of guides on how to get pallets online. If you're in the US, check the free section of Craigslist or your local classifieds. You can also just walk into local places and ask if they have any pallets that you can use. Alternatively, just drive behind businesses and see if they have pallets stacked near the dumpster. - -If you have a smaller car, be prepared to potentially tear down the pallet on site. Pallets were a bit larger than I expected and some of them would not fit in my car! Because of this, I had to pass up on some of the nicer pallets out there. In all, I think this project took 2-3 pallets. It could be done with less, but my teardown methods were less than ideal. - -The problem with pallet wood is that it's a bit of a mixed bag. Sometimes you get a really new pallet that is made out of decent wood, sometimes you get a pallet that's a few years old and on the verge of fallng apart. Sourcing newer pallets should be your priority. I didn't bother doing so and paid the price through many stages of the build. - -### Pallet Teardown - -The best way to get usable wood from a pallet is to use a jig saw. Period. If you don't have one, buy one online or borrow a friends. It's worth it especially if you want to do a lot of projects like this. With a jig saw, it's very easy to align the blade between the pallet planks and cut through the nails holding them in place. If you have room to spare, you could also use a table saw and just cut off the pallet planks before they're nailed into the base. - -If you're a poor college student as I was, the other option is a crowbar, hammer and *a lot* of patience. With this method you need to jimmy the crow bar in between the pallet plank and base and slowely wedge out the nails holding the plank in place. Making sure you dont strain one end of the plank too much and crack it. This is a delicate process that takes a long time and often ends in breaking the pallet planks much to the despair of the builder. - -Because of this expense of learning, Perhaps only 50% of the 3 pallets I had turned out usable. Unfortunately I don't have any images of this stage of the process likely due to the rage-inducing nature of it all. I worked on this portion of the project at night after getting home from school across a couple of days. - -### Desktop - -Finally, with all the pallets torn down, I had wood I could start working with. I started out by building the basic frame of the desktop, cutting pallet base 2x4's to size and joining them at 45deg on the corners. This was stupid. Getting perfect 45deg angles to come together and hold well is not easy, especially if you don't know what you're doing. It looks okay in the end product, but if I were todo it again, I would have done simpler, more reliable corners. - -![Main frame rectangle](/img/writeup/palletDesk/build-1-sm.jpg) - -As I was starting, a friendly neighbor came over to see what I was working on and lent me these corner clamps. Regardless of the join you're doing, I think these could be pretty helpful - -![Closeup of corner clamps](/img/writeup/palletDesk/build-2-sm.jpg) - -Fortunately, the crappy corners are mitigated by the cross beams that run the width of the desktop. For these I decided to go with new 2x4's. I realize this is against the spirit of the whole project, but at this point I was *not* about to teardown another pallet for 2x4s. Additionally, the rest of the entire desktop would be secured into these, so they needed to be non-horrible. - -Basically every piece of this project is secured by a combination of wood glue and screws. - -Also, for this entire project, wood was cut to size using my friends chop saw. Not sure what I would've done without it. (I mean everything *could* be done with a hand saw... but). - -![Desktop frame with crossbeams](/img/writeup/palletDesk/build-3-sm.jpg) - -![Closeup of desktop frame with crossbeams](/img/writeup/palletDesk/build-4-sm.jpg) - -With the basic frame in place, it was time to start building the visible part of the desktop. I started by bordering the exterior with pallet plants to make something like a picture frame for the middle. The chop saw came in handy, helping make angles that match. - -![Desktop border mostly in place](/img/writeup/palletDesk/build-5-sm.jpg) - -![Closeup of desktop border slightly missaligned](/img/writeup/palletDesk/build-6-sm.jpg) - -From this angle it looks like the border is slightly, missaligned, but I dont ever notice this and it seems to be fine. Notice that there is a ~1" lip off the edge of the frame. The main reason for this was to keep some of the frame exposed so the middle of the destop could be secured to it. But also because it looks cool. - -With the border completed, I could move on to filling in the middle of the desktop. Before doing this, glued and stapled down some crate paper, in the hopes that it would help retain any epoxy that slipped through once it was time for that. - -Once the crate paper was secured I started cutting and fitting pallet planks. I would cut one at a time to test the fit and make sure it was tight. Then I would line the edges and bottom with glue, push it into its general location and use a mallet to nudge it as far to the right as possible. Below is the partially completed top (note the exposed crate paper on the left side): - -![Partially finished desktop](/img/writeup/palletDesk/build-7-sm.jpg) - -Once a single board was pushed to the far right side, It would be secured on the 3 2x4 frame pieces with screws and glue. Once all the pieces were secured I went back and started sanding. The desktop was made from a combination of three different pallets, so the wood was vastly different in quality and thickness. - -My **biggest** regret in this project was not spending enough time sanding the top. Especially the middle of the desk, I should've spend multiple hours sanding it, with multiple passes at different levels of courseness to make sure it was smooth and flat. A planar and/or a really good electric sander should be a must for this portion of the project. A single board in the middle of my destop is slightly thicker than the others, which means my keyboard can not lie flat without wobbling. - -If you plan on covering the top in epoxy as I did, this is also a good time to make *sure* any and all holes are filled with wood filler (I made wood filler by mixing wood glue with some sawdust). You dont want anywhere for the epoxy to escape so make sure all the old nail holes on the pallet boards are properly filled. - -### Legs - -With the desktop done it was time to move on to the legs. There are lots of different options on what to do here. I decided to go with some basic 4x4's. I measured a few bar counters/stools to decide what would be a good height for the legs. I finally decided on ~4ft. This allows the collapsed legs to fit within the desktops footprint for easy portability. - -As always transport with the Camry was enjoyable: - -![4x4s in the Camry](/img/writeup/palletDesk/build-8-sm.png) - -Nothing magic here, just measure and cut. There are definitely better ways to secure the cross beams to the legs, but the best I came up with was using metal plates. The long cross bar is removable, meaning the legs can be broken down into 3 pieces: the left 2 legs, the right 2 legs, and the long cross bar. - -Securing the leg assembley to the desktop is done with bolts. Two massive bolts per leg are inserted in perpendicular directions through the desktop and leg. The 3/8" bolts are then secured with washer, split-locking washer and nut. - -Once again, my impatience got the better of me, and I failed to sand the legs as much as I should have. Don't skimp on sanding! - -![Unstained without long cross bar](/img/writeup/palletDesk/build-9-sm.jpg) - -![Unstained with long cross bar](/img/writeup/palletDesk/build-10-sm.jpg) - -### Stain and Epoxy - -With the desk fully constructed, it was time to add the finishing touches to make it a usable piece of furniture. First up was staining. I went with a homemade solution for the stain. I let a gallon of vinegar, steel wool and hydrogen peroxide... ferment(?)... soak for a week. There are a lot of videos online about this type of homemade stain. The desired outcome of this stain is a rustic/aged look. The hydrogen peroxide helps add a red tint to the stain. - -The results for me were a bit mixed. Some board took the stain beautifully; producing a slightly dark stain with a perfect hint of red. Others ate it right up and produced an incredibly dark wood with 0 red. Especially the legs, which the stain essentially just made dark brown. In hindsight, I should have tested the stain more on some scrap wood before applying it. - -![Stained top](/img/writeup/palletDesk/build-11-sm.jpg) - -![Stained desk](/img/writeup/palletDesk/build-12-sm.jpg) - -That 5 gallon bucket next to the desk? That's the stain... I may have made a little too much. - -With everything stained I was ready to finish up by applying epoxy to the desktop. The idea here is that epoxy is fairly self-leveling, which will help reduce any error in my build. With using old beatup pallet wood, I also thought it best to use epoxy to avoid any latent splinters. The epoxy provides a smooth glass-like surface which has looked great since it was applied. - -I got a gallon kit of the stuff off Amazon. It came with instructions, and I made sure to watch *many* youtube videos about epoxy application before attempting. As previously stated, I wish I had spent more time sanding the top, and making sure all the holes many, many nail holes were filled in better. Despite these errors, the epoxy took fairly well. I started with a thin coat to try and help 'seal' the top. This likely helped with some of the smaller holes, but there was nothing to be done for the larger ones. After that, I applied the whole thing. Pouring right in the middle and letting it spread itself out. The end result is a nice glossy surface that really brings out the subtle stain in some of the boards. - -![Done! 1](/img/writeup/palletDesk/build-13-sm.jpg) - -![Done! 2](/img/writeup/palletDesk/build-14-sm.jpg) - -![Done! 3](/img/writeup/palletDesk/build-15-sm.jpg) - -And, in case you doubted, here's the desk broken down and in the trunk of my Camry: - -![In the Camry](/img/writeup/palletDesk/incar-1-sm.jpg) - -## tl;dr - -The desk works great, and overall the design is very forgiving to rookie mistakes. Make sure you have the proper tools (Jigsaw) for pallet dissassembly. Dont skimp on sanding the desktop, and if you're going to use epoxy, make *absolutely* sure that you have adequately filled in all the nail holes in the pallet wood before application. - -![Done! 4](/img/writeup/palletDesk/finished-1-lg.jpg) +.. palletDesk: + +Pallet Desk +=========== + +As I finished up my sophomore year at university, I realized that I needed my own desk. At that point I had lived in three different apartments. All 3 of them had desks provided, and all of those desks were mediocre at best, downright broken at worst. What's worse is at the time I worked from home, which meant I *needed* a reliable desk. With the summer about to hit, and plans to work full-time from home, I knew I needed something fast. Here's the end result: + +.. image:: ../assets/img/writeup/palletDesk/finished-1-sm.jpg + +Before we get into this build, I will note that I'm writing this guide > 2 years later. This means I have forgotten some details of the build process, but have also have the gift of hindsight thanks to this desk being my main piece of furniture for the last 2.5 years. Like seriously, I eat, study and work at this thing everyday. + +Plans +----- + +Requirements +^^^^^^^^^^^^ + +Before I started building I had to think through what I wanted. I came up with some basic ideas: + +- I didn't need storage. Drawers would be difficult and expensive to integrate, and I don't think they look that good anyways. + +- It needed to be cheap. I had a job as a software engineer at the time, but it did not pay much at all. The desk couldn't eat too much of my budget. + +- Durability. I wanted a desk that could last me a long time. Like 5+ years. I'm unsure if I'll actually use it for that long, but I'm confident it could last. + +- Portability. During the planning stages I had already moved twice and was about to move a third time. I needed a desk that wouldn't be a hassle to move. I designed the desk so that it could be easily torn down by one person, and fit inside my Toyota Camry. Ironically, I haven't moved since I finished building the desk, but I have still had occasion to tear it down and move it, which is surprisingly convenient. + +- Sitting/Standing. I'm a decently tall person. Measuring in at around ~6'5" (2m), I'm not a huge fan of short things. I like sitting in high chairs where my legs can dangle. I wanted something similar in a desk that would allow me to stand or sit depending on what I was feeling. + +Design +^^^^^^ + +With the requirements thought out, I started planning how I was going to build everything. Between planning/designing I probably spent a month or two just *thinking* about how I would build the desk. I spent a lot of time online looking at what other people have done. Seeing other peoples designs is the one reason I currently have a Pinterest account. + +There were some really cool designs online, but I needed something simple. This was my first woodworking project, and I knew I *would* (hehe) be making a lot of mistakes. All of these thoughts culminated into a single whiteboard sketch: + +.. image:: ../assets/img/writeup/palletDesk/plans-1-sm.jpg + +Yep. That's it. It was all a lot clearer in my head. Essentially the red 'rectangles' are 2x4 cross beams that would support the desktop and create a structure to build onto. The measurements were mainly based on what would fit in my Camry. Note: this only fits in the car when I put the back seats down so the desk can go through the trunk and into the back of the car. pics further down. I also measured a few desks nearby to see what an appropriate depth for a monitor + keyboard would be. + +Build +----- + +Pallet Acquisition +^^^^^^^^^^^^^^^^^^ + +There are a lot of guides on how to get pallets online. If you're in the US, check the free section of Craigslist or your local classifieds. You can also just walk into local places and ask if they have any pallets that you can use. Alternatively, just drive behind businesses and see if they have pallets stacked near the dumpster. + +If you have a smaller car, be prepared to potentially tear down the pallet on site. Pallets were a bit larger than I expected and some of them would not fit in my car! Because of this, I had to pass up on some of the nicer pallets out there. In all, I think this project took 2-3 pallets. It could be done with less, but my teardown methods were less than ideal. + +The problem with pallet wood is that it's a bit of a mixed bag. Sometimes you get a really new pallet that is made out of decent wood, sometimes you get a pallet that's a few years old and on the verge of falling apart. Sourcing newer pallets should be your priority. I didn't bother doing so and paid the price through many stages of the build. + +Pallet Teardown +^^^^^^^^^^^^^^^ + +The best way to get usable wood from a pallet is to use a jig saw. Period. If you don't have one, buy one online or borrow a friends. It's worth it especially if you want to do a lot of projects like this. With a jig saw, it's very easy to align the blade between the pallet planks and cut through the nails holding them in place. If you have room to spare, you could also use a table saw and just cut off the pallet planks before they're nailed into the base. + +If you're a poor college student as I was, the other option is a crowbar, hammer and *a lot* of patience. With this method you need to jimmy the crow bar in between the pallet plank and base and slowely wedge out the nails holding the plank in place. Making sure you dont strain one end of the plank too much and crack it. This is a delicate process that takes a long time and often ends in breaking the pallet planks much to the despair of the builder. + +Because of this expense of learning, Perhaps only 50% of the 3 pallets I had turned out usable. Unfortunately I don't have any images of this stage of the process likely due to the rage-inducing nature of it all. I worked on this portion of the project at night after getting home from school across a couple of days. + +Desktop +^^^^^^^ + +Finally, with all the pallets torn down, I had wood I could start working with. I started out by building the basic frame of the desktop, cutting pallet base 2x4's to size and joining them at 45deg on the corners. This was stupid. Getting perfect 45deg angles to come together and hold well is not easy, especially if you don't know what you're doing. It looks okay in the end product, but if I were todo it again, I would have done simpler, more reliable corners. + +.. image:: ../assets/img/writeup/palletDesk/build-1-sm.jpg + +As I was starting, a friendly neighbor came over to see what I was working on and lent me these corner clamps. Regardless of the join you're doing, I think these could be pretty helpful + +.. image:: ../assets/img/writeup/palletDesk/build-2-sm.jpg + +Fortunately, the crappy corners are mitigated by the cross beams that run the width of the desktop. For these I decided to go with new 2x4's. I realize this is against the spirit of the whole project, but at this point I was *not* about to teardown another pallet for 2x4s. Additionally, the rest of the entire desktop would be secured into these, so they needed to be non-horrible. + +Basically every piece of this project is secured by a combination of wood glue and screws. + +Also, for this entire project, wood was cut to size using my friends chop saw. Not sure what I would've done without it. (I mean everything *could* be done with a hand saw... but). + +.. image:: ../assets/img/writeup/palletDesk/build-3-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-4-sm.jpg + +With the basic frame in place, it was time to start building the visible part of the desktop. I started by bordering the exterior with pallet plants to make something like a picture frame for the middle. The chop saw came in handy, helping make angles that match. + +.. image:: ../assets/img/writeup/palletDesk/build-5-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-6-sm.jpg + +From this angle it looks like the border is slightly, missaligned, but I dont ever notice this and it seems to be fine. Notice that there is a ~1" lip off the edge of the frame. The main reason for this was to keep some of the frame exposed so the middle of the destop could be secured to it. But also because it looks cool. + +With the border completed, I could move on to filling in the middle of the desktop. Before doing this, glued and stapled down some crate paper, in the hopes that it would help retain any epoxy that slipped through once it was time for that. + +Once the crate paper was secured I started cutting and fitting pallet planks. I would cut one at a time to test the fit and make sure it was tight. Then I would line the edges and bottom with glue, push it into its general location and use a mallet to nudge it as far to the right as possible. Below is the partially completed top (note the exposed crate paper on the left side): + +.. image:: ../assets/img/writeup/palletDesk/build-7-sm.jpg + +Once a single board was pushed to the far right side, It would be secured on the 3 2x4 frame pieces with screws and glue. Once all the pieces were secured I went back and started sanding. The desktop was made from a combination of three different pallets, so the wood was vastly different in quality and thickness. + +My **biggest** regret in this project was not spending enough time sanding the top. Especially the middle of the desk, I should've spend multiple hours sanding it, with multiple passes at different levels of courseness to make sure it was smooth and flat. A planar and/or a really good electric sander should be a must for this portion of the project. A single board in the middle of my destop is slightly thicker than the others, which means my keyboard can not lie flat without wobbling. + +If you plan on covering the top in epoxy as I did, this is also a good time to make *sure* any and all holes are filled with wood filler (I made wood filler by mixing wood glue with some sawdust). You dont want anywhere for the epoxy to escape so make sure all the old nail holes on the pallet boards are properly filled. + +Legs +^^^^ + +With the desktop done it was time to move on to the legs. There are lots of different options on what to do here. I decided to go with some basic 4x4's. I measured a few bar counters/stools to decide what would be a good height for the legs. I finally decided on ~4ft. This allows the collapsed legs to fit within the desktops footprint for easy portability. + +As always transport with the Camry was enjoyable: + +.. image:: ../assets/img/writeup/palletDesk/build-8-sm.png + +Nothing magic here, just measure and cut. There are definitely better ways to secure the cross beams to the legs, but the best I came up with was using metal plates. The long cross bar is removable, meaning the legs can be broken down into 3 pieces: the left 2 legs, the right 2 legs, and the long cross bar. + +Securing the leg assembly to the desktop is done with bolts. Two massive bolts per leg are inserted in perpendicular directions through the desktop and leg. The 3/8" bolts are then secured with washer, split-locking washer and nut. + +Once again, my impatience got the better of me, and I failed to sand the legs as much as I should have. Don't skimp on sanding! + +.. image:: ../assets/img/writeup/palletDesk/build-9-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-10-sm.jpg + +Stain and Epoxy +^^^^^^^^^^^^^^^ + +With the desk fully constructed, it was time to add the finishing touches to make it a usable piece of furniture. First up was staining. I went with a homemade solution for the stain. I let a gallon of vinegar, steel wool and hydrogen peroxide... ferment(?)... soak for a week. There are a lot of videos online about this type of homemade stain. The desired outcome of this stain is a rustic/aged look. The hydrogen peroxide helps add a red tint to the stain. + +The results for me were a bit mixed. Some board took the stain beautifully; producing a slightly dark stain with a perfect hint of red. Others ate it right up and produced an incredibly dark wood with 0 red. Especially the legs, which the stain essentially just made dark brown. In hindsight, I should have tested the stain more on some scrap wood before applying it. + +.. image:: ../assets/img/writeup/palletDesk/build-11-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-12-sm.jpg + +That 5 gallon bucket next to the desk? That's the stain... I may have made a little too much. + +With everything stained I was ready to finish up by applying epoxy to the desktop. The idea here is that epoxy is fairly self-leveling, which will help reduce any error in my build. With using old beatup pallet wood, I also thought it best to use epoxy to avoid any latent splinters. The epoxy provides a smooth glass-like surface which has looked great since it was applied. + +I got a gallon kit of the stuff off Amazon. It came with instructions, and I made sure to watch *many* youtube videos about epoxy application before attempting. As previously stated, I wish I had spent more time sanding the top, and making sure all the holes many, many nail holes were filled in better. Despite these errors, the epoxy took fairly well. I started with a thin coat to try and help 'seal' the top. This likely helped with some of the smaller holes, but there was nothing to be done for the larger ones. After that, I applied the whole thing. Pouring right in the middle and letting it spread itself out. The end result is a nice glossy surface that really brings out the subtle stain in some of the boards. + +.. image:: ../assets/img/writeup/palletDesk/build-13-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-14-sm.jpg + +.. image:: ../assets/img/writeup/palletDesk/build-15-sm.jpg + +And, in case you doubted, here's the desk broken down and in the trunk of my Camry: + +.. image:: ../assets/img/writeup/palletDesk/incar-1-sm.jpg + +tl;dr +----- + +The desk works great, and overall the design is very forgiving to rookie mistakes. Make sure you have the proper tools (Jigsaw) for pallet disassembly. Dont skimp on sanding the desktop, and if you're going to use epoxy, make *absolutely* sure that you have adequately filled in all the nail holes in the pallet wood before application. + +.. image:: ../assets/img/writeup/palletDesk/finished-1-lg.jpg diff --git a/server.js b/server.js index 2b6e9ea..bddac42 100644 --- a/server.js +++ b/server.js @@ -17,7 +17,13 @@ function getRootPage(req, res) { if (pageName === null || pageName === undefined) { pageName = "index"; } - res.render(path.join("pages", pageName)); + // hardcoded check for favicon as it always comes in on /favicon.ico :/ + if (req.path.includes("favicon")) { + res.sendFile(pageName, { root: path.join(__dirname, "assets", "img") }); + } + else { + res.render(path.join("pages", pageName)); + } } app.get("/:pageName", getRootPage);