It’s an automated cat torture device! Ok, not exactly, it’s a 2-axis turret with a cheapo laser pointer mounted in it, run off of a budget microcontroller :) But as shown in the little clip below, my little dude finds it quite entertaining (I actually have to hide it in a drawer if I’m not letting him play with it…I’m actually working on an idea for an upgraded version that I hope will help with this, but who knows if I’ll actually get to it ¯\(ツ)/¯)
*If you have any questions or if you want to cast a vote for me to write up a detailed assembly how-to, drop me a comment!
I will never pretend to be a competent programmer, so please feel free to talk s*** on my code, but I will say, I was actually kinda proud of the randomization routine I cooked up :)
My apologies for the lack of annotation, but I originally didn’t intend it for others’ eyes (and still am not sure it will see any, haha). But I’m more than happy to answer questions if you reach out to me
#include <Servo.h>; Servo serRot; Servo serEl; int pinRot = 7; int pinEl = 10; int pinLas = 5; int minEl = 60; int maxEl = 90; int minRot = 90; int maxRot = 180; int nseqEl, nseqRot; int iseqEl = 0; int iseqRot = 0; int stepEl, stepRot; int signRot, signEl; int posRot, posEl; void setup() { pinMode(pinLas, OUTPUT); pinMode(pinRot, OUTPUT); pinMode(pinEl, OUTPUT); serRot.attach(pinRot); delay(50); posRot = (minRot+maxRot)/2; serRot.write(posRot); delay(100); serEl.attach(pinEl); delay(50); posEl = (minEl+maxEl)/2; serEl.write(posEl); delay(500); nseqRot = random(5, 30); nseqEl = random(1, 10); signRot = random(0, 1); // Sign = 0 = increasing angle signEl = random(0, 1); stepRot = random(1, 5); stepEl = random(1, 3); digitalWrite(pinLas, HIGH); } void loop() { // Calc next Rot position if (signRot == 0) { posRot = posRot + stepRot; if (posRot > maxRot) { posRot = posRot - (2 * stepRot); signRot = 1; } } else if (signRot == 1) { posRot = posRot - stepRot; if (posRot < minRot) { posRot = posRot + (2 * stepRot); signRot = 0; } } iseqRot = iseqRot + 1; if (iseqRot > nseqRot) { nseqRot = random(5, 30); posRot = random(minRot, maxRot); signRot = random(0, 1); iseqRot = 0; } serRot.write(posRot); // Calc next El position if (signEl == 0) { posEl = posEl + stepEl; if (posEl > maxEl) { posEl = posEl - (2 * stepEl); signEl = 1; } } else if (signEl == 1) { posEl = posEl - stepEl; if (posEl < minEl) { posEl = posEl + (2 * stepEl); signEl = 0; } } iseqEl = iseqEl + 1; if (iseqEl > nseqEl) { nseqEl = random(1, 10); posEl = random(minEl, maxEl); signEl = random(0, 1); iseqEl = 0; } serEl.write(posEl); delay(random(1,400)); }
One of my more consistent ways to make me curse my own name is when I dump resin down the front of a printer while removing the platen...I just got sad thinking about it. I've also found, on more than one occasion looking for a stable place to put a loaded platen while I scramble for whatever thing I've forgotten. So I decided to build something that could save me from myself on both of these.
The Drip tray is preloaded against the Hanger using some magic blocks (aka magnets). I used two of these 60x10x5 magnets in the base of the Hanger and these 60x10x3 magnets in the Drip Tray. If you're looking to simplify on parts, I'd recommend using the thinner, 60x10x3, in both locations as opposed to the alternative. As I have mine, it is a quite strong preload (but that is what I was aimin for!) If you were to go with 60x10x5s on both ends, it will also be possible for the magnets to make contact...which may not end well, those neodynium magnets are pretty brittle.
I printed mine from Clear and White Overture PETG. I LOVE the clear, but I don't know why I ever buy white filament...not ma favorite
Like the bucket of assorted fasteners on that bottom shelf, this category is for stuff that I didn't know how to group...oh, and speaking of those fasteners, check out the little sortin fella!
2020 Aluminum Extrusion Hardware |
Quick Bolt Sorter |
During the good financial decision-making times of Covid lockdowns, etc. I decided it was a good idea to buy a license for the Fusion360 Generative Design extension...Good news, I did finally pay that off :) I had worked around, and been somewhat involved in a handful of Topology Optimization/Generative Design projects through my work, and I've found the tech super interesting for some time. So after the free trial, and feeling like I was just starting to gain some level of competence in Fusion360's tool....I done did it, and bought the year. Ok, now that I'm done justifying that to myself...I mean you...
<engineering/design> What I really like about Generative Design is that it forces the designer to think about the thing they are trying to design from it's core requirements: Forces, Interfaces, and Keep Outs. I think it's far from perfect, especially given the still very primitive Design For Manufacture capabilities these tools have (among other shortcomings, but this one is certainly a big one to me.)
<precision engineering> One last also (for now), but ALSO, what I find exciting about these tools from a precision engineering perspective, is that the above-mentioned focus on forces and interfaces, these tools are extremely well-suited to kinematic/exact constraint designs! I think every one of the Generative Design projects below features at least some aspects of kinematic constraint (I say, "I think" because I may or may not be writing this before I go through my files and remind myself what all I actually made vs what I just thought about making ¯\_(ツ)_/¯ )
A lot of projects I work on/have worked on seem to involve the controlled movement of fluids. Below is a bit of a history of my builds involving attempts at obtaining this controlled movement for incompressible fluids. I haven’t done much myself with making custom solutions for the compressible stuff, but if you’re interested in such things, I thoroughly enjoy Major Hardware’s “Fan Showdown” series :)
This article/section is by no means intended as a thorough overview on the design and operation of pumps. While I will try to give some overview on operating principles and design considerations as I go, this is mainly just going to be a wander through my personal builds and experiences.
I’m sure there are innumerable sources online for (much better) detailed discussions of the workings of peristaltic pumps. So I’m just going to hit the highlights, and I’ll try to remember to find some promising links and add them below, should a deep dive seem intriguing to ya.
The fluid being pumped is carried into the pump in a compliant tubing. This tube is routed around some portion of a circular/cylindrical path around the axis of the pump and then exits the pump. This is one interesting/attractive aspect of peristaltic pumps, the fluid never has to leave the tube that it is in, making these pumps well-suited to situations where contamination and/or leaks are highly undesirable. The housing that features the cylindrical wall that the tubing is being routed along can be considered the Stator, and that is generally the nomenclature that I tend to use.
So if there’s a Stator, there must be a Rotor…? Yup, the rotor includes some set of features that extend out to some defined gap between this feature and the Stator wall. These features, which in many peristaltic pumps are rolling element bearings, pinch the tubing to the point of sealing (ideally) the tube. As the rotor turns, this contact point proceeds around the circumference. Because the pinched point of the tube is sealed, the volume of fluid in the tube ‘ahead’ of the pinch point are, as a result, pushed forward. So, keep rotating, keep pushing….pretty much as simple as that!
Pros:
Cons:
A couple of years back, I had a concept for an in-line-mixing hydroponics system. The idea being that the supplies to the system would be just pure water and nutrient concentrates, and a series of pumps and valves would allow precise dosing mixes to each target plant in a system (I refer to this concept as Rail Yard Hydro, since it moves the fluids around the tubing network quite like rail cars are moved around a rail system. I’m planning to add a separate page diving into that one a bit deeper since it is the design scheme I am using in my current projects.)
Well, to facilitate this plan, I wanted to find an option for a dosing pump that I could integrate in to my control system (aka Arduinos and Raspberry Pi’s :)). Unfortunately, I quickly found that a servo-driven peristaltic pump could easily set me back north of $100….so I set out to spend many multiples of that making my own!
Actually, when I saw the pricing, I decided I should see if I could make myself a cheapo, manual version that I could use to just test out some basic questions on the Rail Hydro idea (mainly verifying that I could induce good material mixing in-line and that there was no cross-contamination between fluid reservoirs.) And so, ‘twas this endeavor that resulted in the pump I’m apparently referring to as “Test Build 1”
She ain't pretty (especially after a good while of getting knocked around), but the pic above shows the dual pump setup I rigged up for my testing needs. I was VERY pleasantly surprised that, other than a tweak to the hand wheel, these things worked pretty damn well!
I decided upfront that I was going to go with a resin printed build, because I thought the high stiffness and good surface finish throughout the 'pinch region' would give me a better chance. Since I was already going to have the good surface roughness, I might as well also integrate the main bearing into the printed parts.
In the image of the model, below, the Stator is the part shown in green, and the Rotor is shown in blue(ish.) Riding on the rotor are roller skate bearings to provide the contact with the tube. Race 1 has v-grooves on both sides of the race, providing the main constraint for locating the rotor, and Race 2 has a v-groove on the Stator, but only a single plane of contact on the Rotor side. This keeps from over-constraining the bearing.
The absurdly overkill bolt running through the center is a real showcase of "using what I had on hand" :) in that these were the only bolt/nut sets I had on hand with the length I was looking for.