Installation B-struder

Having a reliable extruder is key to quality printing.
I’ve run into four extruders that gave nasty operational problems on Steel Fisher.

B’Struder: Universal Bowden 1.75mm Extruder

I call it B-struder beta for Steel Fisher.
B-struder Beta

Stepper motor plate

– B-struder_1515_plate.stl
– Layer height: 0.25 mm
– Kysan Nema 17 5.18:1 geared stepper motor
– M3x12 x3
– M3 washer x4

Steppr motor plate

Steppr motor plate

Idler arm

– B-struder_arm_M5.stl
– 623 bearing x3
– Pushfit Fitting x1
– M3x12 x1
– M3x25 x1
– M3 nut x2
– M3 washer x3



Fisher mount bracket

– steel-fisher-mount.stl
– M3x12 x2
– M3x15 x2
– M3 washer x4
– M3 nylon locknut x4



How it performs?

It could push through grooved filament like the photo.



1st trial

the position of B-extruder was too low. It prevented the effector moving to Y tower.

Wrong position

Wrong position

2nd trial

I designed the mount bracket using OpenSCAD.



The design error of the bracket created slight bending of Bowden tube. Heavy retraction during a print, B-struder failed to extruder filament.

The bending of Bowden tube creates retraction problem.

The bending of Bowden tube creates retraction problem.

3rd trial

I thought the compression spring would provide enough force against the idler arm. But it turned out lack of tension again created retraction problem during a print.

4th trial

I was lucky to find a spring that was almost identical to the description on B’struder document at a spring shop.

Length: 30.00 mm
Outer diameter: 10.00 mm
Wire thickness: 1.30 mm



The plate showed layer sepration, eventually fell apart middle of printing. The idler arm was moving back and force during retraction which caused no extrusion.

Filament is eSun 1.75 mm. Half of printed parts out of this filament cracked or broken. This is by far worst PLA filament I’ve encountered. I hope this is just a misfortune of picking a bad spool.

I decided to use eSun which is 20% more expensive than other PLA brands in South Korea after using a eSun filament came with Fisher Beta kit. eSun PLA was more flexible, showed consistent property over temperature variation.
B-struder's plate fell apart.


Posted in Reprap 3D Printer | Tagged , , , , , , , | Leave a comment

Steel Fisher is running like a tank.

So many story to tell about Steel Fisher.

One year ago I bought Fisher Beta kit from RepRapPro Ltd. To lower cost of the kit, the designers used laser cut acrylic parts from frames to core components. Effector was made out of two acrylic pieces and one wooden piece.  During the assembly I had to use glue for fixing broken parts out of necessity.  It would take at least two to three weeks for getting replacement parts from Great Britian or England.

The company closed down right after it released Fisher 1.  I felt unfortunate when I heard the news.  I didn’t expect to get technical service rather replacement parts became real concern.

I learned QCAD to convert all the DXF files for a laser cut company I dealt with. OpenSCAD’s DXF export lost critical geometry data so the company’s technician rejected DXF files I submitted twice. ^^

Anyway Bulbul Junior was out of commission due to unreliability of the  diagonal arms suspended by spring force a month ago. Putting aside Bulbul Junior, I started working on Steel Fisher.

Steel Fisher in action

Moai glasses holder

Steel Fisher

Fisher uses RepRapFirmware that has different way of handling Gcodes. Learning RepRapFirmware and undocumented practical issues of this firmware consumed many hours and frustration.

The real downside of Open Source Hardware, i.e. RepRap 3D Printer is it demands steep learning curve.  Direct technical support is unavailable.  Unfortunately so far I haven’t met  a decent maker who can give technical advice or printing parts where I live.

I made two time-laps video of Steel Fisher in action.

If I can remove subtle layer shift middle of printing session, I definetly plan to build bigger version of Steel Fisher.

After many hours of two Delta 3D Printers, I honestly do not recommend it to others. It’s a delicate machine that one failure of critical parts renders usability.  For instance, one or two freeplay out of 12 joints create calibration nightmare and inconsistent printing quality, notoriously layer shift.

The acceptable assembly error of six diagonal rods are within 0.1 mm.  All 12 joints have to be firm, should provide no freeplay. A tiny wiggle of effector contributes random layer shift.

Duet 0.6 wiring





Posted in Reprap 3D Printer, Uncategorized | Tagged , , | Leave a comment

Book shelves

It’s made out of steel angles I bought from a angle shop.
All bolts and nuts came with angles.  The angle shop cut angles by length I gave.

I made eight plates out of thin MDF boards and applied one layer of primer to them, fourteen cross bars that block the hole on the side of each stack.

Building a decent indoor wooden furinture requires tedious, time-consuming labor works. I’ve done it. Wood is organic, easy to work with. But to make it last years you need to apply paint and chemicals on it.

