<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://starmaid.github.io/feed" rel="self" type="application/atom+xml" /><link href="https://starmaid.github.io/" rel="alternate" type="text/html" /><updated>2026-01-24T09:26:14+00:00</updated><id>https://starmaid.github.io/feed</id><title type="html">Nicky Masso</title><subtitle>My cool internet site :)
</subtitle><author><name>Nicky Masso</name></author><entry><title type="html">Eternal September</title><link href="https://starmaid.github.io/blog/eternal-september/" rel="alternate" type="text/html" title="Eternal September" /><published>2026-01-11T00:00:00+00:00</published><updated>2026-01-11T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/eternal-september</id><content type="html" xml:base="https://starmaid.github.io/blog/eternal-september/"><![CDATA[<style>
    .calcbox {
        padding: 5px;
        color: black;
        background: white;
        align-items: center;
        display: flex;
        flex-direction: column;
        width: min-content;
    }

    .calcbox2 {
        flex: auto;
        padding: 5px;
        border: 1px solid black;
        gap: 16px;
        flex-direction: column;
    }

    .fieldbox {
        padding: 5px;
        width: 170px;
        flex: 1 1 auto;
        display: flex;
        height: min-content;
    }

    .buttonbox {
        padding: 5px;
        width: 160px;
        flex: 1 1 auto;
        display: flex;
        flex-flow: row;
    }

    .calccontainer {
        margin: 3%;
        min-width: 270px;
        font-family: serif;
        align-items: center;
    }

    .calccontainer2 {
        width: 100%;
        align-items: center;
        display: flex;
        flex-direction: column;
    }
</style>

<div class="calccontainer">
    <div class="calccontainer2">
        <div class="calcbox">
            <div class="calcbox2">
                <div class="fieldbox">
                    1993-09-<input id="sdatedays" type="text" maxlength="8" size="8" />
                </div>
                <div class="buttonbox">
                    <button type="button" id="sdate2date">Convert to normie time</button>
                </div>
                <div id="sdateMsgBox"></div>
            </div>
        </div>
        <div class="calcbox">
            <div class="calcbox2">
                <div class="fieldbox">
                    <input id="dateyear" type="text" maxlength="4" size="4" value="2026" />
                    -<input id="datemonth" type="text" maxlength="2" size="2" value="01" />
                    -<input id="dateday" type="text" maxlength="2" size="2" value="12" />
                </div>
                <div class="buttonbox">
                    <button type="button" id="date2sdate">Convert to eternal september time</button>
                </div>
                <div id="dateMsgBox"></div>
            </div>
        </div>
    </div>
</div>

<script type="module" src="/blog/img/2026-01-11-eternal-september/datetest.js"></script>

<p>If you don’t want to google “how many days since august 30 1993”. <a href="https://en.wikipedia.org/wiki/Eternal_September">If you don’t know what I’m talking about.</a></p>

<p><img src="/blog/img/2026-01-11-eternal-september/example.jpg" alt="" /></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="tool," /><category term="internet" /><category term="history" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2026-01-11-eternal-september/prion_thumb.png" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2026-01-11-eternal-september/prion_thumb.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Space Probe String Lights</title><link href="https://starmaid.github.io/blog/space-probe-lights/" rel="alternate" type="text/html" title="Space Probe String Lights" /><published>2026-01-09T00:00:00+00:00</published><updated>2026-01-09T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/space-probe-lights</id><content type="html" xml:base="https://starmaid.github.io/blog/space-probe-lights/"><![CDATA[<p><img src="/blog/img/2026-01-09-space-probe-lights/string.jpg" alt="Full string of lights" /></p>

<p>Made as a secret santa for <a href="https://rustyrat.carrd.co/">Rusty</a> as part of the 2025 Ebro gift exchange. I made lo-poly models of the space probes his OCs are based on, and attached them to an LED string light. I also modified the light to be powered from a USB plug, rather than AA batteries.</p>

<p><img src="/blog/img/2026-01-09-space-probe-lights/juno.jpg" alt="Juno" /></p>

<p><em><a href="https://en.wikipedia.org/wiki/Juno_(spacecraft)">Juno</a>, 2011 mission to Jupiter.</em></p>

<p><img src="/blog/img/2026-01-09-space-probe-lights/msgr.jpg" alt="Messenger" /></p>

<p><em><a href="https://en.wikipedia.org/wiki/MESSENGER">MESSENGER</a>, 2004 mission to Mercury.</em></p>

<p><img src="/blog/img/2026-01-09-space-probe-lights/chip.jpg" alt="CHIPSat" /></p>

<p><em><a href="https://en.wikipedia.org/wiki/CHIPS_(satellite)">CHIPSat</a>, 2003 mission orbiting Earth observing UV emissions from interstellar gas clouds. Launched in the same rocket as ICESat.</em></p>

<p><img src="/blog/img/2026-01-09-space-probe-lights/ice.jpg" alt="ICESat" /></p>

<p><em><a href="https://en.wikipedia.org/wiki/ICESat">ICESat 1</a>, 2003 mission orbiting earth measuring elevation for ice sheets and atmospheric measurements. Launched in the same rocket as CHIPSat.</em></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="light," /><category term="LED," /><category term="17776" /><summary type="html"><![CDATA[Made as a secret santa for Rusty as part of the 2025 Ebro gift exchange. I made lo-poly models of the space probes his OCs are based on, and attached them to an LED string light. I also modified the light to be powered from a USB plug, rather than AA batteries. Juno, 2011 mission to Jupiter. MESSENGER, 2004 mission to Mercury. CHIPSat, 2003 mission orbiting Earth observing UV emissions from interstellar gas clouds. Launched in the same rocket as ICESat. ICESat 1, 2003 mission orbiting earth measuring elevation for ice sheets and atmospheric measurements. Launched in the same rocket as CHIPSat.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2026-01-09-space-probe-lights/juno.jpg" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2026-01-09-space-probe-lights/juno.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Portable LAN</title><link href="https://starmaid.github.io/blog/mobile-network/" rel="alternate" type="text/html" title="Portable LAN" /><published>2025-12-18T00:00:00+00:00</published><updated>2025-12-18T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/mobile-network</id><content type="html" xml:base="https://starmaid.github.io/blog/mobile-network/"><![CDATA[<p><img src="/blog/img/2025-12-18-mobile-network/overview.jpg" alt="overview" /></p>

<p>I made a battery-powered LAN network setup to carry with me.</p>

<p><img src="/blog/img/2025-12-18-mobile-network/randbeacon_use.jpg" alt="" /></p>

<p>While working on my <a href="https://github.com/starmaid/randbeacon">randbeacon</a> project, I wanted to manage my WLED setups at OpenSauce with an ethernet interface - so I could use my laptop’s wireless card to connect to the venue’s network. As you can see, the initial setup with this raspberry pi was a little clunky and annoying. The core parts are there, a usb-ethernet adapter and a phone charging battery pack. I tried carrying this around outside while getting photos for that project, and it was the worst.</p>

<p>The core is a RPi3 running <a href="openwrt.org">OpenWRT</a>, a fast and straightforward network router firmware. I also picked up a Gigabit network switch, which is throttled by the RPi3’s 10/100 ethernet port - but this isn’t primarily for speed, this is for when nothing else would work.</p>

<p>Another critical piece is that the switch is powered off 5V DC. This way I was able to make a dead simple cable that connects to a phone charger battery, which is way easier to integrate into a project than naked Lithium batteries and charge controllers. Regulating voltage is annoying, and more expensive anyway if the usecase doesn’t call for extreme current draw.</p>

<table>
  <thead>
    <tr>
      <th>Part</th>
      <th>Cost</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Raspberry Pi 3B+</td>
      <td>Basically free at this point</td>
    </tr>
    <tr>
      <td><a href="https://www.amazon.com/dp/B00A128S24">TP-Link TL-SG105 Switch</a></td>
      <td>$13</td>
    </tr>
    <tr>
      <td><a href="https://www.amazon.com/dp/B0D5CLSMFB">Anker Power Bank “PowerCore 10K”</a></td>
      <td>$21 (used)</td>
    </tr>
    <tr>
      <td>Two scrap sheets of 1/4” Acrylic</td>
      <td>$2</td>
    </tr>
    <tr>
      <td>Handfull of zip ties</td>
      <td>Free</td>
    </tr>
    <tr>
      <td>Cannabalized USB cable</td>
      <td>Free</td>
    </tr>
  </tbody>
</table>

<p>The acrylic was scrap cutoffs from TAP plastics here in the bay area. They go for a dollar a sheet and are great value if the stuff you are making is small. I did round the corners and cut some holes, so the QL laser cutter came in handy again.</p>

<p><img src="/blog/img/2025-12-18-mobile-network/in_bag.jpg" alt="" /></p>

<p><em>This setup fits perfectly in a backpack.</em></p>

<p>Another good thing to know is battery life. Mathematically, the 10 Ah pack could provide about 3 hours and 20 minutes of operation for the rated max of 2.5A (RPI 3B+) + 0.46A (Switch). In my own test of letting everything idle, the battery lasts about 12 hours. With these bounds I know the rough capacity and I’m pretty happy with this.</p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="networking" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-12-18-mobile-network/overview.jpg" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-12-18-mobile-network/overview.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Web Soundboard</title><link href="https://starmaid.github.io/blog/web-soundboard/" rel="alternate" type="text/html" title="Web Soundboard" /><published>2025-11-16T00:00:00+00:00</published><updated>2025-11-16T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/web-soundboard</id><content type="html" xml:base="https://starmaid.github.io/blog/web-soundboard/"><![CDATA[<p>Check out the <a href="https://github.com/starmaid/web-soundboard">readme on the github page.</a></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="movies" /><summary type="html"><![CDATA[Check out the readme on the github page.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-11-16-web-soundboard/soundboard_laptop.png" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-11-16-web-soundboard/soundboard_laptop.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My own EWI</title><link href="https://starmaid.github.io/blog/ewi/" rel="alternate" type="text/html" title="My own EWI" /><published>2025-09-05T00:00:00+00:00</published><updated>2025-09-05T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/ewi</id><content type="html" xml:base="https://starmaid.github.io/blog/ewi/"><![CDATA[<p><img src="/blog/img/2025-09-05-ewi/breadboard.jpg" alt="picture of the system" /></p>

<p>This is a classic example of “taking an exit ramp” from a project. I wanted to make my own version of an electric wind instrument (EWI) but also wanted to involve my friends in a fun group project.</p>

<h2 id="the-idea">The Idea</h2>

<p>The Akai EWI is a really cool. A novel method of MIDI interface with a computer, that makes you play differently than if you were playing on a keyboard. I don’t know how to play saxophone, so I also think this would be a novel approach to music. Sure, <a href="https://www.guitarcenter.com/Akai-Professional/EWI-5000-Wireless-Electronic-Wind-Controller-1401202977489.gc">you can buy one for $900</a>, but that’s stupid. Its fairly common practice for internet weirdos to make their own ones.</p>

<h3 id="prior-art">Prior art</h3>

<p>Had to give a search for some classic, non-product, EWI constructions.</p>

<ul>
  <li>The guy who invented the EWI <a href="https://www.patchmanmusic.com/NyleSteinerHomepage.html">Nyle Steiner</a> has his own page of novel instruments.</li>
  <li><a href="https://hackaday.io/project/11843-miniwi-woodwind-midi-controller">MiniWI by @Trasselfrisyr</a> is a classic minimum viable product, simple construction with conductive copper pads.</li>
  <li><a href="https://github.com/cardonabits/haxo-hw">Haxophone by @cardonabits</a> is a good modern design with mechanical keyboard switches. Also uses fluidsynth.</li>
  <li><a href="https://makezine.com/blog/beatjazz-controller/">BeatJazz Controller by  Onyx Ashanti</a> has a radically different form factor. He uses PureData for non-ADSR synthesis and processing of the raw input data.</li>
  <li><a href="http://gordophone.blogspot.com/2013/01/a-series-basics-of-diy-wind-controllers.html">Gordon Good</a> has been in the game for years, and also fun fact does projects at CCRMA at Stanford. Has a bunch of blog posts about non-ADSR synthesizers.</li>
  <li>There were also several builds at Opensauce 2025 that were generally similar to these builds.</li>
</ul>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-images.drawio.png" alt="picture of all four of these builds." /></p>

<h3 id="our-build">Our Build</h3>

<p>First we have to talk about who the team was. I gathered a few friends; Harry, Ian, and Brooke. The first consideration we wanted to make was who the device was for. Each of us wanted to play one, and knew maybe 1 or 2 other people who might find them interesting if they worked.</p>

<p>This led to a batch size of maybe 3-6 devices, which is a weird number. Its low enough that custom PCBs are still annoying and expensive, and any annoying processes in the construction steps would have to be somewhat repeatable. We also had no delusions that we would be making any money off this, so using like a $200/ea bite force sensor would probably not be a worthwhile inclusion. Goal was cheap, repeatable, and functional enough.</p>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-Device%20Layout.drawio.png" alt="image of the FBD" /></p>

<p>The gang went back and forth but we ultimately decided to separate the input management from the synthesizer part - use an arduino with its many input channels on one side of the versatile MIDI interface, and then connect it to anything downstream, a full computer or some embedded synthesizer. This also gave us a few off ramps to consider.</p>

<p>We also decided that using capacitive pads would be simpler to wire and easier/faster to play, so we decided to look into soldering to pads or tape or something. This would result in a less tactile device, which could be a downside, but that was deemed an acceptable tradeoff.</p>

<h2 id="side-note-off-ramps">Side note: Off Ramps</h2>

<p>Sometimes you realize you are done working on a project. Not that the project is complete, but that the remaining work is not novel or compelling. This is where the “off ramp” comes into play - a point where the project is presentable and demonstrates something interesting, even if the full vision is not complete. As my projects grow in scale, I find it more useful to build these points in from the very design and planning phase. I also want to note that this doesn’t make me any less motivated to go through and finish a project - it maybe makes it even easier to approach large goals, because I know failure will still leave me with something.</p>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-offramps.drawio.png" alt="diagram about offramps" /></p>

<p>I want to credit this idea and phrasing to Brooke, who really demonstrated it with her quilted jacket project. Link will be added here if she ever posts about it.</p>

<h2 id="build---part-2">Build - Part 2</h2>

<h3 id="parts-list">Parts List</h3>

<p>This is for the MIDI instrument part. The synth part would be connected over USB to this component.</p>

<table>
  <thead>
    <tr>
      <th>Part</th>
      <th>Count</th>
      <th>Price/per</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Arduino Pro Micro</td>
      <td>1</td>
      <td>~$5</td>
    </tr>
    <tr>
      <td>3.3-5V logic level shifter</td>
      <td>1</td>
      <td>~$1</td>
    </tr>
    <tr>
      <td>MPR121 Capacitive touch breakout board</td>
      <td>2</td>
      <td>~$3</td>
    </tr>
    <tr>
      <td>TM7711 ADC + Pressure Sensor</td>
      <td>2</td>
      <td>~$2</td>
    </tr>
  </tbody>
</table>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-Circuit.drawio.png" alt="picture of circuit diagram" /></p>

<p>I got all the parts a few weeks later, and started breadboarding them together. Simple circuits with the example code to get things working. Around here I think I accidentally broke one of the breath sensors, either by blowing too hard or maybe soldering it too hot. Not sure, I just kind of expect those things to have a failure rate. There is a flexible diaphram in there somewhere, and I think its possible for a human to overpower it.</p>

<h3 id="software-design">Software Design</h3>

<p>As I said, I don’t know how to play any woodwind instruments. I decided that the engineers at Akai probably know a thing or two about how to map keys to notes - and great engineers steal.</p>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-fingerings.drawio.png" alt="akai manual png" /></p>

<p>I then just made sure I had enough IO channels to match the button setup.</p>

<p><img src="/blog/img/2025-09-05-ewi/diagrams-Physical.drawio.png" alt="drawio button mapping layout" /></p>

<p>This diagram outlines multiple useful values for me to keep track of.</p>

<ul>
  <li>Most prominent is a number prefaced with a <code class="language-plaintext highlighter-rouge">K</code>. This maps them to keys in Akai’s manual.</li>
  <li>the number in the pattern <code class="language-plaintext highlighter-rouge">bxpx</code> is the IO board index and channel index. There are two boards with 12 channels each.</li>
  <li>the number prefaced with an <code class="language-plaintext highlighter-rouge">L</code> indicates where in the flat array of booleans I place that value.</li>
</ul>

<p>I wanted to use this project to practice some boolean operators. This was mostly just for love of the game. Here is an array I used to mask input values and translate them into the right spot in the array. During testing I noticed that the first two pins on one of my capacitive boards weren’t working, so I just rewired it on the spot and kept the naming the same (if you are trying this project out yourself, I hope you notice and change this if your boards work properly).</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// define input to keys
// this should match the wiring you make.
uint32_t io_keys_map[NUM_IO] = {
    // board 0
    0b000000000000000000,
    0b000000000000000000, //p0 // the first two pins are broken?
    0b000000000000100000, //p1
    0b000000000001000000, //p2
    0b000000000010000000, //p3
    0b000000000100000000, //p4
    0b000000001000000000, //p5
    0b000000010000000000, //p6
    0b000000000000010000, //p7
    0b000000000000001000, //p8
    0b000000000000000100, //p9
    0b000000000000000010, //p10
    0b000000000000000001, //p11 
    0b000000000000000000, //x12 unused
    0b000000000000000000, //x13
    0b000000000000000000, //x14
    // board 1
    0b000000100000000000, //p0 
    0b000001000000000000, //p1
    0b000010000000000000, //p2
    0b000100000000000000, //p3
    0b001000000000000000, //p4
    0b010000000000000000, //p5
    0b100000000000000000, //p6
    0b000000000000000000, //p7 unused
    0b000000000000000000, //p8
    0b000000000000000000, //p9
    0b000000000000000000, //p10
    0b000000000000000000, //p11
    0b000000000000000000, //x12
    0b000000000000000000, //x13
    0b000000000000000000, //x14
    0b000000000000000000  //x15
  };
</code></pre></div></div>

<p>All you need to do to start with an array of physical “buttons” and create an array of “keys” is to AND and then ADD the bitmasks.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// read from inputs
touched_b0 = b0.touched();
touched_b1 = b1.touched();

// turn into logical values
m_allbuttons_held = touched_b0 + ((uint32_t) touched_b1 &lt;&lt; 16);

m_allkeys_held = 0;

// map the IO to the keys in order
for (int i=0; i&lt;NUM_IO; i++) {
  testbit = (uint32_t) 1 &lt;&lt; i;
  if (m_allbuttons_held &amp; testbit) {
    m_allkeys_held += io_keys_map[i];
  }
}
</code></pre></div></div>

<p>Then I just copied from the manual to make the fingerings.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// define EWI fingerings
// write in binary which buttons are pressed and associate with a note.
const uint8_t NUM_FINGERINGS = 18;
int32_t keys_notes_map[NUM_FINGERINGS][2] = {
    {0b1011010111011, pitchB2b},
    {0b1011010111001, pitchB2},
    {0b1011000111001, pitchC3},
    {0b1011100111001, pitchD3b},
    {0b1011000111000, pitchD3},
    {0b1011000111100, pitchE3b},
    {0b1011000110000, pitchE3},
    {0b1011000100000, pitchF3},
    {0b1011000010000, pitchG3b},
    {0b1011000000000, pitchG3},
    {0b1011100000000, pitchA3b},
    {0b1010000000000, pitchA3},
    {0b1010001000000, pitchB3b},
    {0b1100000000000, pitchB3b},
    {0b1000000000000, pitchB3},
    {0b0010000000000, pitchC4},
    {0b0000000000000, pitchD4b},
    {0b0000100000000, pitchD4}};
</code></pre></div></div>

<p>As you can see, there are invalid fingerings, that could be possibly triggered while transitioning between notes. I just hold the last note, but it would be interesting to get into semitone world. That would be a whole different model though.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>int16_t getNote(uint32_t keys_held)
{
  for (uint8_t i = 0; i &lt; NUM_FINGERINGS; i++)
  {
    if (keys_held == (uint32_t) keys_notes_map[i][0])
    {
      return keys_notes_map[i][1];
    }
  }
  return m_last_valid_note;
}
</code></pre></div></div>

<p>From here, I had the breath cause both a <code class="language-plaintext highlighter-rouge">NOTEON</code>/<code class="language-plaintext highlighter-rouge">NOTEOFF</code> effect when it crossed a threshold, as well as mapping to two different CC channels. One for positive pressure and another for negative pressure. The pitches are sent every cycle that <code class="language-plaintext highlighter-rouge">NOTEON</code> is active.</p>

<iframe width="100%" height="315" src="https://www.youtube.com/embed/gdUinYUU7cI" frameborder="0" allowfullscreen=""></iframe>

<h2 id="whats-next">Whats Next</h2>

<p>I have like zero desire to build or design the rest of this thing, so I just finished the breadboard test. I don’t think this project is particularly groundbreaking in the world of electronic breath synthesizers, so only if other members of the team pick up the effort will I continue.</p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="ewi," /><category term="midi," /><category term="midi" /><category term="controller" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-09-05-ewi/breadboard.jpg" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-09-05-ewi/breadboard.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Hockey Robot</title><link href="https://starmaid.github.io/blog/hockey-robot/" rel="alternate" type="text/html" title="Hockey Robot" /><published>2025-07-20T00:00:00+00:00</published><updated>2025-07-20T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/hockey-robot</id><content type="html" xml:base="https://starmaid.github.io/blog/hockey-robot/"><![CDATA[<iframe width="100%" height="315" src="https://www.youtube.com/embed/Y_yZiCNvSLQ" frameborder="0" allowfullscreen=""></iframe>

<p><em>Entering the world of combat robots.</em></p>

<h2 id="introduction">Introduction</h2>

<p>In fall 2024, I went to Nexus Knockout 1 to watch my friend <a href="https://battlebots.com/robot/overhaul-wcvii/">Scott</a> play bot hockey. It looked cool, but I wasn’t sure if I would get myself involved.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/nexus1.jpg" alt="" /></p>

<p>I went again, and at the second Nexus Knockout in March 2025 I subbed in to drive Scott’s second robot. We won!</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/nexus2.jpg" alt="" /></p>

<p>For winning, our team got tickets to the finals at Opensauce 2025. I also got laid off around this time, so I suddenly had a lot of free time to bring my own custom bot to the competition.</p>

<h2 id="construction">Construction</h2>

<p>I talked to Scott about his design, because I liked it and thought it was simple but also adaptable. I made a model in FreeCAD.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v2.png" alt="" /></p>

<p>To make sure I got sizing and stuff right without spending too much money, I lasered it out of particleboard at work, and printed parts out of PLA.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v1.jpg" alt="" /></p>

<p>This gave me a platform to start doing electronics work on the robot.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/home_1.gif" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/home_2.gif" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/home_3.gif" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/current.jpg" alt="" /></p>

<p>I got the ESCs set up, the receiver bound, and made sure I wasn’t drawing too much current. 20A max using this clamp ammeter was great to see. I was using 80A ESCs and had a battery that could do 170A burst, so I was totally overspecced. The capacity would likely last me multiple matches before fully depleting a battery, which would take the strain off only owning two of these.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v5.png" alt="" /></p>

<p>I made a few tweaks to the design that involved shockmounting the motors in TPU, and this time I was ready for a laser. I had an idea for a porcelain-style floral pattern on my robot, and took a small detour to write a script about it. Check out the <a href="https://github.com/starmaid/floral-gen">GitHub page</a> for more on that.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v1_build1.jpg" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v1_build2.jpg" alt="" /></p>

<p>After that, I was ready to take it for a test against real robots. Scott and Kyle were able to meet up for some practice in a nice shaded parking lot.</p>

<iframe width="100%" height="315" src="https://www.youtube.com/embed/C8_bE8iE5hA" frameborder="0" allowfullscreen=""></iframe>

<p><img src="/blog/img/2025-07-20-hockey-robot/practice1.jpg" alt="" /></p>

<p>It was super helpful! I discovered a few major, game-breaking problems.</p>

<ol>
  <li>I couldn’t keep the puck in my forks, it would just bounce over.</li>
</ol>

<p>Solution: build raised walls onto the rails.</p>

<ol>
  <li>Due to my weight distribution, I couldn’t push other robots.</li>
</ol>

<p>Solution: move the battery behind the wheels, move the rails closer to the center.</p>

<ol>
  <li>The way my wheels were mounted caused massive amounts of friction in my gearboxes, and also caused them to slowly disassemble themselves. This heat buildup also started melting my motor isolator sections.</li>
</ol>

<p>Solution: mount the wheels differently. Also, add airflow and heatsinks to the motor enclosure.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/practice2.jpg" alt="" /></p>

<p>Each of these was solvable, and any one of them would have made game day a nightmare. This resulted in a redesign, which resulted in a more balanced bot.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v8.png" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/v2_build.jpg" alt="" /></p>

<p>So shiny! I had time for one practice the night before Opensauce with my team for this competition - Hock Stuff! Orion and Nick were able to get their bots driving and we had a quick practice, and I made a last minute discovery that I needed a wheelie bar - a quick print the night before the competition. Unfortunately, our practice was also late at night, and I didn’t get any good photos of the robots.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/bunny_draw.png" alt="" /></p>

<p><em>Bunny, who helped run and organize the tournament, also drew a cartoon of my bot!</em></p>

<h2 id="competition">Competition</h2>

<p><img src="/blog/img/2025-07-20-hockey-robot/maidbot.gif" alt="" /></p>

<p><em>Maidbot shows her stuff on the rink during practice. Its okay! Shes just delicate.</em></p>

<p>Friday was loadin and systems check. We all got to make sure things were working and do last minute assembly and testing. I was mostly relaxed once I got everything set up, as we had no battles.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/drivers_meeting.jpg" alt="" /></p>

<p><em>It was fun to get the whole bot hockey gang together!</em></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/ready.gif" alt="" /></p>

<p><em>POV the first match is about to start</em></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/team_2.jpg" alt="" /></p>

<p><em>So focused…</em></p>

<p>Our team:</p>

<ul>
  <li><strong>Orion Beach</strong>, also engineering lead of <a href="https://www.offbeatrobotics.com/">Offbeat Robotics</a>, and their bigbot Hijinx</li>
  <li><strong>Nick Hom</strong> from bigbot team <a href="https://battlebots.com/robot/ribbot-2021/">Ribbot</a></li>
  <li>Me :) its my first time lol</li>
</ul>

<p><img src="/blog/img/2025-07-20-hockey-robot/team_1.jpg" alt="" /></p>

<p>We had three guest drivers over the course of the competition. This was super fun and Orion and Nick have some cool friends! IT was also helpful because Orion hadn’t let the loctite dry on the wheel nuts and they kept falling off during the compeition, requiring quick bot swaps. This also kept the energy high and got more people involved, so thats super cool.</p>

<ul>
  <li>
    <p><a href="https://www.bamiium.com/">Bam Singhasaneh</a> from Team Valkrie helped us defeat team Magic Smoke in the qualifiers, as well as subbing in periodically through other matches.</p>
  </li>
  <li>
    <p><a href="https://en.m.wikipedia.org/wiki/Lisa_Winter">Lisa Winter</a>, who is normally judging these kinds of matches, helped us beat Royally Pucked in the qualifiers.</p>
  </li>
  <li>
    <p><a href="https://battlebots.fandom.com/wiki/Team_Fast_Electric_Robots">Matt Vasquez</a> from Team Fast helped us defeat Royally Pucked again, in the first round of the elimination bracket.</p>
  </li>
</ul>

<p><img src="/blog/img/2025-07-20-hockey-robot/groups.svg" alt="" /></p>

<p>We did pretty well in the qualifiers. Second-highest seed. At the end of the last match on Saturday, somehow the rear panel of my robot was completely shattered. I only noticed because my wheelie bar was knocked out and I had a bit of a controls issue - the team sticker was the only thing keeping my battery compartment closed. Acrylic is not a good choice for bot combat, and everyone I talked to expressed this - but I made it work somehow. Definitely something I’ll fix before the next compeition.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/shatter1.jpg" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/shatter2.jpg" alt="" /></p>

<p>Luckily I had a spare! I also spent that night printing a cover that allowed me to stuff some foam between the outside of the robot and that panel. It probably saved my ass a few times (literally!)</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/scene.jpg" alt="" /></p>

<p>That brought us into day two, where we entered the elimination bracket.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/scene_2.jpg" alt="" /></p>

<p>Honestly the vibes were really cool. Cheering, struggling for victory, but also knowing that these are just toys and everyone is here to have some fun.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/bracket.svg" alt="" /></p>

<p>We got second place! Team (No) Ice is just…really good. Their drivers are top notch, and their bots are incredibly efficient. We had a lead in both matches, but in the second half they were able to create a massive lead in the last few minutes of the game.</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/afters.jpg" alt="" /></p>

<p><img src="/blog/img/2025-07-20-hockey-robot/temps.jpg" alt="" /></p>

<p>My robot got pretty beat up, but most of it was just on the tape I slapped all over the panels to keep them from shattering! Also, after the finals match, my motors were the hottest I’ve ever seen them, almost 80C. That’s crazy!!!!!!</p>

<p><img src="/blog/img/2025-07-20-hockey-robot/everyone.jpg" alt="" /></p>

<p>Thanks to the tournament runners, Bunny, Alex, and all the other teams. It was a great time and I plan to keep playing this fun game with all of you.</p>

<p><a href="https://bothockeyleague.com/bot-hockey-info/">https://bothockeyleague.com/bot-hockey-info/</a></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="nhrl," /><category term="combat" /><category term="robot" /><summary type="html"><![CDATA[Entering the world of combat robots. Introduction In fall 2024, I went to Nexus Knockout 1 to watch my friend Scott play bot hockey. It looked cool, but I wasn’t sure if I would get myself involved. I went again, and at the second Nexus Knockout in March 2025 I subbed in to drive Scott’s second robot. We won! For winning, our team got tickets to the finals at Opensauce 2025. I also got laid off around this time, so I suddenly had a lot of free time to bring my own custom bot to the competition. Construction I talked to Scott about his design, because I liked it and thought it was simple but also adaptable. I made a model in FreeCAD. To make sure I got sizing and stuff right without spending too much money, I lasered it out of particleboard at work, and printed parts out of PLA. This gave me a platform to start doing electronics work on the robot. I got the ESCs set up, the receiver bound, and made sure I wasn’t drawing too much current. 20A max using this clamp ammeter was great to see. I was using 80A ESCs and had a battery that could do 170A burst, so I was totally overspecced. The capacity would likely last me multiple matches before fully depleting a battery, which would take the strain off only owning two of these. I made a few tweaks to the design that involved shockmounting the motors in TPU, and this time I was ready for a laser. I had an idea for a porcelain-style floral pattern on my robot, and took a small detour to write a script about it. Check out the GitHub page for more on that. After that, I was ready to take it for a test against real robots. Scott and Kyle were able to meet up for some practice in a nice shaded parking lot. It was super helpful! I discovered a few major, game-breaking problems. I couldn’t keep the puck in my forks, it would just bounce over. Solution: build raised walls onto the rails. Due to my weight distribution, I couldn’t push other robots. Solution: move the battery behind the wheels, move the rails closer to the center. The way my wheels were mounted caused massive amounts of friction in my gearboxes, and also caused them to slowly disassemble themselves. This heat buildup also started melting my motor isolator sections. Solution: mount the wheels differently. Also, add airflow and heatsinks to the motor enclosure. Each of these was solvable, and any one of them would have made game day a nightmare. This resulted in a redesign, which resulted in a more balanced bot. So shiny! I had time for one practice the night before Opensauce with my team for this competition - Hock Stuff! Orion and Nick were able to get their bots driving and we had a quick practice, and I made a last minute discovery that I needed a wheelie bar - a quick print the night before the competition. Unfortunately, our practice was also late at night, and I didn’t get any good photos of the robots. Bunny, who helped run and organize the tournament, also drew a cartoon of my bot! Competition Maidbot shows her stuff on the rink during practice. Its okay! Shes just delicate. Friday was loadin and systems check. We all got to make sure things were working and do last minute assembly and testing. I was mostly relaxed once I got everything set up, as we had no battles. It was fun to get the whole bot hockey gang together! POV the first match is about to start So focused… Our team: Orion Beach, also engineering lead of Offbeat Robotics, and their bigbot Hijinx Nick Hom from bigbot team Ribbot Me :) its my first time lol We had three guest drivers over the course of the competition. This was super fun and Orion and Nick have some cool friends! IT was also helpful because Orion hadn’t let the loctite dry on the wheel nuts and they kept falling off during the compeition, requiring quick bot swaps. This also kept the energy high and got more people involved, so thats super cool. Bam Singhasaneh from Team Valkrie helped us defeat team Magic Smoke in the qualifiers, as well as subbing in periodically through other matches. Lisa Winter, who is normally judging these kinds of matches, helped us beat Royally Pucked in the qualifiers. Matt Vasquez from Team Fast helped us defeat Royally Pucked again, in the first round of the elimination bracket. We did pretty well in the qualifiers. Second-highest seed. At the end of the last match on Saturday, somehow the rear panel of my robot was completely shattered. I only noticed because my wheelie bar was knocked out and I had a bit of a controls issue - the team sticker was the only thing keeping my battery compartment closed. Acrylic is not a good choice for bot combat, and everyone I talked to expressed this - but I made it work somehow. Definitely something I’ll fix before the next compeition. Luckily I had a spare! I also spent that night printing a cover that allowed me to stuff some foam between the outside of the robot and that panel. It probably saved my ass a few times (literally!) That brought us into day two, where we entered the elimination bracket. Honestly the vibes were really cool. Cheering, struggling for victory, but also knowing that these are just toys and everyone is here to have some fun. We got second place! Team (No) Ice is just…really good. Their drivers are top notch, and their bots are incredibly efficient. We had a lead in both matches, but in the second half they were able to create a massive lead in the last few minutes of the game. My robot got pretty beat up, but most of it was just on the tape I slapped all over the panels to keep them from shattering! Also, after the finals match, my motors were the hottest I’ve ever seen them, almost 80C. That’s crazy!!!!!! Thanks to the tournament runners, Bunny, Alex, and all the other teams. It was a great time and I plan to keep playing this fun game with all of you. https://bothockeyleague.com/bot-hockey-info/]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-07-20-hockey-robot/goal.gif" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-07-20-hockey-robot/goal.gif" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Randbeacon</title><link href="https://starmaid.github.io/blog/randbeacon/" rel="alternate" type="text/html" title="Randbeacon" /><published>2025-07-17T00:00:00+00:00</published><updated>2025-07-17T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/randbeacon</id><content type="html" xml:base="https://starmaid.github.io/blog/randbeacon/"><![CDATA[<p>Check out the <a href="https://github.com/starmaid/randbeacon">readme on the github page.</a></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="NIST," /><category term="lights" /><summary type="html"><![CDATA[Check out the readme on the github page.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-07-17-randbeacon/rand.gif" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-07-17-randbeacon/rand.gif" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Four Beers is Dinner Shirt Order</title><link href="https://starmaid.github.io/blog/four-beers-order/" rel="alternate" type="text/html" title="Four Beers is Dinner Shirt Order" /><published>2025-07-10T00:00:00+00:00</published><updated>2025-07-10T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/four-beers-order</id><content type="html" xml:base="https://starmaid.github.io/blog/four-beers-order/"><![CDATA[<p><img src="/blog/img/2025-07-10-four-beers-order/brooke_poster.png" alt="" /></p>

<p>This shirt was designed by my friend <a href="https://www.youtube.com/watch?v=WUqQdNAUC1c">Modawful</a><a href="https://mthamilton.ucolick.org/hamcam/hamcam2.html"></a> and printed using a 3D-printed stamp onto cotton shirts.</p>

<p>Theyre $10 because this stuff costs money sorry. I’m just trying to break even.</p>

<p><a href="https://starmaid.us.to/apps/forms/s/a95cG7yQ5DkHNWKwSfkXFbya"><strong>Fill out this form here!</strong></a></p>

<p><img src="/blog/img/2025-07-10-four-beers-order/design2.png" alt="" /></p>

<p><img src="/blog/img/2025-07-10-four-beers-order/stack.jpg" alt="" /></p>

<p><img src="/blog/img/2025-07-10-four-beers-order/signature.jpg" alt="" /></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="shirt" /><category term="sale" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-07-10-four-beers-order/brooke_poster.png" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-07-10-four-beers-order/brooke_poster.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Floral Pattern Generator</title><link href="https://starmaid.github.io/blog/floral-gen/" rel="alternate" type="text/html" title="Floral Pattern Generator" /><published>2025-06-26T00:00:00+00:00</published><updated>2025-06-26T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/floral-gen</id><content type="html" xml:base="https://starmaid.github.io/blog/floral-gen/"><![CDATA[<p>Check out the <a href="https://github.com/starmaid/floral-gen">readme on the github page.</a></p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="laser" /><summary type="html"><![CDATA[Check out the readme on the github page.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-06-26-floral-gen/floral.jpg" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-06-26-floral-gen/floral.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">La Lune Acrylic Sign</title><link href="https://starmaid.github.io/blog/la-lune/" rel="alternate" type="text/html" title="La Lune Acrylic Sign" /><published>2025-06-22T00:00:00+00:00</published><updated>2025-06-22T00:00:00+00:00</updated><id>https://starmaid.github.io/blog/la-lune</id><content type="html" xml:base="https://starmaid.github.io/blog/la-lune/"><![CDATA[<p><img src="/blog/img/2025-06-22-la-lune/lalune.jpg" alt="Image of the thing" /></p>

<p>This is a small acrylic sign I made for my girlfriend Lucy’s birthday. This was also a test project for learning to use the laser at QL.</p>]]></content><author><name>Nicky Masso</name></author><category term="blog" /><category term="gaming" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://starmaid.github.io/blog/img/2025-06-22-la-lune/lalune.jpg" /><media:content medium="image" url="https://starmaid.github.io/blog/img/2025-06-22-la-lune/lalune.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>