Subscribe via RSS
30Apr/220

PowerComputing PowerCenter 180 – Power Supply

Turned this machine on for the first time since packing it away after getting Linux running on it and it tripped the main circuit breaker in my apartment! I'm still resetting clocks.

20220429 155013

I opened up the power supply, and didn't really like what I saw. The main large caps were bulging and there was a burnt-out resistor in between them. Instead of attempting a repair, I compared the ATX plug on the dead power supply with another ATX supply I had on hand and.... would you believe it... they matched? Same plug type/size/wiring. Probably not a smart idea to just plug it in and test, but it worked perfectly! Thank you PowerComputing for choosing off-the-shelf parts instead of proprietary power supplies!

So the answer is: You can use a standard ATX Power Supply in the PowerComputing PowerCenter 180. It lives!

Filed under: Apple No Comments
29Apr/220

Z Scale Layout – Rokuhan Flexi-Track

My crazy layout design needed some flexi-track for some curves, so I purchased a box in one of the batches. Opening it up, it became very apparent that it's nothing like any other flexi-track I've ever worked with!

20220423 121244

In the box, you get two rails with ballasted sleepers and a joiner fixed at one end. There's then 3 sets of 2-sleeper foundations that need to be removed from the frame. These are then slid onto one of the rails and, once you've added enough sleepers and created your desired length, the opposite rail is slid in very carefully.

20220423 121450

20220423 122029

Note above there's still a burr on the sleeper. Get rid of these with a sharp knife, otherwise the sleepers wont sit flush once the whole track is together...

20220423 122239

Keep going, sliding on the sleepers, then feed in the other side.

20220423 121331

20220423 122938

Note that I actually used all of the sleepers and the length of the track came to 35cm! Not 33cm as mentioned on the box? Once you've worked out your desired length and fed in all of the sleepers, you'll then need to cut the excess rail on either side. I thought I'd be getting out the dremel, but it turns out a sharp set of snips worked fine!

20220429 091511

20220429 091610

There was a bit of a point to the rail, so I filed it down with my pocketknife.

20220429 093417

A trial connection to a piece of straight track worked very well! There's a tiny gap up the top as the flexi-track wasn't bent to the expected curve... I couldn't hold it in position and take a photo at the same time.

20220429 105023

Back on the layout, the curve slotted in perfectly! I was initially worried about this style of flexi-track, but it turned out to be very easy to use!

Filed under: MRR No Comments
28Apr/220

Z Scale Layout – Akia 485-Series Traction Tyres

Just for a lesson in complete-failure, I attempted the fitting of traction tyres to an Akia 485-series EMU powered-car. The train couldn't get up gradients and so I thought I'd see how it went with traction tyres from Rokuhan.

20220418 150833

Rokuhan provides both 4mm and 5mm tyres, and I purchased a bunch of both sizes as I know I'll need them in the future. The power car in question is a standard 485-series passenger car and the shell comes off once minimal force is applied to separate both walls from the chassis. From here, you then need to remove the top circuit board by inserting a flat-head screwdriver in the 4 holes in the chassis, two on each side.

20220418 152052

Once that's off, remove the two weights.

20220418 151901

It gets a little tricky from here. The bogies are attached via drive-shafts with lateral pins. The chassis is a single unit, so you actually have to spread the frame to get the bogies out. Make sure to allow space for the drive-shafts when doing this, otherwise you might snap them.

20220418 151803

With the bogies out, you can grab a flat-head screwdriver and press down on the clips next to the power pick-ups. Pushing down on these will push the under-frame of the bogie onto the table. Once it's separated enough, you can flip the bogie over and lever the frame off.

20220418 151746

With this finally off, you have full access to the wheelsets and you can install traction tyres.

20220418 151555

Unfortunately, these wheelsets don't have the grooves for tyres and the trains run erratically once installed.
So don't do it! The end.

Filed under: Retro No Comments
26Apr/220

Z Scale Layout – Reviving A Marklin 8852 Krokodil

This poor thing came to me from Yahoo Auctions Japan in the first bundle'o'stuff. I threw it on the rails and it just sat there, dead as a doornail. Actually, I lie, I saw the headlights flicker once. Fortunately I paid only half the current going rate to versions showing on eBay now. Of course, that may be because this is an older variant.

20220410 205215

