30 Second Fix for iPhone not charging

This morning I fixed my sixth or seventh iPhone with this apparently common problem.  Over time, the Lightning charging port at the bottom of the phone can fill up with lint or other debris, especially for people who carry their iPhones in their pocket.  The gunk gets increasingly compacted every time the charging cable is plugged in, until it accumulates to the point where the phone charges intermittently or not at all because the charging pins are no longer making good contact.

You should be able to insert the charging cable all the way into the port.   If you can’t, it is very easy to correct the problem.  First, switch off your phone to avoid any possibility of creating a short circuit.  Using a toothpick or other suitable tool (a tiny flat head screwdriver like you’d find in a precision screwdriver set works perfectly), clean out any junk in the port.  Try plugging in a charging cable and repeat if it still isn’t seating correctly.

 

A USB adapter for the Apple Newton keyboard

Back in the pre-smartphone days, the Apple Newton was the first device in the PDA category.  Newtons were only sold for five years between 1993 and 1998, when Steve Jobs pulled the plug on the program.  Although Apple frequently took a ribbing for problems with the Newton’s handwriting recognition feature, its main problem with achieving market dominance was Newton’s high cost.  Although it beat the wildly successful Palm Pilot to market, Newton could not compete on price.

One of Newton’s accessories was a very compact keyboard (just a hair over 10 inches wide).  I had one rattling around in my spare parts bin and it was the perfect size to use with the SunFounder Display and Raspberry Pi one-piece computer that I recently assembled.

Only one problem, no way to plug it in.  The Newton keyboard outputs a serial data stream and the RasPi (like most other modern computers) requires a USB keyboard.  Further complicating matters, the Newton keyboard does not produce ASCII characters.  Like the legacy IBM XT and AT keyboards, the Newt keyboard outputs a unique scan code for each key.  One code is sent when the key is pressed and another gets sent when the key is released.

I was surprised to find that nobody currently sells a pre-built adapter to do the serial to USB conversion.  (Such adapters exist for IBM keyboards, but are not pin or code compatible with the Newt keyboard).  The only homebrew solution I could locate was from a guy in Japan who posted this video but little else in the way of details.

I was able to piece together the following information from various sources:

  • The Newton keyboard runs at 5V (technically 4.5 volts) and produces a 5V TTL compatible signal
  • Baud rate is 9600-N-8-1
  • We can connect it to a microcontroller using three pins:  pin 2 – +5V, pin 8 – signal, shield – ground
  • The key scan codes are similar but not identical to those use by IBM AT keyboards

To make the Newt keyboard impersonate a USB keyboard, I would need to remap the serial data to USB.  This job calls for a small, cheap, 5V tolerant microcontroller having both serial and USB interfaces.

The Teensy 2.0 board is perfect for this purpose.  It can impersonate all kinds of HID devices like mice, keyboards, joysticks, etc. and it is compatible with the Arduino IDE, which comes with a great keyboard library that can do all the heavy lifting.

If you want to build your own adapter and are familiar with building Arduino projects, feel free to grab the sketch here.  Pinouts are in the readme file and you can install the Teensy (or MC board of your choice) within the Newton keyboard or in an external enclosure.

If you’d like step-by-step directions for my build, please continue reading.

Bill of Materials

  • Teensy 2.0 microcontroller development board (there are several Teensy versions;  make sure you use one that operates at 5 volts).
  • An 8-pin mini-DIN M/F or F/F cable like this one from Cables to Go.  We will be cutting off the female end to connect to the Newton keyboard.  Any similar legacy Apple serial cable would work
  • A suitable enclosure for the Teensy.  Note that there is plenty of room inside the Newton keyboard case.  If you don’t mind opening it up, you can mount the Teensy board inside.
  • A short USB A to mini B cable to connect your computer to the Teensy board

Hardware Assembly

  1. Cut off the female end of your serial cable leaving at least a couple inches of wire.
  2. If you are using the Cables to Go cable, solder the brown  wire to VCC (+5 Volts), the purple wire to D2, and the uninsulated shield to GND (ground) as shown above.  Use a piece of shrink wrap tube or tape to cover the shield wire so it doesn’t short anything on the Teensy.

    If you are using a different mini-DIN connector, use a multimeter to find the wires attached to pins 2, 8 and the connector outer case.  Pin 2 gets soldered to VCC and pin 8 gets soldered to D2.  Looking at the female connector that you will plug the keyboard into, pin 8 is on the upper left.  Here is my sketch of the connector that will surely end up hanging in the Louvre:

  3. Connect the keyboard to the connector you just soldered on and connect a USB cable to the Teensy.  Mount it either inside the keyboard case or in a suitable enclosure.

Programming the Teensy

  1. Install the latest Arduino IDE, if necessary.  It can be downloaded here.
  2. Download and install Teensyduino, which is an add-on for the Arduino software that adds Teensy support to it.
  3. Download the Apple Newton Keyboard to USB Converter library  (Mac users:  please Ctrl-click and choose Save As to prevent the ZIP file from automatically unpacking)
  4. Launch Arduino and install from the ZIP file by selecting
    Sketch–>Include Library–>Add .ZIP Library
  5. Open the Sketch named NewtonKeyboardToUSB, which is located in the folder Arduino/libraries/newtonKeyboard/examples
  6. Upload the sketch to the Teensy.  If this is the first time you are uploading a sketch from the Arduino IDE, you will need to
  7. Your computer should immediately recognize that a new keyboard has been plugged in

Further improvements

There are lots of digital inputs and outputs available on the Teensy.  It might be nice to use one of the outputs to drive an LED that indicates Caps Lock state.  Or perhaps it would be useful to assign some inputs to keyboard macros.

 

