You are browsing as a guest. Sign up (or log in) to start making projects!

Eben-Siyabalapitiya

@Eben-Siyabalapitiya

Joined June 9th, 2026

  • 22Devlogs
  • 6Projects
  • 2Ships
  • 25Votes
Eben Siyabalapitiya
Developer & Builder - Machine Learning & Computer Vision Enthusiast

I'm Eben Siyabalapitiya, a grade 12 student in Toronto who spends most of his free time building things. I've lost count of the projects at this point robots, computer vision stuff, embedded systems, a lot of half finished ideas that eventually turned into working ones. Most of it ends up open source. When I'm not building projects that I'm on FRC Team 2935. You can find the rest in my Portfolio

I'm also into STEAM and enjoy working across different areas. Most of what I make sits somewhere between software and physical engineering, and a lot of it starts as something I just wanted to build in my free time.

Portfolio → http://www.ebensiyabalapitiya.site/

LinkedIn → https://www.linkedin.com/in/eben-siyabalapitiya/

GitHub → https://github.com/Eben-Siyabalapitiya
Open comments for this post

3h 3m 59s logged

LOG 7: Cleaning up the wiring

Spent this one getting Momo assembled as far as I can without the Pi. Idea is that when the new one shows up I just plug everything in and go.


Reprinting in Black

Reprinted everything in black. Took a while since it’s a lot of parts, and I printed a few test pieces along the way to check fits before committing to the final versions.


The Wiring

This was the main job. Last log the wiring took up more space than the robot did, so I redid all of it properly.

Cut every wire to the actual length it needed instead of leaving slack everywhere. Heat shrink on everything, and made sure no bare wire was touching anything it shouldn’t. The switch I ordered for Momo came in too so that got wired in.

Spent a lot of time just taping things down and making sure nothing can work its way loose or pop out when the legs move.


Where It’s At

Came out way cleaner than I expected. It’s super compact now, the space ended up being pretty much the perfect size for everything once the wiring was done right.

Couple of days of mostly wiring and printing, but it looks a lot better than it did.

Just waiting on the Pi now.

0
0
6
Open comments for this post

4h 9m 29s logged

LOG 6: I cooked the Pi

Bad news this time.


The 3AM Incident

Momo walks, but I hadn’t touched the mic or speaker at all yet. So I was up at 3am soldering the mic and the amp together, planning to get audio working and then move Momo into the full black assembly the next day. Was actually really excited for it.

Then a blob of solder flew off and landed on the Pi.

I saw it land, wiped it off quick and got it out, and just kept soldering. Figured I’d test everything once I was done. Finished up, plugged in just the Pi on its own to test audio, and nothing. No light. Dead.

That one hurt. The Pi was around $50 and now I’m waiting like 3 days for a replacement, right when I was ready to actually assemble everything.


Making Use of the Wait

Didn’t want to just sit around so I kept going on the parts I could.

Assembled the final legs. These are the ones actually going on Momo after all the prototyping and the CAD changes from testing. Good to have those done.

Also grabbed an ESP32 I had lying around and used it to test the mic and the speaker. Took me a while to figure out since I’ve never really done audio stuff before, but I got there and it was a solid learning experience. At least now I know the audio parts themselves work.


What’s Next

Once the new Pi shows up I’m assembling everything into the main body. Screen, servos, PCA9685, all of it mounted properly.

The other thing I have to sort out is wiring. Right now the wiring takes up more space than Momo does, which is not great. It looks bigger and messier than the actual robot. So I need to lock in and figure out proper cable management before final assembly.

Plan is to clean Momo up as much as I can so he’s ready to wire the moment the parts land.

RIP Pi. -$100.

4
0
23
Open comments for this post

6h 41m 4s logged

LOG 4 - Momo Walks

Momo walks now. Not well, but it walks.


Getting the Gait Working

This one took way more thinking than I expected. Figuring out how Momo should actually move was the hard part, not writing the code. With only 2 servos per leg you can’t do a proper trot right now well lowkey thats a later problem, so it has to be a static crawl for now just to test. One leg moves at a time while three stay planted. Sounds simple until you’re trying to work out the timing and the angles for each joint at each stage of a step.

Went through a lot of iterations on the code before anything resembled walking.


Printing and Testing Legs

Printed a bunch of different leg designs. Different lengths, different shapes, different joint positions. Had to keep testing to make sure the legs actually lined up right, because if the geometry is even a bit off the feet don’t land where the code thinks they should and the whole thing drags itself sideways.