Advantage of steel angle over wooden bar:
– you spend little time to make parts.
– it’s scalable.
– it’s easy to assembly and move around.
– strong enough to withstand heavy weight.
– relatively cheap compared to wood.

Steel book shelves

Steel book shelves

Book shelf side bar

Book shelf side bar

book shelf plate

book shelf plate

Posted in DIY | Tagged , , | Leave a comment

Devuan Raspberry Pi 2 3D Printer server

Mini 3D Printer server

Devuan Raspberry Pi 2 is ready.

Computer: Raspberry Pi 2 Model B
OS: Devuan 1.0

Modification of 5V/2A power supply

I had a USB to micro USB adaptor and decided to use it instead buying a 5V/2A power supply with micro USB plug.

Find power and ground wires from the power supply cable using a multimeter.


Identifying power adaptor’s voltage polarity

Cut USB and power cable using a wire stripper. 20160815_0030

0.9 mm wire and 4.45 mm USB cable

4 pin USB plug

| 4 2 3 1 |
4: Ground
1: VCC (5V+)

micro USB and USB plug pins

Red wire: VCC (5V+)
Black: Ground
Green and white: signal


Shielded four wires in USB cable

Solder the two cable wires.

I used heat shrink tubes for the insulation.


Soldering power supply and USB wires

5V/2A power supply

3D Printing the case

Case files:

Filament: 1.75 mm PLA red (eSun) and yellow (No brand)
Layer height: 0.25 mm

Install and set up Devuan

Installation guide I followed is here.

I spent few hours from start to finish.

I had trouble while preparing a bootable SD card.  The SD card reader I have intermittent connection problem, which I should replace it for headache shake.

A weird thing is that only long USB cable off of Wacom table makes the card reader being plugged in Devuan.

Each time after I wrote the image file to microSD card, the card reader went dead.
$ sudo dd bs=4M if=raspbian-ua-netinst-v1.0.7.img of=/dev/sdb

gparted couldn’t format the microSD card so  I had to work on a Windows laptop for formatting and creating the installation microSD card.  I need to learn how to format a dd-ed SD card.

In second trial, the board was working. I could see IP address of the board on router’s admin page and “nmap -sn” command.

Installing Devuan Linux

Upgrade from Wheezy to Devuan

I could login in Raspberry Pi Wheezy using ssh.
Login ID/Passwd: root/raspbian

The whole upgrade had done in two ssh terminals.

# dpkg-reconfigure locales

# dpkg-reconfigure tzdata

Update /etc/apt/sources.list

# wget

$ dpkg -i devuan-baseconf_0.6.4+devuan3_all.deb

Create 01lean file
/etc/apt/apt.conf.d# more 01lean
APT::Install-Suggests "0";
APT::Install-Recommends "0";
APT::AutoRemove::SuggestsImportant "false";
APT::AutoRemove::RecommendsImportant "false";

# gpg --recv-keys 94532124541922FB

# gpg --export -a 94532124541922FB | apt-key add -

# apt-get update && apt-get upgrade && apt-get dist-upgrade

# apt-get install -y aptitude

# aptitude search '?installed' | grep systemd

# apt-get install task-lxde-desktop xrdp

# aptitude search '?installed' | grep systemd

# apt-get install sudo

Created a user named penguin.

VNC setup

# apt-get install vnc4server

penguin@pi:~$ vncserver  -geometry 1024x728 -alwaysshared -depth 24

You will require a password to access your desktops.

xauth: file /home/penguin/.Xauthority does not exist

New 'pi:3 (penguin)' desktop is pi:3

Creating default startup script /home/penguin/.vnc/xstartup
Starting applications specified in /home/penguin/.vnc/xstartup
Log file is /home/penguin/.vnc/pi:3.log

VNC client in the remot host

$ sudo aptitude install xvnc4viewer

$ xvnc4viewer

VNC Viewer Free Edition 4.1.1 for X - built Apr  2 2015 21:51:06
Copyright (C) 2002-2005 RealVNC Ltd.
See for information on VNC.

Fri Aug 19 00:57:48 2016
 CConn:       connected to host port 5903
 CConnection: Server supports RFB protocol version 3.8
 CConnection: Using RFB protocol version 3.8
Fri Aug 19 00:57:56 2016
 TXImage:     Using default colormap and visual, TrueColor, depth 24.
 CConn:       Using pixel format depth 6 (8bpp) rgb222
 CConn:       Using ZRLE encoding
 CConn:       Throughput 15714 kbit/s - changing to hextile encoding
 CConn:       Throughput 15714 kbit/s - changing to full colour
 CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
 CConn:       Using hextile encoding

Install hibernation program
$ sudo aptitude install pm-utils

Install Printrun for 3D Printer server

Install dependent packages
$ sudo apt-get install python-serial python-wxgtk3.0 python-pyglet python-numpy cython python-libxml2 python-gobject python-dbus python-psutil python-cairosvg git

