Introduction: Center for the Digital Globe Class Project

About: Most days, I am an Associate Teaching Professor at the University of Missouri and a small business owner with decades of experience in project management, information security and videoconferencing technology.…

This is a small project used to introduce my "Exploring the Digital Globe" (MGMT 8100) students to open-source hardware, open-source software, and the Maker movement. This device is assembled and programmed during class: A 2-3 hour class with ~60 minutes devoted to the building and programming. Some of the connections are completed for the students in advance, so soldering newbies are able to complete the project without a lot of frustration. In addition, students are provided with a generic program they can download into their device which they can modify later.

Step 1: Develop Initial Prototype

Normally, I would not include details about all the trial and error that goes into making a final design. But since this is for a class, I think it is important to show that with any project there are a lot of bad ideas along the way to success, or at least a halfway functioning product. Experimenting, testing and "pivoting" are important parts of any project, no matter how large or small.

I'd also like to point out that this project meets my criteria for a great project because it helped me learn new skills. The main objective of any project or goal is to develop new skills that you can use on future projects. That way, if you fail to meet your main objective, you still have increased your capacity to take on future projects. For more on this concept, read Scott Adam's book How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life.

In this project, I used skills that I developed on previous projects and I developed a couple of new ones. Specifically, I learned how to design and produce printed circuit boards and how to submit an order for laser cut acrylic.

My original idea was to have a small project that students could complete using an open source hardware platform like a Raspberry Pi or an Arduino. I thought a wearable of some sort would work nicely. Or something that could go on a desk. I decided on a simple badge that would feature the name or initials of the MU Center for the Digital Globe (this course is one of the requirements to get a certificate from CDIG). My original idea was to 3D print a badge, with a back that could contain the electronic parts to flash some LEDs and one or two neopixels. So, I worked out a simple circuit on a breadboard and then designed a housing/badge that would display the CDIG initials and logo. I used tinkercad for the design work. Here is the design that I came up with: https://www.tinkercad.com/things/4M1uKq7zO0j. (The logo and letters are on the bottom of the design to reduce the amount of support material that needs to be printed.)

I printed it with a 3D printer, but it ended up being way too big, the electronic components didn't fit and printing this design would have taken too long. So back to the drawing board!

Step 2: Develop a Better Design !

For my next design, I put my circuit on a half-size protoboard and it seemed to fit nicely--a much better "form factor." Even better, I could sandwich the protoboard between two pieces of plexiglass or acrylic, protecting the circuit and making it look cool. I tried making my own acrylic pieces, but it turns out that my bandsaw doesn't work so well with this material (see photos above). But it was enough to prove out the concept.

My parts list included:

Step 3: Design and Order Printed Circuit Board.

Now that I had my design and parts, I set about figuring how to mass produce this in a way that would work well in a class.

In order to speed up the completion of this project, I decided to explore the possibility of creating a printed circuit board (PCB) to eliminate some of the wiring and the protoboard. I had already used a program called Fritzing ( http://www.fritzing.org/) to create circuit diagrams so I decided to try out the PCB design feature of the program. Turns out it was very easy to create a PCB, as most of the parts that I was going to use from Adafruit, were already in Fritzing. So it became a matter of drag, drop and connect the dots.

When ordering the PCBs, I decided to use the company Fritzing has integrated into their program/website for manufacture of the boards (https://aisler.net/). Aisler is in Germany, and the estimated time to make the board was ~8 days plus ~10 days for shipping to the US.

However, after 8 days I got the following email :


Hi Scott,

we have shipped your order this morning and upgraded you to Express Shipping via

UPS for free. This is our Premium Service that is currently in closed beta. We hope you'll like it ;-)

You can track it online via UPS.com with the following tracking number 1Z00Y43X0499986730 .

and while I'm at it: Hi, I'm Felix, co-founder of AISLER and your direct link into our team. For questions, feedback and any other topics regarding our service feel free to contact me anytime.

Cheers

Felix


And sure enough, 36 hours later the package was on the UPS truck here in Columbia, Missouri, and headed for my house. I don't even travel that fast!

Step 4: Order Laser Cut Acrylic

For the front and back of this device, I decided that a clear acrylic back, and an acrylic front with an engraved/etched logo and name would work best. After a small amount of searching and looking at various Laser cutting services, I decided to try Ponoko.

Getting your material cut is pretty easy. You download one of their templates for Adobe Illustrator, and add your design. To make a cut change the line color to blue. To engrave on the material make the image or letters black. I had my friend Chris Sanders help me get the illustrator file together. After that I uploaded it to the Ponoko web site and in a couple of weeks I had the cut Acrylic sheets.

With 20/20 hindsight, I should have made the acrylic less thick and I should have tried to reduce the wasted material by choosing a smaller template. But overall, it worked well for the first time!

Step 5: Class Time!

My friend Jonathan Sessions owns a business downtown where we could meet and have the facilities to solder and program this project. He is also very much a Maker himself. We were joined by Chris Sanders who helped with the class. Jonathan's business, Gravity, is all about Apple products which made for an interesting contrast with open source. After a discussion about open source and how hardware is becoming "copy and paste," students were given some basic instructions and set loose on assembly and programming of their first Arduino project.

Here is the generic program that was loaded on the device.

#include

#define PIN 3

int brightness = 10; // how bright the LED is int fadeAmount = 30; // how many points to fade the LED by int counter = 0; // counter to keep track of cycles

// Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first.

void setup() { pinMode(PIN, OUTPUT); pinMode(1, OUTPUT); pinMode(4, OUTPUT); //three is the neopixel strip.begin(); strip.show(); // Initialize all pixels to 'off' }

void loop() { // Some example procedures showing how to display to the pixels: //colorWipe(strip.Color(255, 0, 0), 50); // Red //colorWipe(strip.Color(0, 255, 0), 50); // Green //colorWipe(strip.Color(0, 0, 255), 50); // Blue // Send a theater pixel chase in... //theaterChase(strip.Color(127, 127, 127), 50); // White //theaterChase(strip.Color(127, 0, 0), 50); // Red //theaterChase(strip.Color( 0, 0, 127), 50); // Blue

rainbow(2);

//theaterChaseRainbow(50);

// set the brightness of the analog-connected LEDs: analogWrite(4, brightness); //analogWrite(2, 255-brightness); analogWrite(1, brightness); //analogWrite(1, 255-brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount; counter++; }

delay(15); }

void ledflash(){ // turns on the other LEDs every four times through the fade by // checking the modulo of the counter. // the modulo function gives you the remainder of // the division of two numbers: if (counter % 4 == 0) { digitalWrite(2, HIGH); } else { digitalWrite(2, LOW); } }

void rainbow(uint8_t wait) { uint16_t i, j;

for(j=0; j<256; j++) { for(i=0; i

// Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } }

All in all, I think it was a very successful class. Students will definitely remember the experience and hopefully something about open source hardware, what the Maker movement is about, and how the world of "copy and paste" hardware will continue to accelerate the pace of change in technology.