don’t make me clamp you… (part 2)

You wouldn’t believe the difficulty I just had getting Autodesk Fusion 360 to do what I’d thought would be trivial: I wanted to cut down an existing part from Thingiverse to meet my needs.

Thingiverse ≠ OpenSource

The first thing I learned yesterday from this is that—even though Thingiverse seems like a wonderfully collaborative place—it isn’t actually open-source. If this were open-source, then in addition to the mesh (STL) files that are shared, each author would also include their project file as well (DWG, for example).

Don’t get me wrong, Thingiverse allows people to share their work. And yet, it isn’t the same as github which allows someone to take 100% of what you worked on, tweak it and then share that as well. It’s this iterative modification that makes open-source so powerful. And the reason behind that is that each new person doesn’t have to start from scratch.

CAD Project File

A typical computer-aided design file will include a variety of information. Most, though, are built around the concept of an initial sketch in two dimensions with a variety of measured constraints, for example. One then brings that 2D sketch into the third dimension and suddenly you have a part.

If you’d like to then edit the sketch or change the height of the sketch in that third dimension, you’d need to have that project file. (Thingiverse does not share project files.)

Mesh File

At the end of a design session, it would be necessary then to export that part into a 3D model which is usually a collection of points and triangular faces. The sum of these describes a solid in 3D space. (These STL files are shared on Thingiverse.)

Toolpaths File

Once you’ve exported your own design to an STL file (or you’ve downloaded one from someplace like Thingiverse), the file is taken into software like Cura if you’re trying to print to a 3D printer. This is known as “slicing” since it’s Cura’s job to know your printer well enough that it may slice your part from the bottom, up. Each layer then is converted into a number of instructions called G-code which tells the printer exactly what to do at every step of the way. (Thingiverse does not share these files either.)

Autodesk Wants You to Design in Autodesk

It was clear from my initial interaction with Autodesk’s support that they don’t want you to work using other software. They want you to start over and redesign your part in their software. Given that they charge $40/month to use the software, it’s easy to see why.

They actually do support the conversion of a mesh file into your project file in such a way that you can cut it, for example. They just hide the feature as an Easter Egg; only after turning off project journaling (Time Line) can you see the Mesh-to-BRep option. Granted, the program became painfully slow using this feature since it was grappling with about 50,000 triangular faces. Eventually, though, it processed the mesh file and I was able to apply the cutting action to remove some of the clamp from Thingiverse.

Progress So Far

Knowing that I could further modify the C part of the clamp should I need to, I then set the first of two prints into motion.

With the standard white PLA filament in the printer, I was able to print this in just over twelve hours last night. It’s a collection of eight screws plus their respective protector caps for the ends of those ball points. And tonight, I’ll print the C-shaped parts in black carbon fiber PLA for its added strength. (I’ll need to break them away from the adhesion raft, of course.)

IMG_0123IMG_0124

In case you’re wondering, I had to laboriously place each of the sixteen individual parts into Cura’s workplace, carefully including enough space between them. The tighter you bunch them, the less movement the printer will have to do and the faster it will print. Get them too close and the extruder might bump into one of the other parts or perhaps merge two parts together.

As you can see from the slight bit of raft curl on the right side in the second photo, these clamps in theory will do a nice job of holding the raft down into the bed for the first inch or so of the part’s printing. In some cases, they should save what would otherwise be a failed printout.

keeping your pi cool

An average computer’s operating system maintains some logistics about the cpu, like its input voltage, temperature and the like. The Raspberry Pi single board computer is no exception and will even scale back its speed if it determines that its internal temperature is getting too high. That’s a good thing but another approach is to proactively cool the cpu with a fan when it’s approaching that threshhold.

pi-temp.png

Since I’m creating a cube-like chassis to hold four of these Raspberry Pi 3 computers, I’ll soon need this functionality. So I’ve just created a new repository with JavaScript code to return the cpu’s temperature in fahrenheit/celsius as a string or a number. One could then programmatically turn on/off a fan using the GPIO pins using this information.

Here’s that repository:  raspi-temp

3d cover for the pi noir camera

