Final Project (in progress)

Week 14 update 🔗

less then a week left! I’m a few days behind where I wanted to be, but I finally got my “attiny1624 acting as a ADC for 4 of the joysticks”. (it’s slow…. because the last bit of code i was able to program to it set the delay to 500ms…)

(I’m using the totally wrong fingers, which I normally don’t do when I’m fidgeting with it… I think I was just nervous this would be the only video I get of it…)

This was made a lot harder because programming attiny’s using megatinycore+universal programmer is tricky right now from M2 chips on Mac. What (mostly) works is…

  • setting up a Virtual Machine running Ubuntu Server (grab the arm one, the other one will fail to boot and not tell you why)..
  • make life easier with your retina display and set it up so you can ssh into the virtual machine.
  • use arduino to export the file as binary (I’m not sure which all are important, but I chose attiny3224).
  • go find the hex file (open sketch directory, or look at what file it outputs. tip, you can go into settings and tell it to be verbose during compile and verbose to find t)h
  • scp -p 2222 localhost to get it onto your virtualmachine, because i have some slight doubts that sharing folders actually works on M2 chips and this is fine anyway (you’d have to move the hex file anyway…)
  • you’ll also need to set up USB on the virtualmachine, so that it forwards your device there.
  • figure out what that device is called, it’s probably something like “/tty/ttyACM0”.
  • in the virtual machine (i.e. ssh’d into it) “./venv/bin/pymcuprog write -t uart -u /dev/ttyACM0 -d attiny1624 -f file.ino.hex –clk 9600 –erase -v debug” is the command i used to get it on the device

i don’t know if i had to do this or if megatinycore does this okay, but you can also write fuses with “./venv/bin/pymcuprog write -m fuses -o 0 -l 0x00 -t uart -u /dev/ttyACM0 -d attiny1624 –clk 9600”.

phew, that’s a lot, but the speed boost i get from working on one machine has been worth it: worked through and got ADC to send the data through serial to another board.

Now here’s the problem: I start getting errors again after programming a few times. I somewhat suspect it’s similar to getting errors when I have too much serial writing on my xiao chips, where I need to hold down the boot button (because the board is still happily sending serial output).

I keep forgetting my USB-A to USB-C so I can use Char’s computer, to see if burning the bootloader again would fix things.

Also! I started playing with step response things. I wrote the code to time how long it took. I realize I probably built the sensor wrong: both sides are covered in epoxy, which is probably insulating it enough so I’m not forming any electric field? I’ll try it again..

I also picked up some TRRS 3.5mm cables (e.g. with 4 wires, usually meant for headphones with microphones, so they give you ground, left, right, and microphone). If I do make the second hand, I’m thinking I could use that to connect them together.

Absolute bare minimum

  • video
  • website
  • answer the questions, get the costs…
  • design the home board + “cover”

Probably going to do it before designing the “cover” (e.g. today)

  • The boards keep falling off, and it’s hard to find screws. (maybe) redo the whole thing with M3 holes? and throughhole screw terminals?
    • at the very least, probably good to redo the 3-finger board, since the dupont female connectors got filled with epoxy and I had to solder on more wires.
  • update the “home” board:
    • to have a second I2C or serial or something so I can talk to the other hand (that also means I could make the second hand just a passthrough, maybe with another attiny in place of the xiao?)
    • try out IMU (at least have a slot for it!). This is pretty luxurious at $15, but will definitely make this a very fun controller for live performances.
  • maybe add a tiny little board for the thumb region, 2x analog, click, and maybe 2-3 buttons… I think that’ll be more modular..

(wondering about switchin gto a 3226. that would probably let me handle the entire left hand with one chip.. (~14 gpio pins, 10 for joysticks, 4 for clicks.. hmm but maybe i’d want to make it extensible.. so maybe use a few of those pins for getting spi or something from another device? or wait, maybe just make it possible to plug in a xiao. ))

Here’s what’s left:

Wednesday (electronics-focused, in the lab) 🔗

  • Main goal: get the right hand end-to-end working with a correct “home” board, swap out any PCBs with new designs that I need to.

  • update “corrected adc” board using Intel laptop or Char’s laptop, and see if I can program it with the code that… runs more frequently (also should i wait for an initial message before sending data? should i wait for a message before sending data each time?)

    • update the “home” board design (add IMU and second way to do serial/i2c, find a xiao that works.)
  • create a new set of boards with the other joysticks. I think I’ll use them for the right hand, and then desolder the others to make the left hand if I have time (in a few days). I already have the boards designed here..

    • M3
    • screw terminals
  • test new version of vinyl cut capacitive touch (ideally for left hand)

