Monday 22 April 2013

Build a (sort of) photocoupler using a photoresistor and a LED

Believe it or not... It is possible to build a resistive opto-isolator!
Parts to continue the Desktop Defender mod are on their way. We will use a IC contianing 4 opto-isolators... And we need 5 "digital switches"...
Why do not use a really low cost device to trigger the missile launch?
Necessary parts? A LED and a photoresistor.
The photoresistor I found in my box reaches 520Ω when the LED is glowing and acts as open circuit when the LED is off.
To be sure to not close the circuit with some environmental light, we have to isolate the led and the resistor using some isolating tape or some plasticine. The best is to put some aluminium foil, so that light will reflect and will redirect rays to the resistor.



Remember to put a marker to remember which is the side of the LED!

Sunday 14 April 2013

Adding Serial/Bluetooth support to Desktop Defender [Part I]

If you have got a spare Arduino board and/or a Bluetooth shield...
Why do not buy a Missile Launcher and mod it a little?



You can find "Desktop Defender" toy on ebay.

First of all, you will need to open the control pad. You'll find a 7 pin connector. My idea is to do not break the control pad. I want to add an extra input method to it. So... Let's solder them.


The control pad:
  • Closes the circuit between -3V and DO (Down), L (Left)
  • Closes the circuit between +3V and UP (Up), R (Right), PLA (Play)
We will need to replicate this on Arduino side.




The issue is... We cannot control a DC Motor directly via Arduino. In this particular case the +3V would be compatible with Arduino (Nano or Pro, for example). The current is the issue. The motors are protected by 2 limit switches for each direction, so they will not stall (the motors reach peak current draw when stalling), but as my "dumb" tester says... There are still 90mA when closing the circuit. Which is more than the maximum allowed for I/O Pins (e.g.: 40 mA).


There are different options for driving DC Motors safely:

  • PWM (Pulse-Width Modulation)
    • But we do not need to drive speed of the motor... Overkill.
  • DC Motor controller (H-Bridge)
    • Same as above
    • Details here
    • Products: L293D IC or Pololu shields
  • MOSFET, Transistor + Diode (To protect for spikes at on/off time)
    • Good solution, cheap... But we must size the Transistor, Resistance correctly
    • Good explaination here and here
  • Optoisolators
    • Details here
    • I just discovered them... Amazing! In few words... It allows to drive the current on another circuit using a LED and... A phototransistor on the other side. We can call them also photocouplers.
    • Each product has its own maximum voltage and current.
    • It is a good choice, cheap, reusable. Available products: optoisolators, opto-isolator shield, etc...
  • Relay (and solid state Relay)
    • A low current driven mechanical switch. It is a good choice, cheap, reusable.
    • In the case of solid state... It is not mechanical... Extended lifetime and faster than common relays.
    • Each product has its own max voltage and current.
    • Good choice as above. Available products: Solid State Relay, Relay Shield for Grove, etc...
My choices are optoisolators, relays (I found a L293DNE on my magic box, hurray... But I am unable to use it, except if I completely remove original control pad).
Since I will wait for parts to be shipped, see you in few days/weeks!

Ok people... SainSmart come in my help!

I just tested using a single Relay and my Bluetooth Silver Mate.
It works! Here you are the code... I'll deploy everything on github (both Arduino and Android code).


A video and photos in next days...

Monday 8 April 2013

Google Chrome chrome:// Urls

Useful chrome://about page gives info about Chrome internals

  • chrome://gpu (information about video card and hw support to Chrome features)
  • chrome://performance (information about Chrome events and performances)
  • chrome://sync (information about Chrome account data syncronization processes)
  • chrome://predictors (map of "string" to "url" to be used as local predictions)
  • chrome://dns (dns prefetch)
I suggest you a really nice read about Chrome fast networking.