Clone the repository
git clone

Build Cython-based G-Code parser
Go to Printrun directory and execute below command.
$ python build_ext –inplace

Remote 3D Printing on Raspberry Pi 2 server

It requires simple two steps.
First, upload a gcode file to the server. I use scp.
$ scp idler-bracket-v2.gcode pi@raspberrypi:3D-Printing/gcode-files

Second, ssh login to the server.
$ ssh -X pi@raspberrypi

Running Pronterface that provides GUI
Go to Printrun directory and start



Running  Pronsole that provides simple text UI
Go to the directory that stores gcode-file and start


Configure 250000 baud rate in USB connection

Open Configuration.h of Mariln firmware in Arduino IDE and change the baud rate constant to 250000.

#define BAUDRATE 250000 // (115200)

Upload the firmware.

You need to install latest pyserial from source code.

Download the source of pyserial
Decompress it
Go to the source directory
$ python build
$ sudo python install

Posted in DIY, GNU/Linux, Reprap 3D Printer | Tagged , , , , , , | Leave a comment

Addictive manufacturing technologies

What is 3D Printing?

Comprehensive guide to 3D Printing technology written by 3D Hubs.


Posted in Reprap 3D Printer, Science and technologies | Tagged , | Leave a comment

PID tuning variables in Marlin firmware

The code in the bottom is part of Configuration.h in Marlin firmware source code.
When PID auto tuning fails to produce consistent temperature control,  the wiki page suggest you manually change three variables, P, I, and D.

For manual adjustments:

if it overshoots a lot and oscillates, either the integral gain needs to be increased or all gains should be reduced
Too much overshoot? Increase D, decrease P.
Response too damped? Increase P.
Ramps up quickly to a value below target temperature (0-160 fast) and then slows down as it approaches target (160-170 slow, 170-180 really slow, etc) temperature? Try increasing the I constant.

What if the manual adjustment wouldn’t produce satisfactory PID values? Fluctuation over five degrees around target temperature, i.e. 200 Celsius degrees, printing a quality object is impossible. The object will have noticeable layers. Controlling temperature between one to two degrees is essential for quality 3D printing.

I spent hours to PID tuning after replacement of the thermistor on E3D V6 Hotend without success. It prints objects but the quality is below my expectation. While in printing temperature was changing 195 C to 210.

Out of frustration, I looked into Marline source code, changed the values of few variables in the below, made good PID tuning.

Play with PID_MAX, PID_INTEGRAL_DRIVE_MAX values. These two values affects the current heater uses during temperature adjustment. Default settings are both 255, which means the controller uses maximum amount of current.

Excessive current overshoots temperature and it creates fluctuation at target temperature. For instance, let’s set the target temperature at 200 C. The controller supplies current that heats up the heater block always 10 degrees over.

At 190 C, it will be 200 C and cuts current to maintain it. Then the temperature drops. The controller puts current at 197 C, then the heater block will goes up to 207 C. This is already too much and the controller cuts off current until it detects 200 C. Getting back to full power, 200 C becomes 210 C+.

190 -> 200 -> 197 -> 207 -> 200 -> 210

We need to remove excessive current that the controller believes in it’s good value. How to do it?

255 is default value, which is the maximum current. To make it 90% of the maximum value, do 255 * 0.9. And convert into integer is 230 or 229 (229.50)

I obtained 218, which is about 85% of maximum current.
I got PID_INTEGRAL_DRIVE_MAX 230 by multiplying 0.9 to 255, 90% of the value.

Reduced current indeed produced ideal PID values that I used to have, plus or minus one or two degrees of variation at target temperature.

// PID settings:
// Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current

// __test__ soft pwm uses PID_MAX/2. Half of power that PSU generates.
// My ATX PSU has 20A in 12V+ rail. Maxium Power output is 240W.
#define PID_MAX 218 // (255)  limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#ifdef PIDTEMP
#define PID_DEBUG // Sends debug data to the serial port.
// #define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
#define PID_FUNCTIONAL_RANGE 10 // (10) If the temperature difference between the target temperature and the actual temperature
// is more then PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
#define PID_INTEGRAL_DRIVE_MAX 230  // (255) limit for the integral term
#define K1 0.95 //smoothing factor within the PID
#define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the temperature routine

Posted in Reprap 3D Printer | Tagged , , , , | Leave a comment

How to repair rubber grip of old Nikon cameras

I cleaned Nikon D200 yesterday using 85% alcohol, Q-tip, and cotton rag.


The rubber grips are lifting off here and there. I put small pieces of electrical tape over the  right-hand side grip where thumb rest.


Rubber grip repair

The maker uses “strong” double side tape, alcohol, a utility knife, with replacement grip.


“D200 grip” search on eBay brings sellers in China.


I found an interesting product, mouldable glue that turns into rubber.

Posted in DIY, Photography | Tagged , , , , | Leave a comment