Thursday (fabrication-focused, at home until ~recitation) 🔗

  • Main goal: iterate on the right hand base again in its (approximate) final form. plus prep for molding+casting (maybe a stand for the controllers?)
  • Stretch: produce PCBs for left hand
  • make sure that the migrated designs still work (I redid the designs again to make it easier to do the left+right hand, but I haven’t physically printed it yet.)
  • I’ll know if I was able to create the M3 boards, so can update the design accordingly.

Friday (lab in afternoon?) 🔗

  • Main goal: mvp application (learn keys? or viz if i only made one hand) + first pass on website, anything else from building… deadline for second hand

Saturday 🔗

  • (other things, day off)

Sunday 🔗

  • Main goal: website for MVP, video

Monday 🔗

  • prepare what i’ll show

Tuesday (open house!) 🔗

Week 13 update 🔗

okay a lot of things!

I got a more-or-less final form for the body.

(the universal programmer is in there just to make sure I can fit the “home” board that I hadn’t made yet.)

I also am still bothered by the pinky, so I’m starting to explore capacative touch. Also because I can’t resist patterns of copper in clear epoxy..

I haven’t tried hooking it up yet.. Some things I am already thinking of is that it is cold out, and gloves work on joysticks but not on capacative touch.. (and while some gloves have stuff in the finger and thumb, this is about the pinky finger.)

here’s what’s left

basics (to finish one hand):

  • make sure wires all fit
  • program the attiny (need to find a windows machine)
  • actually get input from it…

full keyboard:

  • need to add second I2C or something to the home board
  • maybe build a left hand so i can start testing the keyboard idea?

more things

  • test out capacative touch alternative for the pinky finger and fingers plate.

document :D

some other work 🔗

been meaning to drop in the twiddler

there are also a lot from Chorded_keyboard.

but i don’t have to be chorded, and i’m happier with two hands if it’s easier to learn.

Week 12 update 🔗

phew, I’ve been doing a lot of work here. I’m trying to see if I can get a first version all hooked together this week.

I was about to pivot from joysticks because I was afraid they’d be too hard to push, but then I printed keyboard keycaps and put it on the joystick, and instantly liked it more. I think it’s because of extending the lever makes them easier to push. I’m a little worried about spacing, but that’s what i’ll find out this week.

The cheap hall sensor joysticks just started smoking when I put them in the same circuit as the potentiometer ones. I’m a little confused about this, because it’s marked as a drop-in replacement in ps5 controllers (and maybe I wired something wrong). In any case, I definitely get different kinds of readings from the ADC, and I’m thinking I’ll try to stick with the 10k potentiometer joysticks.

I finally got Rust to work on a physical device! I’m not getting the weird error I was getting before. It does seem really nice and comfy to program in. But one thing was that the ADC calibration seemed a little off: it would only go from 2000s to 4000s. There’s a ticket about it, but I couldn’t quite sort it out. And 2000s to 4000s is fine with me.. when i get to the analysis stage, the model will calibrate it anyway…

The next challenge is dealing with 10+ analog inputs (2x per joystick). Most boards don’t have that many. The ATTiny does though. I’m trying out the (1614?) because I can fit 4 fingers on it, plus pins needed for I2C and UPDI. I’m thinking I can put the thumb on the main board.

Oh, here’s some documentation of the cad progress.

I’ve been modeling around the 3d scan, and printing out test runs. I’ve used this to figure out how the joysticks would need to be placed.

And then I’ve been trying to position the joysticks in. This helped me realize that I needed to build one board with teh three joysticks, because 3 separate boards would be too far away.

My goal this week is to try to build a very first version, end-to-end. I need to get the ADC thing working, design a thumb board (or just print the toggle if i want to skip buttons to start with), and then figure out how to mount it in the 3d.

midterm review 🔗

12/17 is the project presentation. Today it is 11/14, so I have 4.5 weeks to build this!

Week 1 (by 11/19):

  • CAD the first draft of the body
  • fabricate a first draft of the body (how much room for toggles?)
  • explore flexures for toggles

Week 2 (by 11/26):

  • build the wrist band.
  • After networking class, try to network the (soon-to-be) hand to the wrist to the computer.
  • Keep iterating on toggles (membranes?).

Week 3 [thanksgiving] (by 12/3):

  • Either have toggles, or fall back on the mass-produced toggles.
  • Build the first controller.
  • Wire everything together