A lot of print, test, adjust, print again.


Where It’s At right now

It walks but it makes a lot of errors. Drifts off, doesn’t go perfectly straight, some steps land wrong. But it moves on its own and that’s the milestone I was going for.

Nothing is properly assembled yet either. As you can see in the video and pictures, the components are just sitting in there for now. The whole focus this round was on getting the base structure right and proving the movement works before I commit to printing the final parts.

I’ve got a decent idea of what needs to change now, both on the code side and the CAD side.


Slow progress but good progress. Next up is cleaning up the gait and starting on the final build (Hopefully)

0
0
57
Open comments for this post

5h 21m 25s logged

LOG 4: Trying to get Momo to move

Not walking yet. Kind of moving, but not really.


First Attempts

Spent this one just trying to get the legs doing something coordinated. Wrote the first version of the movement code and it was rough. Legs firing in the wrong order feet lifting when they should be planted, the whole thing basically flailing in place instead of going anywhere.

Realised pretty fast that with only 2 servos per leg I can’t do a proper trot, so it has to be a static crawl. One leg moves at a time while three stay planted. Sounds simple until you’re actually working out the timing and the angles for each joint at each stage of a step.

Went through a lot of iterations and none of them really worked yet.


Printing and Testing Legs

Printed a bunch of different leg designs. Different lengths, different shapes, different joint positions. Kept testing to see which geometry would even let the feet land where the code expects them to, because if it’s off the whole thing just drags itself sideways instead of stepping.

A lot of print, test, adjust, print again.


Where It’s At

It moves but it doesn’t walk. Legs go through the motions and the body barely goes anywhere. Still figuring out the timing.

Nothing is assembled properly either, components are just sitting in there loose for now while I work this out.

Next log is hopefully actual walking.

0
0
101
Open comments for this post

3h 40m 35s logged

Log 2

Parts finally showed up.

Spent most of this one wiring. First time using a Raspberry Pi Zero so it took me way longer than it should have. Counting header pins with no labels
on the board is its own kind of pain. Had to keep going back to a pinout diagram to make sure I wasn’t about to put 5V somewhere it shouldn’t go ( i did two times loll).

Got the PCA9685 hooked up to the Pi, sorted out the power side with two separate regulators, one for the servos and one for the Pi so the servos
can’t brown it out mid step.

Also messed around with the software side. Getting the Pi connected to WiFi was more annoying than expected, ended up fighting that for a bit. Once it was on the network I could SSH in and start installing everything I need.

Did some more tolerance testing with the legs too. Printed a couple of test pieces to check the servo pockets and joint fits before committing to printing the whole thing. Came out pretty good, everything sits where it
should.

So this one was mostly wiring and Pi setup, with a bit of CAD and assembly mixed in. Not the most exciting to look at but it’s the stuff that has to work before anything else does.

0
0
13
Open comments for this post

8h 54m 12s logged

Log 1

Meet Momo.

Momo is a small four legged robot spider. 8 servos, two per leg, one to swing, the leg and one to lift it. It’s got a screen for a face that changes
expression, a mic, and a speaker. The idea is you talk to it and it talks back, and it actually knows it’s a spider. Ask it to walk forward and it walks forward. Say something dumb and it makes a confused face.

I spent a few days just researching before touching anything. Went back and forth on the board a lot, ESP32 vs Pi, and how to actually power 8 servos
without browning everything out. Worked out the parts list, orderedeverything, and then gaps where i was just waiting onshipping.

So I figured I’d CAD a rough version. Just to get a sense of proportions andwhere things would sit.

That was the plan anyway. I got way too into it and ended up modelling the whole actual thing. Not a mockup but the real one. Spent days on it though. Kept redoing where the legs mount and where the second joint sits because the first few versions either had no range of motion or put the feet way too far out from the body.

Parts showed up eventually and I tested the fit with some servos I already had ( the press fit was so good that it stripped the servo wire😭). Checked tolerances, made sure the servo pockets weren’t too tight, horns cleared properly, that kind of thing.

Came out way better than I expected honestly. This was mostly a CAD week and I’m glad it was.

Next up is wiring and getting the first servo to move set up the pi and rest of the componenets.

3
0
99
Ship Pending review