20220410 205224

20220410 205236

20220410 205404 20220410 205723 20220410 210139

The train was then thrown on the test track and still chose not to respond...

20220410 205326

I had a quick squiz of the manual above and realised that the unit had a switch to select between catenary and rails...

20220410 205416

But this also proved fruitless. The train was therefore stored back in its box for another day when I had the courage to try and service it. Around a week ago, that day arrived and I dismantled the loco.

Open-Train Surgery

The plastic shells come off with ease. Remove the main shell first, followed by both bogie shells.

20220410 205756

20220410 210006

The bogies are secured to the chassis by their axles, which are actually kept in place by the main shell. The axles hold a gear in between the bogies and main chassis which transfer the power from the worm gears.

20220422 110702

A quick look at the motor saw that it was in need of love. I carefully extracted it and un-sprung the brushes. They looked OK, but the contacts on the armature were tarnished. Cleaning these and reassembling the brushes saw the engine come to life, but still very erratically.

20220410 215926

20220410 215936 20220410 221107 20220410 221403

At one point the motor jammed when I wasn't looking and melted the contact off a brush. I attempted to solder it back on, but I couldn't get a precise location and the motor kept stalling and melting the solder I applied!

So. I started searching for brushes and found some on eBay... Which are still crossing an ocean from Italy somewhere. The joys of European models! I then stumbled across a page indicating that these older models had an optional 5-pole motor upgrade! Of course, the motor I needed was absolutely sold out and unavailable.

A lot of emails and searching later, I did the unthinkable: I actually clicked on the second and then third pages of Google search results! I then doubled down and opened a pdf result... To only find success! Nathan's Trains in QLD had five of the motors I needed in stock! And also brushes for the old motor. I bought both and they arrived in no time. I'd personally like to thank Noel at Nathan's Trains for stocking these vintage parts and providing great service.

20220421 201431

The new motor went in very quickly and easily, but the bogies were still jamming pretty badly. In fact, one wouldn't even complete a full revolution with the axle in, regardless if it was mounted to the chassis or not! At this point, after resoldering a few wires which had broken from twisting the components around, I went all-in and disconnected the bogies from the chassis to do a full service and alignment.

20220410 212647

Just like the actual Lego Krok that I built (see the end of this post), these wheelsets need the driving rods at 90-degrees to operate and I had a feeling they were both out. The electrical pick-ups were also showing over the top of the drivers and not behind them, where they should have been. Trying to work on these with the chassis strung on by the wiring was proving impossible. With the bogies separated, it was very easy to then roll them on the bench top, align, roll, align, test and repeat until the were totally in-binding.

20220421 214942 20220421 220332 20220421 215205

Note that there's really only one way to re-assemble these bogies. The driving wheels are permanently connected to the driving rods and the rods have a secondary 'fake' rod that makes orientation easy. If you scroll up to the pic of the side-on Krok with just the chassis shell, you can see that the bogie on the right has the drivers installed upside down. The 'extra' rod is hanging so low it hits the rails on each revolution!

I reckon I re-assembled both bogies around 10 times each. There's around 7 gears per unit and they're VERY fiddly. The electrical pickups are sprung behind the drivers and actually push them down when you're trying to force them in. Trying to align it all takes great patience! There was even a chunk of (what looked like) solder in one of the bogies that was causing the gears to jam... no wonder.

In the end, patience, grease and minute adjustments saw both bogies re-assembled and rolling smoothly on the table. The new motor was mounted in the chassis and the only real point you need to know is to push the motor ALL the way down into the chassis. It's easy to let it sit a 1-2mm too high... and if this happens, it'll fail to make proper contact with the bogies.

Finally, the wiring... It's slightly complex with the overhead caternary switch, but I re-soldered it all, failing to note how the directional headlights were wired... so... instead...

LED Headlights

It now has a 5-pole motor... the least I can do is give it a beautiful headlight. I found that the unit was really only running well in one direction (after all my hard work), so I set about removing the incandescent grain-of-wheat bulb and replacing it with an LED. I found a 3mm white LED in my box'o'junk and slapped on a 780ohm resistor. I then cut the legs ridiculously short.

20220426 142653

The existing light housing and contacts were removed and one LED leg and the other resistor leg were soldered to the tabs on the wheel pickups. Once in the correct direction, the LED lit up when heading forward!

