Showing posts with label Useless Machine. Show all posts
Showing posts with label Useless Machine. Show all posts

Wednesday, November 8, 2017

Rumination of Uselessness


Let us return to the Useless Machine topic one more time.

Classical useless machine usually made out of four electrical components, namely:
  • Electrical battery.
  • Gear motor.
  • DPDT switch (usually toggle, sometimes rocker).
  • Micro-switch.
This is probably minimal set: it is hard to imagine anything more efficient. But once an idea came to my mind: maybe such a machine  is not absolutely perfect. Useless machine must cut itself out of power as soon as it returns to the original state. That achieved with help of the micro-switch.  Machine arm,while returning back, pushes switch, its normally closed contact becomes open,  machine fully stops and looks dead. But if tester tries to move an arm manually, micro-switch is released again, its closing contact provides power to the motor. That case is visible on the clip of Rocker Switch Useless Machine starting at second 19. So machine here actually is not dead, it just plays dead! That's  good opportunity for the new design : make the machine, which will allow manual rotation of the arm, when machine is turned off. In other words make the machine really dead at the end of its working cycle. To achieve that I decided to get rid of micro-switch and  use for backward movement an energy stored in the capacitor, charged while machine arm moves forward, . Below you can see circuit diagram of such a machine:
When switch connects motor to the battery and motor moves the arm forward, electrical current is flowing through  the circuit of diode and relay, mounted in parallel to the motor. Relay  is forced to close its normally opened contact. Through that contact (and small resistor) capacitor is connected to battery and receives some charge. 

When arm turns the switch back, motor is disconnected from battery, but connected to the capacitor in the opposite polarity. Motor rotates backward and returns arm to its original state.  Diode now stays in the opposite direction on the way of electrical current,  so relay contact stays open and capacitor is disconnected from the battery. Capacitor mostly is discharged providing the movement of the motor, the rest  will be discharged through the stopped motor winding. You see, in theory it looks simple. But I must tell you that this design is much more demanding on the spec of components, compare to classical schematic. After some trial and error iteration I came up to the next set component:
  • Solarobotics gear-motor GM17  ( I could not make it working reliably with GM2 or other motors with similar spec).    
  • Super capacitor 0.1 F. (I used NEC 5.5 V capacitor). Bigger capacitor would be fine but smaller probably not.
  • 5V relay. Here type is not that important. 
  • Schottky diode. Here type is not that important. 
  • Resistor 5 Ohm. It is optional but it keeps electrical current trough the battery under 1 Amp at the beginning, when the capacitor is fully discharged. Type does not matter here, but better to have 0.5 W.
  • Four 1.2 V rechargeable batteries. Type does not matter. 
As you can see on the video tester may manually  rotate the arm when machine is turned off.  Done!
I published more detailed description on instrcuctables site

Update 11/12/2017. fixed bug in diagrams: missing wire between switch terminals.



Friday, July 4, 2014

Useless Machines, Atmel Controllers & Protothreads



This is the project I made in 2010 as a response to the publication about useless machines in Make Magazine1. In overall excellent article there was one statement which looked controversial to me. Author stated that a machine with a microprocessor does not cut itself completely off power and from that point of view cannot be fully qualified as useless machine. This is not true. Sure you can build a machine with microprocessor which at the end of cycle cuts itself off power. And here is its wiring diagram of the machine from the clip above.

As central component this project utilizes Pololu B-168 controller 2 with Atmel ATmega168 as a brain. In addition controller has two H-bridges for bi-polar load. One bridge in this project controls the motor, another controls the reed relay which keep the machine on power disregarding of the control switch state. To eliminate toggle switch (the reason for that you can read here) I designed the push button custom made out of two micro-switches. To justify presence of the controller more complicated task assigned to the machine. This task could be described in in these statements:
  • The Machine waits till tester hits the button. With first hit turn itself on.
  • Thew Machine waits some time if there is no hits anymore.
  • The Machine calculates the number of hits.
  • If pause after last hit is big enough working cycle begins and the machine arm hits button as many time as tester did.
  • At the end machine cuts itself off power.
While preparing this post I decided to rewrite program having in mind to try one well known but new to me technique, namely Protothreads 3. This is the framework based on C language trick which allows operator switch to be embedded inside C code blocks like if, while or for. Such obscure language feature allows to use case statements as breakpoints where the task may yield execution to other tasks and from where it can resume execution when it gets the control next time. For the detail explanation I would reference you to author website. After reading it you will understand why not everyone in programming community accepts these ideas and why there is no known company which includes it into the corporate coding standards. But for hobby project I can use whatever I like, right? Fragment of the code below contains protothread routine which implements machine working cycle 4.