SNAPX is a handheld camera I built from scratch on an ESP32-CAM. Live preview on a 1.8 inch screen, a metal shutter button on the side, and a case I designed in Onshape and printed.

To get photos off it you connect to the wifi network the camera hosts itself and open the page, and you get a gallery of everything on the device with download and delete. That was not the original plan. I was going to save to an SD card, but the camera sensor takes up almost every usable pin on this board and there was genuinely nothing left for it. Ended up saving to internal flash and building the wifi gallery instead, which turned out better anyway since I never have to pull a card out and find a reader.

Hardest part was two days on a white screen that turned out to be my battery browning the board out, and soldering the whole thing together before testing every part wired up at once. Had to unsolder and resolder inside a packed case, which I will not be doing again.

Proud of the live preview mostly. It runs raw RGB565 straight to the display so there is no JPEG decoding in the loop, which is what took it from a slideshow to something you can actually frame a shot with.

If you want to test it, power it on, point it, press the button. Flash fires and it freezes on your shot. Then connect to the SNAPX wifi and go to the url to see the photos.

  • 5 devlogs
  • 17h build
Video of Project → See source code →
Open comments for this post

3h 12m 1s logged

Log 5

Last one. SNAPX is done.

Reprinted the case on a textured plate so the print surface picks up that pattern on the bottom face. Small thing but it makes it look way less like a generic 3D printed box.

Code side i spent this round mostly on polish. Cleaned up the UI on the web gallery, the page you get when you connect to the cameras wifi to pull photos off it. Also made the onboard LED actually flash when you take a photo, so it fires at the same time as the shutter instead of just being a light that sits there.

Then the photos themselves. They were saving rotated 90 degrees from what the preview showed, because the preview gets rotated in software but the encoder was getting the raw buffer straight off the camera. Quality was also so bad. Fixed the rotation and then pushed the JPEG quality up and turned on the sensors white balance, gain, exposure and lens correction, which it does not do by default. Same lens, same sensor, completely different photo.

Final assembly is done. One thing worth mentioning, the battery is not inside the case. Its a powerbank plugged into it, so the enclosure only holds the board, screen and button.

Really happy with how this turned out.

0
0
16
Open comments for this post

3h 22m 1s logged

Log 4

Spent a lot of time just fixing things this round. Went back over all the solder joints and redid the ones that looked sketchy properly this time instead of just enough to get continuity. Cleaned up a bunch of stuff in the code too. After all that it finally worked properly.

Then moved on to the enclosure. Designed the whole thing in Onshape and printed it.

Printed it more than once. Quite a few times actually. Most of that was me not having the right measurements for small things, mainly how far the camera sits from the front face so the lens lines up properly with the hole, and figuring out how the board actually mounts and stays put inside. Then a lot of back and forth on tolerances and wall thickness, printing a version, seeing what was too tight or too loose or too flimsy adjusting and going again.

So this one was mostly CAD, not much code. Which was a nice change of pace honestly and it feels like an actual object now instead of a pile of wires.

0
0
7
Open comments for this post

3h 39m 52s logged

Log 3

Got the live preview working and made the mistake of thinking that meant I was done. Soldered the whole thing together. Screen, button, camera, all of it permanently.

Screen immediately stopped working. Just black and white, nothing else. And this one is fully on me because I had only really tested the camera properly on its own. I never tested the screen and the switch together with everything else wired up the way it would actually be in the final build. So the first time all of it existed at once was after it was already soldered.

Ended up resoldering it multiple times and it came back so it was just a bad joint somewhere. But that meant unsoldering and resoldering while everything was already packed together, which is so much worse than doing it on a breadboard. Nothing has room, nothing is accessible and im trying not to melt the wire next to the one im actually working on.

Then the SD card. I had planned the whole time to save photos to the SD slot on the screen module, and it would not write at all. Turns out the reason is the camera sensor already takes up almost every usable pin on this board, and the pins the SD card needs are the same ones I had already given to the screen. The couple of pins that were still free after that are the serial lines the USB programmer uses, and one of those went to the shutter button. So there was genuinely nothing left for it. It was never going to work with the way I had it wired.

Spent a long time trying to make it work anyway before accepting that. Very tired by this point.

So I dropped SD entirely and made it save to the ESP32s internal flash instead, then put a web server on the camera so it hosts its own wifi network. Connect to it from your phone, open the page and you get every photo on the device with download and delete.

