a tall bike

Paul drop by the workshop with two bikes, to solder them together in one bike.
He did it very fast and the result is really funny.
I loved seeing someone so interested by getting a result, doing fast and experiencing its accomplishment right away.
Some work still is required, but yeah, it’s already ridable !

Now I want mine.

Using AVRISP mkII and Arduino IDE under Ubuntu lucid

If like me you would like to upload your sketches using the AVRISP mkII under Linux like you can easily do under OSX, I suggest the following procedure:

1. Add the following text to board.txt (located in the relative path hardware/arduino in your arduino installation folder)

jivedingo wrote it on arduino forum

##############################################################

avrispmkii_168.name=AVRISP mkII w/ ATmega168

avrispmkii_168.upload.protocol=avrispmkii
avrispmkii_168.upload.maximum_size=14336
avrispmkii_168.upload.speed=19200
avrispmkii_168.upload.using=avrispmkii

avrispmkii_168.bootloader.low_fuses=0xff
avrispmkii_168.bootloader.high_fuses=0xdd
avrispmkii_168.bootloader.extended_fuses=0x00
avrispmkii_168.bootloader.path=atmega
avrispmkii_168.bootloader.file=ATmegaBOOT_168_ng.hex
avrispmkii_168.bootloader.unlock_bits=0x3F
avrispmkii_168.bootloader.lock_bits=0x0F

avrispmkii_168.build.mcu=atmega168
avrispmkii_168.build.f_cpu=16000000L
avrispmkii_168.build.core=arduino


##############################################################

avrispmkii_328.name=AVRISP mkII w/ ATmega328

avrispmkii_328.upload.protocol=avrispmkii
avrispmkii_328.upload.maximum_size=30720
avrispmkii_328.upload.speed=57600
avrispmkii_168.upload.using=avrispmkii

avrispmkii_328.bootloader.low_fuses=0xFF
avrispmkii_328.bootloader.high_fuses=0xDA
avrispmkii_328.bootloader.extended_fuses=0x05
avrispmkii_328.bootloader.path=atmega
avrispmkii_328.bootloader.file=ATmegaBOOT_168_atmega328.hex
avrispmkii_328.bootloader.unlock_bits=0x3F
avrispmkii_328.bootloader.lock_bits=0x0F

avrispmkii_328.build.mcu=atmega328p
avrispmkii_328.build.f_cpu=16000000L
avrispmkii_328.build.core=arduino

##############################################################

2. Backup arduino’s avrdude and use your local avrdude
It seams that the avrdude binary coming with arduino 018 distribution isn’t compiled with usb support.
If your remove it and link your local avrdude binary instead, upload using mkII works like a charm.

# apt-get install avrdude libusb
# cd /path/to/arduino/folder
# cd hardware/tools
# ln -s avrdude avrdude.without-usb-support
# ln -s `type avrdude | cut -d "(" -f 2 | cut -d ")" -f 1` avrdude

Then you will be able to select AVRISP mkII \w ATmega328 or AVRISP mkII \w ATmega168 from the tools>board menu.

Makerbot power consumption

Because I think to power a Makerbot from a car battery, I spend a little while checking the power consumption of a Makerbot.

The main board connector feed the main logic, the plastruder and the heated platform, while the hard drive connectors feed motors and leds.

I used an old ATX connectors and made four groups of wires : 3v3, 5v, 12v and ground.
The remaining wires (5VSB, /PS_ON, PWR_OK, -12v and -5v) where directly connected to the main ATX power supply.
I did the same with hard drive connectors, I disconnected 5v, 12v and ground.
Then I plugged not less than 5 “multimeters” between each power source and ground to record all different current consumption.

So I wrote this sheet :

Voltage Average Maximum
MB 3v3 very few very few
MB 5v 200mA 350mA
MB 12v 2700mA 3500mA
HD 5v 30mA 50mA
HD 12v 1000mA 1700mA

The average power consumption of a makerbot with heating platform seams to be around 70W and the maximum power consumption around 85W. Differences may apply due to the custom configuration, it’s just an overview.

My custom heating platform is made of three 2.2Ω resistor in serial on a 3mm aluminum plate.

RECYCLING: a spoon against XDCAM Transfert

Tonight a friend came with her brand new Mac and a lot of files to import using XDCAM Transfert.
It seams that this software was made by tired developers, so we had to generate previews on every clip before importing.
Well, the real problem isn’t that you have to select the folder, but the fact that you have wait about one second for previews generation (no, there is no “group function”).

With about 3’500 folder, we would have been quickly mad.

And of course, moving all files in one folder isn’t possible, because they already are sorted.
There is probably many other (programmatic and smarter) solutions, but the punk-ier still is the funn-ier, no ?

So my solution is to recycle an old project, writing this post and going for a nice diner, while the mechanism goes by it-self…

PS: I guess it’s a good way to test keyboards…

#include 

Servo servo;

int servo_pin = 9;