Using the (included) industrial-grade Autodesk Fusion 360 software, I was able to design a part for my Robo C2 printer. It’s a cover and mount for the Raspberry Pi NoIR v2 camera (8MP resolution @ $27). I picked up several cheap suction cups (@ $0.99) from Ace Hardware yesterday and used a digital caliper to carefully measure the distances all around. I’ll sand it a little to make it smooth; the photos below is what it looks like after removing the raft and supports (throw-away extras to make everything print correctly). The jaggies inside the suction cup slot I’ll leave since they’ll grip tightly. I’ll likely also keep some of the jaggies in the fitting between lid and base for the same reason.

I’ll still need to receive the longer cable from Adafruit for this to work so I haven’t snapped down the parts firmly yet. In the meantime, I might create a ribbon clip with a second suction cup (editing the money clip from an earlier post).

If you’d like the STL files for the part now, let me know and I can shoot you the URL for those but I’ll eventually write up a step-by-step tutorial on the full upgrade to adding the video feed capability.

IMG_0116IMG_0117IMG_0118IMG_0119IMG_0120IMG_0121IMG_0122

100posts

a robot which builds robots

I suppose the problem with buying a 3D plastic printer is that it makes the owner imagine all sorts of modifications to that very same printer, especially so when it’s largely open-sourced in the first place.

robo

I must admit that owning this Robo C2 printer has been a blast. I’m now past the let’s print some demos phase to the let’s print our own designs next step. And part of that design process is envisioning a better printer from this one. And what better way to modify it than printing some 3D parts, right?

So, here’s a list of some of the current things I’m doing with it.

Sound Events

It’s a wonderful printer and often, just because of the sounds you get from its collection of servo/stepper motors, it vaguely sounds a bit like R2D2, the cute robot of Star Wars fame. I’m working up a modification to add sound events from a variety of Star Wars WAV files related to R2D2.

As themes go, the movie Iron Man includes an AI character named J.A.R.V.I.S. (as voiced by Paul Bethany) who had some fun dialog with the Tony Stark character (as played by Robert Downing, Jr.) I’ve often thought that it would be sweet to add a sound event theme set based around Paul Bethany’s voicing of J.A.R.V.I.S. as well.

Video Feed and Time-Lapse Photography

I’ve just picked up a Pi NiOR camera which I’ll be adding to the printer. Next, I’ll need a longer ribbon cable, some suction cups and a designed/printed part to hold the camera itself inside the chassis.

Given the resolution of the camera, I’ll likely need to upgrade the microSD card inside to accommodate the files from the streaming activities.

Enhanced Spool Feeder

The out-of-box spool feeder seems a bit minimalistic to me. I’d like to upgrade that with a feeder which allows the spool to spin more freely. I imagine that the part needs to be more rounded at the top.

Heated Bed

The Robo C2 doesn’t include a heated bed in its design like some of its more-expensive Robo alternatives. So I’d like to machine an aluminum bed with a heating element and add this to the system.

Side-to-side Conveyor Bed

The maximum build size for the Robo C2 is a mere 5″x5″ square at the base so that’s a bit restrictive. There are techniques for joining a series of smaller parts (say, to make a sword) but I’m guessing that a possible approach is to remove the two blue side windows and rig up a conveyor system which is accurately positioned left/right as required. In this way, a very long part could be printed.

Remote Control via Joystick

I’ve purchased a Raspberry Pi Sense Hat which includes a small joystick control. I think I’d like to write something so that, using remote GPIO, I could then control the stepper motors of the printer indirectly via wi-fi.

OctoPrint Plugins

The underlying web server which runs on the printer is called OctoPrint and since it’s open-source, there are a variety of plugins for this already. I think I’d be interested in writing some plugins, especially so that someone may pause jobs in the middle so that internal components may then be assembled inside.

I’ll likely add some SMS notifications so that I can remotely know how a print job is going.

Voice Control

I also like the idea of adding voice control to the printer. How awesome would it be to just tell the printer to do something?

So basically, since the Amazon Alexa code is completely available and can be setup on a Raspberry Pi 3 computer, I can imagine then interacting with this piece (as installed on a Raspberry Pi) and having it direct activities on the printer itself.

traveling at the speed of open-source

pull request:  An external-repository modification to someone else’s code which you’d like them to adopt into the master copy of the original repository, specifically the notification request to ask for this.