Honestly this ended up being way better than the SD card ever would have been. No pulling a card out and finding a reader every time I want to see what I shot, I just connect and pull them straight to my phone.

Lesson from all of this, I am never soldering a whole build together again without testing every single part wired up together first. Test the finished layout, not the individual pieces.

0
0
29
Open comments for this post
Reposted by @Eben-Siyabalapitiya

5h 49m 8s logged

Devlog Time!! Mainly worked on the GUI this time now the level select screen has a cute planet picture :3. Also added a moon surface looking background to the level. Spent like 30 minutes trying to align everything but now i am really good at math(specifically dividing by 2). Keep coding 🙃

3
1
106
Open comments for this post

2h 58m 6s logged

Log 2

Spent multiple days chasing two problems that both turned out to be things I did to myself.

First one, the new board came in (after breaking the camera on the other board i was using) and the camera kept failing with a frame buffer malloc error on every single boot. I assumed the replacement board was bad too and started genuinely worrying I had cooked the hardware AGAINN but it urned out I had the generic ESP32 Dev Module profile selected in Arduino IDE instead of AI Thinker ESP32 CAM. That profile doesnt enable PSRAM so there was literally no memory for the camera to allocate a frame buffer from. Switched it and the camera initialised first try. So long debugging that for a dropdown menu.

Second one was worse. The screen sat blank white, flickering, occasionally flashing the correct image for about a second before going back to the annoying white screen. I rewired the whole thing so many times, reflashed it constantly, swapped libraries, tried different SPI speeds, checked every pin against the datasheet. Nothing.

After days of testing i found out the problem was the battery… My lipo setup could not hold voltage once the camera and the screen were both pulling current at once, so the board was browning out and resetting over and over. Plugged it into USB and it was rock solid immediately. (i was using the same battery to troubleshoot for days btw)

now for next time i know that If a screen is doing something stupid and the wiring checks out, check your power before you touch anything else guysss

0
0
99
Open comments for this post

3h 29m 35s logged

Started SNAPX this week, a handheld camera im building on an ESP32-CAM.

First thing was ordering parts. Got the ESP32-CAM board, a 1.8 inch ST7735 screen, a 12mm metal push button for the shutter, and an 18650 setup for power. While I was waiting on those I spent a while just reading pinout diagrams and working out what connects where, because the camera sensor eats almost every usable pin on this board and there isnt much left over.

Once everything came in I got the camera going first. Streamed it over wifi to my browser just to confirm the sensor actually worked before wiring anything else in. That took way longer than it should have. This board has no USB port and no auto reset circuit, so GPIO0 has to be grounded by hand every single time i upload. I spent a solid while convinced my code wasnt uploading when really it was just booting the old firmware that was already on the chip.

Then I broke it. Because of that upload process I was pulling the camera module in and out over and over, and the ribbon cable eventually gave out. Sensor stopped being detected at all, just threw a probe failed error no matter what I tried. Ordered a replacement board, this time one that comes with a programmer attachment so the camera can stay seated and I never have to touch that ribbon again.

While waiting on that I switched over to the screen and got it working on its own. Nothing fancy, just a test sketch filling it red and printing some text, but it confirmed the wiring and libraries were right before I try combining it with the camera.

Next up is getting the actual camera preview onto that screen.

2
0
14
Ship

I built LUMA. She is a little desk robot with animated eyes that actually has a personality. tap it once and it gets excited, spam tap it and it gets mad, rub your finger on it and it gets cozy. each emotion has multiple different face variants so it never shows the same reaction twice. it also shows live weather, a real time clock and a calendar on a tiny 1.8 TFT screen.

The hardest part was spending hours writing the emotion system, making sure everything was perfect, and then compiling it only to get hit with “101% of flash limit” it wouldn’t even upload. completely forgot there was a size limit while I was writing it so I just kept going and going. ended up spending more time fixing that than actually writing the feature in the first place. had to rip out entire libraries and replace them with raw socket connections and manual parsers just to get it under the limit without losing a single feature and it was a very painful session honestly.

But what I’m most proud of is how far it came from just a random idea. the firmware, the enclosure, the website, the domain, the devlogs all of it open source so anyone can build their own. this is my first ever open source project and it came out way better than I ever expected. genuinely wasn’t expecting it to get this far or turn out this good, it went way beyond what I had in mind when I started and I’m really proud of it. love how it turned out.

Everything is at meetluma.live if you want to check it out or build your own

  • 7 devlogs
  • 39h build
  • 5.00x multiplier
  • 177 Stardust