A nice display for Raspberry Pi

I needed a compact computer setup for my cramped electronics workbench.  The SunFounder 10.1 inch display is both space- and cost-efficient.  Instead of using molded parts for the case, SunFounder uses laser cut acrylic sheets, presumably to keep the cost of production down.  A Raspberry Pi computer can be mounted behind the screen.

Although it has a few minor quirks, the SunFounder screen represents a great value.  Recent price on Amazon was $110.99.  Add a $25 RasPi, keyboard and mouse and you’ve got a very capable little one-piece computer for under $150.

What I like about this display:

  • 1280 X 800 pixel resolution is more than adequate for running a browser or a few terminal sessions
  • As claimed, the IPS LCD screen has a very wide viewing angle.  I also found the color saturation and contrast to be excellent
  • Built-in speaker
  • It has VGA and composite inputs in addition to HDMI

And a few deficiencies:

  • The monitor arrived with several loose screws.  Seems whoever assembled my unit didn’t have a screwdriver that day
  • I needed to dremel one of the acrylic plates that holds the RasPi in place to make it fit properly
  • An onboard source of power for the RasPi would be welcomed.  I suspect that a 5V connector that taps internal power could be added for less than the IR remote control that comes with the display.  What possible use is a remote anyway?  I can’t envision ever being more than arm’s length away for a screen that’s only 10 inches wide.

    My kludgy solution was to velcro an extension cord to the back, connecting separate power bricks for the display and RasPi:

  • Out of the box, I was getting no sound from the display.  The printed instructions that came with the it said to run raspi-config and choose the option to force audio out through HDMI.  But that did not work because the computer was detecting the SunFounder screen’s interface as DVI, which is not audio capable.  The solution was to add the line hdmi_drive=2 in config.txt to force HDMI mode.

These minor nits aside, for the price of a cheap Chromebook, the combination of the Raspberry Pi and SunFounder display provide several features that are useful on my workbench and would not be available on other similarly priced platforms like a  built-in serial port, gpio pins and the ability to display HDMI, VGA or composite video.

Next project, a perfect companion for this setup:  let’s dust off an Apple Newton keyboard and add USB connectivity to it.

Repairing an iMac Power Supply

A 24″ iMac that wouldn’t start up came in for repair.   Pressing the power button got the fan to briefly run then shut off.  It never reached the point where there was a happy (or sad) chime.  The owner’s first inclination was to toss the computer after we wiped the hard disk but I told him we could probably get it running for the cost of a new power supply (around $75).

Using the always great disassembly instructions at ifixit.com, I got the front bezel off the iMac and checked the logic board diagnostic LEDs.  LED 1 was on and LED 2 came on briefly when I tried to start the computer, indicating that the logic board was probably fine and the problem was with the power supply.

Several disassembly steps later I had the power supply board out of the iMac.  From a quick visual inspection, I could see that some of the  2200 µF capacitors were leaking a bit and one had developed a considerable bulge at the base.  Maybe we could do a cheap repair here?

I clipped the four suspicious caps out (to get an accurate measurement) and checked them with my Fluke 179 multimeter–quick side story:  this DMM is so rugged that it survived a total loss house fire with only minor cosmetic damage.  All the capacitors were out of spec but interestingly the one that looked the worst actually measured closest to good.

Easy peasy fix, right?  LOL, not exactly.  This board uses lead free solder, which is a total pain to remove.  Even with my trusty Hako soldering iron cranked up to 800º, the PCB’s heavy copper traces made it a challenge to keep the solder molten long enough to suck it up with a desoldering tool.  An hour of determined effort and cussing later I had the old caps out and the through holes cleaned out.  (I needed to ream most of the holes to get the last bits of lead free solder out).  Four new shiny black capacitors installed without any drama.

Shiny new capacitorsAll LEDS Normal

I reinstalled the power supply module and the iMac started normally with 4 LEDs lit on the logic board.  I also installed a new button battery while the iMac was open.  Total cost of repair: under $2 🙂

If I were to attempt a similar repair again I wouldn’t bother with trying to remove any components from the circuit board because of the lead free solder.  The job wouldn’t look as pretty, but it would be a lot easier to just leave the old leads in place and solder new parts onto them.

Controlling devices with Indigo and Amazon Echo (Alexa)

A recently added plugin for the superb  Indigo Smart Home Software platform enables voice control of devices like lights, thermostats, fans, shades and garage doors–to name just a few–via an Amazon Echo DotEcho or Fire TV.  It works seamlessly with the Lutron RadioRA 2 plugin that I developed and is also presumed compatible with the Lutron Caseta Smart Bridge Pro (although this has not been formally tested yet).

The plugin works by emulating a Philips Hue bridge.  Setup is easy.  Just install the plugin and select the Plugins->Alexa-Hue Bridge->Manage Devices… menu item.  Choose the devices you wish to control (up to 27) and then tell Alexa to discover your devices either by saying that or by using the Alexa app.

The 27 device limit is set by Amazon’s Alexa implementation, however, if you reach that limit, you can set up a Device Group in the Virtual Devices interface to group devices are typically controlled together into a single device.

Alexa currently recognizes only “turn on”, “turn off”, and “dim” commands, however, it’s possible to control devices that don’t natively support on/off/dim by creating virtual devices.  For example, I created a virtual device called “heat” that controls a RA 2 thermostat.  When I get a chill and say “Alexa, turn heat on”, it invokes an Indigo Action group that sets the nearest thermostat to 74 degrees.  “Alexa, turn heat off” sets the thermostat back to 68 degrees.

If you’re already running Indigo, I highly recommend adding a modestly priced Echo Dot to seamlessly add voice control to your automation setup.