Sunday, July 5, 2009

To Do

If I remember correctly, my first introduction to circuits was in my 4th grade when my dad’s friend gave me a neat science-projects like kit. The kit contained components to teach the basics of electronics - switches, a buzzer, small incandescent bulbs (I absolutely dislike using these bulbs nowadays because of the power they drain), wires, steel wool, and other such things.

I was in the US at that time, and Lucas, a friend, and I, used to perform the ‘experiments’ given the handbook. I don’t know what Lucas’ dad did exactly, but to me he was some sort of god; he had tons of toasters and mixers and radios and TVs and machines lying open in his house. My mom would definitely have hit the roof had she seen such an untidy house. But I loved that house because, I suppose, it contributed a lot towards encouraging me to explore electronics as a hobby. And would you believe I’ve still got components from that kit!

In the 6th grade I read something about an FM transmitter and pestered my mum to take me ‘shopping’. I bought a couple of condenser mikes and speakers, but not knowing anything about transistors and chips, got absolutely nowhere. I did, however, manage to build a working crystal radio – very interesting things, I must say.

I always loved mechanics, and continued tinkering with small motors and toy cars and bulbs till the 10th grade. Finally, when I moved to junior college, I got my first formal introduction to electronics. I had loved the mechanical aspect of things, and could put my hand to anything that had gears and rods and levers. So junior college, with its electronics, was a new experience.

Every year I keep growing in experience and exposure, and my ‘To Do’ list keeps expanding. There are a lot of things that I want to build, but I’ve either not had the time or the knowledge to see them through. A lot of the things in the list are half complete; some of them have passed the proof-of-concept stage and are awaiting, to borrow from software lingo, the transition from beta to release version. Summer break is the perfect time to hit these projects with a vengeance, and I certainly plan to achieve a lot during these two and a half months.

The only problem – as I’m researching one project I invariably come across something new and attractive, which but naturally, gets appended to the To Do list, making it longer still!

Here’s my list, in current form:

Project Status
Linear PSU v3; Revision required
SMPS Proof-of-concept
Home Energy Meter To be done
Air Conditioner Controller v1; Revision required
Computer Controller DMX To be done
Ultrasonic Rangefinder Proof-of-concept
Digital LC Meter To be done
Temperature Controller for Soldering Iron Proof-of-concept
Long Range Walkie Talkies To be done; (searching for info)
Home Intercom Using Old Phones To be done
Drill Press To be done (currently collecting parts) 
CNC Milling Machine To be done (currently collecting parts) 
iTrip Mod v1; Working
iPod Mini Remote To be done
Auto-balancing Inverted Pendulum To be done
PIC to VGA To be done
Optical Mouse Based Navigation System for Small Robots Proof-of-concept
Very Long Range IR Transmitter Proof-of-concept; (currently collecting parts)
USB PIC Programmer To be done
Class D Audio Amplifier v1; Revision required
Digital Weigh Scale To be done
Low Cost USB Oscilloscope Proof-of-concept
Nokia 3310 / 6610 LCD Interface Proof-of-concept
CYUSB6934 Radio Interface Proof-of-concept
Lightweight Multipurpose Robotic Platforms (to be christened ‘Saxiest’ :-D ) v2; Revision required (currently collecting parts)
Foot Speed Controller for my Dremel XPR To be done; (searching for info)

As you can see, several projects still need to be started. Any advice/help/experience is most welcome :-)


  1. You're making a CNC milling machine? O_o

    VMC or HMC?

  2. Hey desa what's the code for your tag cloud? plz share :) ty!

  3. @veyron:

  4. de..reg the Optical Mouse Based Navigation System for Small Robots i interfaced the optical mouse to the AVR and got the distance readings on an LCD, both x and y directions. however i was never able to get consistent readings. if i move the mouse 5cm in x direction then i would get a count of say 1200. but when i would bring it back to the starting position i would never get it to 0. it would be say 100 or -25 and if i keep repeating this without resetting then the error keeps accumulating and reading become totally unreliable. does it have something to do with the sensitivity? from what i observed its quite dynamic as you may have experienced on moving ur cursor over the desktop at varying speeds. do get back to me by mail if you know of any solution or anyone else facing similar problems. thanks!

  5. @andy:
    The ADNS2610, which is the sensor I used, is an 8-pin device from Avago.

    Irrespective of the speed you move it at, it gives the *raw* value of distance moved every time the accumulator register is read. Each 'read' clears the accumulator. So, if you read it at some point in time, then move it up 3cm really slow, then move it down 3cm fast, and now read the accumulator, you should get '0'.

    The difference in cursor movement speeds observed in a mouse are due to software, ie, microcontroller code, only. If a mouse is slowly moved 1cm, the on-screen cursor also tracks 1cm. However, if the mouse is moved 1cm rapidly, the cursor tracks a much larger distance.

    The 'constant tracking' kind of behaviour can be implemented as:
    *read accumulator
    *wait time delta t
    *read accumulator
    *(second read value)-(first read value)= moved distance
    *on-screen distance=moved distance
    *move cursor by a value on-screen distance

    The 'variable speed tracking' can be implemented using the following algorithm in which a 'velocity' is calculated:
    *read accumulator
    *wait time delta t
    *read accumulator
    *calculate [(second read value)-(first read value)]/(delta t)
    * on-screen distance=(some constant) x moved distance
    *move cursor by above calculated value

    Though this might not be the exact algorithm followed, it resembles a 'real' mouse very closely.


  6. @desa: we did not try the avago sensor directly mainly due to lack of time (we had already used 2 weeks to read PS/2 and seeing the unsatisfactory results wasnt a great motivation). However, a few months earlier I was looking around for some good sensors for micromouse and stumbled onto the avago chip again, where people had managaed to make winning mice by calculating the distance directly from the IC. But since the scale of the mouse was quite small it required a robust mechanical construction to get reliable readings.
    But isnt there some solution to the PS/2 sensitivity issue at all? or is stripping down an optical mouse the best solution?

  7. I don't think there's a workaround to the PS/2 sensitivity issue primarily because of the very low sampling rates that a PS/2 mouse has (average of about 80-100 samples per second). I think the low sampling speed is the culprit for such 'backlash' errors.

    I would go with stripping down the optical mouse - its not too difficult to work with the Avago chip. I have some C prototypes if you're interested. They're for the PIC, but they can just as easily be modified for whichever processor you're working with.

    BTW, can you post the link to the micromouse site where these sensors were used?