Video of Project → See source code →
Open comments for this post

13h 5m 20s logged

DEVLOG 008 - The Website & Wrapping Everything Up

Everything is finally done after a long grind.


Building the Website

Since this is my first ever open source project I really wanted the website to be really good. Not just functional but actually good. So I locked for hours and paid attention to every single detail.

Started with a blue colour scheme but it wasn’t sitting right with LUMA’s darker aesthetic so i decided to switch everything to a deeper darker palette and it immediately i knew it was perfect for her.

I went through a lot of iterations getting the look right, smooth scroll animations, hover effects, proper transitions throughout. Kept going back and refining until it felt clean and polished.

Bugs I ran into along the way:

  • Files weren’t downloading when the download button was clicked tracked down the issue and got it fixed

  • Some animations were firing at the wrong time on scroll it was all so cooked so i had to adjust the trigger points for all of them so everything feels smooth and clean

  • A few layout inconsistencies on smaller screens that needed sorting

  • Hover states on some cards weren’t behaving correctly so i hadda clean those up as well

  • Some placeholder sections needed proper content wired in before publishing so i had to collect all the files and add it to its proper spots

Each thing small on its own but there were a lot lot lot of them so they all adds up.


What’s on the Site?

Made sure everything anyone needs to build their own LUMA is actually there:

  • Full build guide with step by step instructions

  • Wiring diagram so its not just the chart from before, a proper schematic so anyone can see visually how it all connects before they start wiring

  • 3MF file set up in Bambu Lab with the right settings infill, wall thickness, all the print settings dialed in. One click download and it’s ready to print

  • CAD file included so anyone can open it up and customize the enclosure if they need to

  • Recommendations section for parts and anything else that helps with the build

  • Contact section so if anyone has questions or runs into issues building it they can reach out directly and the question will straight drop into my email ( i check my emails everyday)

Bought a proper domain for it as well with the money i had left. LUMA now has a real home on the internet and its not just a project link, an actual address anyone can search up and find.


Code on GitHub

Everything is published. Full firmware, wiring, build instructions all of it open source and ready for anyone who wants to build their own.


Honestly really proud of how far this went. Luma started as a random idea and turned into a complete project working firmware, a finished enclosure, a proper website, a domain, and a GitHub repo with everything documented. My first ever open source project and it came out wayyy better than I expected.

LUMA IS FINALLY DONE. Not just for me for anyone who wants their own little desk companion.

6
0
243
Open comments for this post
Reposted by @Eben-Siyabalapitiya

6h 10m 12s logged

DEVLOG 007 — Final Polish & Full Assembly

Mostly physical work this session but a lot
got done and LUMA is finally feeling complete.

─────────────────────────────────────────
New Enclosure & Sensor Placement
─────────────────────────────────────────

Reprinted the enclosure again with a new slot
for the second sensor. Moved things around so
the layout actually makes sense to use:

◆ Emotion sensor mounted on the top, easy
to reach, natural to tap or hold while
LUMA is sitting on your desk

◆ Mode switch moved to the back top center
so switching between face, clock, weather,
and calendar is just a tap on the back

Much more intuitive than before.

─────────────────────────────────────────
Legs
─────────────────────────────────────────

LUMA was looking too much like a plain box so
I designed and printed her some legs. Honestly
one of those small changes that made a big
difference, she looks way more like an actual
character now and it just suited her really well.

─────────────────────────────────────────
Reprints & Tolerance Fixes
─────────────────────────────────────────

Had to reprint most of the parts to get the
thickness right for the touch sensors to
actually work properly through the walls.
Also tightened up the sensor slot tolerances
that were coming out too loose. Took a few
iterations but everything fits clean now.

─────────────────────────────────────────
Full Rewire & Schematic
─────────────────────────────────────────

Rewired the whole thing properly from scratch.
Made a proper schematic diagram and followed
it this time so there are no guessing games
with the connections. Resoldered everything
cleanly so it’s solid for the final assembly
and not going anywhere.

─────────────────────────────────────────
Code & CAD Cleanup
─────────────────────────────────────────

Fixed up the remaining code bugs, cleaned
everything up and made sure it was all working
properly. Same with the CAD, went through it
and sorted all the small things that still
needed attention.

─────────────────────────────────────────
Final Print — Black
─────────────────────────────────────────