20220426 142935

A little bit of adjusting saw the shell fit back on!

Internal Model Clearances

I just need to point this out, as I had a lot of trouble at the end. It turns out that the solder blobs I put everywhere were actually millimetres too high and causing the shells to not actually clip onto the frames! Easily fixed, remove the solder. I just had never thought that the clearance would actually be that low.

20220410 211923

Above, a reference shot for your future soldering nightmare.

My Lego Krok

I eluded to this before.. and I really can't believe that I haven't featured it on here before. It's a Lego version of this locomotive and it arrived for my bday last year.

20220426 220857

What a tiny Z-Scale loco!

Filed under: MRR No Comments
12Apr/220

Z Scale Layout – Arduino Control and Track Plan Updates

Actual trackwork on the layout has stalled recently. I failed to order all of the components I needed to build my previous plan and so used a few other off-cuts to, at least, make a circuit I could run trains on. First testing of trains was done with a 9v battery and the results were sub-optimal. Whilst browsing Jaycar recently, I saw a motor-controller shield for Arduino with 4 outputs and decided that was the way to go. It even has two servo controllers... I wonder what I can animate?

20220407 174142

I also had an Arduino Uno Wifi, so decided, instead of building some physical box with switches and dials, I'd make a webpage to control the layout! I've programmed this Uno Wifi before, so go and check that post out for caveats when dealing with this unit. The main point being that you need to program the WIFI module independent from the Arduino itself, using the serial connection as the conduit to communicate between the units. This all then gets a little difficult as you may also want to use that Serial port for logging output.

The Web Server

Fortunately, there are hundreds of examples to run with when creating these mini-webservers. I used the example over here, adjusting the page to control two throttles. Whenever a user presses a button, it updates the internal throttle variable and then sends both throttle values out over the serial port.

#include <ESP8266WiFi.h>

const char* ssid     = "wifi accesspoint name";
const char* password = "wifi password";
WiFiServer server(80);
String header;
unsigned long currentTime = millis();
unsigned long previousTime = 0; 
const long timeoutTime = 2000;

void setup() {
  delay(3500);
  Serial.begin(115200);
  Serial.print("AP:");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    //Serial.print(".");
  }
  // Print local IP address and start web server
  //Serial.println("");
  //Serial.println("WiFi connected.");
  //Serial.println("IP address: ");
  //Serial.println(WiFi.localIP());
  Serial.println("OK");
  server.begin();
}