Week 4 (by 12/10):

  • code a mvp (get data onto computer, and use it in livecoding)!
  • build the second controller if there’s time

Week 5 (by 12/17):

  • Testing and improvements.
  • If already have a second controller, rpgoram the accelerometer and encoder for livecoding.

Build V1 of one hand

  • CAD the body
    • DONE molded clay and 3d scanned it.
    • TODO I want to turn that into a smoother shape and 3d print it to see if it feels as good as the clay.
    • TODO Figure out how to carve out area for the toggles/buttons, and electronics.
  • Design a MVP for the wristband
  • Develop V1 of toggles (is hall even viable?)
    • DONE explore 3d printed ball-and-socket
    • TODO make a hall sensor PCB board
    • TODO 3d print flexures (tabs)
    • TODO try “membrane”
  • Develop V1 of the full system (does it work for typing?)
    • TODO code up calibrating software
    • TODO do sensors interfer too much with each other?

Nice to haves:

  • second hand
  • battery
  • wireless

Log 🔗

(This page moves back in time as it goes down!)

As of week 10 🔗

Here’s a doodle

I’ve molded it in clay and then 3d scanned it, so now I could make a prototype to sort out the form factor.

It was interesting to try to adapt the shape to my hand because my hand would try to adapt to the shape. I had to try to fight that, and adjust it until it was comfortable.

Ergonomics 🔗

  • What is the palm shape
  • how much should my fingers bend to reach the toggles
  • how should the thumb area be laid out
  • how to attach it to my hand (lingdong uses elastic festival bracelets!)
  • weight distribution

buttons 🔗

  • can i get toggles to work?

As of week 9 🔗

So here’s the idea:

  • it would be like the switch controller (or I guess VR handsets) where you hold one in each hand. That’s sweet, because you can position your arms and wrists at whatever angle makes sense.
  • I don’t mind learning a few new keys, but I think for qwerty I’d like to be able to draw on my muscle memory.
  • ideally you could quickly move it out of the way of your thumb and forefinger, in case you need to switch back to the trackpad or do something in the world.
  • it would be ergonomic to my hand, so I can shape some clay and 3d scan it. (I found a Youtube video where they used colorful playdough and iPhone 3d scanning.)
  • I’m thinking if the finger-controls could be mostly 3d printed, so I could replace them and adjust them.
  • I might throw a few more sensors in it that I could use it for livecoding.

I thought about whether to source ~10 joysticks or to build them.

I had one idea of trying to build cheap PLA joysticks that I could insert a magnet into (probably by pausing the print) and use the hall effect sensor. The hall effect sensors would be more permenantly installed, but the joysticks could be attached and removed as I needed to iterate.

So I started to experiment with 3d printing ball-and-socket joints, just to learn a little more. I saw you could 3dprint stability springs, so I designed a ball-in-socket with stability spring.

After adjusting the spacing between the ball and socket, it did start to move, though between the springs and the roughness, it feels like they’re full of fingernail clippings. Maybe it would work, and maybe a Resin printer would give a smoother feel (though I’d love for it to work with PLA).

I also wonder if I could build a different mechanism

As of week 8 🔗

Well, input electronics week got me thinking about pivoting pretty dramatically. I was on a bus to NYC, and positioning my hands on the keyboard and trackpad was not ergonomic. I wondered if, given I could make almost anything, if I could make an improved keyboard.

As of week 7 🔗

This was a week I’ve been looking forward to, because I was thinking of casting a bunch of lenses/things for it. But I realize using a lot of plastic (or even acrylic) matches some of my safety/environmental ideas. I’ve been wondering if bioplastic could be interesting, but creating an entire surface in this might be tricky.

On the other hand, i did like the shading of the tiles, and maybe I could switch things up: rails holding lights a few inches off the surface that face the piece. If I put tiles down, it would make for an interesting effect with colors.

It also could help out with the idea of attaching the orbs, though i’m still working out how that would work (maybe they could just latch on to the rails?). The rails are also interesting because maybe you coudl tap the orbs on the bottom of the rails to change the action.

Aside from that, I redid my board from week 6, and it is more likely to function at this point. I’ll actually test out the RFID soon, which will be important to figure out where to put the tags.

As of week 6 🔗

So to add a diagram, here’s a schematic of the set up.

I guess another interesting part is that it’s a bit of a fractal: I want to put a screen on one of the orbs that shows a more detailed view of what that section of the sculpture is showing (and phones+NFC is another way to access that view.)

