This Project Is In This List

This project is submitted for

Description

A two part controller system that will standardize connectors for digital and analog devices so that based on controller state being passed to the device can simply just be understood. I'll be building out educational material and parts in such a way that anyone can can follow along and create truly amazing interfaces without having to learn code. Accessibility is key here!

This is where all can view updates throughout the next 4 months. starting today 3/1/2017

Details

Testing log details from this space. I no longer see log title so I think this might be the incorect place to place text... TESTCASE!!!!!

~Metal

Project Logs

The last day of the residency I got V1.0 to work as a native joystick on the computer. I tested it with two different game demos in Unity, one for racing and the other as the Tank demo. Both were different sockets for the Control-Or-Sense board and worked exactly as expected.

The curious things to note are the fact that i had to deviate from the Teensy schematic and remove the resistors in line with the usb data +/- pins. to get it to connect and flash. And on the phone it's not understood as a joystick. making part of my build a bit difficult to test. Could very easily be due to the usb pin deviation. Also I now have a several things to change from V1 to V2 based on seeing this in action, and having gained some new experience since the residency. Also some people said while testing that the connectors are a bit tough to take in and out. I'll be using the other connectors on my next dock board while still looking into others as well.

Not being entirely happy with the through hole components other than being quick to build on the board and source locally, I have devoted a month to practicing smd soldering and just this last week i had an amazon delivery of solder paste and an electric skillet... some of you might know where i'm going with this, but for anyone not sure yet, follow this link. But the quick and dirty is i found a link on hackaday for re-flowing boards using a skillet. It was really easy actually but definitely an observant task. And even though I have not yet ordered any solder mask for this, with a pipette attached to the solder paste tube, and some tweezers i was able to prep, place, and bake functioning boards for another project. 4 fully functional boards for a client project actually.

What this means for me is that i can now with confidence do a full overhaul of the board. With the KiCad practice as well I'm quite excited to dive into v2.

The other big update is that I now have the lighting, microphones, and daily help filming for the education videos that have always been the background goal of this as well. Currently 1 week of filming has yielded short videos of Resistors, Basic Leds, Mission Statement, and a couple others. Next to record are Buttons, Potentiometers, and Addressable Leds. I'm now being shown tips in Final Cut Pro as well as Premiere Pro while I record B-roll for the Resistor and Led Basics videos. So expect those videos within the next week!

So one of the features I absolutely have to have is what's called a card edge connector. Inspired heavily by the Nintendo cartridges of old. My first system was Atari with the only game of ET.... so we don't count that. Either way it's a feature I really wanted for... reasons. Now after having several default footprints in KiCad be anything but friendly when i go to fit check everything I decided to skip looking hard for anything that might work and instead get my calipers and just do some observation work. Then I had a fun time juggling top and bottom layers while placing pads. Then off to the OtherMill!

Starting to look like the breadboard friendly test piece.

Side one is done, now to flip and cut side two.

And on to side two. The cool thing in the Othermill software is just a toggle switch in the UI fro front/back. Also there are toggles for Traces, Holes, and Edgecuts. This is important to note because cutting out edges from board on first cut will cause for many a bad time.

And the first impression looks good.

Bring together parts I'll be mating.

And success! I metered out continuity and everything tests out beautifully.

Just look at it!

Time to cut out more for testing.

This is a better shot of first side cut. Notice that i recessed one tab, that is the +5v so that i'm better ensuring GND is connected before applying power.

Time to cut second side.

And i made an oops. Two large holes on left side are do to the v bit not making contact on the flat part of the platform on homing. Seems homing position had been changed since I last used the machine, and has since been resolved, But I'm the guy to find out all the issues. Lucky me. :)

I have always had the need to take things apart and see how they work... imagine the most curiously destructive 2 year old. That may be close to how i was and still am. Although now i know electricity can hurt, and one can accidentally weld multimeter probes to objects. And since a lot of this project is going to be not only replacing what we define as a button and actually educating people how to observe what already exists, it's about time I do a tear down with intent to educate.

