|
28678
|
Micro_OS V2 by @wilrakov | Stardance
|
wilrakov
|
0
|
4.92
|
0
|
[]
|
[{"post_id": 19463, "ts": "202 [{"post_id": 19463, "ts": "2026-06-30T19:54:05Z", "hours": 4.9239, "text": "First day of coding Today, I started this new project in C++ with PlatformIO to get more comfortable with it. For now, it’s not really an OS, but we already have a Renderer class to handle rendering in an optimized way. The goal The goal is to create a complete desktop OS for ESP32 and various screens. Using an ESP32 allows network access, which is important on a computer in 2026. I’d also like to run small video games on this OS, which I think would be quite an achievement. I’m not trying to replace Windows or Linux XD, I just want to code a small retro system and have fun with it. Rendering So, this is what I worked on today, and I added a layer to the LovyanGFX library to have something optimized from the start. When an object is displayed using the Renderer class, I save the intention to display a specific object with specific parameters in a list. Each object has a rectangle to detect collisions with other objects and therefore redraw the object or not. When Renderer::render() is called, I check the areas to be displayed and only display what is necessary, which avoids flickering. This method has several advantages, the main one being low RAM usage, which is crucial on a microcontroller like an ESP32. The supported graphics are: Solid and non-solid rectangles Solid and non-solid rectangles with rounded corners Lines Circles Text Bitmap images or images without scaling In my opinion, these are the essential elements for creating a good UI and complete video games (yes, really). In the videos, you can see the rendering of Mario (the NES version), even though there’s an issue with the colors, it’s definitely him. He’s present as a bitmap image in a C array. Touchscreen This is the second thing I implemented. The calibration isn’t perfect yet, but it’s already pretty good. The touchscreen and stylus will allow for easy navigation of the OS without needing other peripherals, although I do plan to add joystick support to control the future mouse pointer. What’s next? Well, I’m not entirely sure. I’m thinking of creating UI components now, with the goal of building a window manager later on. But before that, I’ll probably code the foundations of the module that will handle inputs, to ensure an instant transition between touch and joystick. Anyway, I’ll keep doing a lot of graphics work! Thanks so much for reading, wilrakov, btw"}]...
|
Title: Micro_OS V2 by @wilrakov | Stardance
Devlo Title: Micro_OS V2 by @wilrakov | Stardance
Devlogs:
First day of coding Today, I started this new project in C++ with PlatformIO to get more comfortable with it. For now, it’s not really an OS, but we already have a Renderer class to handle rendering in an optimized way. The goal The goal is to create a complete desktop OS for ESP32 and various screens. Using an ESP32 allows network access, which is important on a computer in 2026. I’d also like to run small video games on this OS, which I think would be quite an achievement. I’m not trying to replace Windows or Linux XD, I just want to code a small retro system and have fun with it. Rendering So, this is what I worked on today, and I added a layer to the LovyanGFX library to have something optimized from the start. When an object is displayed using the Renderer class, I save the intention to display a specific object with specific parameters in a list. Each object has a rectangle to detect collisions with other objects and therefore redraw the object or not. When Renderer::render() is called, I check the areas to be displayed and only display what is necessary, which avoids flickering. This method has several advantages, the main one being low RAM usage, which is crucial on a microcontroller like an ESP32. The supported graphics are: Solid and non-solid rectangles Solid and non-solid rectangles with rounded corners Lines Circles Text Bitmap images or images without scaling In my opinion, these are the essential elements for creating a good UI and complete video games (yes, really). In the videos, you can see the rendering of Mario (the NES version), even though there’s an issue with the colors, it’s definitely him. He’s present as a bitmap image in a C array. Touchscreen This is the second thing I implemented. The calibration isn’t perfect yet, but it’s already pretty good. The touchscreen and stylus will allow for easy navigation of the OS without needing other peripherals, although I do plan to add joystick support to control the future mouse pointer. What’s next? Well, I’m not entirely sure. I’m thinking of creating UI components now, with the goal of building a window manager later on. But before that, I’ll probably code the foundations of the module that will handle inputs, to ensure an instant transition between touch and joystick. Anyway, I’ll keep doing a lot of graphics work! Thanks so much for reading, wilrakov, btw...
|
1792914477.1857197
|
1793778477.1857197
|
|
49154
|
My own site! by @Sahilpreet | Stardance
|
Sahilpreet
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Sahilpreet | Stardance
|
1792914476.3461354
|
1793778476.3461354
|
|
54236
|
egypt monuments by @omar12 | Stardance
|
omar12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: egypt monuments by @omar12 | Stardance
|
1792914475.506379
|
1793778475.506379
|
|
54226
|
Hackpad by @SarthakVishwakarma | Stardance
|
SarthakVishwakarma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hackpad by @SarthakVishwakarma | Stardance
|
1792914474.662965
|
1793778474.662965
|
|
54224
|
PyTab by @Altruistic_Eagle | Stardance
|
Altruistic_Eagle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: PyTab by @Altruistic_Eagle | Stardance
|
1792914473.8327382
|
1793778473.8327382
|
|
54222
|
FTC Team Website by @Altruistic_Eagle | Stardance
|
Altruistic_Eagle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: FTC Team Website by @Altruistic_Eagle | Sta Title: FTC Team Website by @Altruistic_Eagle | Stardance...
|
1792914472.992676
|
1793778472.992676
|
|
54221
|
Nuclear Power Plant Simulator by @Altruistic_Eagle Nuclear Power Plant Simulator by @Altruistic_Eagle | Stardance...
|
Altruistic_Eagle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Nuclear Power Plant Simulator by @Altruisti Title: Nuclear Power Plant Simulator by @Altruistic_Eagle | Stardance...
|
1792914472.1562896
|
1793778472.1562896
|
|
8587
|
obrodotdev (My website!) by @obro1984 | Stardance
|
obro1984
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: obrodotdev (My website!) by @obro1984 | Sta Title: obrodotdev (My website!) by @obro1984 | Stardance...
|
1792914471.3191028
|
1793778471.3191028
|
|
29271
|
Halo by @rishithc | Stardance
|
rishithc
|
0
|
10.06
|
0
|
[]
|
[{"post_id": 24227, "ts": "202 [{"post_id": 24227, "ts": "2026-07-07T17:27:07Z", "hours": 4.4336, "text": "Today I went back and forth, since it is pretty late for me right now ill just give a quick overview. I went back on using sensors for hand movement as I felt that wasn’t practical. So I opted for a CV method. So i built this simple pinch tool today and designed a turret with two cameras in onshape. For cursor and key movement."}, {"post_id": 20915, "ts": "2026-07-02T17:10:42Z", "hours": 2.4617, "text": "Devlog #2: a hardcoded threshold was never gonna hold up yea so a fixed threshold on the emg envelope was never gonna hold up either. went back and actually read the myoware docs properly instead of guessing, specifically https://learn.sparkfun.com/tutorials/getting-started-with-the-myoware-20-muscle-sensor-ecosystem/myoware-20-muscle-sensor , and turns out the board already outputs raw, rectified, and envelope in hardware, so i didnt need to build any filtering myself like i was planning last time. moved the wire off raw and onto env instead, watched the serial plotter, and it was night and day, clean baseline, clean spike on a clench. set a threshold in like ten minutes and called it a win. came back after a break, restuck the electrodes in about the same spot, and the same threshold either pegged “flexed” the whole time or sat dead flat no matter how hard i clenched. also never wrote down where the gain trim pot was set the first time, so i cant even get back to the “clean” version on purpose right now, im just turning a knob and hoping. so, cool, a threshold that only survives as long as i never touch the sensor, my arm, or the pot again. turns out this isnt just a me problem either, apparently even coapt’s commercial emg prosthetics need frequent recalibration for the exact same reason, contact impedance just isnt stable session to session for anyone. so a fixed number was always gonna break, i just hadnt hit it yet. but yea, overall today i felt kinda dumb for thinking “clean signal on the plotter” meant “done,” and now im thinking the real fix is a calibration step that runs every time i put it on, flex hard for a sec, relax for a sec, threshold off whatever that session actually measures instead of a number i picked once and forgot about."}, {"post_id": 20133, "ts": "2026-07-01T17:49:42Z", "hours": 3.1664, "text": "Devlog #1: eyeballing raw emg was never gonna work yea so trying to read raw emg by eye and call it a gesture was not the move. started by digging out a myoware 2.0 i had left over from a old project, strapped the electrodes to my forearm and wired the raw output straight into an esp32 adc pin, no shield, no filtering, just wanted to see what a fist clench looked like on the serial plotter before doing anything smarter. flexed a few times expecting clean spikes i could just threshold. instead the raw trace was just noise on top of noise. every tiny arm movement gave a spike that looked identical to an actual clench, and the esp32’s adc added its own jitter on top of that. so, signal soup basically, couldnt tell a real flex from garbage. so i backed off and started looking at how people actually do this instead of freehanding it, found stuff like https://github.com/csce585-mlsystems/EMG-Based-Hand-Recognition which bandpass filters and extracts features before a classifier ever sees the signal, plus a bunch of stuff training on the ninapro dataset that everyone in this space seems to use. but yea, overall today i felt kind of dumb for expecting raw signal to just work, and now im thinking the real first step isnt gesture classification at all, its building the filtering/envelope pipeline properly before i touch a single label. UI code linked below"}]...
|
Title: Halo by @rishithc | Stardance
Devlogs:
Dev Title: Halo by @rishithc | Stardance
Devlogs:
Devlog #1: eyeballing raw emg was never gonna work yea so trying to read raw emg by eye and call it a gesture was not the move. started by digging out a myoware 2.0 i had left over from a old project, strapped the electrodes to my forearm and wired the raw output straight into an esp32 adc pin, no shield, no filtering, just wanted to see what a fist clench looked like on the serial plotter before doing anything smarter. flexed a few times expecting clean spikes i could just threshold. instead the raw trace was just noise on top of noise. every tiny arm movement gave a spike that looked identical to an actual clench, and the esp32’s adc added its own jitter on top of that. so, signal soup basically, couldnt tell a real flex from garbage. so i backed off and started looking at how people actually do this instead of freehanding it, found stuff like https://github.com/csce585-mlsystems/EMG-Based-Hand-Recognition which bandpass filters and extracts features before a classifier ever sees the signal, plus a bunch of stuff training on the ninapro dataset that everyone in this space seems to use. but yea, overall today i felt kind of dumb for expecting raw signal to just work, and now im thinking the real first step isnt gesture classification at all, its building the filtering/envelope pipeline properly before i touch a single label. UI code linked below
Devlog #2: a hardcoded threshold was never gonna hold up yea so a fixed threshold on the emg envelope was never gonna hold up either. went back and actually read the myoware docs properly instead of guessing, specifically https://learn.sparkfun.com/tutorials/getting-started-with-the-myoware-20-muscle-sensor-ecosystem/myoware-20-muscle-sensor , and turns out the board already outputs raw, rectified, and envelope in hardware, so i didnt need to build any filtering myself like i was planning last time. moved the wire off raw and onto env instead, watched the serial plotter, and it was night and day, clean baseline, clean spike on a clench. set a threshold in like ten minutes and called it a win. came back after a break, restuck the electrodes in about the same spot, and the same threshold either pegged “flexed” the whole time or sat dead flat no matter how hard i clenched. also never wrote down where the gain trim pot was set the first time, so i cant even get back to the “clean” version on purpose right now, im just turning a knob and hoping. so, cool, a threshold that only survives as long as i never touch the sensor, my arm, or the pot again. turns out this isnt just a me problem either, apparently even coapt’s commercial emg prosthetics need frequent recalibration for the exact same reason, contact impedance just isnt stable session to session for anyone. so a fixed number was always gonna break, i just hadnt hit it yet. but yea, overall today i felt kinda dumb for thinking “clean signal on the plotter” meant “done,” and now im thinking the real fix is a calibration step that runs every time i put it on, flex hard for a sec, relax for a sec, threshold off whatever that session actually measures instead of a number i picked once and forgot about.
Today I went back and forth, since it is pretty late for me right now ill just give a quick overview. I went back on using sensors for hand movement as I felt that wasn’t practical. So I opted for a CV method. So i built this simple pinch tool today and designed a turret with two cameras in onshape. For cursor and key movement....
|
1792914470.492637
|
1793778470.492637
|
|
74799
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914469.6491444
|
1793778469.6491444
|
|
74798
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914468.8244987
|
1793778468.8244987
|
|
74797
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914467.9712243
|
1793778467.9712243
|
|
74796
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914467.1305425
|
1793778467.1305425
|
|
74795
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914466.3005073
|
1793778466.3005073
|
|
74794
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914465.4588528
|
1793778465.4588528
|
|
74793
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914464.6078994
|
1793778464.6078994
|
|
74792
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914463.7646062
|
1793778463.7646062
|
|
74791
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914462.9266465
|
1793778462.9266465
|
|
74790
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914462.0658348
|
1793778462.0658348
|
|
74789
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914461.2335687
|
1793778461.2335687
|
|
74788
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914460.400268
|
1793778460.400268
|
|
74787
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914459.570087
|
1793778459.570087
|
|
74786
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914458.7401366
|
1793778458.7401366
|
|
74785
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914456.334081
|
1793778456.334081
|
|
74784
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914455.510225
|
1793778455.510225
|
|
74783
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914454.6664348
|
1793778454.6664348
|
|
74782
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914453.8207831
|
1793778453.8207831
|
|
74781
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914452.9702342
|
1793778452.9702342
|
|
74780
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792914452.1164854
|
1793778452.1164854
|
|
74779
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911305.0910652
|
1793775305.0910652
|
|
74778
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911304.2766619
|
1793775304.2766619
|
|
74777
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911303.4606745
|
1793775303.4606745
|
|
74776
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911302.617213
|
1793775302.617213
|
|
74775
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911301.7710578
|
1793775301.7710578
|
|
74774
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911300.9382548
|
1793775300.9382548
|
|
74773
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911300.122079
|
1793775300.122079
|
|
74772
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911299.2923927
|
1793775299.2923927
|
|
74771
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911298.4561799
|
1793775298.4561799
|
|
74770
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911297.6245644
|
1793775297.6245644
|
|
74769
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911296.7907515
|
1793775296.7907515
|
|
74768
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911295.9527414
|
1793775295.9527414
|
|
74767
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911295.132143
|
1793775295.132143
|
|
74766
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911294.3042793
|
1793775294.3042793
|
|
74765
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911293.4593103
|
1793775293.4593103
|
|
74764
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911292.6277435
|
1793775292.6277435
|
|
74763
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911289.842551
|
1793775289.842551
|
|
74762
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911289.0073826
|
1793775289.0073826
|
|
74761
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911288.167202
|
1793775288.167202
|
|
74760
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911287.3375793
|
1793775287.3375793
|
|
74759
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792911286.5030313
|
1793775286.5030313
|