It’s funny, I put in a pull request in March of this year for a timezone calculation bug which I’d discovered somewhere out there in someone else’s code.  I guess I was trying to be a good net citizen and giving back to the community.  I’d forgotten completely about it until now.  The original author merged my commit into his code yesterday and blessed it, basically.  This would actually be my very first pull request in the world of open source so I suppose that’s special in some way.

In this particular case, it took the author almost three months to see the request and get around to responding to it.  Granted, few of us would be paid to maintain our open-source repositories so they’re usually just considered hobbies for most of us, something we do in our spare time.

As a coder with many decades of experience, this pacing is a bit odd to me.  (As in, “wow, three months to bless a quick-and-dirty code fix”.)

I’m not complaining…  Okay, maybe I’m complaining.  Maybe I was just a bit naive to the average amount of effort people are putting into this.

The entire collective force of open-source is something to behold.  Almost every day some huge effort is being launched and thousands—even millions—of downloads occur from these repositories.  But what happens to the original codebase when the author gets side-tracked with their next great idea?

But what happens to the original codebase when the author gets side-tracked with their next great idea?

The New, New Thing

All this reminds me of the biographical book “The New, New Thing” about a serial-entrepreneur, Jim Clark (of Netscape fame).  The biography doesn’t really paint a pretty picture of the billionaire, instead suggesting that he was perhaps suffering from Attention Deficit Hyperactivity Disorder (ADD) or possibly Hypomania.  He couldn’t focus on a project after the second year, opting to push the work onto others and move to the next project.

I guess I have to ask what part this plays in the world of open-source software.  As an inventive person, I stare at my To-Do list of project ideas and realize that it could be argued that this is some mark of my own internal restlessness.  Could I be content working on one project for year after year?

I’m a former CEO and at one time I did run a software development firm for nine years.  Fortunately, though, I had project after project then to develop so that kept things lively. I’m impressed by those who literally spent most of their lifetime devoted to a single project.

A Lifetime of Service

Dr. Royal Rife comes to mind as one of these people.  He was curing cancer and a variety of diseases back in the 1930 decade but he spent much of his life before this inventing the microscopes and medical device equipment which he would use in the culmination of his life’s achievement.  His original home site is now the location of one of the Scripps hospitals here in San Diego but seemingly nobody knows his story.  He spent a lifetime curing cancer and he isn’t famous for it.

I guess we as a society aren’t really conditioned to reward and remember someone who did one thing very well.  To be famous or respected now, presumably you have to produce project after project, never satisfied with the maintenance of same, always chasing the next big thing.

If You Build It, Own It

I guess my word of caution in the world of open-source then is to own what you’ve built.  Try to revisit it from time to time, like you might keep a plant alive by watering it once in a while.  Do new things, of course.  But don’t forget that your last thing could actually be ticket to your success.

taking the bite out of stamps.com

Stamps.com offers an online service in which you can digitally apply postage to an envelope.  They even include a nifty/free digital scale to attach to your computer.

StampsDotComScale

The problem of course is that in order to make back the cost of that “free” device, Stamps.com wants to charge you on a monthly basis to use this service and most people decide that it’s not worth those charges.  I often see these sitting idly on someone’s desk and it’s only useful for measuring the weight of something.  Without their service, you’d then need to manually lookup the postage and then count the right number and types of stamps.

I’ve written a Windows program which will do all that for you, weighing the envelope, calculating the postage and letting you know how many stamps of which kind to put on it.

Postage

Here is the new repository on github.com.  You can run it directly or build the program yourself if you have a copy of  Visual Studio, to include the free Community version.  Your computer will need the .NET Framework 4.5.2, for what it’s worth.

the robo 3d c2 printer

For months now, I’ve been wanting a 3D printer to create plastic parts and I’m guessing that I just made the best choice by buying the Robo C2.

robo

First Impressions

First of all, it’s an attractive printer in the same way that EVE (from the WALL•E cartoon) was cute.  Perhaps you can see the resemblance?

eve

Second—and you guys should know by now how I love them—this printer is driven by a Raspberry Pi 3 computer inside!  I hope to clone the microSD card in that computer and go to school on their efforts to hack an even better printer out of it.

Third, the product is open-sourced and crowd-funded.