Below we see a few buttons. Different shapes, sizes, and mounting methods yet all of these have the same purpose. To momentarily compete a conductive path across the legs of the button when the top it pressed down. (i hate saying depressed... sounds silly even when talking about buttons). All of these buttons happen to be "Normally Open" which means that the legs are not all connected when no force is applied to the button. Thereby making an "open" circuit.

Now to see how this works mechanically we need to open one up and try to take note of nearly every detail. It's not super import to note everything as long as we note the important parts, like how connections are managed between pushed and not pushed, and maybe what pushes back to return to a open state when not pushed. After all those are the features of this particular component that define it's usefulness. First thing we do is cut the plastic rivet tabs on the top holding the white piece in place so that we can pull it up and off.

This then make it possible for us to simply pull the part of the push button that we make contact with out. Take note of the shape of this piece because it gives us info on how it distributes force when we press down on it. There is a center piece that extends right below where we press, as well as two legs on the sides of the button as well. The legs are slightly longer than the middle piece. Just an interesting observation at the moment.

After we pulled the button we also notice a round piece of metal. One immediate thing to note is the shape. it is not flat, it's dome shaped facing upward towards the plastic piece we just pulled. This means that at rest the dome piece of metal pushes upward on the button contact and when we press down we are in fact making the dome piece of metal invert. At least in the center. Since we can see a slight change in the dome's edge I would make the assumption that the edge itself might very well not invert, but only the center. Reason i say that: with all of the things I've taken apart, it's very rare that some detail has not reason or history for being there. This is no exception.

