Tuesday, 13 January 2015

Infrared Remote Control

I realise it's been a long time since writing anything here...

Today, I'm going to share with you my Armdroid Remote Controller project, which was quickly hacked together for demonstrating the Armdroid 1 during a recent meeting of volunteers at TNMOC.

The circuit makes use of a single TSOP4838 IR receiver module along with some rather cleaver programming that decodes key presses and operates various Armdroid functions.

I'll be including the source code for this project as an example sketch in the forthcoming release of Armdroid Library on GitHub.

The project works surprisingly well, although movements to preset positions are made point-2-point (P2P), which is slightly different to continuous path movements.  This is after all, a demonstration, although could be easily extended to support waypoints and recording/playback of movements.

I've been using an old Sky remote control handset, you'll need to change the scan codes to match your hardware, although instructions will be included how to do this.

Connecting an infrared receiver module is relatively simple, the sensor output is connected to a spare digital input on the microcontroller.

ArmdroidShield (version 1) utilizes pins 2-9 for connecting to the Armdroid's 8-bit parallel interface, so pin 10 was chosen for this purpose, along with +5V and Gnd connections.  There are many common IR receiver modules available.  Check the datasheet for your device to ensure that you connect it correctly.

The software works by decoding the IR signals to digital pulses that correspond to buttons on the remote.  A scan code lookup table is then used to assign Armdroid functions to key presses.   This table uses function pointers to simplify the program logic, also included are methods for Rolling/Pitching the Gripper, along with routines for calculating target offsets when moving to new positions.

Saturday, 15 November 2014

Arduino ArmdroidShield

The restoration of TNMOC's Armdroid is getting closer to completion, and attention has shifted towards designing suitable displays for the robot at the museum.

Initial displays are likely to be Arduino based, and in time, we'll probably add other historical computers into the mix.   In the meantime, something I had not given much thought about, was what to do with my 'temporary' breadboard interface that's been used over the past year, a more permanent solution is however needed.

So, a couple of weeks ago, I decided to design a PCB to be called.... wait for it.... ArmdroidShield !

Having a purpose made PCB will of course be more reliable, and better suited to a harsher museum environment.  The goal was to keep things flexible - perhaps we'll use these at a future Summer/Winter Bytes and students can design other Armdroid-based control systems, so making the board using a Shield design, was an obvious choice.

This was my first attempt at designing a double-sided PCB.  Fortunately, the design doesn't require many components, so from start to finish - 2hrs including inspection of final design, and correcting contacts positioned too close together.

The PCB arrived the following week directly from the fabricator, and as you can see the results are pretty good:

ARDUINO ArmdroidShield

The shield has been designed around the Arduino R3 header standard making it compatible with the following products:
  • Arduino Uno R3
  • Arduino Leonardo
  • Arduino Yun
  • Arduino Ethernet
  • Arduino Tre & Arduino Zero (when available)
It's a very simple board, really just an adapter - only Digital Pins 2 through to 9 are utilized, along with common grounds.

The tricky bit was soldering the Stackable Headers and keeping everything properly aligned, but with perseverance, got there in the end.

ARDUINO ArmdroidShield

ArmdroidShield on the Arduino Leonardo:

Completed assembly ready for bench testing:

Monday, 6 October 2014

TNMOC Armdroid 1

The restoration work is progressing well, a few issues remain with the gripper and timing belts.  Hopefully, we'll have this heading to the museum in a few weeks :
Pictured TNMOC's Armdroid 1 and power supply

Tuesday, 16 September 2014


Finally, the original proximity sensors have been refitted to my Armdroid, and a new wiring harness completes the installation work.  As you may recall, they had been removed earlier when diagnosing tight-spots in the mechanics.

Machining new aluminum spaces was probably the most time consuming part.  The original spaces were in bad shape and had a tendency to rub on the reduction pulleys with the timing belts, this caused friction and as result, performance suffered.

The sensors are aligned perfectly to reduction gearing.  Setting up can be tricky - a multimeter comes in handy for testing, and making position adjustments.

