Warning: ob_start(): output handler 'ob_gzhandler' conflicts with 'zlib output compression' in /home/public/wp-includes/functions.php on line 821
Blended Technologies

Welcome to Blended Technologies

January 9th, 2006

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/functions-formatting.php on line 76

This is a smal company with experience in the following general areas:

  1. Quality software consulting focusing on web applications, database design and optimization, and office automation
  2. Inventing innovative new products, electronic or otherwise

Check out what I’ve done so far.

To learn more, there is an About page, a page to contact me, and just start reading the regular blog updates below.

del.icio.us |  Digg |  FURL |  Yahoo! My Web 2.0 |  Reddit

New Libraries for UtilityMill

September 9th, 2010

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/functions-formatting.php on line 76

Utility Mill, my web application for building quick Python utilities now has the following libraries available for use in your utilities. Head on over and try it out.

Python Excel Tools: xlrd, xlwt, xlutils
These tools (Home/Documentation) let you read, write, and manipulate Excel files. They’re a huge improvement over pyExcelerator.

PyYAML(Home/Documentation) is a YAML parser and emitter for the Python programming language.

Biopython(Home/Documentation) is a set of freely available tools for biological computation written in Python.

I also updated pyparsing to version 1.5.5 as requested by users.

I can’t wait to try out some utilities using BioPython.

del.icio.us |  Digg |  FURL |  Yahoo! My Web 2.0 |  Reddit

Creating a Printed Circuit Board with a Laser Printer - My First Attempt

January 23rd, 2010

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/functions-formatting.php on line 76

I attempted to follow the tutorial here to make a printed circuit board (PCB) using only the following: 1 piece of copper-clad FR-4 1 OZ .32″ PCB, PCB Etching solution (Ferric Chloride), a laser printer, a page cut out from a glossy magazine, and an iron.

But my first attempt did not go very well.

Here is the circuit I was trying to print:

Eagle brd file for electronic compass breakout

Below is what I ended up with after soaking in water and peeling off the paper. You can see that the connection areas seem to have bled together. I wonder if the circuit I’m trying to print is just too small for this method? Maybe homemade PCB’s are only for boards connecting big push through components together and not for small surface mount devices?

Printed Circuit Board (PCB) Using a Laser Printer

del.icio.us |  Digg |  FURL |  Yahoo! My Web 2.0 |  Reddit

New Website - Beckys Reviews

August 30th, 2009

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/functions-formatting.php on line 76

My wife reads a lot of reviews of products and services before buying, so I made her own review site so she can start writing them too.

I started putting reviews of books I’ve read there too. I’m a guest blogger over there :-)

Let me know if you have any feedback on what would be useful.

Go check it out now: beckysreviews.com

del.icio.us |  Digg |  FURL |  Yahoo! My Web 2.0 |  Reddit

How I Created a Haptic Ultrasonic Range Finding Hat

August 18th, 2009

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/functions-formatting.php on line 76

I came across this project a while back that lets you “see” with ultrasound:

The ultrasonic haptic vision system enables a person to navigate hallways and around large objects without sight, through the use of an ultrasonic rangefinder that haptically interfaces with the user via tiny vibrating motors mounted on the user’s head.


It looked so cool I decided I must have one of my own. And being a newly minted Arduino owner, I figured no electronics project was out of my reach :-)

First I changed the design around a little. Here’s what mine ended up looking like:

My Changes

Instead of having the ultrasonic sensor rotate around your head, and give you distances in every direction, I have it simply tell you the distance to the nearest object in the direction you’re facing. I thought this might make for a more intuitive “interface”. I also used a stylish baseball cap instead of a dorky hardhat.

Instead of mounting the whole Arduino right on the hat, I decided to just include the components of the Arduino I needed. This is called building a Standalone Arduino. You can run your Arduino sketch unmodified but with only a few inexpensive components. This way I won’t be tempted to cannibalize my nifty hat for its Arduino for whatever project comes along next.

Here is a tutorial for building a standalone Arduino. (And here is another.)

What I used

PING))) Ultrasonic Sensor:

This guy sends out an ultrasonic pulse from one of these two transducers and listens for the echo with the other one. You can calculate the distance from the length of time it takes the echo to return.

The hat ($5 from Walmart)

And some miscellaneous parts:


I built everything on a breadboard to make sure it worked. I then soldered everything to the protoboard:

(I won’t show you the other side of this which would reveal my horrendous soldering mistakes.)

I popped the ATMega chip into my regular Arduino and loaded the sketch onto it. Then I popped it out and put it into the chip seat on the new protoboard. Since everything is wired up just like an Arduino, the sketch can run unmodified. This method also required that my ATMega328 already had an Arduino boot loader loaded.

I set the vibrating motor in the flap inside the hat. I cut off part of a pen case and glued the moter in that. This lets the motor spin freely without worrying about fabric interfering.


It works OK. I can find things like doorways and walls with my eyes covered!

My main complaint is that there isn’t very much variability in the vibration motor. The program it’s running converts the distance in inches to the object you’re facing into a voltage to send to the motor (pulse width modulation). E.g, seven feet away means almost no voltage and the motor spins slowly, one foot away means lots of voltage so it vibrates more. However I can effectively only “feel” three states: something in front of me, nothing in front of me, and something really close to me. I was hoping I could scan my head up and down stairs and feel the variation between each step, but the motor just can’t get that fine grained.

If you make your own, you might want to find a better motor, or have several motors where close objects make say three motors run, and far objects only one. Or maybe just make it beep instead of vibrate and use auditory cues to find your way around.

All in all it was a great learning experience, and hopefully I’ll find a practical use for it soon …

The Arduino sketch (the program the micro controller runs):

Read distance using Ping sensor, and vibrate
motor by how close distance is to sensor.
(Most of code comes from http://www.arduino.cc/en/Tutorial/Ping)

Greg Pinero
July 2009

#define debug //debug for debugging, anything else otherwise
const int pingPin = 7;
const int vibPin = 6;
int pulseOut = 0;

void setup() {
  // initialize serial communication:
  #ifdef debug

void loop()
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;
  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  digitalWrite(pingPin, HIGH);
  digitalWrite(pingPin, LOW);
  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);
  // convert the time into a distance
  inches = microsecondsToInches(duration);
  //vibrate proportionally to closeness
  pulseOut = inchesToPulse(inches);
  #ifdef debug

float inchesToPulse(int inches)
  //curved function so closer distances have more variation
  int MaxInches = 133;
  int minPulseOut = 70; //vib motor won't spin below ~50-70
  //(3 was way too steep) Only felt motor within a foot or two
  float powerConst = 1.5; //steepness 1 for line >1 for steeper
  int pulseOut;
  pulseOut = (int)(pow(((MaxInches - (float)inches)/MaxInches),powerConst) * (255.0-minPulseOut)) + minPulseOut;
  if (pulseOut < = minPulseOut) {pulseOut = 0;}
  return pulseOut;

long microsecondsToInches(long microseconds)
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;

long microsecondsToCentimeters(long microseconds)
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
del.icio.us |  Digg |  FURL |  Yahoo! My Web 2.0 |  Reddit