Now it gets to the fun part. I can either melt away the plastic in a potentially harmful out gassing process (curious how i'm still alive with all the experiments) or I can lean on another skill plus the use of a multimeter to do what is called continuity testing to find out where all conductive surfaces are, and then with the use of calipers and my favorite modeling tool Blender, model out observations. We'll save that for my next lengthy post.

Diving into connectors was somewhat easier and more difficult than expected. But luckily I got some unexpected help on this front. See I knew that i wanted to explore the different JST (Japanese Solderless Terminal) connectors. I'm sure most of you have already had some interaction with at least 2 different types or "series" of jst connectors. Be it the LiPo battery connector, the power connectors for RC cars, or something like the Seedstudio Grove Kit. These things are everywhere! But without knowing the different series it could be most interesting ordering blindly online or just finding connectors based on number of contacts.

Lucky for my I happen to follow a fellow maker in instagram by the name of Neurotinker who at one point posted a really tiny GH series connector during one of their builds. I asked the series and that led into the offer of help crimping some cables. I put in the order and sent them the parts directly, where they put some cables together and even created a test rig! This community is amazing and I strongly recommend following them on instagram. The moment I knew i was among peers was the moment they posted this gem of a 0-Layer Teensy!!!! Seriously love that this exists.

For anyone curious about all the different series of connectors that exist Go Here.

Say hello to tiny make-my-hand-hurt controller. Admittedly I did not think this one through. Well not at least in the usability department. Mostly it was just to have buttons i can connect later and use for a pocket sized test rig roughly based off of the SNES controller from days with some minor changes for extended testing. Like having switches that act like latching buttons in execution. And potentiometers for.... well something I have not come up with yet. That's a puzzle for Future Metal.

I've also made a more robust Teensy dev build with GND and VCC/5V/3V rails for quick testing of sensors. Admittedly all of the header female sockets bunched up like this has on occasion made for a blunder or two. But that's reason #17 why i like the Teensy so much. I've done many a dumb thing to them and yet they still keep kicking.

And a bottom view to better show what i mean by the GND and power rails.

I really like soldering and putting things like this together but we are already viewing a threshold stopping many from diving into this kind of build. I've taught many classes for something as simple as soldering to students that have never soldered, or have but felt super self conscience of their work. And after every class, every single student has left feeling confident that they can tackle most projects like this and after our discussion on how to use the multi-meter, feel like they can at least observe issues and have a chance at fixing issues. Sadly though I am not able to sit with everyone I meet, or friends from different stated to provide the same reassurance enabling them to continue forward. So how do we make these kinds of projects accessible? What are all the pitfalls that hinder people just starting, or getting past their first issues. That in part is a goal to be addressed through this project.

There are so many to choose from. This is something reiterated time and time again by most of my mentors and friends. So let me walk you through an example of what I mean and the oh so common feeling of starting a project and stopping short due to fear of not doing it the "right way".

Given that I would like to set up a no code jump into game controllers I decided it would be smart to buy several controllers and see if there is a standard button layout to build off of. The two main reasons this is important to me would be allowing for a 1 to 1 comparison example build allowing people to make slight adjustments to different dimensions to make a nearly perfect controller be exactly what they want, and to minimize code changes in the software of many preexisting games.

I picked up some controllers from "Hack Me" boxes at local hackerspace like Crashspace or Burbank Makerspace and made some purchases from Amazon. Then i took all of the controllers I had and through windows device management i could check controller settings. This brings up a screen for seeing what number or axis is sent to the computer when a button is pressed or a joystick is moved.

The first one was an old Axis Pad. My computer did not recognize the device. Most likely i would have to install drivers. Since this is already the opposite experience i want for anyone else I decided to move on. The reason i chose the Teensy to build off of was it's ability to be understood as a joystick when plugged in. Nothing else need be installed.

This gem was found in the Hack Me box at Crash. so all bets are off to say the least. Also not recognized by my computer... well not entirely. The name Playstation (R)3 Controller showed up in device name. even though SplitFish was want was on the side.

This one i purchased on Amazon. It's the ZD+N controller labeled for computers and mobile devices. It immediately worked out of the box. just plugged in and it knew it was a joystick AND it observed all button changes without any issue. This is a lot more like the experience i want for my clients. This being the first controller to pop up in this list of experience I did notice a few things on the joystick settings that was new to me. The number of buttons updated to match number of buttons on the controller. All button signals and joystick values are solid and without detectable noise. In tandem to buttons and joystick axis values I could now see something called "Hat" referring to the D-Pad in the bottom left. All things to test and look up more later.

This little guy simply labeled VR 3D was from Burbank Makerspace for testing. Only acted and a mouse on the computer regardless of what mode i placed it into. I think more for presentations than games, But i do remember playing with this some on my android for a unity test build many months ago. The no joystick mode for computer quickly ended my time testing this one out as well.

This one was yet another Amazon purchase after simply searching "VR Controller" and buying the cheapest one at the time. This one had mostly responsive buttons and joystick. One button was very iffy. The most interesting thing about this little guy was the button layout. Four buttons set next to each other have a joystick address of 2, 1, 11, 9. Where as the other controller I liked above went 1, 2, 3, 4.

Then there is the possibility of the Teensy. Just connects, and any pin i switch to i can map to any button value/address. Same goes for axis data and once I flashed it with the demo joystick code by Paul, it just connected and worked. Both for computer and phone. Although without anything tying my axis analog pins to any value, it did showcase all the noise so leaving no option for a disable or static pulled down position, this could show up and have undesired effect in games. So optional jumpers to pull pins to GND will be entertained as a solution.

All in all I have observed more of what i don't like about how things are currently than things i do like. I've seen...

This although not entirely encompassed by scope of this project specifically, has undoubtedly been affected by it. And by it i mean life. I've made lots of progress in KiCad mastery, and ran into several new concepts that i'm still processing. Like getting a negative voltage on a system could be as easy as redefining my GND reference as a positive value, making my original GND my Vs-. I've also gotten some help making cables from a fellow maker from a completely different state. I can't wait to write up that post about how amazing this community is.

Now without going into all the details of where nearly all of my energy and time has gone, I'll just state that I've come to the decision to let go of any and all ownership of Burbank Makerspace and will continue to host the Sunday Funday open houses as a member only.

The good side of this decision means that i will have more time for contract work, Control-Or-Sense development, and documentation. Letting go was one of the toughest things I've had to do as of late, but necessary for progress on all things relating to personal life goals.

So thanks for sticking with me this far, and I hope these next few months are as fun to share as they are going to be to experience!

~Metal

P.S.

I'll be catching up on posts shortly. Just need to process all the media and text. The max file size of 5 mb does not agree with the photos i take from the DSLR... so there's now a process step. Which is funny that's it's an inconvenience because when i started making websites in 95, (i was 10) putting an image online was a serious task for managing content vs page load times. crazy, right?

I started with a simple goal. Take a teensy 2.0 footprint and break out 4 IO pins to buttons with pullup resistors and ending on the board with a wire-to-board JST connector. Then add 4 analog (3 pin) jst connector to 4 other IO. This time adding the resistor on the vcc line, in case end used shorts the vcc and gnd wire together. This led me to this first attempt:

In the top left you will see where power supply feeds system. Then a 5v voltage regulator but if I happen to feed a regulated 5v source I have to option to jump the two pads and bypass the regulator. Then it's my button setup. followed by my analog in setup. One thing many of you may have noticed is that my traces on the right do not connect to my SMD (Surface Mount) resistors. There is a simple reason for this..... I did not know yet how to "flip" the component to backside. Nor did i know that pressing the "B" key with the fill area tool selected would refill my ground plane.

Being anable to fix this I deleted the file completely and started over. The second attempt went by a lit faster and I made these:

Holy crapcakes! I found that KiCad has a 3d view tool built in. so cool right?.

And after some playing around with the OtherPlan software I was able to generate a setup for cutting. And this began my journey into the physical world... I mean other 3d printing and that birth thing.

My first casualty from ignorance. I had thought that since the machine knew it's width of tool, and the jig placement could only be set by the two holes at the front of the other mill, that the tool path would know an offset for placing board layout inside of the safe area for these tolerances. This is not the case.... Also since I was about to learn the first valuable lesson i was hoping for..... real world measurements and interference:

Even though the JST connectors fit right into their places.... they don't fit right next to each other. Turns out, the footprint i used doesn't have the right spacing for the outline of the plastic parts. Also I had made a mistake with choosing my header spacing... by double. It's easy to select spacing that isn't the 2.54 spacing that I now know that i needed. On a good note, the 0805 components line up perfectly. so woot for that. At this time I had enough info to work on this board at home so I could be ready for my next day at the design lab. So to best use time at space I hop on to a more simple board concept.

The general Button V1 board:

Two pin by way of JST connector

Allow for 6mm button

Allow for 12mm Button

Allow for SMD button

Not break any more bits.

The next little board i make schematic for, draw out circuit, and have on the mill within 30 minutes. Wow I feel really good and accomplished at this moment for sneezing out a simple design. This feeling was short lived however as my next step.... break a bit. Seriously!

My previous experience on this machine was that first thing it would do was bring bit to middle front and ask for confirmation on bit type/change opportunity. Then it would go to the right and home just off of the side of the the material. Thinking this was a beginning gcode type of thing I go ahead and change the bit and press the start milling button. What i didn't know is that i had the order different than the machine thought and since i did not specifically initialize the "change bit" opperation by top right button press, and it thinking it was still the previous bit and what it wanted, it just went in and did a plunge right into the copper board. This is when I asked what i missed and was informed of the button on the top right. So bit two down and another lesson learned.

Keep in mind that my only experience with this kind of camera is limited to holding one for b-roll during my stay at gamezombie.tv.

So lets look at my progress so far and compare my phone image to a camera image.Phone (Galaxy Note 3):

Camera (Canon Rebel T6):

I'm still using the auto setting on the camera. This was my first go at tripod and manual focus.

Now i can get pictures that are very usable with both my phone and new camera. but the real reason i went for the camera was to create usable video for the tutorials. This will be the most accessible build I've done to date, but also the most "non-digital" topic to cover. We are talking about assemblies, wiring, testing, ect... Expect to see those videos soon enough.