All sensors have been positioned within a millimeter of reduction gearing, and more importantly, no longer make any physical contact.

The new 6-core wiring harness, connecting the four sensors mounted on the rear support bar, front-mounted gripper sensor, and Base position sensor was installed:

The hand sensor is still a mystery, see previous post Magnet Madness
For now, accepting the fact this won't do anything useful, have purposefully left disconnected and will decided later what I'm doing here.

Update:  Its a shame Colne Robotics didn't invest in designing a decent gripper tension feedback mechanism similar to that employed in the Microbot MiniMover-5 triggering a micro-switch contact under tension, or the gripper is completely closed.
Pictured to right - TNMOC/Armdroid showing sensor installed under Right-Hand Wrist function.  Not convinced this is correct either, sure, it will work, but leaves the Left-Hand Wrist monitored by only one sensor.

Another grey area in the instructions is chassis grounding - prototype models had their 7805 voltage regulator bolted to the chassis which grounds the circuit to the metal work.  Later, single-interface models do not do this, so a chassis ground cable was included in my wiring.   This will allow me to easily switch between interface circuits.

Tracing the circuit, the majority of the 14-pin header for the feedback sensors are ground connections.
Also, note, in Input Mode, the port address line D2 (header pin 8) is spare - no connection

This configuration is likely to change, but these are my current assignments:

Microswitch Assignment to Functions INPUT BIT CABLE / PIN
Forearm MS1 (D3) Yellow (13)
Left Wrist MS2 (D4) Brown (12)
Right Wrist MS3 (D5) Green (9)
Shoulder MS4 (D6) Pink (11)
Gripper MS5 (D7) Purple (9)
Base MS6 (D8) Blue-Green (14)

Monday, 25 August 2014

Bearings & Shoulder Rebuild

A rainy Bank Holiday in the UK, so what a better way to spend the day..... playing with Armdroids of course !!

Its been a while since touching my Armdroid, or the one being restored for The National Museum of Computing, and decided today, I would strip down the base, clean, and inspect every individual part before rebuilding again.

I've not previously covered anything on the Blog about the Bearing Assemblies, so thought this would be well worth some coverage here.

The following picture is a recap from last year, what my bearing assembly looks like:

This is a custom machined from Aluminum which forms the following components: (1) Base Bearing support column, (2) Shoulder Bearing support, and (3) Bearing adjusting ring (pictured with grub screw).  This is complimented by 24 ball bearings fitted around the upper and lower flanges.   Reading the construction notes, I imagine its quite a fiddle to assemble, keeping the ball bearings in place whilst turning over to work on the opposite side.

When first inspecting TNMOC's Armdroid, I always knew there was a difference with the bearings, but couldn't see clearly what was happening under all the dirt 'n grime, but, check this out - beautifully machined from solid brass

...which accepts flat needle-type roller bearings with steel shims for the upper and lower supports:

This is how the top of the assembly looks without the other assembles installed:

I'm guessing a previous owner made this as a repair, or perhaps an enhancement to the original assembly
Update:  After searching the internet and examining further photographs, I've now seen plenty of other examples of this arrangement, implying Colne Robotics introduced this as a later improvement.

The center bore for the cables is a lot narrower than the original assembly which does make feeding of cables tricky.  Another observation with this design - its no longer possible for users to make adjustments here.

The original assemblies can be easily damaged by cross-threading the adjustment ring, so be careful not to over-tighten if you need to make any adjustments here.

Having stripped all this down, gave it a jolly good clean, lubricated all moving parts, rotates like a dream now!

I've added more photographs of the rebuild below - might be useful if your rebuilding your base and shoulder and need a reference.

Saturday, 2 August 2014

Talk about Torque

The Armdroid Library on GitHub has just been updated with an enhancement allowing Holding Torque to be released or re-applied, and this is especially useful when recovering the robot after things have gone badly wrong, or runaway.

Holding Torque is defined as the amount of stationary torque required for a stepper motor to remain in a fixed position.

