Everything is now together, refurbished LinuxCNC PC, all the motors hooked up and working. Now I’m figuring out all the settings and things like accelerations and feed rates and all that. I can now see the benefits of limit switches, particularly as new as I am at this whole thing. But it’s coming together nicely, I’m quite pleased with it. It will be a while before I can actually try to cut something out but so far so good.

space-sml
X90-sml

I wish I had a ‘before’ picture of this, you would not believe the disaster that was my shed!

Tons and tons of junk piled all over the place. Nasty. Nevertheless, after much physical activity and throwing away of ancient artifacts, here is my new floor and nice solid bench work. Talk about a strenuous weekend, I strained muscles I didn’t know I had. Ouch.

But it was worth it. I finally got started assembling my Probotix X90 3D Router.

Along the way I also lucked into a bunch of surplus windows boxes and flat screens so I promptly wiped em and installed Ubuntu. Sweet. They all have printer ports on them too, perfect for the X90 control box and Linux CNC. You can see one in the corner there.

I still have a ways to go, I’ve ordered a Super PID so I can dial in a router speed and cut plastic, in particular, styrene sheets.

A 3D printer at some point would also be nice but one thing at a time, eh? ha.

people-sm

So here is the collection. This is all of the resin casts I’ve done that have turned out ok. I have another, smaller pile of rejects but that’s part of learning how to do this. I think I’ve come to the limit of this particular process and tool chain. I need to step up to a more detailed 3D print and a vacuum system for the molds and resin casts.

me-A

Well, it’s ridiculously cold here, minus 3 degrees F this morning and I’m kinda bored so I thought I would post up a few things I’ve been working on.

First is new figures, I don’t have any pictures yet but I just got a new batch from Shapeways the other day. Some came out good, a couple not so great. I am currently printing in the cheapest material ‘strong and flexible’ but I have done a couple in the higher quality translucent plastic and am impressed with the detail on the faces. So I will probably switch to that for newer models in order to make better molds and castings. You can see the difference a couple of posts down, the translucent fellow holding an iPad.

I’ll retain the cheaper alternative for people wishing to order directly from Shapeways. I have many of my models on Shapeways in the ‘for sale’ section of my account, you can see them here- Martin’s Shapeways Store I have not printed all of these yet so some may or may not be printable.

Second is some research into the software needed for machining parts using a CNC machine. I’ve been evaluating CAM software with particular emphasis on pyCAM since it’s free. It works quite well but is very very slow in generating any sort of reasonably complex G code. There is quite a learning curve here but I want to be able to model both flats like model building walls and frames plus also do 3D types of objects.

Third is more work on learning the insides of WordPress including custom plugins and themes. I’m particularly interested in ‘responsive’ themes, those that use CSS media queries to resize the screen based on the type of device the web page is displayed on (mobile). I’ve been getting some good results but I’m still not where I want to be on that.

I’ve kinda gravitated away from any electronics and firmware for now so the bluetooth and a refactor of my xbee client and master code is on the back burner for a little while. I find I can’t force things much, I have to do what I feel like or I make a mess of things, particularly any sort of design or coding tasks. I’ll get back to those this spring.

thecrew

My crew of 3D people so far. Some are prints, some are resin casts. It’s quite a bit harder to get good results than I thought. Making molds is an art form unto itself. Click on the picture to see a larger image.

tablet

tablet-close

Got a new 3D print from Shapeways. This is just one of three, I’ll post the rest up later.

I could not get any of these to print in the cheap white plastic so I had to go up a notch to the translucent-flexible material. I must say the detail is ridiculous but this is a $14 figure. Kinda pricey eh?

bt

I’ve started some development for a new throttle controller, this one is based on an Android tablet for the user interface. My approach is a bit different than what is out there for tablets and smartphones though. I don’t like ‘sliders’ on a touch screen for controlling vehicles, so the idea here is to interface a small analog joystick (the parallax unit) and a potentiometer to do the actual control. The tablet will be used to pull up user interface screens for the locomotives and also have screens for controlling other things.

Basically, I’ve connected a generic bluetooth interface (about $10) to my Xbee Widget controller. The Widget can be configured to have up to 8 analog inputs, I’m using 3 of them here. I have the bluetooth interface on the spare serial port. On the other serial port is the Xbee which actually sends the commands to the locomotive.

I’m using PyGame to build Android apps with because I love Python and do not like Java!

Right now, the only thing on the screen that actually works is the speedometer. This is a screen shot of a Positive Train Control screen I dug up on the internet. I’m not sure what most of the other things on there are so this is just for playing around for now. But hey, it looks neat!

So anyhow, since I looked high and low and found ONE reference on how to scan the BT devices with Android Python, I decided to post up some python source to help out anyone looking to do this. As with most Python things, it’s really quite easy once you get the particulars ironed out.

To use this, just pass in the name of your bt device after you instantiate it. This is the same name you see when you pair your device with your tablet. In my case, it’s ‘HC-06′.



bluetooth = Bluetooth()
bluetooth.prepare("HC-06")
bluetooth.write("--testmessage--")


Here is the method. Note that the UUID in the device create is the same for all BT devices (as far as I know).

Jnius is a nice package that lets you call Java from Python so this could be used for other things besides Bluetooth but that’s another project. I really detest Java (sorry, I’ve worked with Tomcat and did not like it much) so anything I can do to write Android apps in python is great. Android Studio is ok, but MAN is it slow so that is another nail in the Java coffin for me.




#
# Bluetooth interface class for PyGame- Python Android Games and Graphics development
# you will need the jnius python library to use this
#

import pygame
import sqlite3
import math

try:
   import android
   from jnius import autoclass
except:
   android = None

class Bluetooth:
    def __init__(self):
        self.BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter') 
        self.BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice')
        self.BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket')
        self.UUID = autoclass('java.util.UUID')
        self.deviceValid = False

    def prepare(self, name):
        paired_devices = self.BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray()
        for device in paired_devices:
            if device.getName() == name:
               self.socket = device.createRfcommSocketToServiceRecord(self.UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
               self.recv_stream = self.socket.getInputStream()
               self.send_stream = self.socket.getOutputStream()
               self.socket.connect()
               self.deviceValid = True

    def write(self, sendString):
        if self.deviceValid:
           self.send_stream.write([ord(b) if ord(b) <= 127 else ord(b)-256 for b in sendString])

    def read(self):
        datastring = ""
        if self.deviceValid:
           c = self.recv_stream.available() 
           if c > 0:
              for i in range(c):
                  datastring = datastring + chr(self.recv_stream.read())
        return datastring
        
    def close(self):
        if self.deviceValid:
           self.socket.close()