Printed everything in black for the final
assembly. Really suited LUMA. Looked way
better than the prototypes.

─────────────────────────────────────────
GitHub & Wrapping Up
─────────────────────────────────────────

Set up a proper GitHub repo, wrote everything
up, and finalized the project. LUMA is done.

Next goal is to build LUMA a website. Full build
guide, open source, everything anyone needs
to build their own.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10
1
988
Open comments for this post

6h 10m 12s logged

DEVLOG 007 — Final Polish & Full Assembly

Mostly physical work this session but a lot
got done and LUMA is finally feeling complete.

─────────────────────────────────────────
New Enclosure & Sensor Placement
─────────────────────────────────────────

Reprinted the enclosure again with a new slot
for the second sensor. Moved things around so
the layout actually makes sense to use:

◆ Emotion sensor mounted on the top, easy
to reach, natural to tap or hold while
LUMA is sitting on your desk

◆ Mode switch moved to the back top center
so switching between face, clock, weather,
and calendar is just a tap on the back

Much more intuitive than before.

─────────────────────────────────────────
Legs
─────────────────────────────────────────

LUMA was looking too much like a plain box so
I designed and printed her some legs. Honestly
one of those small changes that made a big
difference, she looks way more like an actual
character now and it just suited her really well.

─────────────────────────────────────────
Reprints & Tolerance Fixes
─────────────────────────────────────────

Had to reprint most of the parts to get the
thickness right for the touch sensors to
actually work properly through the walls.
Also tightened up the sensor slot tolerances
that were coming out too loose. Took a few
iterations but everything fits clean now.

─────────────────────────────────────────
Full Rewire & Schematic
─────────────────────────────────────────

Rewired the whole thing properly from scratch.
Made a proper schematic diagram and followed
it this time so there are no guessing games
with the connections. Resoldered everything
cleanly so it’s solid for the final assembly
and not going anywhere.

─────────────────────────────────────────
Code & CAD Cleanup
─────────────────────────────────────────

Fixed up the remaining code bugs, cleaned
everything up and made sure it was all working
properly. Same with the CAD, went through it
and sorted all the small things that still
needed attention.

─────────────────────────────────────────
Final Print — Black
─────────────────────────────────────────

Printed everything in black for the final
assembly. Really suited LUMA. Looked way
better than the prototypes.

─────────────────────────────────────────
GitHub & Wrapping Up
─────────────────────────────────────────

Set up a proper GitHub repo, wrote everything
up, and finalized the project. LUMA is done.

Next goal is to build LUMA a website. Full build
guide, open source, everything anyone needs
to build their own.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

10
1
988
Open comments for this post

5h 38m 12s logged

DEVLOG 005 - Second Touch Sensor & Emotion System

Added a second capacitive touch sensor on a new
GPIO pin dedicated entirely to emotions.

How It Works

Built a full gesture detection system on the new
sensor:

◆ Single tap → excited
◆ Hold for 800ms → cozy
◆ Rapid tap 3+ times → mad

Each emotion has 5 or 6 distinct face variants
that cycle using weighted random probabilities
so it never shows the same reaction twice in
a row.

◈ Mad - red angry eyes in different shapes:
wide glare, tiny squint, psycho stare,
disgusted droop

◈ Excited - big round happy eyes, bouncy
small eyes, wide open stare

◈ Cozy - half closed drowsy eyes, warm round
soft eyes, tiny sleepy eyes

Emotions auto expire after 6 seconds and return
to the default idle face automatically.

Spent a long time writing the code, fixing
errors, getting everything working and then
the compiled firmware came out at 101% of the
ESP32’s flash limit and wouldn’t upload.
Couldn’t just scrap it after all that work so
I started diagnosing what was eating the space.

The two biggest culprits:

◈ HTTPClient and ArduinoJson together were
pulling in around 60–80KB of overhead just
from the libraries alone

How I Fixed It

◆ Replaced HTTPClient and ArduinoJson with a
raw WiFiClient socket connection and three
tiny manual JSON parsers using strstr and
atof no library needed at all

◆ Replaced every cos and sin math call with
precomputed fixed point lookup tables stored
in PROGMEM completely removed the float
math library dependency

◆ Wrapped all string literals in F() to keep
them in flash instead of RAM

Got the binary down under the limit without
cutting a single feature. Everything still
works exactly the same, it just actually
fits on the board now.

