Building A MDC Web App With Only The Parts I Need

Material Design logoOne criticism of using Materialize CSS is that we were pulling down the entire library and all of its resources for our project, whether we are using them or not. Aside from the obvious inefficient use of bandwidth, it also presented a challenge when we wanted SGVHAK Rover to be usable independently without an internet connection. This meant we had to make a copy of the entire library in our project to serve locally.

To avoid this problem, MDC Web (Material Design Components for Web) is designed so projects could pull in features piecemeal. Now each web app only has to download the parts they needed. The reason this isn’t typically done is because of another inefficiency: there is overhead per HTTP transaction so we can’t have MDC web components come down in tiny little individual pieces – the overhead would easily wipe out any space savings.

To avoid that problem, MDC Web uses webpack to bundle all the individual pieces into a consolidated file that only requires a single HTTP download transaction. So instead of a HTML file demanding tens to hundreds of individual CSS and JavaScript files, we have a single HTML file, that loads a single bundled CSS file, and a single bundled JavaScript file. These bundles are standalone pieces that can be served by any web server independent of MDC Web webpack infrastructure. Maybe even copied to a rover.

I was looking forward to this functionality and was happy to see it was covered in Section 5 of the Getting Started guide. After putting in the configuration required, it was a matter of typing npm run build to generate my compact representation. I copied the generated bundle.css and bundle.js files and my index.html to a separate directory for the next test.

When I served up my Getting Started project via the development server npm start, Chrome developer console showed that the simple button required downloading 462KB of support files. That’s roughly the same order of magnitude as what it would take to download Materialize and all supporting information, and I was eager to see improvement.

I then went to the separate directory with the built bundles. To ensure that I’m indeed free from npm and webpack, I served these bundle files using an entirely different infrastructure: Python 3’s development web server. The environment variables $PORT and $IP were already set for a Cloud 9 environment and were reused:

python3 -m http.server $PORT --bind $IP

In the browser developer console, I could see that these files – and only these files – were downloaded. They added up to 32KB which was larger than I had hoped for in such a simple example, but maybe there’s room for further optimization. In any case, that’s definitely a tremendous improvement over 462KB.

Using Cloud 9 To Explore Web Development

I’ve started going through the Getting Started guide for Google’s Material Design Components for Web (MDC Web). This is a prerequisite for Material tutorials and I’ve already run into one problem traced to an out-of-date installation of Node.js. Given that I’m learning a new piece of software, I’m sure I’ll run into more problems that require modifying my computer. As mistakes are likely due to my learning status, I’m wary of potentially messing up my main Ubuntu environment.

What I need right now is an enclosed sandbox for experimentation, and I’ve already set up virtual machines I could use for this purpose. But since this is a web-based project, I decided to go all-in on the web world and try doing it online with a web-based development environment: Cloud 9.

Cloud 9 logo colorI’ve played with Cloud 9 before, back when it was a startup with big dreams. It has since been acquired by Amazon and folded into the wide portfolio of Amazone Web Services (AWS). As far as I knew Cloud 9 has always run on AWS behind the scenes, but now a user is exposed to the underlying mechanisms. It means we now have better control over the virtual machines we’re running, which is mostly good. It also means users have to pay for those virtual machine resources, which is fairly inexpensive (I expect to pay less than $1 for this experiment) but isn’t as good as the “Free” it used to be. The saddest part is that it’s no longer “point-click-go” simple to get started. Getting Cloud 9 properly setup means climbing the learning curve for managing AWS security and permissions, which can be substantial.

Access Permissions

AWS has an entire document focused on authorization and access control for Cloud 9. For someone like myself, who just want to play with Cloud 9 but also want to safely partition it off from the rest of my AWS account, the easiest thing to do is to create a new user account within my AWS dashboard. This account can be assigned a predefined access policy called AWSCloud9User, and that’ll be enough to get started. When logged in to this dedicated account I can be confident mistakes won’t accidentally damage anything else I have in AWS.

Network Permissions

With the power of fine-grained virtual machine control comes the responsibility of configuring it to act the way we want. When I last used Cloud 9, launching a piece of web hosting software on my VM meant it was immediately accessible from the internet. That meant I could bring it up on another browser window at my desk to see how it looks. However, this is no longer the default behavior.

When running my VM in the form of an Amazon EC2 instance like now, it has its own network firewall settings to deal with. Not only that, the VM is in its own private network (Amazon VPC) which has its own network firewall settings. Both of these firewalls must be configured to allow external access if I’m to host web content (as when exploring MDC Web) and wish to see it on my own machine.

There’s a lot of documentation online for using Cloud 9. The specific configuration settings that need to be changed are found under “Previewing Running Applications” in section “Share a Running Application over the Internet

First Step In Material Design Adventure Foiled By Ubuntu’s Default Old NodeJS

With the decision to tackle a new web-based software project, the next decision is what web-based UI framework to build the app in. My last web-based software project was to build an UI for SGVHAK rover at the beginning of the year. In the fast-paced world of front-end web development, that’s ancient history.

The rover UI project used Materialize CSS library to create an interface that follows Google’s Material Design guidelines. At the time, Google offered web developers a library called “Material Design Lite” but with the caveat they’re revamping the entire web development experience. There was little point in climbing the learning curve for a deprecated library like MDL. As Materialize CSS was close to using Bootstrap, a known quantity, the choice was appropriate for the situation.

Now, at the end of the year, we have Google’s promised revamp in the form of Material Design Components for Web. I am still a fan of Material so my signal generator utility project LRWave will be my learning project to use Google’s new library.