// script routine
int protothread(struct pt* upt)
{  // called each timer interrupt 
 static int count=0, ix;
 static u_time timer;
 PT_BEGIN(upt); // PT_INIT is called form the main function
 // just in case to avoid race condition at the end
 PT_YIELD_UNTIL(upt,isButtonPressed());
  
 turnRelay(DeviceON); // keep device powered 
 turnMotor(DeviceOFF);
 turnLED(DeviceOFF);
 do { // counting cycle
  PT_WAIT_UNTIL(upt,isButtonReleased());
  timer = schedule(750);
  count++;
  PT_WAIT_UNTIL(upt,isExpired(timer)||
    isButtonPressed());
 } while(!isExpired(timer));
 
 for(ix = 0; ix != count; ++ix) { // working cycle
  turnLED(DeviceON);
  turnMotor(DeviceON);
  PT_WAIT_UNTIL(upt,isButtonPressed());
  turnMotor(DeviceOFF);
  timer = schedule(20);
  PT_WAIT_UNTIL(upt,isExpired(timer));
  turnMotor(DeviceBACKWARD);
  turnLED(DeviceOFF);
  PT_WAIT_UNTIL(upt,isArmDown());
  turnMotor(DeviceOFF);
  timer = schedule(20);
  PT_WAIT_UNTIL(upt,isExpired(timer));
 }
 turnRelay(DeviceOFF); // kill the machine
 timer = schedule( 20);
 PT_WAIT_UNTIL(upt,isExpired(timer));
 PT_END(upt);
 return PT_EXITED;
}

See for yourself but to me it looks like good pseudo code which expresses program logic in clear and conscious way.
And at the end some observations from my limited experience with protothreads:
  • All yields/resumings of particular protothread have to be in the same protothread routine, in other words you cannot spread switch case statements across more then one function.
  • Protothread states must not be stored inside local auto variables, only static or global variables have to be used.
  • When working with Microsoft Visual Studio projects you must change default project setting of Debug Information Format field from Program Database For Edit and Continue (/ZI),to Program Database(/Zi). Otherwise your program will not compile.

1 Brett Coulthard. '"The most useless machine" (Issue 23 of Make Magazine). 2010
2 You cannot buy it anymore but there is the substitution with a better functionality in the same package but with slightly different wiring.
3Protothread Home Page.
4 The whole source code is available at this storage.

Saturday, June 22, 2013

Competition in Uselessness

It is believed that the idea of the Useless Machine was first formulated by Marvin Minsky and implemented by Claude Shannon more than half a century ago. Nowadays this concept is quite a popular one (1). The Useless machine in one sentence may be defined as automaton with only two possible states: 

  1. It is turned off. 
  2. It is turned on.

Transition from state 1 to state 2 happens as a result of external force, and the transition back from state 2 to state 1 is provided by the machine itself. If this machine is electrical (as Claude Shannon built it) energy for the transition is taken from the battery charge. For a purely mechanical machine it is either gravity or spring tension. In its classical implementation the electrical circuit looks like this:
I first got knowledge about that device from Make Magazine (2). Until the time of publication there were tons of videos on YouTube with various versions of this device. While browsing them I paid attention to the fact that most of the machines use a toggle switch as the machine control element. A rocker switch was never used. But it is absolutely clear that a rocker switch may provide the same effect. Why does nobody use it? Good opportunity to contribute something new to an old concept, right?

Using a rocker switch instead of toggle means that the force applied to the switch by the machine arm should go not in a horizontal direction (from side to side) but rather in a vertical direction (from top to bottom). While playing mentally with kinematics to make it workable one more thought came to my mind: why not eliminate the working arm? Let the box lid do the job. This way the machine will be truly different from other animals in the herd: rocker switch instead of toggle and no arm at all.


It took me some time and several attempts to create a two dimensional cardboard model like this:


As soon as my model proved the concept worked, the actual implementation with wood and wires was not so hard :


And here are some technical details:

  • Motor: Solarbotics GM2 gear motor
  • Rocker switch: Radioshack DPDT Switch ( 275-695 ),
  • Micro switch: Radioshack SPDT Switch with Roller Lever (275-017)
  • Wooden box and other wooden parts from the local Michael’s store.
Among the comments left on this YouTube video was a comment from the user xsolarwindx: “this is f*ing stupid”. For any other occasion such a comment would be insulting but for the useless machine maker that could be considered as highest degree award. I think everybody would agree, right?

Updated 10/27/2015.
I have published more detailed description of this project updated version here: http://www.instructables.com/id/Useless-Machine-in-the-Pumpkin-Mask/



References:

1. Here is the site of the company entirely dedicated to useless machines :


2.  Brett Coulthard. '"The most useless machine" (Issue 23 of Make Magazine). 2010