Still needs some tuning though the emotion
faces need a bit more work to feel right and
there are a few things here and there that
need cleaning up. The structure and foundation
is solid but it’s not fully polished yet.
More to come on that in the next log.

0
0
39
Open comments for this post

1h 34m 2s logged

DEVLOG 004 - Fixes, Wiring Cleanup & Getting It Solid

Mostly a cleanup and bug fixing session today
before moving on to the next round of upgrades.

Screen Flip

Once the screen was mounted in the enclosure
everything was upside down. One line fix changed
setRotation from 1 to 3 and that was it. Done.

Weather Screen Bug

Tracked down an annoying bug where the weather
screen would show data the first time but come
back blank after switching away and returning.

The issue was a redraw flag that never reset on
screen re entry. Fixed it by resetting the flag
in both the screen router and the mode switch
handler so weather now fully redraws every time
you land on it.

Enclosure Reprint - Screen Pocket

Reprinted the base and added a small pocket to
the cutout because the screen wasn’t sitting
flush. The soldered pins on the front of the
screen were hitting the case and pushing it up
slightly. Added a slot for them to drop into
screen sits perfectly flush now.

Wiring Issues - Touch Sensor

One of the touch sensors was activating on its
own just a red light flashing like something
was constantly triggering it with nothing
touching it.

First thought was the code since I was in the
middle of cleaning everything up anyway, so I
spent a while going through it trying to figure
out what was wrong. Nothing. Code was fine.
Turned out to be a bad ground connection on the
sensor the whole time. Resoldered it properly
and it’s been stable since. Classic hardware problem disguised as a software problem.

Overall today was about getting everything solid
and clean before the next upgrade push. Wiring
is tidy, code is cleaned up, everything is
working as expected.

0
0
36
Open comments for this post

8h 46m 45s logged

DEVLOG 1 — Setting Up Vision Model Training & Project Structure

━━━━━━━━━━━━━━━━━━━━━━━
TRAINING

Found a grocery dataset on Roboflow with 80k+ images across 17 categories. Set up training on Google Colab using a free T4 GPU with YOLOv8n, 50 epochs, image size 640, batch 16, output saving straight to Google Drive. Left it running overnight.

Woke up to find it stopped at epoch 16. Colab hit the free GPU usage limit and killed the session mid run. Checked the weights folder in Drive and it looked empty at first, thought all progress was gone. Turns out Colab had been auto incrementing folder names
each restart so the actual checkpoints were in kart2/weights/ the whole time. Both last.pt and best.pt were there. Opened results.csv
and confirmed 15 full epochs completed with mAP50 around 0.87, precision and recall both near 0.99. Nothing lost.

Training is paused at epoch 15/50 waiting for GPU quota to reset. Resume plan is loading last.pt with resume=True so it picks up exactly where it left off.

━━━━━━━━━━━━━━━━━━━━━━━
BUILDING THE APP

While waiting on GPU access built out the full local pipeline.
detector.py -runs model.track() each frame using ByteTrack andreturns detections with track IDs

cart.py - handles a virtual tripwire line, items crossing down get added to the cart, crossing back up removes them, grace counter stops brief tracking losses from wiping items instantly

prices.py - reads prices.json at startup and calculates subtotal plus Ontario HST 13%

display.py - draws the tripwire line and bounding boxes onto the camera feed each frame

main.py - ties everything together, Tkinter dark themed panel showing the live cart and total, OpenCV camera window showing the annotated feed, both running together

━━━━━━━━━━━━━━━━━━━━━━

PROBLEMS

Several source files were empty on disk, had to repaste everything. Stale pycache was loading a broken cached version of detector.py. Ultralytics and opencv were not installed locally. prices.json was empty and throwing a JSON error on startup. Wrong camera index was hitting the built in webcam instead of the external one. Local
best.pt was a placeholder with nothing in it, temporarily swapped in yolov8n.pt to test the pipeline then pulled the real checkpoint
down from Drive.

━━━━━━━━━━━━━━━━━━━━━━━
WHERE THINGS ARE AT

Pipeline is fully working end to end. Camera feed shows the tripwire line and bounding boxes, items crossing get added to the cart panel with their price, subtotal and HST update live, total shows in green. Detection is decent for 15 epochs, right general categories but not perfectly precise yet which is expected. Once GPU access comes back finishing the remaining 35 epochs then swapping in the final best.pt.

0
0
15
Loading more…

Followers

Loading…