What is Freeside?

Freeside is a Georgia nonprofit corporation, organized to develop a community of coders, makers, artists, and researchers in order to promote collaboration and community outreach. Learn more »

Bench power supply project

I found myself needing a 480W power supply to test a high current project I was working on. A 500W bench/lab power supply will set you back $100s so I figured a PC power supply was the cheapest bet. For $80 you can get a Wonhunglow brand. I checked ebay and found Dell 500W server power supplies CHEAP. Like $2 cheap.

I acquired a couple and figured out how to turn the thing on by shorting 3 pins together. Then I designed a simple little 4 rail power supply PCB and had it built by OSH Park. This power supply outputs 12V and 5V and 4V. I didn't have any use for the 4V so I skipped those pins but did add a 500mA 3.3V LDO to my board so I have 3.3V, 5V, 12V, and GND rails available. I left a large section of the solder mask missing so I could solder on some more current carrying capacity and called it done. I used a DPDT switch to short out the 3 pins required to turn on the 12V rail and added a little LED to indicate that the 3.3V regulator was running and put a small current limiting resistor on the LED so that the regulator is stabilized (I didn't check the datasheet too closely but it is common for an LDO to behave strangely until it has a minimum load). One minor complicating factor was the unusual connector on this hot swappable power supply. It had a part number on it though and I was able to get Molex to send me a couple mating adapters.

I will redesign this with a fully adjustable constant voltage and constant current output in the the future. That will be a bit of a project because 500W is a lot of power to bleed off and I want it to be accurate so I plan to use 12bit DACs and ADCs. I've been looking around for them and they are expensive enough that I think I will just use a ARM Cortex 3 microcontroller with on board 12 bit converters. More on that on some future post.

Here it is.
The business end.
Plugged into the Power Supply
Side view of the Power Supply with PCB attached
The back side featuring the LDO and Molex connector.

Successful Launch of Classes on Meetup



A little over 2 weeks ago, we at Freeside Atlanta launched a series of classes on Meetup on everything from Linux to 3D Printing. They've been a huge success so far! Our 3D Printing class, shown above, was taught by 3D Printing Expert Anthony Aragues. We had 11 students sign up for the first class, where they covered the recent iterations of hardware and software and how to use them.

In fact, every single class that we launched filled to capacity. Intro to Linux, Intro to Electronics, Intro to Arduino, CNC, and 3D printing. Thank you to all of the Teachers and Students that made this little experiment such a success! Because of how well this first round went we'll be launching more classes and workshops soon, so stay tuned!

Sharp Memory LCD - Arduino Library


This post extends the previous post.

Source Code Released!
http://code.google.com/p/arduino-sharp-memory-lcd-gfx-library/

I've got a little reflow oven simulation running on the LCD. I think its going to be great for the reflow oven project.

The source for the sketch in the video is attached below. The library now does vectors in addition to text and bitmaps. I am now extending the Adafruit GFX library so I can use those vector drawing routines in addition to my PGM space bitmaps. I still need to clean up the unnecessary banging I am doing on one pin. I'll post up the code on the interwebz for all to use once that is cleared up. I need a darn oscilloscope to inspect that pin!

If you need an early copy of the library and you don't know how to contact me, PM me from the youtube video.


#include 
#include "SharpMemoryLcd.h"

SHARPMEMORYLCD lcd;

void setup() {                
  Serial.begin(9600);
  lcd.LcdInitialize();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
  
}

void loop() {
  lcd.setCursor(1,6);
  lcd.setTextColor(0, 1);
  lcd.setTextSize(1);
  lcd.setTextWrap(1);
  lcd.print("Craftycoder's");
  lcd.setCursor(1,15);
  lcd.print("Sharp Memory");
  lcd.setCursor(1,24);
  lcd.print("LCD Library"); 
  lcd.setCursor(1,33);
  lcd.print("Extends"); 
  lcd.setCursor(1,42);
  lcd.print("Adafruit GFX");  
  lcd.LcdPrintBuffer();
  delay(4000);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
  lcd.drawLine(0, 0, 95, 95, 0);
  lcd.fillRect(4, 4, 7, 7, 0);
  lcd.fillCircle(7, 7, 2, 1);
  lcd.LcdPrintBuffer();
  delay(1000);
  lcd.LcdClearBuffer();
  lcd.setCursor(1,2);
  lcd.print("Draw Vectors");
  for(int x=0;x<32;x=x+4) {
    lcd.drawRect(47-x/2, 47-x/2, x, x, 0);
    lcd.drawCircle(75, 75, 20-x, 0);
    lcd.LcdPrintBuffer();
    delay(10);
  }
  delay(5000);
  lcd.invert(1);
  lcd.setCursor(1,11);
  lcd.print("Invert Them");  
  lcd.LcdPrintBuffer();
  delay(5000);  
  lcd.invert(0);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
  lcd.setCursor(4,5);
  lcd.print("Reflow Oven");
  lcd.setCursor(4,14);
  lcd.print("Simulation");
  lcd.drawRect(0, 0, 96, 96, 0);
  lcd.drawRect(1, 1, 94, 94, 0);
  lcd.drawRect(2, 2, 92, 92, 0);
  for(int x=3;x<93;x++) {
    lcd.drawPixel(x,95-testTemp(x),0);
    lcd.drawPixel(x,96-testTemp(x),0);
    lcd.LcdPrintBuffer();
    delay(10);
  }
  lcd.setCursor(26,80);
  lcd.print("Remove PCBs");
  lcd.LcdPrintBuffer();
  delay(10000);
  lcd.invert(0);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
  lcd.LcdPrintImage();
  delay(1000);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
}
int testTemp(int x) {
  if(x<30)
    return x+1;
  if(x<60)
    return 30+((x-30)/2);
  if(x<75)
    return 45+((x-60)*2); 
  if(x<85)   
    return 75;
  if(x<94)
    return 75-((x-85)*3);    
  
}