Fourth, they’re a local company.  Their office is maybe a 20-minute drive from where I live in San Diego.  Given that most people would have to purchase this online and have it shipped, they wouldn’t get to see it in action like I just did.

Fifth, it includes an iOS app which allows you to control this and any other Octoprint-enabled printer.

Sixth, at 20 microns, it looks to have the best resolution of any of the printers I saw at Frye’s Electronics and most of those had a price tag above $1400 to reach the 50 micron resolution level.

Finally, it looks like it comes with a one-year license for Autodesk Fusion 360 which appears to be a very nice program for designing.

Research and Past Experience

I spent a fair amount of time before purchasing this by researching 3D printing, the types of plastics, the pitfalls to overcome, etc.

This particular printer doesn’t have a heated bed (the place where the project is made) so it may not do a great job with ABS plastic without a lot of trickery.  The standard voodoo that is necessary is to get inventive with the bed covering so that the project adheres nicely, doesn’t skip around and further, doesn’t warp due to uneven heating.

So for an unheated bed, the PLA type of plastic is the suggestion here and I’ve purchased an additional two rolls of the stuff to get things started.

Interestingly-enough, a few years ago I worked in a large plastic manufacturing plant so I have a little experience making plastic of the rotomolded variety.

caveman

In this industrial-sized version, colorized plastic powder is measured and put into aluminum molds on a steel frame wheel.  And this wheel then is inserted into a very large 700°F oven.

But for the consumer variety, you spend most of your time in a computer-aided design program, send a job to the printer and then wait hours (usually) to see how it turned out.  This ought to be interesting.

Projects

I have a few projects in mind for this.  I snagged a Robo Drone Kit while I was at Frye’s to give me a project which should produce some reasonable results.

dronekit

I hope to design and print an enclosure for the e=mc2 project from earlier.  Although it’s difficult, I hope to make this a clear enclosure ultimately.

I’d like to work up a design for a heated bed for the Robo C2 since it sounds like this would make ABS-related print jobs more successful.  I think I’d also like to test new bed materials since the field of 3D printing is still new and inventiveness is required here.

Given that the Robo C2 has a Raspberry Pi computer inside with OctoPi software running on it, I should be able to modify the design, add things onto the printer and do notifications, for example.  I could add an internal webcam to it, for example.

And then finally, I think I’ll spend some time on post-print finishing techniques to see what I can do in this area.

Results

Here’s the first printout from the Robo C2 after some upgrades and dialing in that critical z-adjustment.  Obviously, it’s a money clip.  It’s light blue but the red background makes it look gray otherwise.  It’s very smooth for a 3D-printed project and amazingly so for the $699 price tag on the printer.  The small, flat piece is called a “raft” and is meant to make things stable during printing, btw.

to type or not to type…

that is the question.  Rather than a Shakespeare reference, I’m here referring to a term in software development which determines how a language deals with variables, for example.

Define: type

When you create a variable in a computer language, it’s usually something like this:

var someVarName = 1;

In a case like this, we might infer that someVarName stores a number (an integer).  We might say that the someVarName‘s type is integer.  Using a pet-ownership metaphor, it’s like purchasing a dog house first (“someVarName”) and then next buying a dog to put into it (“1”).  You wouldn’t buy a fish bowl to store a dog… although this seems to work out great if you own a cat.  JavaScript, e.g., is like this picture:  it doesn’t seemingly care if you want to store a cat in a fish bowl.

cat-in-a-bowl

Two Schools of Thought

There are two camps out there:  those who like languages which force the variable type and those who don’t.

A statically-typed language usually involves a step in which your code is converted into something else (compiling) and any type-related issues must be fixed before a program can be created.

A dynamically-typed language is run “as is” and the code is evaluated at the moment of truth—determinations about the type of a variable are made at this time.  If there is a type-related issue, your end-user could be the first person to see the error.

Statically-Typed Dynamically-Typed
Java JavaScript
C++ Python
C# PHP
C Objective-C

The Pendulum Swings

Over the past three decades, the popularity of either approach has waxed and waned.  It’s safe to suggest for the moment that the less-strict languages are gaining rapidly in popularity over their stricter counterparts.

most-popular

We have the world of open source to thank for the popularity and speed of development we’re currently seeing in these dynamically-typed languages like JavaScript and Python.

Seeing the Future

