Radiant
An LED ring that goes in your temple, inspired by the Androids from Detroit: Become Human!
Total Time Spent: 43 hours
June 12
This is my second project and my first custom project!
Today i started to brainstorm. And i wanted to make something simple but super cool.
After sometime of brainstorming ideas, I got with making a simple but super cool project, with my new experience in fusion and kicad, I got to the idea of making the LED ring that the android from DBH have on their temple, they serve the purpose of showing processing operations, damage caused, and other things.
In the robotics events (FRC) I went to, I saw a few teams that controlled the robot have some kind of wearable tech, and it ALWAYS looked cool asf.
So with that in mind i wanted to change the purpose of the led ring, when competing with other robots, scouting data from other teams robots, or just showing that you're chilling. I wanted to show a different color + be configurable with those sk6812 mini-e leds that i didn't used from hackpad!
I didn't want to worry about cables and all of that, so that's the reason i'll be shooting for making it wireless, this is a HUGE jump from me, let's hope it works lol.
After researching and getting the help of some concepts with chatgpt and deepseek (l learned about ble tech, types of esp32, mcu, the differences between micropython and circuitpython), i went with this
Seeed Studio XIAO ESP32-C3: For the micro controller
So, bluetooth is out the way, because it'll require two different Xiaos, and that would cost more, so, i'll just stick with making it with wires
The 7 SK6812 MINI-E LEDS i didn't used from the Hackpad approved parts, that will save more money!
Also the rotary encoder from Hackpad
Time spent: 2 hours
June 13
Started to try to make the shape of the pcb and placing out all the components.
I already had the footprint of the sk6812 led, rotary encoder, what's yet to be determined is the button.
I wanna make 3d printed buttons that go over the buttons so it looks more professional, but first i need to find which.
Im leaning over the push buttons with the 6x6x12mm, so i can fit the 3d part and make it stick to the button, also maybe a display to select color and animation of led, plus with a rotary encoder, animation speed
The outer circle is 40mm in diameter and the inner is 20mm
I put in an array of circular thingy tool form kicad to place it right.
Traced the components and added the buttons in a matrix of 3x3, and tomorrow adding the display, maybe a 128x64 just to see how it would turn out!
Here you can see the buttons and the rotary encoder.
So i know there are certain pcb that come with modules, but are separated by a thin line of pcb board, so you can easily break them, they are called breakable pcb module, or mouse bites, well since i'll be essentially making two pcbs, this is perfect for that!
Don't want to say this took a lot of time but this took a lot of time TT
I'll still need to figure out how to do that, i think i almost got it.
I also wanted to make a 3d model of the control for the call with Scotty from Strange Parts! It helped me a lot to visualize it further
I present you the first iteration of the AuraCTRL case
It will slide but have enough grip to keep it in place, it will be around the wrist, i still need to learn about maybe how to make it adjustable so everyone can use it, maybe take inspiration from the pip boy project!
Time Spent: 8 hours
June 14
Been researching what cables are common for pcb, and learned about AWG, so for simple connections i'll need long 22 AWG cables, luckily a friend knows a store called Electrรณnica Para Estudiantes
and they sell 3 meters of it for half a dollar!
what the helly
Added the display, with 3d model from grabcad and footprint
So with the display now on the pcb, i need to change the size of it And after some time, i placed the parts and build the pcb outline, made the first draft of the v notch (i think its called like that?) Rewired the neopixels, so what's left is tracing the control module!
Here it looks as of now, it looks like a phone lol
Time Spent: 3.5 hours
June 15
Forgot to journal this day lol
I repositioned the neopixels module board, and had to make some vias so when soldering i put the cables in it so i connect them easily
Time Spent: 1 hour
June 16
I wanted to start making the first draft of the code, i knew i wanted to use micropython, and since the schematic looks the same as the macropad (i just realized this sorry T-T), i figured i'd research on how to make a keypad matrix on micropython.
Plus how to setup a my display of 128x36, and got the idea of making an interface, going through it with the rotary encoder like an omnitrix lol
So the code looks like this now, im getting used to the logic of this so yeah!
import board
import busio
import ssd1306
import neopixel
from machine import Pin, I2C
from keypad import Keypad
from time import sleep
i2c = I2C(sda=Pin(6), scl=Pin(7))
display = ssd1306.SSD1306_I2C(128,64, i2c)
leds = Pin(2)
led_numbers = 7
row_pins = [Pin(10), Pin(9), Pin(8)]
column_pins = [Pin(3),Pin(4),Pin(5)]
keys = [
['1', '2', '3',],
['4', '5', '6',],
['7', '8', '9'],
]
keypad = Keypad(row_pins, column_pins, keys)
while True:
key_pressed = keypad.read_keypad()
if key_pressed:
print("Key pressed: ", key_pressed)
display.text("Welcome to RadiantOS")
sleep(0.1)
Also Summer of Making launched, super perfect to start redoing the pcb design, adding some silkscreen art omg
Time Spent: 1.5 hours
June 17
I just opted to round the corners of the pcb and finally started to add some silkscreen art! I downloaded the svg file from the highway website
I'll maybe add more art, but it's a maybe Right now i'll export the pcb STEP file to fusion to figure out the shape of the case.
I began importing it, and making some sketches, i needed to recreate the pcbs layout as it was no letting me use the Sketch Dimension
And i found out my pcbs outline is not what i was looking for, which was a sort of control that handled the leds colour which would be strapped in my wrist.
I realized that i could easily make it look like a watch, so i used (Excalidraw)[https://excalidraw.com/] to sketch something up, i actually like it, it less dense, and easily accessible
I think i'll base the design on how devices are built in Detroit: Become human maybe even add some leds to the watch also!
And i'll have to look on how to make custom 3d printed buttons that fit on the push buttons ๐
Time Spent: 4 hours
June 18
So for this day i redesigned the pcb routing, tracing, shape and the esp32 orientation, so it is now underneath the oled display, it sure looks a lot more polished!
And then i imported the model to fusion and started to make the initial design of the case, i'm leaning on making it retro futuristic, but keeping it basic.
Time Spent: 4 hours
June 20
Spent some time looking at like retro tech designs, although i didn't wanna get too inmmersed, so i just got a little inspired by what the old playstations looked like and their controllers
It took it's time but i like it a lot, its my second time using fusion so im quite proud lol.
What's next is I wanna do a custom knurled knob for the rotary encoder, and do a cover for the display, and a snap fit typa thing
Time Spent: 3 hours
June 22
I did a knurled knob for the encoder to make it have a texture, also because it looks clean bro what the helly
I initially worked on making it threaded but after trying and watching a few tutorials a i just didn't quite have it, so i went to just having it be tight fit, or something like that
Also added some sort of supports for the pcb to be in place, and the pink thingy is the battery, and it didn't fit, so i had to scale the bottom case so the battery fits
I want to try making the cases snap fit, but i'll ask in the slack for help lol
Time Spent: 3 hours
June 23
Since i am a beginner in the electronics worlds, i used ai for feedback and suggestions.
One of those were that i should power the leds from 5v, but i used a 3.7 Li-Po battery, it recommended a dc boost converter (MT3608).
Also since the esp-32 outputs 3.3v logic, and the LEDs require 5v logic, i used a logic level shifter to step up the signal from 3.3 to 5v.
So i'll have to make the cases for those + the ring case that diffuses the led + the snap fit feature for the pcbs case.
I added a switch to power ON/OFF the device, [i forgot i had to do that if i want to solder the battery], and the switch that does not go on the pcb.
Time Spent: 2 hours
June 24
It was SO DIFFICULT BRO WHAT THE HELLY
OKay, so after spending like 1.5 hours watching tutorials and trying the snap fit thingy (that tbh, looks gross)
I came across a video from Makers Muse showing how to make 3d printable hinges with different techniques.
And i reallyyy liked the simplicity of this one
Picture from the video/technique
And i wanted to adapt that, to be snap fit-able or that type of thing, after some discoveries of useful functions from fusion (midplane, sphere, offsetting the sketch plane) i came up with this
It looks super great and it was time for making this but for the cases of the level shifter module and MT3608. I had to make holes for the wire to go through.
Level Shifter Module:
Holes for the wire
IT FITS!
It has it's little supports so it doesn't move as much
And the snap fit feature! Maybe it's tiny, but i could hot glue this so it's okay if that breaks
MT3608:
Holes for the wire, yeah
the same, it fits and has the snap fit and all
and for the pcb it has it's own snap fit
And that's 4.5 hours of work, super goated, also im finished with modelling FINALLY. Although i want to add some text on the cases
So what's next is making the programm: RadiantOS
Sounds cool
Time Spent: 4.5 hours
June 25
Focused on writing the firmware, made a lot of progress! I looked into micropython docs about neopixels and adapted it into my setup This code makes all the leds go white ```
Sourced from the micropython docs:
Will tinker with this when leds arrive
pin = Pin(2, Pin.OUT) # set GPIO0 to output to drive NeoPixels np = NeoPixel(pin, 7) # create NeoPixel driver on GPIO0 for 8 pixels np[0] = (255, 255, 255) # set the first pixel to white np.write() # write data to all pixels r, g, b = np[0] # get first pixel colour ``` I then discovered Wokwi, an online esp32 simulator, and searched for examples for neopixels and found this 2:
Esp32 with oled display Esp32 with a neopixels ring! which is just what i needed for visualization
I used this to visualize how it would all work out, and i'm to see it will work!
I then proceeded to learn on how to make menus and submenus, with these if statements, it's my first time using this so i got the ai to help me fully understand how i could use these, also learned about f strings and the len() function
Current code makes it so when Confirm is pressed it will enter a certain submenu or go back to the main menu, in the case of the leds submenu, when the Blue option is Confirmed
it will then go change the leds color to fully blue, the Neopixels can be animated for what i encountered, like this:
Controlling Neopixels
But for now look at the code as of now, with the help of ai examples and explanations i was able to make this, Leds animations and color setups are still on progress because i want to test this IRL! And planning on printing the case at Undercity
```
def drawselection():
display.fill(0)
for i, item in enumerate(currentmenu):
if i == selected:
prefix = >
else:
prefix = "
display.text(f
{prefix} {item}", 0, i * 10)
display.show()
while True: drawselection() key = keypad.readkeypad()
if key == "Down":
selected = (selected + 1) % len(current_menu)
elif key == "Up":
selected = (selected - 1) % len(current_menu)
elif key == "Sleep Mode Activated":
machine.deepsleep(1000000)
elif key == "Confirm":
selected_item = current_menu[selected]
# rn LEDs options don't exactly do anything much to the leds, but will add it once the hackpad arrive
if selected_item == "LEDs":
current_menu = led_submenu
selected = 0
in_submenu = True
if in_submenu and selected_item == "Back":
current_menu = main_menu
selected = 0
in_submenu = False
else:
if selected_item == "Blue":
np[0] = (0,0,255)
np.write()
display.fill(0)
display.text("LED: Blue", 0,0)
display.show()
sleep(2)
#then ill add for red, yellow, and animations
# And ill dim the leds by reducing the rgb values
elif selected_item == "Animation":
current_menu = anim_submenu
selected = 0
in_submenu = True
if selected_item == "Back":
current_menu = main_menu
elif selected_item == "Breathing":
display.fill(0)
display.text(f"Selected: {selected_item}", 0, 0)
display.show()
sleep(2)
current_menu = anim_submenu
selected = 0
in_submenu = True
elif selected_item == "Processing":
display.fill(0)
display.text(f"Selected: {selected_item}", 0, 0)
display.show()
sleep(2)
current_menu = anim_submenu
selected = 0
in_submenu = True
else:
selected_item == "Malfunctioning"
display.fill(0)
display.text(f"Selected: {selected_item}", 0, 0)
display.show()
sleep(2)
current_menu = anim_submenu
selected = 0
in_submenu = True
elif selected_item == "Display":
current_menu = display_submenu
selected = 0
in_submenu = True
if selected_item == "Back":
current_menu = main_menu
else:
selected_item == "Brightness"
# Till i have the neopixels + add the rotary encoder funcionatlity to this
else:
if in_submenu == True:
if selected_item == "Back":
current_menu == main_menu
selected = 0
in_submenu = False
else :
display.fill(0)
display.text(f"Selected: {selected_item}", 0, 0)
display.show()
sleep(2)
current_menu = main_menu
selected = 0
in_submenu = False
Time Spent: 2.5 hours
# June 27
Completely forgot about one of the most important thing, the case for the LED ring!
While i was doing some errands, i began thinking how i could diffuse the light of the leds so it isn't as bright as it is
Found this video called [3D Printable Diffuser Experiments](https://www.youtube.com/watch?v=QKLVFMyfSbw&t=183s) by chipnotic and well
normal PLA filament is opaque so i went with .5mm of thickness so it diffuses the most with a short distance, it will be white PLA filament
This is how it's turning out

It will also have the snap fit feature on the top left, i made it so it doesn't break the led diffuser, i just hope it does let light through ๐ฅ
Also on the bottom right, you can see the led ring pcb will have space for the LEDs and a small pretursion to make it not move.

I'll also make the holes for the cables to go through so let's do that

It is done, i made it wide enough to fit the soldered wires through there
Time Spent: 2 hours