Friday, June 29, 2012

discovering OBD-II

Every modern car has a diagnostic port called OBD-II (On-Board Diagnostics ver. 2) which enables external devices to communicate with the ECU - the brain of the car.

Well, if your vehicle is brand-new there is no real reason to peek under the hood but if it's a second-hand then one should be prepared to encounter all sort of problems used cars might run into... with the help of live data and logged failure codes the reparation just got a small step easier.

On eBay you can find cheap bluetooth OBD-II adapter (like the ELM327) that make a perfect match with any smart-phone with proper software installed on it.

I have an Android phone and there are quite many applications just for this purpose. Most notable perhaps is the Torque by Ian Hawkins.

As modern phones have an impressive assortment of on-board sensors, it makes it a perfect drive-computer and allows all sorts of analysis be made in real time and later on, based on collected data.


Just to name a few:

- engine load (%)
- turbo pressure (kPa)
- in-take air pressure and temp

- fuel consumption (l/100 km)
- speed by ECU
- throttle position

- acceleration
- speed, direction and position (GPS)

Software on a smart-phone nicely bundles it all together and is capable of keeping a log file with for example 1 second interval.

investigating the sdr world

Gqrx tuned to local FM station at 100.0 MHz
Hardware

The RTL2832U based SDR is a very capable little gadget that anyone can set up without having to spend too much on dedicated hardware.

I got mine ("mini digital TV stick" as written on the package) from eBay for about £15. It's yet another no-name USB DVB-T dongle with just suitable hardware combination inside.

Basically it captures raw RF packets and let's the PC software to decode/demodulate those. Thus exactly what an SDR does! Still, it's a hack since some undocumented chip features are used to make it behave like one. Great thanks to Antti Palosaari for discovering this! More on that subject can be read here.

Software

Firstly, I consider only Linux here and all my suggestions are based on that.

Depending on your operating system the support out-of-the-box varies a bit but there is nothing too serious to build all the necessary tools from tarball.

Seems that setting the system up on OpenSuse 12.1 means bit more work than on Ubuntu for example since one has to build some system packages to meet the GNU Radio dependencies that have not yet reached to the official repositories.

Waterfall shows some sensor activity
For beginning the Qt based gqrx application is really neat and as many instructions on the net I also suggest starting from this.

Later on you will find yourself discovering the gnuradio-companion IDE with a certain amazement bout how truly complex and fun the SDR world really is!

As the Elonics E4000 tuner can be  tuned from 52 MHz - 2.194 GHz it really opens up the radio spectrum for any hobbyist like me never minding the 161 Mhz band-gap starting from 1.098 GHz


Applications

After having scanned the radio spectrum over and over I started to wonder what else can be done with it. And thus I decided to try to decode the wireless thermo RF ASK modulated messages captured from the air.

Work in progress...

Tuesday, February 14, 2012

measuring energy consumption

1. Theory of operation

The energy meter used in our house is a Siemens ZMD120AMtr53 which capable of measuring 3x230/400V (e.g. industrial power) electricity consumption in preprogrammed day and night shift. The energy company charges less for nighttime usage (EUR 0.08 cents) and considerably more during daytime use (0.14 cents)

The meter has three ways of communicating it's readings to interested users:
  •  dedicated DLMS port for programming and data readouts;
  •  IR test diode pulses (each 0.2 ms long) with a rate of 10000 = 1 kWh;
  •  via on-board LCD "graph" (regular users, simple inspection)
The formula for calculating present power consumption via short pulsing IR light is brought by the data sheet:

Example: Meter constant R = 1000
Power P = 36 kW
f-LED = R x P / 3600 = 1000 x 36 / 3600 = 10 imp/s

In my case, the meter was programmed to have the constant 10 times bigger to achieve more precise readings. Thus, once you have an impulse count in seconds, it's easy to calculate real-time power usage.

2. Selecting an IR sensor

A sample graph for 12h power consumption with RRD
There are several ways to detect IR radiation. Though some detectors might not be as suitable as others thus some consideration has to be made. Firstly, how far would you place the micro-controller? If the wiring will be considerably long (> 10 meters) it would be a good idea to use a sensor with an in-built OP amplifier to get a strong signal over the long wires. That's how I saw it and therefore a sensor TSL262R was chosen. If I would have planned to put the controller inside the same metal box where the meter was located, perhaps a simple IR photo resistor would have done the same good job.


3. Building a prototype

Prototyping is fun! Although I googled for some samples of other fine projects I came up with a more simple and straightforward solution. Firstly, as I formulated the problem very precisely, I ended up getting exactly what I needed. No additional calculations were expected from my 8-bit AVR microcontroller. It's quite the opposite I saw around. Thus I really count pulses and deliver the pulse count in selected timeframe to a logfile.


From software perspective, the key is utilizing the power of AVR chip's interrupts thus leaving more room for other interesting tasks.
volatile long pulseCount = 0;
// interrupt attached to IRQ 1 = pin3
attachInterrupt(1, onPulse, RISING);

and the function to perform is simply
void onPulse() {
 pulseCount++;

}