Honestly, though, there are too many people in that strict-is-better camp and their influence is felt within software development companies.  If I were to guess at the future of JavaScript, I’d probably have to say that TypeScript and Flow will gain in popularity as larger development teams look to lower the number of bugs in their code.

I don’t know, though.  Maybe it’s time that we just relax and let the cat hang out in the fish bowl.

 

blinking the raspi’s built-in LED

I’ve just added a repository of some JavaScript code to take over and exercise the built-in activity LED on a Raspberry Pi Zero W (and presumably other models). It’s called gpiozero-toggle-led and it’s a pretty simple interface with installation instructions and some sample code. It works with the underlying js-gpiozero JavaScript port of the popular original Python code. This would be an excellent way of simply demonstrating GPIO without any additional wiring, components, breadboards, extra power supplies or electrical knowledge (like finding a 330-ohm resistor using its color bands).

zero-wireless

Note that the “zero” in the title of the repository and in js-gpiozero does not refer to the Raspberry Pi Zero but to the original gpiozero Python library.

This should remove some of the guess work when attempting to use the relatively-new library since their documentation examples at the moment are taking a back seat to their code port from the more-extensive Python offering.

This approach can easily be modified to instead exercise external LEDs (as soldered or otherwise attached to the header pin locations seen below).  Note that you’ll use “BCM numbering” for APIs such as this one. For external LEDs, you would need to connect it inline with a resistor from a selected pin to one of the grounds for this to work with correct orientation of the LED’s anode/cathode, of course.

raspberry-pi-pinout

If you’re trying to use this with a Raspberry Pi of a different model, you’ll likely want to adjust the JavaScript slightly as seen below.

/routes/index.js:

// Existing code, for a Raspberry Pi Zero
var ledActivity = new LED(47, false);
// For Raspberry Pi 3, for example
var ledActivity = new LED(47);

And that’s it. Since the Raspberry Pi Zero assumes an opposite value for true/false than the bigger models, it’s necessary to configure this in the device constructor to make things work as expected. Since BCM pin 47 is the activity light on the board itself, this will allow you to control it.

o please, gentlemen, a little bluer…

Today’s inventiveness involves a new teaching method for music, a synesthetic approach to colorizing musical notes. The title’s quote comes from Franz Liszt, a 19th-century composer who was a synesthete—he saw music in full color.

Although western doctors probably think of synesthesia as a malady, I would suggest that it is a product of beneficial neuroplasticity. The brain has cross-wired itself across the senses to allow for better recognition and appreciation of something. There’s a long list of famous musicians and composers who wrote of this personal condition and in each case it helped them to succeed.

vexflow-syn

In order to promote this cross-wiring in young musical students, I’ve created a repository to colorize musical notes in client-side JavaScript. I’ve developed an organized method for this and have described the process there.

Compatibility

Given that the client-side JavaScript approach requires the newer HTML5 canvas features, this will work on newer browsers (and seems to be working in IE11 if you “allow blocked content”).

Musical Talent

I have always had a fondness and an early aptitude for music. In fact, I had such a brilliant audible memory and an ability to play anything I’d just heard, that I used this as a crutch when confronted with the task of learning to read musical notation. I didn’t actually have to read the notation in band since the sound of the music was in my head. So although I was a slow reader with respect to notation, nobody actually could tell.

My earliest formal training was for the saxophone, noting of course that you only play a single note at a time. Unfortunately, this led to my later difficulties in learning to play the piano in my thirties. Piano chords on a stave? To me, this just seemed like jumbles of notes piled on top of each other. I had no easy way of interpreting what I was seeing.

After many weeks of painstakingly trying to decypher these heiroglyphics, if you will, I began to have a small breakthrough. My brain started to recognize some patterns. Due to some unfortunate timing, I had to stop all this training and abruptly move and had to sell the piano. It would be another decade until I’d bought another piano to re-learn piano notation.

Attacking the learning of chords-in-notation anew, I realize that colorizing the notes would be a benefit to me.  All C notes are red.  All E notes are yellow.  C-E-G are primary colors (C-maj).  The Eb in the middle of the C-min chord is more orange than the original yellow. A synesthetic approach to musical notation is a wonderful adaptation to a centuries-old teaching methodology I’d suggest, at least in my own case.