Printed the dev board designed last week, so hopefully I’ll be able to start testing out the RFID readers.

I also saw that someone I know has been making hexagonal LED walls, with some interesting diffusion.

As of week 5 🔗

No major updates here! The board I laid out for w5 assignment should make it much easier to test out the RFID boards (and hoping I can get my hand on a ESP32 or two.)

I’ve been keeping my eye out for lenses: most lamps have something going on in plastic. But it seems like molding clear plastic is tricky. But alsoo, I don’t really want clear plastic, I want some sort of diffuser. Molding and casting is coming up in two weeks, though I’m tempted to start setting up some parameterized 3D models for the textures.

As of week 4 🔗

Phew, so last week was a lot of work on the final project with the implementation of an embedded Rust version of a expresion language.

I didn’t work directly on it. I am kind of going back and forth about whether to go back to the 3d sculpture idea (but it’ll be a lot of work to create all of the sides, and I might in turn lose some resolution I’d like to have. Not to mention the RFID tricks sound fun but would be hard to manage.)

Other than that, my only other update is that I’ve received the RFID tags and some boards to play with, and I accidentally ordered 6 RFID instead of 3. So that might be fun. And my RFID stickers don’t seem to work with NFC, so I might need to order separate stickers if I want to do both.

As of week 3 🔗

(This was originally on w3)

My updated plan is an LED-backed surface. The LEDs will adjust brightness (maybe color) according to a programmable interface (probably a website, but also probably live-coded?? another dream was a physical controller, but that’s low on the priority list). But that’s not all! On this surface, there will be RFID chips. I’ll also build orbs. The orbs might have denser LEDs or motors or sound or thermal printers or… When the orbs are placed at different locations, they’ll join the pattern with their custom contributions that also depend on their locations.

(graphic created using a browser version of weird live code framework I use)

The circles are where the RFID placements are, but are otherwise just for show: I’m also thinking of having denser LEDs (e.g. 3 per circle), and having an assortment of different diffusers: some could be a full circle, some could have separate areas for each LED, and others could be holes in wood. And some wilder ideas, like some diffusers could have half of them covered by polarized plastic, and an orb could move another polarized film in front of them.

This is interesting to me because it goes along with my live coding work (the aforementioned live code framework) but with a completely different interface. I can start with something for this class, but I could keep tweaking the code. I also like the (reasonable) challenge of embedded Rust, since I work a lot in regular Rust and am maybe finally starting to understand 40% of what people are talking about in forums. The physical project means I can try out a few things I’ve never done before (molding fun LED diffusers? Using a CNC machine to make a cool frame?).

After briefly chatting with Quinten during office hours, my current thought is that each orb will contain an ESP32 chip to chat with the home computer, an RFID reader to register its location, a battery, and then whatever special thing the orb has. (I originally wanted to have an excuse to use ATTiny, but because I want to wirelessly update instructions, I probably need ESP32s).

Another thing I’m not sure about is synchronizing clocks. I don’t know how sensitive the project will be to it. I imagine I want them mostly synchronized, but since the objects will be different sizes and in different places, will I be able to tell something is off if they’re running half a second behind?

I’ve never worked with RFID/NFC before, but I’ve seen the little metal spirals that come in books I’ve bought. So the metal spirals are pretty inexpensive relative to the price of a book. It’s probably an RFID chip, and that’s where I could store information about what position the object is resting. Then there are readers (which sound like they can also write). It looks like RFID readers are significantly cheaper than NFC readers, and will work for my purposes. Since that might not work at all (distances, etc), I snagged a $10 set of 4 RFID readers and a $15 pack of supposed RFID+NFC stickers off of a (retail website) so I could do some proof of concept testing in the next couple weeks.

Also, Char showed me magical dice that have NFC chips in them, and you can use your phone to open a website that shows which side of the die you tapped(!). That makes me wonder if the RFID indeed also works as NFC if tapping a part of the installation could open up a glitch.io page that’s also synchronized to the main computer, so your screen joins the installation. (and maybe something can happen when you walk away, or if you take an orb away from it…)

Early thoughts 🔗

I have some early thoughts in w1-cad.

You've found my documentation of the Fall 2024 class for how to make (almost) anything at MIT. At the time of writing, I am a first year MAS student (MIT Media Lab) in the Future Sketches lab. When I'm not making almost anything, I'm making specific other things, like making cool-looking things with code, which I sometimes pen plot or live code.