void setup ()
{	
  servo.attach(servo_pin);
  Serial.begin(57600);
  Serial.println ("Finished setup\n");
}

void loop ()
{
  servo.write(115);
  delay(250);
  servo.write(80);
  delay (1000);
}

Makerbot, long story short

Voilà, I received a makerbot in the beginning of February. The following is the story of my adventures with this great, but at times frustrating, piece of technology.

When I ordered the printer, I was expecting a tool and not a toy. I strongly hoped that I would be able to print my own parts for bots, prototype and so on. I believe I will now be able to use it as a tool, but it took some work and tinkering to get there.

When the package arrived, I had to wait 2 more days before starting to build the machine. But then, I forgot all my duties and dove deep in the assembly for what turned out to be a long evening of happiness. I can easily relate this moment with my child memories: spending days and night with legos, mekanos and computers, where the conscience is a perfect mix of dreams and reality.

Building the printer was easy. It’s pretty well explained on wiki.makerbot.com. The parts are precise and well designed.
Except for some details with the plastruder and the inversion of two motor axis, everything worked out of the box.
However, I experienced pain with the software. Skeinforge is a complicated software, because 3D printing by extrusion is something complicated. But Skeinforge is also a bit immature and performances are not that good.

Anyways, finally I was able to print little pieces. However, when I tried larger pieces or more complicated forms, the plastruder jammed. It took me a while to understand the multiple origins of this problem:

1. the plastruder

Assembling the extruder isn’t that difficult as long as you understand what really matters !
It is well documented on the internet, but I think it’s worth telling again.
Two mechanism are fundamental :
1. the ABS filament propulsion
The force which causes the extrusion has to be powerful and constant. Makerbot industries produced a new pulley gear which improves this aspect.
It turns out after a short while that the idler bearing brike because of the excessive forces bearing on it.
To make it push ‘like a charm’ I had to check the following points twice :
– the idler pulley is stable and well aligned with the motor pulley (which is not so easy, I used spare washers)
– the motor pulley used should be the MK5 model, the new one
– washers around the idler bearing should be oriented to produce as little friction as possible
– the gad between both pulleys is tight and correct (use the calibration tool to check)
– everything is well tightened

It should be very difficult (and not recommended) to keep the filament from going forward through the pinch system.

2. the linearity of the filament’s path through the insulator to the heater barrel
When the heat is on, it happens that the PTFE insulator expands with the effect to let ABS matter leak between the insulator and the heating barrel. The more material leaks, the wider the gap grows.
When the insulator inflates it becomes impossible to extrude.
Digging the web I found two solutions :
– Using PEEK insulator instead of PTFE seams to improve durability (I haven’t tried this yet, my parts have just arrived)
– Tighten the insulator with a hose clamp (which I did on my old defunct PTFE insulator)

3. the heating platform

A heating platform is a good choice. Mine is made of 3 8ohm resistors setup in serial.

With theses two adaptations, I’ve been able to print almost everything.

ReplicatorG

Working with skeinforge’s configuration was a bad adventure. Fighting with parameters and struggling with weak performances isn’t easy at all.
Hopefully the new ReplicatorG can hide all those details for beginners and grumpy guys like me.

Tonight is the first time I could print in peace and reliably, without worries, which explains my motivation in writing this post. I’m happy and looking forward to finding lots of real use for my printer. Thanks to makerbot industries and thanks to all the makerbot owners who helped me find a solution.

links

STL-> gcode improvement witch CUDA : http://pleasantsoftware.com/developer/3d/
Interesting experiments : http://hydraraptor.blogspot.com/
hose clamp solution on makerbot blog : http://blog.makerbot.com/2010/07/14/barriers-barrels-ptfe-oh-my/
hose clamp solution on makerbot forums : http://wiki.makerbot.com/forum/t-250421

Blender in fullscreen under OSX

Running blender with the argument “-W” starts it in fullscreen mode.
But under OSX, users applications stored in the folder /Applications are not ran like command line tools.
In a terminal windows, using CLI, you are supposed to run the command open to invoke users applications.
Then, you can add an argument to open to append arguments to your executable!

open /Applications/Blender/blender.app --args -W

I tried to put it directly in Info.plist which wasn’t possible.

Using automator I have been able to build another user application (kind of script) that runs Blender with the fullscreen parameter.
All through the Finder so it’s easy, even for newbs and lazy creatures.

Finally you can shortcut it to your dock or anywhere else.

blender_fullscreen.app

ERRATA
I had some strange issues using the -W switch. Use the command below instead :

open /Applications/Blender/blender.app --args -p 0 900 1440 900

Where 1440 and 900 are X & Y of your resolution.

Open the package using open package content of your Automator script and edit Info.plist. Add:

<key>LSUIPresentationMode</key>
<real>4</real>

/ERRATA

Labo workbench light, a bit more clever than a switch

