Adabox 016

I recently decided to get an Adabox, which I like to refer to as a CSA for Makers. Rather than greens and veggies, I get a healthy dose of electronics gadgets to play with. Box 016 contains a 64×32 pixel RGB display, or in simple terms, 2000+ blinky lights!

In addition to a cool display, this is my first exposure to CircuitPython, which is Adafruit’s approach to programming microcontrollers via Python. I have to admit that I was hesitant at first, and spent much of my pre-unboxing time scouring the internet for tutorials that used Arduino sketches for controlling the display.

Man, when I gave CircuitPython a shot, it was amazing. Along with Mu, the simple Python text editor, I was up and running in no time. Mu recognized that I was using CircuitPython, and once I enabled serial communication to help me find the stupid syntax errors I often make, I was up and running. I hadn’t bought into the “not compiling saves time” argument of Python over C++ for microcontrollers, (especially given the lightweight programming I do) but it does turn out to be a nice feature to click save and watch my screen update (again, after those stupid syntax errors are wiped out).

Anyway, after bouncing through the tutorials, I modded one of the examples for a Skype call with my nephew. He’s 500+ miles away and it’s his birthday today (he’s 16). COVID prevented me from visiting him so I did the next best thing that a geeky uncle could do, make blinky lights blink for him.

We Skyped, ate cake (virtually) together and I watched as he opened his gifts (a tablet and accessories). I then faded into the background because, well, he’s 16, with a new gadget sitting in front of a screen with an old guy on it. I would do the same thing.

Happy Birthday, Nick.

2D, 3D, let’s explore molecular geometry

It should go without saying that I am a fan of incorporating digital fabrication tools into chemistry instruction. A while back, Scott McIndoe and his colleagues published a paper in the Journal of Chemical Education on using laser cut models to teach molecular geometry. At first, it seems counter-intuitive to use a 2D design process to teach 3D topics. On top of that, if you have access to a laser cutter, you probably have access to a 3D printer, so why not just use the 3D printer?

3D printing is great for rapid prototyping; however, when you want to scale up production – say, for example, you want models for a classroom of 100 students – then 3D printing is not a great solution. Laser cutting is one of the fastest, easy-access digital fabrication tools available, and build times can be drastically reduced if a laser-cutter solution is available.

Then again, one needs access to a laser cutter. And that is something I (sadly) do not have at present.

So I took Scott’s design and adapted it to 3D printing. Yes, his paper provides some STLs to print, but if you want to create different sizes, then you have to do some scaling. I wanted a parametric approach, so I resorted to OpenSCAD to recreate his design. The code is below, in case you are interested.

Why would you want to use this? I don’t know, perhaps you want to make super thin molecules or super small molecules. All I know is, now you can.

Now Lego Yoda can teach molecular geometry. I honestly have no idea what to do with a 0.2 mm thick tetrahedral molecule, but now I’ve got one.
/*
Origin: @mcindoe
Reference: https://pubs.acs.org/doi/10.1021/acs.jchemed.8b00553
*/


ca_d = 12; // diameter of central atom
ca_g = 5;  // length of the gap in the central atom 
oa_d = 10; // diameter of the outer atom
bond_w = 5; // width of the bond
bond_l = 25; // length of the bond
th = 0.2+3*0.35; // piece thickness (my printer is set to 0.2 mm first layer and 0.35 subsequent layers)
allowance = 0.05; // adjust gap size for tighter/looser fit, YMMV
$fn = 25; // Keeps round parts round

/* 
n is the number of bonds (1, 2 or 3).  Setting tet to true will force a 109.5 degree bond angle.  NOTE: you shouldn't call this function, use makepiece
*/
module makebonds(n,tet=false) {
    for(i =[1:n]) {
        rot = tet?125.25+(i-1)*109.5:i*360/(n+1);
        rotate(rot,[0,0,1])
        translate([bond_l,0,0])
        union(){
            circle(d=oa_d);
            translate([-bond_l,-bond_w/2,0])square([bond_l,bond_w]);
        }
    }
}

/* 
n is the number of bonds (1-3).  Setting tet to true will force a 109.5 degree bond angle
*/
module makepiece(n,tet=false) {
    rot = (tet && (n==1))?70.5:0;
    linear_extrude(th)difference(){
        union(){
            circle(d=ca_d);
            makebonds(n,tet);
        }
        rotate(rot,[0,0,1])translate([ca_d/2-ca_g,-(th+allowance)/2,0])square([ca_g,th+allowance]);
    }
}

// Example usage 
for(i=[ [-10,-20,0], [10,20,0] ]){
    translate(i){
        makepiece(3);
        translate([40,0,0])makepiece(1);
        translate([-40,0,0])makepiece(2);
    }
}


Dual peristaltic pump prototype

Another project I’ve been working on this summer while stuck not in my lab was an inexpensive dual peristaltic pump design. It consists of two 12 Volt peristaltic pumps from Adafruit along with a Metro (Adafruit’s Arduino clone) as the brain.

Dual peristaltic pump, controlled with Arduino (Adafruit’s Metro). Protoboard contains a dual H-bridge and connectors for the motors and pots.
Continue reading

Antiracism in STEM

A useful resource made its way into my Twitter feed recently. Yes, it comes as a surprise to me as well that I write “useful” and “Twitter” in the same sentence. As we continue to take action on diversity, equity and inclusion in STEM, we need to learn more about the common critiques and responses that pop up in conversations. From arguments involving reverse discrimination and hiring based on merit alone, to there not being enough persons of color who want to work in STEM, this guide provides resources for more fruitful discussions. The original documents can be found here and I’ve included the PDF on my website just to have a local copy. Have a look.