Open Source is awesome. 1 day after the announcement of the LCDash GT, and how it helps people hack car engines with MegaSquirt, comes a project from Kurt about a 100% Open Source Hardware-based computer that lets you see sensor read-outs, and realtime information connected to a scooter, which naturally make someone a better driver!
Kurt used the antipasto arduino ide, which brought a tear to my eye, thinking that all those hours slaving away with Chris getting that to work was time well spent :-)
This is a custom, homebrew shield Kurt made to house and connect up all the sensors: Kurt has a ridiculously well written tutorial on how he built everything up on his site over here... and Make blog even picked it up, and there's a funny conversation about it over at the Arduino forums.
Just in time for the Maker Faire Detroit, Justin, Jake and I have been working on the brand new LCDash Operating System, and hardware upgrade. This is the brand new LCDash GT. The GT edition has more memory, a faster processor, lighter-weight bootloader, a much more streamlined circuit design than the original LCDash. This means it's much more DIY-friendly, and hackable.
It's also the first time that a 100% Open Source engine controller and engine readout system has been available for people that are familiar with the OpenPort Cable, MegaSquirt EFI, or OBD2/OBDII Elm Protocol:
Each of those protocols allow you to read the output of the engine parameters, and even set them on the fly if you're using MegaSquirt. This means being able to change the fuel-oxygen-throttle mixture and fuel ratio, for either higher performance (more gas), or better gas mileage (less gas) at a given RPM of the engine.
A quick word of warning: OBDII hacking and EFI programming is a jedi art, for black-belt car guys, but there's actually a really lively, active community of hackers who have spent a bunch of time hacking their own engines using the MegaSquirt. And Justin and Chris are two such guys :-) It's amazing how much power you can pull off the line in a Mitsubishi that's been rigged up to a MegaSquirt...
Anyway, without further ado, here's an updated video that Justin made:
Here are two videos of the base LCDash in action, from timbo and MegaScott:
And here's a video that Mike made of the original (running a slower version of the OS, and green PCB representing the older schematic) connected to the MegaSquirt:
If you haven't heard of the MegaSquirt hardware project yet, it's a pretty popular platform for hacking the OBDII interface to the engine. OBDII is a protocol used by many manufacturers as an interface between the EFI and the main computer which distributes and runs the spark plugs, timing, and engine electronics based on a variety of sensor inputs (like O2, RPM, gas pedal depression, and sometimes even car angle, altitude, knock sensor, crank position, turbo boost, current speed, etc.). It's a pretty ambitious project, and can be a challenge to hack at times, having to constantly go back and forth between a PC, and the MegaSquirt, and reprogramming the Arduino. The LCDash GT presents a touch-screen interface that makes it really easy to see what the MegaSquirt is doing, and adjust ratios on the fly (e.g. at an autotuner, or dyno station).
For instance, here's a video by Danny showing the MegaSquirt hooked up to a laptop, the same way it would be hooked up to the LCDash:
The MegaSquirt basically let's you do crazy things (that are of obvious questionable benefit, but definitely cool) to a car's engine, like make it have sputtering launch control:
This coming Saturday and Sunday are going to be pretty action packed for me... I'm driving from Boston to Detroit with Mike to go to Maker Faire. Talk about a long drive, but we're going to celebrate in style by listening to the new Eminem CD. Normally I wouldn't listen to his music, but I figured I'd try to get in the mood, so why not?
Maker Faire Detroit 2010 is taking place this Saturday from 9:30 am to 8:00 pm, and Sunday from 9:30 am to 5:00 pm, at the Henry Ford museum. This is cool on a number a levels, I think. Firstly, Henry Ford is to the Detroit auto crowd, as Eli Whitney was to the Northeast: an inventor who kick-started an entire industrial revolution.
That's inspirational to me... and Mike too, he's been talking about how badly he's wanted to go to the Ford museum ever since he was a kid. He and I are both pretty big into cars (if you've ever visited the Liquidware lab, you know that this is true!).
Anyway, here are some of the promotional pictures... please let me know if you want me to bring any special projects along with me to show you...
If you already emailed me, I'm looking forward to seeing you... and if you want to carpool, just let me know...
The year: 1995. I’m in middle school. I have two calculators, TI-82’s to be precise. Why 2? Because on math tests and quizzes, I found that using Solve() was so slow that I’d start one on a problem, and then use the other while the first got the answer. Calculator-based multitasking in its truest form. The more calculators you had, the nerdier you were. Alpha-nerd, and nerd-cred if you will. It wasn’t just me, I was passing on a long generation of calculator-based nerd credibility:
Something has gone horribly wrong. Fast-forward to the epilogue future-present. The world according to my middle school dreams was supposed to be filled with calculators, and super-man-geeks and “not-men” (aka !men, or "women") were supposed to be walking around, carrying calculators, wearing super calculator watches.
Bling. Bling.
I used to have a tactical vest that I'd wear while programming in high school. Except instead of guns and ammo, my weapons were Sine, Cosine, and Arctangent. Full, semi-automatic Cot()-.45 degree Artangent, nevermind you. I used to use the vest to hold my TI and HP calculators. I dreamed of the day when I'd carry around a brushed titanium briefcase filled with top-secret, uber-hacker calculators for cracking crypto hash algorithms.
But alas, that future never came to be...
In the past few days of revelry while I’ve used my R-based scientific calculator, I’ve come to realize something. This is the first time in years that I’ve actually carried around a calculator again. It got me thinking… and I started to look around as I walked through Boston. No one carries calculators any more!
The calculator, as it turns out, is a casualty of convergence. In other words, the calculator got “OJ Simpsoned” … if it doesn’t fit (in your assortment of devices), you must acquit (and stick it in a box of old gadgets).
The next generation calculator device, and the calc-based society of the future I always dreamed about, never came about. This is why I think that never happened: at the low end, calculators have been absorbed into handheld phones. Blackberry, iPhone, Android devices all have apps that replicate the features of calculators, so why carry around a calculator anymore? At the high end, calculators didn’t have enough RAM or dataspace memory to prove themselves useful or capable as data analysis needs grew. Furthermore calculators were quite a pain to transfer data on and off of, so people just used computers with Excel, Matlab, Mathematica and R. The calculator just got squeezed out.
But something has changed, and I’m determined to figure out what happened. Since Koen helped me get R running on the BeagleBoard, I’ve been carrying my newfangled scientific programming open source calculator around with me, proudly, and finding reasons to pull it out and get R running. It’s wonderful, inspiring, and totally contagiously nerding out anyone who asks me about it, sort of like a virus spreading and zombifying people in an underground lab ... like these guys did:
I think calculators need to be re-invented, and I think I’ve stumbled on at least part of the equation. The Beagleboard / BeagleTouch – based R calculator is much more than “just a calculator”. It’s a hacker / calculator nerd’s (me) dream come true. It provides exactly what I need: a way to compute randomly sampled arrays, parallel compute transposed lists on the fly.
Instead of calculating the tip at the end of a meal, I can use this thing to calculate tips for the entire freakin’ restaurant!
Pretty nifty... although I haven't tried my hand at running a Makerbot myself yet, this is definitely some solid inspiration... Justin has one in the back room, and maybe now it's time to play with it? :-)
On Wednesday, in the library, Chris and I talked about how impossible it would be to port R to the Beagleboard platform, given all the insane dependencies on obscure libraries, some java based, some fortran based, you name it.
On Thursday, I read Karim's most recent article with Ned Gulley called, "The Determinants of Individual Performance and Collective Value in Private-Collective Software Innovation". Naturally, this wasn't a wiki-like contest, but there sure was plenty of reuse (R is an established platform), code recombination (Chris + Will + Koen + Mine). In this case, however, I suppose you could say the goal was to increase the "free-rider" problem. That, or I just think it's cool to have a portable R-based gadget. :-)
Ps, totally random aside, this graph is awesome, it proves that multiple people working together for a common good get a lot farther than any one person by themselves (obviously this is true, but this is quantitative, numerical evidence):
On Friday, I posted a quick blog article about porting R to the Beagle & Angstrom platform. Chris thought it would be very difficult, I thought it would be impossible, and so I offered $1,000 to anyone that could help.
On Saturday, I got about a dozen emails, and 3 folks who said they were going to try (4 if you include me, since I figured maybe I could do it after all).
On Sunday, I got an email from Koen with the following picture, and code screenshot printout:
Total elapsed time since blog post: less than 36 hours
UPDATE: I just Googled around, and there was apparently also another possible solution, cooked up by HNS, although technically not doable with Angstrom (which is critical given some of the drivers and whatnot I've patched into my version of Angstrom), it gets R up and running with Debian:
boot and login. Make sure the host works as a internet router.
Linux bb-debian 2.6.32 #48 PREEMPT Tue Jun 8 14:21:52 CEST 2010 armv7l
The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Jul 23 12:48:05 2010 from 192.168.0.200 bb-debian:~# apt-get install r-base Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libgfortran3 libpaper-utils libpaper1 r-base-core r-cran-boot r-cran- cluster r-cran-codetools r-cran-foreign r-cran-kernsmooth r-cran- lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r-cran-vr r-recommended tk8.4 unzip zip Suggested packages: ess r-doc-info r-doc-pdf r-doc-html r-mathlib Recommended packages: r-base-html r-base-latex r-base-dev The following NEW packages will be installed: libgfortran3 libpaper-utils libpaper1 r-base r-base-core r-cran-boot r-cran-cluster r-cran-codetools r-cran-foreign r-cran-kernsmooth r- cran-lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r- cran-vr r-recommended tk8.4 unzip zip 0 upgraded, 20 newly installed, 0 to remove and 1 not upgraded. Need to get 18.2MB of archives. After this operation, 64.3MB of additional disk space will be used. Do you want to continue [Y/n]? y Get:1 http://ftp.de.debian.org stable/main libgfortran3 4.3.2-1.1 [211kB] Get:2 http://ftp.de.debian.org stable/main libpaper1 1.1.23+nmu1 [21.9kB] Get:3 http://ftp.de.debian.org stable/main libpaper-utils 1.1.23+nmu1 [18.3kB] Get:4 http://ftp.de.debian.org stable/main zip 2.32-1 [110kB] Get:5 http://ftp.de.debian.org stable/main unzip 5.52-12 [163kB] Get:6 http://ftp.de.debian.org stable/main tk8.4 8.4.19-2 [1022kB] Get:7 http://ftp.de.debian.org stable/main r-base-core 2.7.1-1+lenny1 [11.0MB] Get:8 http://ftp.de.debian.org stable/main r-cran-boot 1.2.33-1 [458kB] Get:9 http://ftp.de.debian.org stable/main r-cran-cluster 1.11.11-1 [343kB] Get:10 http://ftp.de.debian.org stable/main r-cran-foreign 0.8.27-1 [154kB] Get:11 http://ftp.de.debian.org stable/main r-cran-vr 7.2.42-1 [971kB] Get:12 http://ftp.de.debian.org stable/main r-cran-kernsmooth 2.22.22-1 [51.7kB] Get:13 http://ftp.de.debian.org stable/main r-cran-lattice 0.17-10-1 [598kB] Get:14 http://ftp.de.debian.org stable/main r-cran-mgcv 1.4-1-1 [658kB] Get:15 http://ftp.de.debian.org stable/main r-cran-nlme 3.1.89-1 [1346kB] Get:16 http://ftp.de.debian.org stable/main r-cran-survival 2.34-1-1 [833kB] Get:17 http://ftp.de.debian.org stable/main r-cran-rpart 3.1.41-1 [160kB] Get:18 http://ftp.de.debian.org stable/main r-cran-codetools 0.2-1-1 [39.8kB] Get:19 http://ftp.de.debian.org stable/main r-recommended 2.7.1-1+lenny1 [2208B] Get:20 http://ftp.de.debian.org stable/main r-base 2.7.1-1+lenny1[29.7kB]
Creating config file /etc/papersize with new version Setting up libpaper-utils (1.1.23+nmu1) ... Setting up zip (2.32-1) ... Setting up unzip (5.52-12) ... Setting up tk8.4 (8.4.19-2) ... Setting up r-base-core (2.7.1-1+lenny1) ... Setting R_PAPERSIZE_USER default to 'a4'
Creating config file /etc/R/Renviron with new version Setting up r-cran-boot (1.2.33-1) ... Setting up r-cran-cluster (1.11.11-1) ... Setting up r-cran-foreign (0.8.27-1) ... Setting up r-cran-vr (7.2.42-1) ... Setting up r-cran-kernsmooth (2.22.22-1) ... Setting up r-cran-lattice (0.17-10-1) ... Setting up r-cran-mgcv (1.4-1-1) ... Setting up r-cran-nlme (3.1.89-1) ... Setting up r-cran-survival (2.34-1-1) ... Setting up r-cran-rpart (3.1.41-1) ... Setting up r-cran-codetools (0.2-1-1) ... Setting up r-recommended (2.7.1-1+lenny1) ... Setting up r-base (2.7.1-1+lenny1) ... bb-debian:~# R
R version 2.7.1 (2008-06-23) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0
R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R.
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7) > y <- c(x, 0, x) > 1/x
Save workspace image? [y/n/c]: n bb-debian:~# uname -a Linux bb-debian 2.6.32 #48 PREEMPT Tue Jun 8 14:21:52 CEST 2010 armv7l GNU/Linux bb-debian:~# cat /proc/cpu cat: /proc/cpu: Is a directory bb-debian:~# cat /proc/cpuinfo Processor : ARMv7 Processor rev 3 (v7l) BogoMIPS : 696.20 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x1 CPU part : 0xc08 CPU revision : 3
It's been a busy past few weeks, but thanks to Chris and Will, the Beagle Gadget using the BeagleBoard and the BeagleTouch, can now use Wifi - and it's seriously fast! This means that this is the first official Beagleboard-based wireless handheld Linux device... that's a lot of buzzy words, ha.
Here's a video of the Beagle Gadget communicating over wireless... and... browsing the web using ... drum roll ... Firefox. That's crazy. I remember the days when I was lucky to get a serial communication link going on my PalmOS Treo handheld, let alone wifi. But suffice to say, here it is, actually working:
I took it out of the case by cracking it open with a screw driver - not because it added anything, but just because it looks a lot cooler that way.
I plugged it into the small USB hub, but only because I also wanted to plug in a USB mouse and mini keyboard. Otherwise there wasn't really any particularly good reason to use the USB hub - I could have plugged the USB wifi module directly into the Beagle Board.
Once it was plugged in, and Linux was booted up, I edited the file at /etc/wpa_supplicant/wpa-supplicant.conf. This file contains the parameters for the wifi adapter module, and mine looks something like this:
ap_scan=1
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="<your ssid here>"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk="<your password here>"
pairwise=TKIP
group=TKIP
}
Step 4: Turn on wifi
This is the easiest step of all... simply issue this command:
$ ifup wlan0
And then issue this command:
$ ping www.liquidware.com
or
$ ping www.apple.com
Viola!
PS. If you're super lazy, I've put all the parts together in a big kit here and here.
And here's another video showing off Firefox actually browsing on the Beagleboard Linux Gadget:
Like so many things in the Open Source World, concepts are defined by the community, the group, and the practitioners of a concept.
Open Source Hardware is an ideal, that many people have come to shape and grow.
Just recently, there's been a huge amount of energy put into building a common set of terms about what "Open Source Hardware" is, so that a license can be built. There have been fits and starts over the years, and even a recent attempt to try to find a way for the Free Software Foundation, and the Creative Commons to extend their licenses to include hardware... but they were ultimately unsuccessful.
Part of the reason they weren't successful, is because there's something kind of ironic with the idea of creating a license, which is usually meant to protect *against* something, for a set of schematic files which you're intentionally *giving away*.
But!
The first step, of course, is to at least agree about what Open Source Hardware actually is, because it's not that straight forward. So on September 23rd, later this year, a bunch of guys I know from Boston are going to head down to NYC to attend:
Ok... I've been fooling around with the BeagleBoard for some time now, and I have a couple observations to make. First of all, it's crazy powerful. You can do a lot more than you'd expect, since the processor is so fast. I mean, seriously, it's faster than most Android handsets out there. So every app that could run on an Android phone can run on the BeagleBoard (in theory).
The BeagleBoard has full Linux programming libraries, Makefile, gcc, perl, you name it, built in, and that makes programming a cinch in most cases. However.... some of my favorite applications on Linux are a little harder than others to port to the BeagleBoard. Including R, for instance. R is a statistical programming package that a lot of people use in the government and military and NSA to do advanced signal and data processing. I've been learning it in my spare time, and I think it would be really cool to have a portable version of it on a handheld.
I tried to get it running on my BeagleBoard, but alas, I'm not much of a software guy (I'm much more hardware). I failed to get past some of the java lib dependencies, and don't know how to install those on Angstrom without totally recompiling everything. I was over at MIT this past week, just reading in the QA stacks library (I sneak in from time to time and just camp out there for hours with Chris), and we started talking about how whether it was doable. Chris bet me $500 that I could do it. Then I joked, well I'll bet $500 that I can't.
$500 + $500 = $1,000
I would pay $1,000 in real dollars (not gift certificates and useless things like that, I mean actual cash) to the first person who can demonstrate it running, and provide links to either a tar, or zip, or image, so I can get it up and running on my own too. The solution has to be open source, and publicly shareable.
Personally, I think it's impossible. That's why I'm saying $1,000 and not like $200 or something like that. But even I'm somewhat realistic, so here's a list of "anti-conditions":
R has a lot of built in libraries that do graphing, visuals, etc. it doesn't need to do any of that stuff
Command line only is fine, no need for to port the GUI, I don't even know if that's possible
Obviously it should run whatever can be run within the memory limits of the BeagleBoard in RAM, and that will probably mean some of the base packages won't auto-load
It should at least have a basic R command line, and be able to instantiate arrays and user defined functions, etc.
I don't really want to call this a "contest" because it's not, it's just a $1,000 check that I'll write if someone can help me port R to the BeagleBoard... if it's even possible.
I was going to write up a blog about how to use the Beagle Board gadget with the new wifi module that will, chris, and I have gotten up and running. But then I started browsing around the web for open source industrial design projects (aka ISC's) to demonstrate on it, and ran into something quite interesting...
Dun dun dun....
So just to get this straight... I'm looking for open source industrial design control systems, and within minutes, I find an article that is the perfect example of why industrial control systems need more open source? Yup.
What is Stuxnet?
It's a pretty ridiculous virus that someone wrote to infect engineering systems and control systems designed by Siemens. This is no joke, and I'm not trying to be coy, but every once in a while, I can appreciate well written code. stuxnet finds a way to bootstrap into the auto-read-from-USB code of Siemens' engineering terminals, and then spreads. Brilliant!
Here's a little chart from technet that shows how quickly stuxnet spread:
There's one problem, though...
Anyone who ever programmed an open source project would have known that this is a ridiculous thing to do. I mean, you can't seriously expect to just run the contents of an inserted USB drive - you have to at least do some kind of checks on it.
Alas, Siemens' SCADA, or "supervisory control and data acquisition" is still under threat, and so I figured I'd so some research on what SCADA does.
And here are some of the cool interfaces you can run in the Linux environment using that tool:
It's not quite there, but over the next couple weeks, I'm going to try my best to recreate a fully Open Source pressure and gps monitoring visualization system :-)
That's not vulnerable to USB host snooping attacks... ha!