This is unlike operating torque (max and minimum) which is the torque a stepper motor can apply when experiencing zero resistance.  Changing voltage will of course, change this torque rating.  Additionally, there is stall torque, which is the torque a stepper motor requires when powered but held so it cannot rotate.

The specifications of the ID35 stepper motors used on the Armdroid are rated with a holding torque of 8.5Ncm (newton centimeters) and its almost impossible to manually articulate any joint while these coils are energized.  The enhancement made to the firmware library allows stepper motors to be freed under computer control, making it possible to manually re-position the arm.  The steppers can then be explicitly torqued again to hold the new position, or by simply running the motors again will indirectly do this.

Another potentially useful purpose is power saving when the arm is idle for long periods of time.

 void ArmBase::torqueMotors(boolean torqueEnabled)  
  for(uint8_t motor = 0; motor < 6; motor++)  
   MTR_CTRL* const mtr_ctrl = &mtr_control_table[ motor ];  
   // combine with coils off pattern + control bits if disabling holding torque, otherwise  
   // reinstate coil pattern from last step index  
   const uint8_t output = (torqueEnabled ? mtr_waveform_table[ mtr_ctrl->step_index ] : FREEARM) + mtr_ctrl->address + STROBE;  
   // write command to Armdroid port  
   armdroid_write( output );  
   armdroid_write( output - STROBE );  
  // ensure Armdroid is returned to Input mode  
  armdroid_write( STROBE );  

To accommodate this new method, a slight modification was necessary to the Armdroid Serial Remote Control protocol, but still remains compatible with the existing revision.

Sunday, 13 July 2014

Wrist Designs

Over the past couple of weeks I have been mostly testing Armdroid electronics and going completely round in circles...

I've somehow destroyed an Arduino, questioned my sanity, sacrificed several chickens, and finally, have the interface electronics from TNMOC's Armdroid now running.  But, I'm facing what appears to be a timing problem as soon as the 74LS366 is inserted into the empty IC5 socket that enables the feedback sensors.

I was wondering why TNMOC's interface was missing this chip, because it doesn't make a great deal of sense when the arm has already been fitted with sensors.  When you look back at the photographs it's quite obvious the previous owner bypassed the interface circuit and controlled the steppers and sensors  from some other source.  This is not the first time I've witnessed this when making a post-mortem analysis of a dead looking Armdroid.

Enabling IC5 and testing the same combination with my Armdroid interface circuit, everything is working as expected, so assuming I do have my facts correct, I will write up another day more information about the wiring up of these sensors.

I suspect the timing problem relates to the 74LS123 (IC4) Monostable Multivibrator and delay determined by the accompanying capacitor and resistor network.   Testing this capacitor with my ESR meter in-circuit proved inconclusive, so I'll probably swap this out as soon as I have replacements available and try again.

Anyway, having spent many hours looking at the circuit board, decided I would take a break and start cleaning up the mechanics as everything is really dusty and dirty....   This morning I spotted a very subtle difference between my Armdroid 1 hardware and TNMOC's regarding the finger supports.

On the surface, the design of Armdroid 1 hardware didn't actually change a great deal after going into production, so this is worth a quick mention here...

Spot the Difference

As you can see in the following photograph - my Armdroid consists of an aluminium support flange for the three fingers:

Finger Support Flange - my Armdroid
Ignoring the fact the DELRIN gearing have different colours, this design consists of two different types of bevel gears - flanged gears (the ones with string wrapped around them) and one non-flanged gear, called the hand gear, which this finger assembly is attached with machine screws.

This must have changed at some point to the following arraignment which appears much simpler.  In this case, we have three identical bevel gears with much larger flanges, and the aluminum support is no longer necessary because the fingers are now bolted directly to the gearing:

Simplified finger supports on TNMOC's Armdroid
Another view of the flanged bevel gearing

Looks obvious this must have been a cost cutting exercise, but did Colne Robotics ever update their documentation and blueprints to reflect this ?     Answers on a postcard please...