Diving right into the Getting Started Guide during a local coding meetup, I got as far as the end of “Step 1” executing npm start when I ran into my first error :

ERROR in ./app.scss
    Module build failed: SyntaxError: Unexpected token {
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:374:25)
        at Object.Module._extensions..js (module.js:417:10)
        at Module.load (module.js:344:32)
        at Function.Module._load (module.js:301:12)
        at Module.require (module.js:354:17)
        at require (internal/module.js:12:17)


webpack error

Since app.scss was only three lines for Step 1, it was trivial to verify there’s no typo to account for an unexpected “{“. A web search for this error message implicated an out-of-date installation of NodeJS, which triggered a memory from when I first started experimenting with NodeJS on my installation of Ubuntu 16.04. When trying to run node at the command line, a fresh install of Ubuntu 16.04 would tell the user:

The program 'node' is currently not installed. You can install it by typing:
sudo apt install nodejs-legacy

That suffix “legacy” is a pretty good hint this thing is old. Running node --version returned v4.2.6. Checking the Node JS website, today’s LTS is v10.14.2 and latest is 11.4.0. So yes, 4.2.6 is super old! Fortunately there’s a pointer to a more updated set of binaries maintained by Nodesource that plays well with Ubuntu’s built-in package management system. Following those directions automatically uninstalled legacy binaries and replaced them with up-to-date versions.

Once I’m running on non-ancient binaries, I could continue following MDC Web’s Getting Started guide on my computer. But this experience motivated me to look into a different option…

New Project: LRWave

LRWave Logo 128And now we switch gears to address something that came up earlier. During my successful collaboration session with [Emily] to draw Lissajous curves on an old CRT, one of the deflection coils was driven by a stereo amplifier based on signals from an app running on my phone. What I had wanted to try was to drive both deflection axis from the amplifier using different signals sent to the left and right stereo channels. Unfortunately, the simple tone generator app I had use doesn’t allow independent channel control. Well, somebody should write an app to do this, and the best way to make sure the app does what I want is to write it myself. Thus formed a convenient excuse for me to dive back into the software world for my next project.

In this day and age, the easiest way to distribute a piece of code is to make it a web app of some flavor. The basic way is to create a sound file (MP3 or similar) on the server with the desired wave form, and download to the browser for playback. But this is pretty clunky. It would be great if there’s a way to generate and manipulate audio wave forms using JavaScript running on the browser, no server-side code required.

I started with the HTML5 <audio> tag, which would allow implementing the “basic way” above of playing a sound clip generated on the server but not the preferred path. For the more advanced approach to work, there would need to be a browser-side API that are supported by modern browsers. Which implies a W3C standard of some sort. I started dreaming up technical terms that might let me find such an API, and after a few searches with fancy words like “frequency generation API” I found the much simpler named Web Audio API. Double-checking on the “Can I Use” reference site, we can see it’s widely implemented enough to be interesting.

Since it’s a simple utility, it has a simple utilitarian name of “LRWave.” Just something to generate different wave forms to be sent out to left and right channels. Following the simplicity of the app, its logo is two instances of the Google Material speaker icon facing left and right. In between them are two different waves from a public domain SVG file signifying the intent that it sends different waves to each speaker.

Sony KP-53S35 Signal Board “A” Components

Here are the prizes rewarded for an afternoon spent desoldering parts from a Sony KP-53S35’s signal board “A”.

Signal board A top before

The most visually striking component were the shiny metal boxes in the corner. This is where signal from the TV antenna enters into the system. RF F-Type connectors on the back panel is connected to these modules via their RCA type connector. Since this TV tuned in to analog TV broadcast signals that have long since been retired, I doubt these parts are good for any functional purpose anymore. But they are still shiny and likely to end up in a nonfunctional sculpture project.

Near these modules on the signal board was this circuit board “P”. It was the only module installed as a plug-in card, which caught our eye. Why would Sony design an easily removable module? There were two candidate explanations: (1) easy replacement because it was expected to fail frequently, or (2) easy replacement because it is something to be swapped out. Since the module worked flawlessly for 21 years, it’s probably the latter. A web search for the two main ICs on board found that the Philips TDA8315T is a NTSC decoder, which confirmed hypothesis #2: this “P” board is designed to be easily swapped for a TV to support other broadcast standards.

The RCA jacks are simple and quite likely to find use in another project.

Miscellaneous ICs and other modules were removed mostly as practice. I may look up their identifiers to see if anything is useful, but some of the parts (like the chips with Sony logo on top) are going to be proprietary and not expected to be worth the effort to figure out what they do.

The largest surface mount chip – which I used as hot air SMD removal practice – was labeled BH3856FS and is an audio processing chip handling volume and tone control. Looking at the flip side of the circuit board, we can see it has a large supporting cast of components clustered near it. It might be fun to see if I can power it up for a simple “Hello World” circuit, but returning it to full operation is dependent on the next item:

What’s far more interesting is nearby: the TDA7262 is a stereo audio amplifier with 20W per channel. This might be powerful enough to drive deflection coils to create Lissajous curves. The possibility was enough to make me spent the time and effort to remove its heat sinks gently and also recover all nearby components that might support it. I think it would be a lot of fun to get this guy back up and running in a CRT Lissajous curve project. Either with or without its former partner, the BH3856FS audio chip above.

Sony KP-53S35 Signal Board “A”

After this electronic vulture picked clean the power handling board “G”, attention turned to the other main circuit board at the bottom of a Sony KP-53S35 TV. There is a big letter “A” marked on the board, but I’m going to call it the signal board because this is where video signals enter the TV. In the lower-right corner are two entry point for RF. (One for UHF and one for VHF?) Adjacent to them are a few sets of RCA jacks for composite video + stereo audio. Finally, this TV’s premium video option in the form of a S-Video connector in addition to composite video and stereo audio.

Again there were component heat sinks that were very good at their job, making them difficult to unsolder with heat.

Signal board A heat sink before

So just as before, I turned to mechanical means, but a refined version: instead of ripping them out with brute force, I tried to drill out the attachment points.

Signal board A heat sink base

It is a challenge to make a drill bit stay on point while drilling into the conical profile of a solder joint, but it was easier once things got started. This approach is a trade-off: the brute-force way is fast and appropriate when I don’t care much about damaging parts. The drill method is slower but leaves components better preserved. In this specific case, I’d like to get it up and running again. More details on the next post.

Signal board A heat sink after

But it’s not all about removing big beefy heat sinks, this board also presented opportunity to practice delicacy. The power board was composed exclusively of through-hole parts, which is reasonable considering its job. In contrast, the signal board dealt with lower power levels and employed a few surface mount devices scattered here and there. This is an ideal test case to see if a paint-stripping heat gun can be used to remove surface mount devices (SMD).

Signal board A SMD before

Great news – it worked! And since SMD parts have far smaller surface area and less raw metal, it took only about 20-30 seconds of the heat gun on high before a pair of pliers were able to gently lift the part. I’m going to continue practicing this mechanical removal process for a while before I worry about function. So it is still unknown whether the chip has suffered heat damage.

Signal board A SMD after

The signal board had a lot of empty space, reserved for components that were never installed. Best guess: this circuit board supported multiple televisions and these components were to support features that were absent from this specific TV.

Signal board A blank area.jpg

At the end of the afternoon, the board is pretty bare and showing signs of heat stress. What pieces did I pull off this board? That’s the topic of the next post…



Sony KP-53S35 Power Board “G”

After high voltage transformer was freed, I looked over the rest of this board. Aside from a big “G” next to the Sony logo, I didn’t find a designation marked on it. I’m calling this the power board just because this is where the AC power cable came into the television. Power enters through a connector in the lower-left corner of this picture. Accordingly, most of the larger components are clustered near that area, implying power handling duties. Many also had thin sheets of metal attached, either as heat sink or as shielding or possibly both.

Power Board top before

Near the center of the board is a curious connector – it just has a wire that loops back into itself. What could be the purpose of such a thing?

Power board curious connector

A big beefy 20W resistor with very low resistance of 0.82 ohms hint at a shunt, possibly for measuring current flow.

Power board 20W resistor

Enough looking, time to pull off the interesting looking parts, meaning pretty much every component which is not a resistor or a capacitor. I first started with the ICs on the board as I wanted them to practice free-form circuit building. I doubt my first attempts will look good, so I might as well start by creating circuits around chips that are likely nonfunctional due to excessive heat used to remove them. I had the heat gun hot enough and close enough so solder melted in under 30 seconds. That heat can’t be good for the chip!

Power board ICs removed

Emboldened by success removing these little chips in short order, attention turned to the big convergence control modules STK392-110.

STK392-110 convergence control amplifiers

Sadly their big heat sinks were very good at their job of dissipating heat so I couldn’t reach melting point of solder holding them to the board. I turned to removal via mechanical means, which is a fancy way of saying “ripping that sucker out of there.” I first removed the screws fastening the heat sink to the chip, then started pulling and rocking the heat sink. The metal leg on the right side held strongly to the circuit board and broke the board. The other side, however, is different.

Power board mechanical removal

The left side of the heat sink seemed to have popped free of its leg which is soldered to board. It looks like a little drilling will be enough to intentionally separate the heat sink from its attachment bracket, and that worked to ease removal of the second heat sink.

Power board drill to separate

Once the heat sinks were removed, the heat gun could free the STK392-110 modules. I reunited chip and heatsink for whatever their future holds.

Then the heat gun were pointed at the rest of power-handling components. Transformers, rectifiers, etc. They are relatively durable components and are likely to have survived the heat of their removal if I ever dare to use them for a future project.

Power board misc parts

And here’s the aftermath: a heat-charred and distorted circuit board still home to many uninteresting resistors and capacitors. It will be dropped off at electronic recycle.

Power board back after


Sony KP-53S35 Power Amplifier Parts

A 21-year old Sony KP-53S35 TV we disassembled occupies a sweet spot for this curious electronics learner. It’s old enough that there are still discrete components we can look at, and new enough that information for those components can be found online. Here are two examples:

A Philips TDA6106Q is the most sophisticated looking component on the circuit board attached to the business end of the CRT. Datasheet says it is an amplifier, taking input voltage signal (0 to 8V) and amplifying it to a much higher voltage. (0 to 250V) It can handle signals almost up to 6 megahertz. The output pin of this chip can be traced to pin 8 of the tube. Best guess: this is how beam intensity is modulated to create a picture as the beam swept across the screen.

Philips TDA6106Q IC

Components with big heat sinks always draw attention – they tend to be the most powerful components on the board. Either because they are doing a lot of complicated work, or that they are handling a lot of power. The circuit board with the power supply and high voltage transformer also had a pair of these STK392-110 units. The fact there were only two was curious: almost everything in a rear projection television comes in threes, one for each tube, what purpose would a pair of something serve?

STK392-110 convergence control amplifiers

Looking up STK392-110 gave us the answer on both fronts: they are high power amplifiers used for the purpose of controlling color convergence. The high power (over 100W) explains the heat sinks, and convergence control explains why there’s only two of them. If we’re working to make sure all three colors converge at the same places on screen, we could leave one color alone and just adjust the other two.

This seems to be a commodity part used by many rear projection televisions, and their high power handling meant they do burn out. As a consequence there are replacement modules still available for purchase at very affordable prices. Unfortunately the market is large enough for there to be counterfeit items as well.

Lissajous Curve Is An Ideal CRT Learning Project

Lissajous curve with shorter exposure

It was satisfying to see our CRT test rig showing Lissajous curves. [Emily] and I both contributed components for this cobbled-together contraption, drawing from our respective bins of parts. While the curves have their own beauty, there were also good technical reasons why it makes such a great learning project for working with salvaged cathode ray tubes. Mainly for things we don’t have to do:

Focus: We weren’t able to focus our beam in our first work session. We couldn’t count on sharp focus so we appreciate that Lissajous curves still look good when blurry. Thankfully, we did manage better focus for better pictures, but it was not required.

Modulation: To create a raster image, we must have control over beam brightness as we scan the screen. Even if doing arcade vector graphics, we need to be able to turn the beam off when moving from one shape to another. In contrast Lissajous curves are happy with an always-on dot of constant brightness.

Deflection: To create a raster image, we’d need a high level of control over the tube’s deflection coils. We’d need to create a constant horizontal sweep across the screen, as well as scanning vertically. HSYNC, VSYNC, all that good stuff. In contrast driving deflection coils for Lissajous curves require far gentler and smoother coil changes.

Geometry: Unlike modern flat panel displays, CRT can have geometry distortions: pincushion, trapezoidal, tilt, they’re all annoying to adjust and correct in order to deliver a good raster image. Fortunately, a Lissajous curve suffering from geometry distortions still look pretty good and allow us to ignore the issue for the time being.

There is a long way to go before we know enough to drive these tubes at their maximum potential. For one thing, it is running at a tiny fraction of its maximum brightness level. The tube’s previous life in a rear projection television was a hard one, visible in the above picture as a burned-in trapezoid on its phosphor layer. Driven hard enough to require liquid cooling, it would be so bright to be painful to look at and that’s when the beam is scanning across the entire screen. A Lissajous curve covers only a small fraction of that screen area. Concentrating a full-power beam in such a small area would raise concerns of phosphor damage. As pretty as Lissajous curves are, I don’t want them permanently burned into the phosphor. But we don’t have to worry about it until we get beam power figured out.

CRT Test Rig Produced Lissajous Curves

Last night’s CRT exploration adventures with [Emily] produced beautiful Lissajous curves on-screen that looked great to the eye but were a challenge to capture. (Cameras in general have a hard time getting proper focus and exposure for CRT phosphors.) Here’s a picture taken with exposure time of 1/200th of a second, showing phosphor brightness decay in a simple curve.

Lissajous curve with shorter exposure

Due to this brightness decay, more complex curves required a longer exposure time to capture. This picture was taken with a 1/50th second exposure but only captured about half of the curve.

Lissajous curve with longer exposure

Our test setup was a jury-rigged nest of wires. Not at all portable and definitely unsafe for public consumption. It required a space where everyone present are mature adults who understand high voltage parts are no joke and stay clear. (And more pragmatically, if an accident should occur, there will be other people present to call for immediate medical attention.)

CRT Test Rig angled view

Our beam power section consisted of two subsystems. The first is a battery that supplies low power (8 volts and less than 1 watt) to heat the filament. Using a battery keeps it electrically isolated from everything else. The second subsystem supplies high voltage to drive the CRT, and we keep a respectful distance from these parts when powered on.

CRT Test Rig beam power system

Connected to the tail end of the tube is the connector we freed from its original circuit board, wired with a simplified version of what was on that board. Several pins were connected to ground, some directly and others via resistors. The two wires disappearing off the top of the picture are for the heated filament. Two wires for experimentation are brought out and unconnected in this picture. The red connects to “screen grid” (which we don’t understand yet) and the black connected to an IC which we also don’t understand yet.

This is a rough exploratory circuit with known flaws. Not just the two wires that we haven’t yet connected to anything, but also the fact when we connected its ground to transformer’s ground, the tube flared bright for a fraction of a second before going dark. We only got a dot when connecting transformer ground to the filament heater negative, which was unexpected and really just tells us we still have a lot to learn. On the upside, something in this circuit allowed our “focus” wire to do its job this time, unlike our previous session.

CRT Test Rig tube wiring

But that’s to be figured out later. Tonight’s entertainment is our beam control section, which sits safely away from the high voltage bits and we can play with these while our tube is running.

CRT Test Rig beam control system

Controlling vertical deflection is an old Tektronix function generator. This is a proper piece of laboratory equipment producing precise and consistent signals. However, its maximum voltage output of 20V is not enough to give us full vertical deflection. And since we only had one, we needed something else to control horizontal deflection.

That “something else” was a hack. The big black box is a “300W” stereo amplifier, procured from the local thrift store for $15. Designed to drive speaker coils, tonight it is driving a CRT control yoke’s horizontal deflection coil instead. It was more than up to the task of providing full deflection. In fact, we had to turn the volume down to almost minimum for tonight’s experiments. A cell phone running simple tone generator app provided input signal. Not being a precision laboratory instrument, the signal generated was occasionally jittery. But enough for us to have fun producing Lissajous curves!


Gathering High Voltage Components of Sony KP-53S35

Now that we got a blurry dot on screen of picture tubes we removed from a Sony KP-53S35 rear projection television… it is encouraging for us to keep going and see how much further we can go. There are two main avenues of investigation: (1) How to make a better and tighter beam, and (2) how to control direction of that beam.

To help experiments on making a better and tighter beam, we’re going back to the harvested pile of parts. A control box with three knobs labeled “focus” seems promising. It also has three other knobs labeled “screen” whose purposes we’re not sure about. This box had been mounted with the knobs facing forward such that a technician can access these knobs while looking at the screen.

HV Subsystem 3 - focus and screen adjust front

The back side of this box has a few wires. Most significantly, a pair of wires went to each of three picture tubes. In this picture, we still see the wire pairs for the green and blue tubes attached. The empty spots are for the red tube, removed before this picture was taken. The yellow, brown, and upper left corner black wire is unknown. The red wire in the lower left is connected to the high voltage transformer.

HV Subsystem 2 - focus and screen adjust back.jpg

Pulling the camera back shows the system in a little more context.

HV Subsystem 1 - wires

Close-up pictures were then taken for each of the three picture tube PCBs for future reference.

Our earlier experiment used a transformer purchased off Amazon intended for something else – we had hoped its voltage would be close enough, and it was. Now for the best beam we want to get the correct voltage by using the original transformer which generated the voltages for these tubes. It lives on one of the two main circuit boards that had lived at the bottom of the television. This board is where the power cord connected, so it has the power supply and everything relating to high voltage. The transform is still attached to an unit that distributes voltage to the three picture tubes.


The transformer isn’t expected to be terribly delicate, so the cheap hot air gun will be deployed. But before that, a picture of its PCB footprint was taken for possible future reference.

HV Subsystem 5 - transformer footprint



Cheap Seats At The Hot Air Gun Show

At a recent SGVTech meetup, newcomer Amir had lots to offer. One item that I picked up on was his assertion that a cheap Harbor Freight heat gun can be a low-cost alternative to fancy electronics hot air rework stations. I have one of those cheap hot air guns in my garage! Designed for home improvement projects like paint stripping, it is a big crude tool. I wouldn’t use it to assemble surface mount devices or anything I actually care about until I get a better idea of what I am doing. I’ll learn to handle it by disassembling parts that are either robust, or that I don’t care about.

The very next week, I got the chance to put that idea to the test when [Emily] and I felt inspired to try lighting up a CRT. The original driving electronics are no longer functional due to us crudely tearing them out of the TV, but the tube and a few associated accessories are still intact. To help us play with the tube, we thought it might be a good idea to remove a CRT socket to make it easier to access our tube’s pins. This is the ideal situation for testing the heat gun – a big socket should be robust enough to take the heat of a clumsily applied hot air gun much better than something delicate. This TV is also old enough to predate ROHS and lead-free solder, so we expect the solder to flow relatively easily.

I aimed the hot air gun at the solder joints at low setting. After a minute of inactivity, I turned it up to high. About a minute after that, we could see solder starting to melt. A few more seconds after that, all solder on the socket melted enough for us to remove it.

CRT socket removed from PCB

This was much faster and easier than individually undoing solder joints using a soldering iron and a solder removal tool. And the mission was successful: our newly freed socket made it easier to probe terminals and to make experimental connections with alligator clips.

CRT pin probing with socket

Old TV Picture Tubes Lights Again

When we tore apart an old rear projection television a few weeks ago, I did not expect those picture tubes would ever light up again. We took everything apart quickly within the narrow time window, so we didn’t have time to be careful to keep the electronics driving those CRTs intact. Those electronics are in pieces now, and in that writeup, I said the tubes were beautiful glass work and I hoped to display them as such in the future.

Well, there has been a change in plans.

On the same day as that teardown, [Emily] was gifted an old non-functioning camcorder. She has since taken that apart, too. The first component to see reuse was its tiny black and white viewfinder CRT. And as she dug deeper into the world of old CRTs, [Emily] came across this YouTube video by [Keystone Science] going over the basics of a cathode-ray tube and shared it with me. We were inspired to try lighting these tubes up again (without their original electronics) at yesterday’s SGVTech meetup.

The first step was to straighten out the pins at the rear end of our salvaged CRTs – they got a bit banged up in transport. A quick web search failed to find details on how to drive these tubes but probing with a meter gave us a few candidates for exploration.

Probing CRT pins

  • A pair of wires had around 8 ohms of resistance, highest of all wire pairs that gave a reading. This is likely the heating filament.
  • A few other wire pairs gave readings we didn’t understand, but several of them had some relation to a common pin. The common pin was thus our best candidate for cathode pin.

We knew the anode is connected to the side of the CRT, so now we have all the basics necessary to put a blurry dot on screen. A bench power supply was connected to the eight ohm load, and a few seconds later we can see a dull glow. Then a high voltage transformer was powered up across our anode and candidate cathode.

RPTV picture tube and transformer

After a bit of debugging, we have our blurry green dot! We proceeded to power up the other two tubes, which gave us a blue dot and a red dot. The colors look good to us, but apparently they’re not quite the right colors because during our TV disassembly we saw some color filters on the red and green tubes. (The blue tube had no color filter.)

During the course of the evening, the quality of our dot varied. Most of the time it was a blur approximately 5mm in diameter. On one occasion it bloomed out to 3cm diameter and we didn’t know what had caused it. Likewise, we had a pinpoint bright dot for a few seconds not correlating to any activity we could recall. As far as driving a CRT, we know enough to be respectful of the high voltage involved, but obviously we still have a lot more to learn. It’s just as well we don’t know how to focus the dot, because in the absence of sweep, a constant bright focused dot would likely burn a hole in the center of the screen’s phosphor layer.

A first step towards moving the beam was to put some power on the magnetic deflection yokes. These coils of wire were hooked up to a function generator, and we were able to get movement along one axis. Its maximum output of +/- 20V could only deflect a small fraction of the screen size, but it was something.

We didn’t have a second function generator on hand, but we got movement along another axis using magnets. They were taped to a shaft that was then put into a cordless drill. Holding the spinning drill near the control yoke induced movement along the other axis. Combined with the function generator, it allowed us to make a few curves on screen.

RPTV Red curves

Tinkering projects with visual results are always rewarding. With this success, there might yet be life ahead for these tubes as something other than pretty glass. A search found a hobbyist’s project to drive a CRT for an XY vector arcade monitor. That project page also linked to an excellent description of vector CRTs as used in old Atari arcade machines. Lots to learn!

Sawppy Post-Faire Cleanup

When I work on Sawppy, I test and run indoors. At DTLA Maker Faire Sawppy ran all over, both indoors and out. Most of the time people were playing with Sawppy on a piece of artificial turf at Maguire Gardens. This is an outdoor space where people would walk their dogs, raising obvious sanitation concerns running Sawppy on my home carpet after the event.

Well, after a long day of work, who doesn’t enjoy kicking off their shoes and soaking their feet? I could give Sawppy the same royal treatment. All six wheels were removed and soaked in a tub filled with a mixture of water and household bleach. A retired toothbrush was used to scrub off dirt particles clinging to the wheel. Hopefully this removed most of the contaminants Sawppy might have picked up during the event.

Sawppy kicks off shoes

It was also a good time to perform an inspection to see how Sawppy held up mechanically. In addition to the set screw mentioned yesterday, a few chassis mounting screws have fallen out and need to be replaced. I designed plenty of redundancy in these mounts so there was little risk of Sawppy falling apart.

Sawppy lost fasteners

After a few hours of soaking, the wheels were hung up to dry like old socks. What has six rover wheels but is not a rover? This laundry rack.

Sawppy laundry

(Cross-posted to

Sawppy at DTLA Mini Maker Faire

Yesterday Sawppy went on an adventure to the downtown Los Angeles Mini Maker Faire. There Sawppy found a receptive and appreciative audience. There were a lot of enchanted kids, interested parents, and other makers who might be building their own Sawppy rovers.

The morning started out with Sawppy sitting on a table alongside a few different builds of JPL open source rover. Eric’s build is on the left in black and white, Santa Susana High School build is on the right with purple printed parts.

Taking Sawppy around and talking to individuals about Sawppy was a lot of fun and something I’ve done in other contexts before. I have hopes for a few of the contacts to develop into something cool for Sawppy’s future. What’s new this time was that I also signed up to give a short 15-minute presentation about Sawppy and that took more work and preparation. Thanks to the 2-minute “lightning talk” opportunities at Hackaday LA the past few months I’m less nervous about public speaking than I used to be, but I still got pretty stressed about it. I’m sure it’s a matter of practice and the more I can take advantage of such opportunities the better I’ll get.

Roger Sawppy

Outside of the presentation, Sawppy and I spent most of our time on the astroturf across the walkway from the officially assigned display area. It was a hilly part of the park which meant there were no tables or booths set up there, and it was a good place to demonstrate rover suspension in action. I had a spare phone set up to be Sawppy control and handed the control to anyone who wanted to pilot Sawppy for a bit.

Sawppy on lawn.jpg

Most were content to run around the turf. Some of the little ones tried to run Sawppy into their siblings. A few ran into the bushes beyond the turf for a more rugged demonstration of Sawppy chassis. A perpetual favorite is to have Sawppy climb over shoes.

Sawppy running over feet

Thanks to refinements to improve robustness over the past few months, Sawppy came out of the experience with only a slightly wobbly left rear wheel that was easily repaired by tightening the set screw on the left rear steering servo coupler. A great improvement over earlier outings!

(Cross-posted to

Xbox 360 Steering Wheel Teardown

I just bought the top-of-the-line Xbox One X in order to play Forza Horizon 4 in 4K HDR. I’ve also reclaimed my old Xbox 360 Halo 4 Edition, which I loaned out to a friend’s family but the children had lost interest in the older console. I got the console itself back, plus my old game library and all accessories. This all started when I went looking for my old Kinect sensor bar, but that’s a story for another time.

Physically, the biggest thing in this package was the Xbox 360 Steering Wheel. Built to offer realism through force-feedback and take severe physical punishment, it was big and beefy and takes up entirely too much space. A problem that almost certainly drove its retirement and replacement by a much smaller controller. Since it is not compatible with my new console, where I can play all four Forza Horizon games, I see no reason to keep it around in running condition.

Which means it is time for some fun!

I brought it to our weekly maker meetup where we can tear into this relic of the past. The big wheel is set aside for now.

Xbox 360 Steering Wheel 1 - wheel intact

We’ll start with the pedals. These are designed to sit on the floor and take the force of frantic game players stepping hard on them. They are made of extremely sturdy plastic with surprising heft.

Xbox 360 Steering Wheel 2 - pedal intact

It was straightforward to open up, where we can see it is fairly simple inside.

Xbox 360 Steering Wheel 3 - pedal open

All the force gets dissipated by heavy duty springs and metal brackets into the beefy plastic, leaving only the rotational motion to be read by simple position encoders which are likely just inexpensive potentiometers.

Xbox 360 Steering Wheel 4 - pedal electronics

That done, we start tearing into the wheel itself. Most of the visible screw holes are at the bottom, where it is curved to fit on our laps. Unlike the pedal unit, these screws are “security screws” with a post in the middle of the Torx shaped fastener. It proved to be a minor annoyance but easily overcome with brute force as we don’t care about putting it back together.

Xbox 360 Steering Wheel 5 - wheel lap mount

After the “lap desk” layer was removed, we repeat the process for the actual enclosure.

Xbox 360 Steering Wheel 6 - wheel enclosure

A lot of destroyed fasteners and plastic later, the innards of the steering wheel is visible. As expected, it is mostly empty space. To the left is a control board with three wire bundles leading to the rest of the wheel. There’s one controlling the motor to provide force feedback, one to a sensor to read steering wheel angle, and a wiring harness going through the center of the steering shaft to the wheel-mounted controls.

Xbox 360 Steering Wheel 7 - wheel innards

Here’s a closeup of the force feedback motor and gearbox. Mechanically, this area takes the brunt of forces players would apply to the steering wheel. So I expect I can reuse this robust assembly in a physically demanding project in the future.

Xbox 360 Steering Wheel 8 - ffb gearbox

However, it proved to be tricky to remove. The four obvious screws release the metal plate, but that is only part of the assembly. There had to have been fasteners coming in the opposite direction, but none were clearly visible. By process of elimination, we eventually figured out the screws were hidden under a stealthy sticker that matched its surrounding color and shape so well we didn’t realize it was a sticker.

Xbox 360 Steering Wheel 9 - cleverly hidden screws

After that discovery, it was trivial to remove the motor gearbox assembly.

Xbox 360 Steering Wheel 11 - ffb gearbox extracted

The main board was also removed for examination. The electronics people in the room looked over the board and noted the main processor has a Microsoft logo on it. We had expected to find name and designation for a microcontroller we might reprogram, but this is a custom chip.

Xbox 360 Steering Wheel 10 - mainboard

Teardown proceeded to the wheel unit itself, where we found another surprise: The big motor isn’t the only one providing tactile feedback. The bottom left and right corners of the steering wheel also housed vibration motors.

Xbox 360 Steering Wheel 12 - wheel vibration motors.jpg

The two motors appeared identical, but they had different sized weights affixed to their output shafts to produce different tactile sensations for users’ palms.

Xbox 360 Steering Wheel 13 - wheel vibration motors extracted

The shifter paddles in the back of the wheel also had to take some punishment, as people can pull on those pretty hard. Again, a lot of mechanical design dissipated any over exuberant energy into sturdy plastic pieces and metal springs, leaving just a simple mechanical motion to press on small push buttons on the back side of the wheel circuit board.

Xbox 360 Steering Wheel 14 - paddle shift buttons

Remainder of the in-wheel PCB was unremarkable with standard buttons.

Xbox 360 Steering Wheel 15 - wheel PCB

The physical wheel we hold in our hand, however, was interesting. Its weight led to speculation that it might have metal weights inside or possibly be formed from a steel tube. We put it through a metal-cutting bandsaw and found that it was solid heavy plastic all the way through. Three layers are visible: The crudely formed center (dark gray) which is likely just a C shape. Then a more precisely formed plastic layer was formed over it (lighter gray) which probably also formed the center of the wheel housing all the buttons and PCBs. Then finally, a soft rubbery rim was formed over that, with a dimpled texture for grip.

Xbox 360 Steering Wheel 16 - solid rimThis steering wheel controller was a lot of fun in its prime. It felt great in the hand making its best effort at realism. The robust construction took all manners of abuse (from children and grownups alike) without any sign of damage. This wheel was definitely not flimsy! I appreciated seeing all the work that went into making such a robust gaming peripheral.

Now all the potentially reusable parts like motors, springs, gearboxes, and electronics have been harvested and put away, consuming far less storage volume than the entire wheel and pedal assembly. The remaining (beefy) plastic is on their way to a landfill.

A Photo Studio Under The Desk

A conversation about Pixelblaze digressed into photography and how I had taken some of the pictures I used. Some on this blog, some on, and some elsewhere. It was a quick little project and today I’ll walk through it, illustrated with some pictures.

The problem I wanted to solve is one shared by many other makers: how to take good pictures to show off projects to the world. The dream solution is to have a full-blown photo studio where I have control over lighting. Cast on a neutral backdrop so all the focus is on the subject, free of background distractions. In reality, few of us can set aside the room required by a serious photo studio. Especially makers: every square foot consumed by a photo studio is a square foot not used for making!

My solution was to put a tiny photo studio under a computer desk. Most of the time the desk will be used for normal desk duties, home of my Luggable PC among other equipment. When I sit at the desk, I put my legs under the table.

Under Table Photo Studio 1 - Computer desk

Aside from the curtain rods sticking conspicuously out the side, all the elements of my tiny photo studio can be stowed out of the way. The white fabric is a curtain from IKEA, mounted to the rod closest to the camera and draped over the far side rod.

Under Table Photo Studio 2 - Stowed with chairs

Bolted under the desk is a cheap LED light fixture from Costco. The segment of curtain draped between the two rods serve to diffuse light from this fixture.

Under Table Photo Studio 3 - light fixture

The curtain rods are suspended under the table using simple 3D-printed brackets held onto existing table leg brackets.

Under Table Photo Studio 4 - curtain rod bracket

When it’s time to take some pictures, the chairs are moved out of the way.

Under Table Photo Studio 5 - stowed no chairs

A few magnets salvaged from hard drives hold folded-up fabric to the far side table leg brackets. Moving magnets aside allows the extra fabric to drop to the floor. The segment of curtain between the far side rod and the floor serve as the backdrop.

Under Table Photo Studio 6 - released

Remainder of the curtain can now be unfurled to serve as the photo studio floor. Sometimes I take the few minutes necessary to smooth wrinkles out of the fabric, sometimes I don’t.

Under Table Photo Studio 7 - unfurled

When the light fixture is turned on, it’s showtime!

Under Table Photo Studio 8 - lights camera action

This little photo studio under the computer desk is where I took most of the pictures illustrating Sawppy assembly. The animated GIF illustrating Luggable PC Mark I assembly. Plus many other pictures on this blog, most recently the picture of Supercon goodie bag contents.


Fun With Tiny CRT

When we took apart the big old rear projection television, the same family also had an old VHS camcorder from the 1980s slated for disposal. [mle_makes] took it off their hands and merrily started taking it apart for fun components. First component to be brought to our weekly SGVHAK meetup was the viewfinder’s tiny CRT. I brought the box of Sony KP-53S35 salvaged RPTV parts on the same day so we could place the two picture tubes side by side with a ruler between them.

Tiny CRT 1 - Side by side with RPTV tube

While the big tube had 21 years of TV watching burned in to the surface, the little CRT looks to be in good shape. (Also, the RPTV tube was likely driven far harder to generate the necessary brightness.) And since the little tube was part of a battery-powered device (12 volt lead-acid!) the picture tube flickered to life with a DC power supply.

Viewed from the top, we are reminded how much of a space savings modern LCDs gave us. Both of these tubes are far longer than their picture’s diagonal size.

Tiny CRT 2 - Length comparison with RPTV tube

The little tube’s image was remarkably crisp and bright when viewed in person, a fact extremely difficult to capture in a photograph. The 525 scan lines of a NTSC signal meant this little tube was pushing 600 dpi of resolution!

Tiny CRT 3 - tape measure

All of these images on the tube were generated from an old video conference camera, which had a composite video output port that was wired to the tube’s control board. Here’s one of the test setups, using a scrap piece of paper and a simple smiley face drawn on it with a Sharpie marker.

Tiny CRT 4 - camera test setup

The best picture taken of the tube was when I narrowed the aperture to get a longer field of depth, so the camera is free to focus on something other than the actual picture and still get halfway decent results. (I think it is focused on the edges of the glass here.) An admirable amount of paper texture was conveyed on this tube.

Tiny CRT 5 - camera test image

A few weeks after this initial tiny CRT demo, it became the centerpiece of this Freeform Mini CRT Sculpture on

My Volt Was A Good Car, But I Do Not Miss It

This week General Motors put out a press release full of corporate euphemisms that boiled down to this: several car models that aren’t selling well enough are getting axed. The press release was careful not to use the word “layoff” but it’s hard to imagine that workers will continue to be paid if there are no cars to be made. Obviously this got a lot of people upset, especially in light of the 2008 government bailout and more recent corporate big tax breaks. But here I’m going to focus on one specific car: the Chevrolet Volt.

The Volt was still in development when financial markets melted down in 2008. It expressed a potential high-tech future for General Motors. I saw it as one of the most convincing arguments against the “let GM die” school of thought. It was a much more interesting piece of engineering than what was found in a Toyota Prius and a sensible stepping stone on the transition to an electrified future for cars. And putting my money where my mouth was, I signed for a 2012 Chevrolet Volt on a three year lease. I took this picture when I took delivery, a day after Christmas 2011.

Roger Leases 2012 Chevrolet Volt

For three years it served as an efficient commuter vehicle taking me to and from work and everyday errands. The gasoline-fueled electric generator meant I could take it out on a few road trips and not worry about being stranded by lack of charging. 75% of its 30,000 leased miles were powered by electricity, a hearty endorsement of the “Voltec” architecture that maximized advantages of an electric power train using a minimally sized battery pack.

When my lease expired in December 2014, a Volt was at the top of the list if I needed another commuter car. But circumstances never motivated me to get another, and now it is likely I never will.

But I think that’s perfectly OK. Why?

First: the Volt was always designed to be a transition from gasoline to electric propulsion. It more than met its objectives, exceeding my expectation in many ways. But time moves on and that electric future is here. If I were to get a commuter car in the final days of Volt production, it would be evaluated against all-electric vehicles. Including the Chevrolet Bolt, which incorporated many of the lessons GM learned from making the Volt.

Second: the Volt was a sensible efficient commuter vehicle, not one to stir emotion or attachment. It handled far better than any Toyota Prius I’ve rented, but nowhere near the fun of my Mazda RX-8. When I returned the car at the end of my lease, I set down the keys, signed the paperwork, and walked away without looking back.

It was a good car that made sense for its time. It did its job reliably and efficiently, and I couldn’t ask for more from a commute appliance. But its niche is shrinking. So despite how bad the decision might look to history, GM made their business decision to look forward.

Amazon Machine Learning School Now Open

AWS logoWhen I was learning about artificial intelligence in school, knowledge was found in the form of advanced textbooks and academic journals. It takes a certain amount of dedication to understand and digest that information. Now, a few decades later, leading edge research can be found on the internet. But even better: many educational resources for people outside those academic fields of study are also available online.

These resources have just grown again, as Amazon opened up their AWS Machine Learning course to the world. Formerly a part of internal employee training, it now helps people get up to speed outside the company as well. (And naturally help convert them to become paying AWS customers.)

There are different courses for different audiences, from developers to business professionals. And they cover different parts of AWS services. When I get around to taking these classes (the to-do list never seems to grow shorter…) I’ll likely dive into the developer track for visual recognition algorithms. If I feel good about my grasp of the code, I’ll see if I can integrate an Amazon DeepLens unit into my robotics projects.

This set of AWS courses is the latest addition to a long list of web-accessible resources for learning latest tools for AI. It’s great that I don’t need to enroll in school to see how the field has evolved since the time I was at UCLA.