Using an old Arduino, a MosFet transistor, 5m of led strip and an old alarm detector (SIEMENS IR100B), I built an interesting little lighting set up.
The idea is that the leds switch on as you approach the desk.
The detector is a bit sensitive, but it does the job ok.
I was curious about the free run consumption when the leds are turned off.
Doing this project I got my answer: it’s very little. Less than 100mW according the wattmeter.

In attachment, code, schematics and video for reuse and improvement.

thanks to fritzing
/* Theo Reichel, Reichel Complex AI, 02/2010 */

int sensorPin = 2; // interrupt 0
int sensorAlimPin = 4;
int ledArrayPin = 9; // PWM
int buttonPin = 3; // interrupt 1
int ledPin = 11; // PWM

volatile bool sensor_status = LOW;
volatile bool button_pressed = LOW;

volatile unsigned int light_power;

unsigned long sensor_millis_diff = 0;
unsigned long sensor_status_age = 0;

volatile int menu;
int i;

void setup()   {
  Serial.begin(19200);
  Serial.println("Labo desk light with detector started");

  pinMode(ledArrayPin, OUTPUT);
  pinMode(sensorAlimPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);

  digitalWrite(sensorAlimPin, HIGH);

  attachInterrupt(0, sensor_trigger, CHANGE);
  attachInterrupt(1, user_button, FALLING);
}

void loop()
{
// menu
  while (menu == 0)
    detector();

  while (menu == 1)
    always_on();

  while (menu == 2)
    always_off();
}

void fadein()
{
  for (light_power; light_power<255; light_power++)
  {
    analogWrite(ledArrayPin, light_power);

    if (button_pressed) // button can interrupt fade
    {
      button_pressed = LOW;
      break;
    }

    delay(5);
  }
  if (light_power == 255) // electrical workaround
    digitalWrite(ledArrayPin, HIGH);
}

void fadeout()
{
  for (light_power; light_power > 0; light_power--)
  {
    analogWrite(ledArrayPin, light_power);

    if (sensor_status) // sensor can interrupt during fadeout.
      break;

    if (button_pressed) // button can interrupt fade
    {
      button_pressed = LOW;
      break;
    }

    delay(10);
  }
  if (light_power == 0) // electrical workaround
    digitalWrite(ledArrayPin, LOW);
}

/////////// programs /////////////

void detector()
{
  digitalWrite(ledPin, 50);

  if ( sensor_status )
  {
    Serial.print("update sensor_status_age: ");
    Serial.println(sensor_status_age);
    sensor_status_age = millis();  

    if (light_power < 255)
    {
      Serial.print("fadein from light power: ");
      Serial.println(light_power);

      fadein();
    }
  }
  else
  {
    sensor_millis_diff = millis() - sensor_status_age;

    if ( light_power > 0 && sensor_millis_diff > 60000 )
    {
      Serial.print("fadout from light power:");
      Serial.print(light_power);
      Serial.print(", duration without motion");
      Serial.println(sensor_millis_diff);

      fadeout();
    }
  }
}

void always_on()
{
  digitalWrite(ledPin, HIGH);

  if (light_power < 255)
    fadein();
}

void always_off()
{
  analogWrite(ledPin, LOW);

  if (light_power > 0)
    fadeout();
}

/////////// interrupts /////////////

void sensor_trigger()
{
  sensor_status = !digitalRead(sensorPin);
}

void user_button()
{
  button_pressed = HIGH;

  if (menu == 2)
    menu = 0;
  else
    menu++;
}

The next project in the same wave is to make a nice PCB, arduino compatible with FET and detector on board.
Adding some nice little things like RTC, light sensor and a little led display, I plan to build a better light management.
For instance, if the room is bright enough the leds stays off.
If the time is far in the night, meaning that I’m not supposed to be awake, the light is faded to keep it soft for my eyes.
And of course a single push button to iterate different modes.

There is probably a lot more to do to make “clever” lights.
Feel free to share your ideas, I’m very interested.
But please, don’t mention clapping in the hand like in SF movie. I believe the light is improved if it adapts to our presence without our explicit will or interaction.

3D printing Thursday

OK.
You don’t know it yet because I haven’t bloged it, but I received a nice cupcake from Makerbot industries yesterday. The box is already built and it prints pretty well.
This post proudly announces the 3D printing thursday.
I believe people who don’t have access to 3D printer but have ideas that need to be solidified should come and see the revolution in motion.

So, it’s every thursday from tomorrow to infinity, Complex ai, 5 Rue des Maraîchers, 1205 Genève, Suisse.
It starts at 19:00
If you want to print stuff (I hope so), you are invited to come with .stl file (USB, internet, whatever) instead of just ideas. I don’t know much about 3D and I’m not able to realize phantasms with modeling software. So please, bring them with you otherwise than in your head. Make it REAL, tangible, touchable, usable !

fire to the makerbot !“. Many thanks to MakerBot Industries to 3D printing and happiness that comes along.

See ya.