int t1 = 100, t2 = 100;
int lastT1, lastT2;
void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients
  if (client) {                             // If a new client connects,
    //Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) {
      currentTime = millis();         
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            if (header.indexOf("GET /1/less") >= 0) {
              t1 -= 5;
            } else if (header.indexOf("GET /1/off") >= 0) {
              t1 = 100;
            } else if (header.indexOf("GET /1/more") >= 0) {
              t1 += 5;
            } else if (header.indexOf("GET /2/less") >= 0) {
              t2 -= 5;
            } else if (header.indexOf("GET /2/off") >= 0) {
              t2 = 100;
            } else if (header.indexOf("GET /2/more") >= 0) {
              t2 += 5;
            }

            if (t1 < 0) t1 = 0;
            if (t1 > 200) t1 = 200;
            if (t1 < 0 && t1 > -15) t1 = -15;
            if (t1 > 0 && t1 <  15) t1 =  15;
            if (t2 < 0) t2 = 0;
            if (t2 > 200) t2 = 200;
            if (t2 < 0 && t2 > -15) t1 = -15;
            if (t2 > 0 && t2 <  15) t1 =  15;

            if (lastT1 != t1 || lastT2 != t2) {
              Serial.print("THR:");
              Serial.print(t1);
              Serial.print(":");
              Serial.println(t2);
              lastT1 = t1;
              lastT2 = t2;
            }
            
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.print("<head><meta name=\"viewport\" ");
            client.println("content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons 
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.print("<style>html { font-family: Helvetica; display: inline-block;");
            client.println("margin: 0px auto; text-align: center;}");
            client.print(".button { background-color: #195B6A; border: none;");
            client.println("color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
            
            // Web Page Heading
            client.println("<body><h1>Train Controller</h1>");

            client.println("<h1>Throttle 1</h1>");
            client.print("<p>Requested Speed: ");
            client.print(t1 - 100);
            client.println("</p>");
            client.println("<p><a href=\"/1/less\"><button class=\"button button2\"><<</button></a> ");
            client.println("<a href=\"/1/off\"><button class=\"button button2\">Stop</button></a> ");
            client.println("<a href=\"/1/more\"><button class=\"button button2\">>></button></a></p>");

            client.println("<h1>Throttle 2</h1>");
            client.print("<p>Requested Speed: ");
            client.print(t2 - 100);
            client.println("</p>");
            client.println("<p><a href=\"/2/less\"><button class=\"button button2\"><<</button></a> ");
            client.println("<a href=\"/2/off\"><button class=\"button button2\">Stop</button></a> ");
            client.println("<a href=\"/2/more\"><button class=\"button button2\">>></button></a></p>");

            client.println("</body></html>");
            
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    header = "";
    client.stop();
  }
}

Note that the ESP2866 throws out a stupid line of text when it switches on. It's at 74880 baud or somesuch and, if you're already listening on the arduino-side, you'll receive a random pile of junk. Due to this, I've added a 3 second delay to the start of both units.

Arduino Motor Control Code

So, we have the webserver sending the throttle over the serial port... let's now read it and control the motors as expected.

#include <AFMotor.h>

AF_DCMotor innerLoop(1, MOTOR12_64KHZ); 
AF_DCMotor outerLoop(2, MOTOR12_64KHZ); 

bool is_ready = false;

void setup() {
  //just to skip the bios text output from ESP8266
  delay(1000);
  Serial.begin(115200);
  Serial.println("Starting...");
  innerLoop.run(RELEASE);
  outerLoop.run(RELEASE);
}

void loop() {
  while(Serial.available() == 0) { }
  String in_str = Serial.readString();

  Serial.print(in_str);
  while(in_str.length() > 0) {
    if (in_str.startsWith("OK")) {
      Serial.println("OKAY!");
    } else if (in_str.startsWith("THR:")) {
      String this_str = in_str.substring(0, in_str.indexOf('\n'));
      in_str = in_str.substring(this_str.length());
      Serial.print("Dealing with: ");
      Serial.println(this_str);
      int next_colon = this_str.indexOf(':', 4);
      int tt1 = this_str.substring(4, next_colon).toInt();
      int tt2 = this_str.substring(next_colon + 1).toInt();
      //Serial.println(next_colon);
      int t1 = (tt1 - 100) * 2.5;
      int t2 = (tt2 - 100) * 2.5;
      Serial.print("Throttles: ");
      Serial.print(t1);
      Serial.print(", ");
      Serial.println(t2);

      if (t1 == 0) { 
        innerLoop.run(RELEASE);
      } else {
        innerLoop.run(t1 >= 0 ? FORWARD : BACKWARD);
        if (t1 < 0) t1 *= -1;
        innerLoop.setSpeed(t1);
      }
      if (t2 == 0) { 
        outerLoop.run(RELEASE);
      } else {
        outerLoop.run(t2 >= 0 ? FORWARD : BACKWARD);
        if (t2 < 0) t2 *= -1;
        outerLoop.setSpeed(t2);
      }
    }
    in_str = in_str.substring(1);
  }
}

The AFMotor library was fun to wrangle. You choose the polarity via the run call, passing either FORWARD or BACKWARD. Turns out though, if you pass a negative value into the speed, it'll reverse the direction automatically. I initially was setting both and wondering why my train wasn't reversing!

Layout Updates

With the hobbled-together track, I'd made the basic figure-of-eight dual-track loop and was nearly bored of it once the controller was working properly. Friends also then came over for dinner that evening and asked how more complicated I was going to make the track... slightly insulted, I went back to the drawing board. Instead of dual-track all the way round, let's reduce it to single with a few loops and a yard.

newestplan

The result is ridiculous, but nicely uses the track I'd accumulated... only needing a little bit more. No problems with that as I got to order more trains at the same time. That track is still in the mail, so instead here's a video of the current trains.

Excuse the audio. How nice is that Marklin Santa Fe F7A? Love it. The Akia 485-Series hated the incline straight away and no amount of throttle got it going. I also need to fix the throttle increments as you can see the trains only start moving after 4 presses. Work to do!

Filed under: MRR No Comments