Sharp Memory LCD - Musings

Update: Arduino Library Released

If any of you guys were at Freeside this weekend, you would have seen me staring into the oscilloscope trying to make heads or tails of its output and comparing that to a couple of datasheets. One of those datasheets was for the Atmega328P microcontroller that is on the Arduino UNO, the other was the Sharp Memory LCD. These are cool because the are ultra low power 6uW and have extremely high contrast.

The Sharp datasheet isn't what I would call straightforward, at least for the uninitiated (whom I count myself among). The power up sequence was pretty clear but once it came to pushing pixels it got a little vague. Really it was just a bunch of waves on the sheet.


One of the waves is a constant 5-60Hz pulse. That is the sort of thing that would be very irritating to create if you are bit banging on the main loop of your program, so I needed to get the AVR to pump that out in an automatic way. Researching the interwebz and reading the Atmega datasheet at length and comparing that to the output on the o-scope, I came up with this:

pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22) | _BV(CS21) | _BV(CS20);
OCR2A = 65; // 60HZ roughly
Which is logically equivalent this (to but not as annoying because it happens in the absence of the loop):
int bang = 0;
void loop() {
  pinMode(9, OUTPUT);
  if(bang == 0) {
    digitalWrite(9,HIGH);
    bang = 1;
  } else {
    digitalWrite(9,LOW);
    bang = 0;
  }
  delayMicroseconds(8333);
}

The prior code puts out a "phase correct" square wave on pin 11 at 60Hz. It also screws with pin 3 (not good) which I need to address next time I am at a scope. With that, it was just a matter of reading the data sheet for the screen and deciphering the thing into C code. I also found a non-arduino project on youtube using one of these screens and asked the poster to send me his source which was very helpful in understanding the datasheet. Once that was done, I converted that C code into C++ code and made a "SharpMemoryLCD" Arduino library. Currently it can print out basic strings and read byte[]s from PROGMEM and paste them to the screen. I will also add some other features like painting vectors to the screen and loading bitmaps from a disk before I'll call it "done". The current functionality is enough to get the reflow oven project I am working on finished though. That reflow oven project will be the basis of a future Freeside project/class where attendees will get a custom PCB and firmware to use to convert their toaster oven into a high quality reflow oven. You will be required to bring a 1500W toaster oven, and I think the rest of the stuff I'll include in the class fee (custom electronics, solid state relays, and thermocouples).



This is the code that produces the images in the video above. The library is not link up yet. I'll make a google code project for this once I have it a little more mature. Feel free to post up a comment if you want a pre-release copy. I'll hook you up.
#include "SharpMemoryLcd.h"

SHARPMEMORYLCD lcd;

void setup() {                
  Serial.begin(57600);
  lcd.LcdInitialize();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();

}

void loop() {
  lcd.LcdPrintString("  CRAFTYCODER'S",4);
  delay(1000);
  lcd.LcdPrintString("  WIFE COMES HOME",7);
  delay(1000);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
  lcd.LcdPrintImage();
  delay(1000);
  lcd.LcdStopEXTC();
  lcd.LcdAllClearMode();
  lcd.LcdStartEXTC();
}

ISP Programming Jig w/ pogo pegs


During one of the last projects I was working on, I found that the first programming jig I made had a serious draw back. It could only put the #1 pin of the programmer in two of the four corners. That meant that I could only program my board from one side. That was fine until I assembled the project in it's case. At that point, reprogramming was a difficult task that required disassembly, something I never considered when I designed the item and as it turned out it was almost impossible to do without destroying it. Annoying!

Three weeks ago I decided I wanted to flash some new firmware on my motorcycle remote so I could use it to put a GPS on my Kindle Fire. That meant I needed take it apart and risk destroying it. Not an exciting prospect. Then I thought, why don't I just build another programming jig like the last one only upside down. That seemed like a winner, because it was fast, but I didn't have any more 2x3 ISP headers. Bah! Since I needed to wait on a shipment from Digikey I went ahead drew up a custom circuit board and added a few bells and whistles and sent it to fabricator. 

The bells and whistles I spoke of are a pair of ISP headers which are mirror images of each other and a pair of LEDs that point to the #1 pin. When you plug into one the of the two headers, one of the two LEDs lights up pointing to the #1 pin. This function makes it easy to identify how to orient the PCB to the jig.

Below are images of the schematic and the board layout. The assembly is very easy. You just take two of the PCBs solder a pair of headers to the bottom board and pogo pegs to both and use some stand offs for strength. Check out the video for a better look at the final assembly.

You can modify the Eagle files posted below or send the pre-configured Gerber files directly to http://oshpark.com/ or your preferred fabricator to get some PCBs of your own.
Link to Eagle and Gerber Files

 

I drew up the board upside down for no particular reason.
Blue is the outside and red is the inside.

Simple Chemistry

Inspired by THIS

!SAFETY!
This is some dangerous stuff.
It will mess you up. 


Zn + 2 HCl        > ZnCl2 + H2



SCYTHE OF DOOM!

This giant masonry blade has been sitting around Freeside forever:

Rust and dust are indicators of abandonment.
Please make use of the rusty and dusty.
Note the diamond tipped edge


















I KNOW! 
Let's make a giant scythe for my Halloween costume!! 
(Never too early to plan)

Thingiverse: Anatomic Human Foot

Freesider's are evermore professional printistas of sorts.  As our sprints are ramping up, there seems to be a growing interest in "organic modeling".  Things often found in nature fall into this category for CAD artists.

Here is a recent Thingiverse upload, which was made from some very simple modeling techniques in Newtek's Lighwave 3D application.  A little goes a very long way, indeed.




per Thingiverse.com:
There are 26 proper bones in the human foot; 28 if you consider the sesamoids of the 1st metatarsal phalangeal joint complex. That's over 25% of your body's total musculo-skeletal anatomy, hitting the ground every time you go for a walk or run! Quite impressive, really.

Read More:
en.wikipedia.org/wiki/Foot
learnbones.com/foot-bones-anatomy

This anatomic foot model was designed in Newtek's Lightwave 3D, as part of the podcast @ YouTube.com/DrGlassDPM

Anatomic study models can be quite expensive, search.anatomywarehouse.com/search?keywords=foot&x=0&y=0 so I wanted to share my printable version with the Thingiverse crowd and give a big shout out to Freeside Atlanta's Hackerspace!

Instructions

I've included the individual bones with a straightforward naming convention. These parts will be replaced, as I continue to add more detail and such; for now, enjoy!

Additionally, there are FootBones.stl and FootSkin.stl, for those of you Duel Extruding.

Otherwise, I'd be impressed to see some of the techniques towards printing this and having a clean separation from support material. This (and deriviatives thereof) will hopefully rival things like: molded study models search.anatomywarehouse.com/search?keywords=foot&x=0&y=0
-Nick

Freesiders Hackers Collaborate in Medical / Surgical Research

Published in the May issue of the Journal of Foot and Ankle Surgery:


This collaboration of specialties represents an undertaking by members of Freeside Atlanta, Southern Arizona Limb Salvage Alliance, and The Podiatry Institute.  Charcot foot reconstruction remains on of the most challenging procedures in foot and ankle surgery.  These procedures are often lengthy procedures which can be riddled with complications.

With the help of Freeside Atlanta Members, institutional researchers used open source Osirix Image viewer and 3D Software such as Newtek's Lightwave or Blender to create simulated surgical reductions as well as 3D printed templates.  Freeside Atlanta members assisted in providing 3D printing solutions and know-how to the project.

Experimental test prints were done on a Makerbot Thing-o-matic, and final templates were printed on a modified ZCORP z400.  These templates were full scale replicas of the patient's boney anatomy, which were used in the laboratory for practice purposes.  (see video below)


video

The surgical bone cuts were trialed in advance and the the Ilizarov fixation frame was constructed and modified prior to surgery.  The combination of these two things saved the surgeons literally hours of work in the operating theater, ultimately lowering cost of care and risk of complications.

3D simulations were used for templating surgical approach on printed replicas.

Intra-operative execution of practiced surgical plan.

Application of Ilizarov External Fixation Construct

The Abstract reads as:
Charcot foot syndrome (Charcot neuroarthropathy affecting the foot), particularly in its latter stages, may pose a significant technical challenge to the surgeon. Because of the lack of anatomic consistency, preoperative planning with virtual and physical models of the foot could improve the chances of achieving a predictable intraoperative result. In this report, we describe the use of a novel, inexpensive, 3-dimensional template printing technique that can provide, with just a normal printer, multiple "copies" of the foot to be repaired. Although we depict this method as it pertains to repair of the Charcot foot, it could also be used to plan and practice, or revise, 3-dimensional surgical manipulations of other complex foot deformities.
Copyright © 2012 American College of Foot and Ankle Surgeons. Published by Elsevier Inc. All rights reserved.

Red Bull Soapbox Derby

OH look! A package! I wonder who it is from?


Maybe it is something about the Soapbox race?

Looks like it


Oh Man! Red Bull and a note card saying "thanks but no thanks." 
 Don't they know I prefer diet?!?