CeBIT 2013 – Trends and Impressions

For those unaware of the event, CeBIT is held annually on the Hanover fairground. For an idea of scale, the exhibition area roughly covers 450.000m2 and the five day event attracted over 300.000 visitors this year. For those of you who know the IP EXPO in London, imagine 15+ halls like it and multiply the visitor numbers by ten.
In regards to exhibitors, if it’s a known IT brand they will have a stall (Intel occasionally had a whole hall, bigger brands like IBM or Microsoft tend to occupy sub-sections of a hall) and there are also separate halls for an incredible amount of far east suppliers (Shenzhen hall) and HR as well as general IT service providers.
I have been attending this event on a regular basis for many years and have always found it incredibly stimulating as well as an excellent barometer for trends. The later is mainly due to the fact that all major manufacturers use the event to display the products and services they are planning to release over the next 6-9 months.
This year was particularly interesting given the global move towards “the cloud” and what I can only describe as a move towards service oriented marketing from all major vendors.

I have tried to sum up my notes from this year’s CeBIT, hoping that others might find them interesting and useful. For 3D pictures please head over to my Phereo profile.


1. Server/converged infrastructure (e.g. IBM, Dell, Fujitsu, Huawei):

  • All major offerings heavily geared towards services/package solutions.
  • First year where nobody seemed to care much about “how many ram slots the blades have”.
  • Sales strategy: 30% on-site because it’s faster (use cases like BI and in-memory databases) – 70% we now connect to all those cloud providers.
  • Major selling point is the knowledge they sell with their packages in form of VM/system templates.
  • My personal favourite this year: IBM FlexPod/PureSystems.




2. Storage (e.g. Fujitsu, Dell):

  • No major excitements, if you want it on-site, spec it and they can do it, solutions last 5-10 years.
  • The more you pay the more SSDs you get.
  • For fast access there’s no cloud alternative just yet (cloud is getting better for high volume/low access though).




3. Cloud providers (too many to list):

  • For commodity resources this seems the way to go now (price, availability).
  • Wide variety of service and pricing models to cover the various use cases, somewhat reminded me of electricity suppliers (e.g. green options as premium service).


4. “Big Data” (e.g. SAP Hana):

  • Online businesses target highly distributed data/big data e.g. data harvesting of web server log files.
  • Ask ten vendors what “big data” is and thou shalt get ten answers :) IMHO it’s big data if you can pay big money to have it in big amounts of RAM.


5. Microsoft:

  • They are still pushing HyperV, personally I don’t think it’s on the same level as VMware yet but it’s getting there.
  • Dynamics, Dynamics, Dynamics… and in-between a bit of Sharepoint and “in case you have a windows phone”.
  • Hard to get past the fact that their stuff works, has a solid and reasonably priced licensing model and it’s easy to find developers for it.


6. Data centre/Racks (e.g. Rittal):

  • Orders to kit out new data centres are dropping so new focus on solutions (e.g. provision of whole Data Centres).
  • Very popular was their “data centre in a portacabin”, up to eighteen 19″ racks delivered fully assembled and ready to run including water cooled racks and aircon.
  • Rittal now go as far as putting a data centre into a truck.
  • High on the “requested feature” list to retrofit are sensor networks to lower cooling cost and ensure kit stays alive with falling staff count/remote monitoring.



7. Client side hardware:

  • Old schools PCs are dead, only two big main board manufacturers bothered to come, Intel have officially decided to stop producing desktop PC main boards!
  • Good proportion of new main boards are ITX/mini-ITX rather than ATX, only extension cards available are graphics cards.
  • All in one clients everywhere, all sealed units, warranty = swap-out.
  • Hard push to put a touchscreen on every device and integrate wireless charging.
  • Mobile phones are getting bigger (“phablets”), upside is that they are also getting bigger batteries.

x2 x1 x11 x5x12


8. ITIL:

  • Various consultancy providers, offering services from “Business Analysts and Project Managers to restructure your processes to ITIL compliance” up to full near/off shore outsourcing.
  • Poland is CeBIT partner country this year and there was a surprisingly high number of very well defined services on offer. Often defined with ITIL as well as ISO compliant process connectors.



9. Drones/Military:

  • Various areas, all seemed to be recruiting as well and had areas focused on Drones (fun bit was that the gimmick producers in another hall also had drones as their main focus this year and they DID bring working models :)
  • DIY type sets (quad/octo, Arduino core), very sophisticated and stable. Where gimmick type products only offer to steer from mobile and view camera these allow to use the device as a delivery mechanism. On a desktop PC open a browser, pick where you want to go in Google Maps and click “Go”. Monitoring flight on map or with onboard camera included, just a matter of time I guess until we hear the phrase “fleet control” and the whole area moves in with the Van/Truck monitoring area?


10. One more product worth mentioning:
Samsung’s transparent LCDs for fridges, window shopping etc. Price like a regular LCD, currently 20 and 40” commercially available but much larger sizes for shop windows about to be released, hard glass front and touch screen optional but not expensive.


11. Things I expected to see but couldn’t find:
Micro servers, ARM based servers etc, rumoured for Computex.


12. Last but not least some non-techy pictures :)

IMG_0489 IMG_0490 sea

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 12.1 – My second Arduino controlled greenhouse


This is the first of a series of posts to describe my second Arduino automated greenhouse. It’s simply too big a project to cover everything in one post so I’ve decided to split it into a few smaller posts. In this first part I’m going to quickly describe my water, power and network setup.


1. Power

I’ve built this greenhouse myself and since I knew I wanted to automate it I fed 240V (armoured 4mm cable) and mains water (blue plastic pipe) in from underneath through the base. The 240V connection feeds two IP54 sockets which I rarely use apart from powering tools during maintenance tasks and a fused spur to supply the IP66 flourescent light fitting and associated IP66 light switch.


2. Water

The blue polypipe connects to a copper adapter which then phases out into two lever taps. One of them is usually connected to a hose reel and the other one is now feeding the automated watering pipeline :) This pipeline runs round the inside bottom of the whole greenhouse with so far five 12V solenoid valves T-ing off of it. I used 13mm irrigation pipe for the water run up to the valves and behind them I’ve gone down to smaller 5mm irrigation pipeline which then feeds several adjustable 30l/h irrigation bubblers. For the bigger plants I use one bubbler per pot while they are still young but once they grow up and develop long enough roots one of them should be enough to water the tray underneath the pots. The trays up on the staging only house smaller pots anyway so they all get flooded by one bubbler each.





3. Network

I’ve pulled over two CAT6 lines from the shed next doors. One currently supplies gigabit ethernet and the other one 9V DC to feed the Arduino and 12V for the solenoid valves. The Arduino is going to upload statistics to my MySQL storage back-end through a network shield and I’m planning to display samples of this data with a LCD in the greenhouse as well as a second LCD in my hallway. While I’m at it I’m also planning to get the same Arduino to collect weather data (outside temperature, humidity, wind speed etc) and upload it into my database for displaying on the hallway LCD. If I ever find the time I’d also like to make this data available through a web service so I can tap into it with a little Android/iOS app.

My latest addition is a chunky IP54 ABS box to house all the circuitry and I’ve already fitted the first three plugs which are going to connect the fan out lines to connect the solenoid valves and soil humidity/temperature combo sensors.


Next Steps:

I’ve got most of the circuitry for the distribution box built up and tested and the two fan cans (soda can with a little fan, humidity, light and temperature sensors)  are ready to go in as well. Biggest task left on my list is probably somewhere between wiring it all up and building all the soil humidity/temperature combo sensors. I shall report back with another post in the near future :)

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 11 (2D/3D pictures) – Measuring a water tank level v2 (HC-SR04 Ultrasonic Rangefinder/Arduino Uno/1.0)

1. Introduction:
I made a water level sensor a little while a go to measure the water level in my underground rainwater harvesting tank. Thanks to the Jubilee I found time to finally setup the first part of my Arduino/Xbee wireless sensor network and the first sensor node was also meant to read from this water level sensor. I was somewhat surprised when it only returned 0s so I went and had a closer look. How the slug got into the enclosure is still a mystery to me… but looking at the bright side (after the uncontrolled swearing) I now had a reason to build a much better water level sensor :)

water level sensor vs slug


2. Add a few new bits…:
I’ve based the new sensor on the little perf-board from my sensor in Arduino project 6 but swapped the SRF05 for a HC-SR04 and mounted the result into a little square IP65 enclosure from Maplin.
Last shopping spree on ebay has resulted in me now being in possession of five HC-SR04 ultrasonic range finders which are very much a cheap “alternative to the SRF04. These work with the same code I used for the old sensor and have the same pins.

HC-SR04 top

HC-SR04 bottom

Since Vishay provided me with a whole bunch of free 10KΩ thermistor samples (I’m planning to use these for my soil humidity/temperature sensors for the upcoming Arduino controlled greenhouse v2 project) I added one of those to the perf-board together with the matching 10KΩ resistor.


3. Stir…:
- Remove the angled pin headers from the HC-SR04 and solder wires directly to the sensors control board
- drill two eyes into the top of the enclosure for the sensor eyes
- drill two more tiny wholes into the bottom of the enclosure for the LEDs
- mount sensor and perf-board into enclosure
- pass wire into the enclosure and connect everything up
- seal the holes with hot glue
- mount new sensor into collar of water tank




HC-SR04 Fritzing

tank sensor v2 Fritzing files


4. Serve:

After connecting it to the Arduino Uno everything woked well with the same code as before. So I added a bit more code to read out the additional thermistor which also went well.
The result is now my first wireless sensor node which collects temperature, light level and water level which are then uploaded in 3min intervals by the XBee-to-Ethernet concentrator into my MySQL database :)

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 10 (2D/3D pictures) – My XBee/Arduino based Wireless Sensor Network (Uno/Mega 2560, 1.0, XBee Series 2)

1. Introduction
I developed this WSN for a coursework on my MSc and I’m hoping others will find this useful or at least interesting :)
I’ve just installed the first parts of this WSN back home to collect sensor data from various outbuildings and it will be part of my new Arduino controlled greenhouse project. I’ll try to port the storage and reporting backend to a Raspberry Pi later this week, initial trials seem to suggest that it should cope well with this task for my size of network.

I’ve also included a zip (9.7, bottom of the post, just above the reference section) with all my source code for this project which includes:

  • all Arduino sketches
  • the database structure and data samples
  • the php file for Flot
  • the php file used by the concentrator to upload data into the MySQL database

As required for this coursework and based on the provided Arduinos and XBee ZNet 2.5 modules I have developed an energy efficient wireless sensor network (WSN) which collects a number of different environmental readings from three nodes. In addition to the coursework requirement to display the acquired data sets in the Arduino IDE I have developed a concentrator node to upload the data sets to a database, as an example made parts of the content in my database visible using Flot [1] and also developed a node which displays datasets on a LCD. Finally an actuator node extracts temperature values from the database and, depending on the values indicates temperatures above a certain threshold by means of green/red LEDs and turns a fan on/of.
I had many additional ideas for further improvements in regards to the network, nodes and sensors which I have included at the end of the report.



2. Network Components
My network currently consist of the following components:

Project 11 network

2.1 Sensor node 0
I have positioned this node in my greenhouse. It submits temperature, humidity, light level and soil moisture/temperature readings to the concentrator.
This node consists of the following components:

  • Arduino Uno
  • XBee shield and XBee ZNet 2.5 module
  • Fan-Can 1 consisting of one temperature (tmp102), humidity (HIH-4030) and light (TEMT6000) sensor
  • One combined soil moisture/soil temperature sensor

Project 11 node0


2.2 Sensor node 1
I have positioned this node in my shed. It submits temperature, light level and water tank level readings to the concentrator.
This node consists of the following components:

  • Arduino Uno
  • XBee shield and XBee ZNet 2.5 module
  • Fan-Can 2 consisting of one temperature (tmp102) and light (TEMT6000) sensor
  • Water tank level meter based on a SRF05 ultrasonic range finder [2]

Project 11 node1


2.3 Sensor node 2
I have positioned this node in my conservatory. It submits temperature and light level to the concentrator.
This node consists of the following components:

  • Arduino Diecimilia
  • XBee shield and XBee ZNet 2.5 module
  • One temperature (tmp102) and light (TEMT6000) sensor

Project 11 node2


2.4 LCD node
This node extracts data from the database via it’s ethernet shield and displays it on a LCD.
This node consists of the following components:

  • Arduino Diecimilia
  • Arduino Ethernet Shield
  • 16×2 LCD

Project 11 lcd


2.5 Actuator node
This node extracts data from the database via it’s ethernet shield and if the temperature reading exceeds a set value switches the LED from green to red and turns on the fan.
This node consists of the following components:

  • Arduino Uno
  • Arduino Ethernet Shield
  • XBee shield and XBee ZNet 2.5 module
  • green/red LED
  • additional 5V psu to close the relay and power the fan
  • 5V/240V 30A relay
  • 12V pc case fan

Project 11 actuator


2.6 Concentrator/coordinator node
I have positioned this node in my shed. It collects the data sets submitted by the sensor nodes and passes them on to the database.
This node consists of the following components:

  • Arduino Mega 2560
  • Sparkfun Arduino Mega ProtoShield which I have modified to include a stackable ICSP header [3]
  • Arduino Ethernet Shield which I have modified to include a stackable ICSP header [4]
  • One XBee shield and XBee ZNet 2.5 module

Project 11 concentrator



3. Database/web server

3.1 Database design
For the moment I have decided to collect all data in a single table which is merely due to the fact that I have not had time to make changes to this part of the system and initially was not sure what kind and amount of data I would be able to capture. This database design is not perfect for my nodes which all return different data sets as all of them have different sensors. For the moment this design is useable but once I start to collect bigger amounts of data I’m planning to split the data across several tables with one table per type of node.
I’m currently entering timestamps for each data set once they get entered by means of an insert/update database trigger. I have been experimenting with a secondary SD-card based storage solution which also incorporates a real time clock to bridge downtime on the concentrators ethernet uplink and data backend. To achieve this I’m writing datasets to the SD-card if it is impossible to upload them to the database and, once connectivity is restored, the data sets get uploaded in batches of 20 to make sure the upload after longer breaks doesn’t block the acquisition of fresh datasets. I currently lack a mechanism to upload the stored data sets to the same table as the original timestamps captured by the real time clock would get overwritten by the trigger. I am planning to upload these data sets to a temporary table but have still got to find a way to merge them into the main table without loosing the timestamps.

Project 11 db_structure

Project 11 db_sample


3.2 Database/web server – technical details

  • Intel dual core Atom Mini ITX mainboard
  • RAID5 based on four 1TB 3.5″ hard drives
  • Ubuntu 11.10 [6]
  • Apache 2.2.20 [7]
  • MySQL 5.1.58 [8]
  • phpMyAdmin 3.4.5deb1 [9]

3.3 PHP scripts to link MySQL and ethernet.h
Unfortunately there is no library to talk directly to a database through the Arduino’s ethernet shield. Since the ethernet library supports http GET I have written two php scripts which I call from the ethernet library to enter the provided sensor readings into my database table and extract data to display on my LCD node.
3.4 Reporting
I have decided to use Flot [1] to visualize the data sets and have modified the provided example on plotting time series [5] to show the temperature readings collect by node 1.

Project 11 flot


4 XBee Network

4.1 XBee network – Overview
As suggested in the XBee modules documentation [26] and proven by Lady Ada in her Tweet-a-Watt project [10] it is possible to use a XBee module without an Arduino to acquire data from a sensor but since I wanted to read multiple sensors with each node I decided to base each node on one Arduino with one XBee shield.
The XBee modules we have been provided with as part of this coursework come preloaded with the ZNet 2.5 firmware [11] which implements the ZigBee protocol stack. The XBee modules are incredibly popular for physical computing and sensor network projects as they are very well documented, simple to use and affordable.
Almost all available documentation on Arduino based XBee projects is based on the XBee Series 1 modules which are incompatible to the XBee Series 2 modules we have been provided.
I have decided to leave my modules in their original configuration which spans a basic but energy efficient network consisting of one coordinator and a number of router/end-devices where the later decide among themselves which node would be most appropriate to take the router position. This setup is sufficient for the network I have developed as I am only sending data in one direction, from the nodes to the concentrator, and I don’t expect overlap with other networks.
Where transporting a single character across the link is relatively easy as demonstrated in the “Arduino – Getting started guide” for this coursework [12] with the Arduino IDEs physical pixel example transporting more than this single character adds two additional layers of complexity in form of the XBee API frames and supported data types.

4.2 XBee – API frames:
The first decision I had to make was to decide if I wanted to communicate with my XBee modules by AT commands or through their API. Both modes are available but require different versions of the firmware. I decided to base my network on the API firmware because the API frames are well documented by the manufacturer. I had planned to write a library for transporting small data sets across this network but, shortly after I had deciphered the API frames, found that this was already available in form of the xbee.h library which is what I have used for this coursework [13]. The library has various use cases [14] which unfortunately leaves the Arduino-to-Arduino one as “todo” hence I had to find my own way to implement this scenario.
The xbee.h library works very well for my purposes and since it only requires the data to be stored in an uint8_t payload array and the network address of the concentrator it was very easy to implement.

4.3 XBee – API friendly data types:
For my network I had to find ways to transport my sensor readings by the means of the supported uint8_t array. Where this was straight forward for the humidity reading which results in a value in the range of 0-100 it got more complicated for the temperature with readings in the range of -20 to +35 and the Arduino’s 10bit analog readings which are bigger than the 8bit bytes of the uint8_t array.
For the temperature I have decided to send the value in one byte and use a second byte to indicate if this value is positive or negative. For the analog readings I have decided to split the 10bit value into two 8bit bytes which then get reassembled on the concentrator side.
Although the uint8_t array seemed cumbersome at first I found ways to transport my generated values and the use of this cross platform data type should prove handy if I decide to include other platforms like the Raspberry PI or cheaper sensor nodes.
The array I’m using currently transports the following sensor readings which are then entered into the database. All nodes submit the same data set with the areas they don’t have readings for filled with 0s.

Temperature (two bytes, one for value and one for -/+ flag)
Humidity (one byte)
Light (two bytes for 12bit analog reading)
Soil temperature (two bytes for 12bit analog reading)
Soil humidity (two bytes for 12bit analog reading)
Water level in my rainwater storage tank (one byte)
Node identifier (one byte)

Node 0 currently sends the most data consisting of all the above values except the water level reading which is the reason for my 10 byte array (2+1+2+2+2+1=10)
uint8_t text[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


5 Sensors currently in use for this project

5.1 HIH-4030 [15]
Honeywell provide a comprehensive data sheet for this analog humidity sensor and it consumes very little power (200uA). The output is very easy to process since it is nearly linear. The maximum output voltage drops by a given amount per degree C over 0 degree C which makes it easy to calculate the correct humidity reading with the aid of a temperature reading (TEMP102).

5.2 TEMT6000 [16]
Commonly used for backlight dimming this is a simple but very accurate and fast reacting analog light sensor with a range adapted to human eye responsivity. It acts like a transistor hence the greater the incoming light the higher the analog voltage it provides.
It’s output is linear and it’s slight temperature dependency is negligible for the temperature range I’m working with for this coursework.

5.3 TEMP102 [17]
This is a very accurate and very small digital I2C temperature sensor which is accessed via a two wire serial interface (Arduino pin 4/5). It only consumes 10uA and comes with the benefit that each sensor can be configured with it’s unique hardware address (via further pins on the break out board) which allows for several of these sensors to be accessed through the same two wire interface. Given the fact that the Arduino in it’s original form is limited in regards to analog pins (5 on the standard Arduino/16 on the Arduino mega) this seems a very valuable feature.

5.4 Soil temperature/humidity sensor
I have designed and built this sensor myself and the first prototype consists of a thermistor to measure the soil temperature and a pair of galvanised nails to measure soil humidity. I have enclosed the thermistor in epoxy resin to make the sensor water proof and am planing to do the same with the solder points which connect the nails to their wires. The nails are also covered by a fixed length of heat shrink tubing to avoid corrosion as far as possible and also ensure measurements are taken at similar depth across several sensors. I’m planning to base further sensors on digital temperature sensors simply because I now have a variety of them which I would like to test.
There seems to be a direct correlation between soil humidity and soil temperature. Initially I was planning to take soil humidity measurements at fixed room temperatures to make them comparable. This would work well in a fully climatised greenhouse but seems unworkable for smaller residential greenhouses like mine.
I’m currently collecting data to work out the correlation between soil temperature and humidity to develop an algorithm and apply a correction factor to make soil humidity readings comparable across different soil temperatures.
Although the nails are galvanised I still expect a certain amount of electrolysis corrosion. My current sketch is trying to limit this as it only runs current through the nails when measurements are being taken and also reverses the current flow after a reading has been taken. The sensor has now given reliable readings for over two weeks and I’m hopeful that it will be enough to clean it at the end of each summer.

Project 11 soil_sensor

5.5 Water tank level meter
I have designed and built this sensor myself [18] to measure the water level in the underground storage tank I use to store rainwater. I have based this sensor on the SRF05 ultrasonic range finder we have been provided with as part of this course work. The range finder is mounted inside the tank collar pointing downwards to measure the distance between the sensor and the water level. Like the Fan-Cans I have decided to fit this sensor into and an enclosure which also has two LEDs at the top to signal 5V arriving at the sensor and a heartbeat to indicate measurements being taken.

Project 11 tank

Project 11 tank_fritz

5.6 Fan-Can
I did not want to leave the sensors completely exposed to the elements but also provide a certain amount of air flow through their protective enclosure. Therefore I have mounted all the above sensors into an empty soda can (top/bottom removed) which has a little 12V fan mounted at one end to suck air through the can. The Fan-Can is connected to the Arduino with left over CAT6 cable and a little piece of perfboard inside the Fan-Can provides means to connect the sensors and some additional features in form of:
1x on/off switch
1x power LED (5V coming from the Arduino)
1x “heart beat” LED (Arduino pin 13 to indicate measurements being taken)

Project 11 fan_can

Project 11 fan_can_fritzing


6 Power saving

6.1 Power saving – ATMega328
With the Arduino platform being geared towards rapid development and DIY enthusiasts the manufacturers don’t appear to have spent much time on trying to make it energy efficient. As much as I appreciate their considerations in regards to their main user base I don’t think this wise as many projects will be battery operated and the ATMega has well documented potential to be more energy efficient. After studying the ATMega328 data sheet I quickly found the nacroleptic library [19] which implements the ATMega328s power saving features to limit power consumption of the Arduino while the board idles during “delay-phases”. Since these “delay-phases” make up the huge majority of time with my nodes only taking measurements for 2-3 seconds every three minutes savings during “delay-cycles” would obviously translate almost directly into power savings across the whole nodes uptime.

6.2 Power saving – ATMega328 – A practical experiment
I have setup the following two experiments to determine the effect of using the nacroleptic library:

Measuring equipment:

  • Mc Voice DF1730SB DC power supply 0-30V 0-3A
  • Fluke 17B Digital Multimeter (mA setting, limited to 400mA, accurate to 0.01mA)

6.2.1 Arduino (Diecimilia), idling
no power saving: 29mA
narcoleptic library: 8.9mA
Use of the nacroleptic library reduces the power consumption by almost 70%.

6.2.2 Arduino (Diecimilia), idling with full node 2 setup
no power saving: 51mA
narcoleptic library: 71mA
Although the XBee module adds over 40mA use of the nacroleptic library still reduces the power consumption by about 28%.

6.2 Power saving – XBee
The XBee module could be put to sleep with AT commands from Arduino but waking the XBee module from sleep requires a 5V signal to the XBee modules pin9. Although this is very easy to achieve by connecting one digital Arduino pin to the Xbee’s pin9 this would require soldering on the XBee shield. Since I’ve only borrowed these from the University I have decided against this modification.


7 XBee related ICSP header modifications
In addition to the 3.3V, 5V and digital pin zero and one [20] the XBee shield uses the ISPC header for communication. In theory this should not cause problems but in reality most currently available shields still don’t pass the ICSP header through to shields above them. I found this problematic as I wanted to combine an ethernet shield and the XBee shield on my data concentrator. After successful tests with wires connected from the underside of an Arduino to the XBee shield and an ethernet shield in between I decided to remove my ethernet shields original ICSP header and replace it with a more appropriate connector which I made myself. More details about this project and a similar one which describes the same modification for an Arduino Mega prototyping shield can be found on my blog


8. Discussion
I have based my network on a similar design as the one presented by Boonsawat et al in their paper [21] at the ECTI-CARD 2010 but rather than basing it on SquidBee [22] I have decided to write the underlying system myself. Not only did this allow me to gather valuable experience but I have also been able to implement features like better power saving. Since I am now familiar with all parts of the underlying system and have chosen a cross-platform data type for the XBee array I will be able to replace several components of my network with cheaper and more energy efficient components without having to redesign the whole system.

The Arduino platform is very suitable for rapid prototyping but in regards to unit price, power efficiency and lack of certification not perfect for permanent installations or commercial/industrial applications. There are wireless sensor network projects like Libelium’s Squidbee which are based on Arduino and XBee and are commercially available but, due to the limitations mentioned are now geared towards the hobbyist/enthusiast market. Libelium have spawned off a second generation of product called Waspmote which provides the same benefits but, due to use of an optimized underlying platform now fulfils all criteria (power efficiency, range, standardisation, certification) to make it viable for commercial/industrial use.


9. Possible improvements
I have investigated suitable components which would allow me to improve the components of my network and already acquired most of them as free samples from appropriate manufacturers.

9.1 Alternative temperature sensors
To avoid having to deal with slow acting thermistors which require algorithms to translate their results into useable readings I have decided to go with slightly more expensive digital sensors.
For smaller areas I2C based sensors seem a very good choice and I have made good experiences with multiple sensors on one I2C line even across several meters as long as the cable is well shielded (CAT6 works well). The temp102 sensors I’m using at the moment are limited to four per line which is not idea to get room temperature averages or measure soil temperatures across bigger areas. I have managed to extend this up to 32 tmp102 sensors on a single I2C line with the aid of 4051 multiplexers [24] but am likely to switch to tmp175 sensors (Texas Instruments have kindly provided me with samples of this sensor) which allow up to 32 sensors per I2C line. The tmp175 come in a less DIY friendly 8-SOIC package which I had to make breakout boards for [25] but this seems worthwhile to remove the need for multiplexers/I2C extenders. Most digital sensors also come with further features like min/max values stored in separate registers and alarm functions. The most advanced sensors like the DS1629 also incorporate a real time clock.
If price of the temperature sensors became an issue I would probably put more investigations into thermistor ICs like the MCP9700 which Microchip kindly provided me with samples of. This sensor is cheap, has a reasonable range of -40C to +125C, is calibrated and very easy to read thanks to it’s linear output. It is still quite slow to react to temperature changes compared to a digital sensor but this might not be relevant in the majority of scenarios outside of industrial process control scenarios.
I have just started to investigate temperature sensors along the lines of the DS18B20 which are based on the Dallas 1-Wire interface (Maxim have provided me with samples of the DS18B20). They appear to have a very reasonable range, appear to react fast (conversion in 750ms) and come with the added benefit that they only need two lines (data and ground) as they can draw power directly from the powered data line.
I have not found time to play with it but Maxim have also provided me with samples for their DS1629 which, in addition to the functionality along the lines of the DS18B20 also includes a real time clock.

9.2 Alternative processors
The ATMega range which is currently being used is not ideal in regards to energy efficiency not at least proven by the fact that the next generation of Arduino Mega boards will be based on customised ARM processors. I would have preferred to make the transition slower and initially migrate to the ATiny range which would be suitable for basic sensor nodes but Amtel have so far not provided me with samples. Microchip on the other hand have been been very supportive and provided me with samples across most of their PIC range from the basic 8bit RE46C144 for basic nodes up to the
16bit dsPIC33EP512 with 122 I/O pins and powerful 32bit PIC32MX795F512.
I’m currently in the process of designing breakout boards for the above to start testing them and expect the 16bit to be the best choice for the average sensor nodes I envisage.

9.3 Alternative storage
The Arduino platform has support for reading/writing to sd-cards and readers are currently incorporated in various shields including the official network shield I’m using as part of my concentrator. I have used Lady Ada’s data logger shield [23] with very good results which also incorporates a real time clock to add a time stamp to data sets.
I have also acquired and tested I2C EEPROMs in form of 25LC1024 samples I got from Microchip which are much faster than SD-cards but unfortunately also much offer less storage space.
Both SD-cards and EEPROMs, once combined with a real time clock, appear viable choices for storage of data sets with SD-cards being more viable for huge amounts of data with long periods between read/write cycles and EEPROMS more appropriate for small amounts of data or scenarios where data sets are captured in very short intervals.

9.4 Alternative wireless
Although the XBee wireless modules are very well made and superbly documented by they are relatively expensive and not entirely ideal for various projects I have in mind.

9.4.1 For an automated greenhouse
This would very likely consist of a wired/wifi concentrator and nodes connected via 433Mhz modules which would be sufficient for the size of even a medium sized commercial greenhouse and more than capable of transporting the amount of data needed.

9.4.2 For industry/process automation
I would expect to find existing wifi technology on place which would be the easiest way to implement but in regards to reliability, especially for industry processes, it is far more likely that this would be based on CAT6 ethernet.

9.5 Alternative server/concentrator
The perfect data backend for my purpose would be:

  • energy efficient
  • able to run LAMP
  • ability to drive a screen, preferably 22″+ and hdmi to allow tvs and computer screens of a size that allows bigger amounts of data to be visualized
  • at least wired network connectivity
  • preferably also wireless connectivity in form of wifi, XBee or 433Mhz to eliminate the need of a data concentrator in smaller networks
  • support for non magnetic storage devices

My current backend is a dual core Intel Atom based Mini ITX board with a raid5 consisting of four 1TB magnetic hard drives. Although this is sufficient it is not as energy efficient or portable as I would like.
The recently announced Raspberry PI would suit my purposes very well and I have preordered two units. Unfortunately the manufacturers have had various difficulties over the past few months and I am still waiting for the first boards to be shipped.

9.6 Node side error checking
Currently the nodes send their data sets without a check if the data has been received by the coordinator. Although easy to implement through the xbee.h library I have not yet included this feature due to lack of means on my sensor nodes to visualize data beyond a simple heartbeat. A LCD display as in use on my LCD node would work well for this purpose but would draw far too much power for a battery powered node. I’m currently planning to use LED based TDCR1050 four digit clock displays which I have acquired as free samples from Vishay to visualize feedback after each measuring cycle in regards to the acquired sensor data, if the package has been received by the coordinator and other error states like low battery power.

9.7 Source files

Project 11 source code


10 References

[1] Ole Laursen. (2012). Flot (Version 0.7). Available from

[2] Arduino Project 6 – Measuring a water tank level (SRF05 Ultrasonic Rangefinder/Arduino Mega 2560/Arduino Uno/1.0) (2012). Oxford: Peter Haban. Retrieved 13/03/2012, from the World Wide Web:

[3] Arduino Project 4 – Sparkfun Arduino Mega ProtoShield with stackable ICSP header (2012). Oxford: Peter Haban. Retrieved 09/03/2012, from the World Wide Web:

[4] Arduino Project 5 – Adding a stackable ICSP header to the Arduino Ethernet Shield (micro-SD/R3 version) (2012). Oxford: Peter Haban. Retrieved 10/03/2012, from the World Wide Web:

[5] Flot Examples (2012). Aalborg: Ole Laursen. Retrieved 15/04/2012, from the World Wide Web:

[6] Canonical Group Limited. (2012). Ubuntu (Version 11.10). Available from

[7] The Apache Software Foundation (2012). Apache (Version 2.2.20). Available from

[8] Oracle Corporation (2012). MySQL (Version 5.1.58). Available from

[9] phpMyAdmin devel team (2012). phpMyAdmin (Version 3.4.5deb1). Available from

[10] Tweet-a-Watt Build a wireless home-power monitoring system (2011). New York: Limor Fried. Retrieved 15/04/2012, from the World Wide Web:

[11] ZigBee PRO Stack enables Larger, Denser, Sleepier, More Mobile, Secure and Resilient ZigBee Networks (2012). Cambridge: Ember Corporation. Retrieved 15/04/2012, from the World Wide Web:

[12] Arduino: Getting Started Guide (2012). Oxford: Peter Haban. Retrieved 15/04/2012, from the World Wide Web:

[13] Andrew Rapp (2012). xbee-arduino, Arduino library for communicating with XBees in API mode (Version 0.3). Available from
[14] xbee-api, A Java API for Digi XBee/XBee-Pro OEM RF Modules, XBeeUseCases (2011). Andrew Rapp. Retrieved 15/04/2012, from the World Wide Web:

[15] HIH-4030/31 Series Humidity Sensors (2008). Minneapolis: Honeywell International. Retrieved 15/04/2012, from the World Wide Web:

[16] TEMT6000X01, Ambient Light Sensor (2012). Selb: Vishay Electronic GmbH. Retrieved 15/04/2012, from the World Wide Web:

[17] TMP102, Low Power Digital Temperature Sensor With SMBus™/Two-Wire Serial Interface in SOT563 (2007, revised 2008). Dallas: Texas Instruments. Retrieved 15/04/2012, from the World Wide Web:

[18] Arduino Project 6 – Measuring a water tank level (SRF05 Ultrasonic Rangefinder/Arduino Mega 2560/Arduino Uno/1.0) (2012). Oxford: Peter Haban. Retrieved 13/03/2012, from the World Wide Web:

[19] Peter Knight (2010). narcoleptic, Sleep library for Arduino (Version 1a). Available from

[20] Shield Pin Usage. Arduino team. Retrieved 15/04/2012, from the World Wide Web:

[21] V. Boonsawat, J. Ekchamanonta, K. Bumrungkhet, and S. Kittipiyakul, “XBee wireless sensor networks for temperature monitoring,” In the Second Conference on Application Research and Development (ECTI-CARD 2010), Chon Buri, Thailand, May 2010.


[23] Logger Shield, Datalogging for Arduino (2011). New York: Limor Fried. Retrieved 15/04/2012, from the World Wide Web:

[24] Arduino Project 7 (2D/3D pictures) – How to read up to 32 tmp102 temperature sensors with one Arduino by using 4051 multiplexers (Arduino Uno/1.0) (2012). Oxford: Peter Haban. Retrieved 13/03/2012, from the World Wide Web:

[25] Arduino Project 8 (2D/3D pictures) – how to make your own SOIC-8 breakout boards from scrap (tmp175, Uno, 1.0) (2012). Oxford: Peter Haban. Retrieved 08/04/2012, from the World Wide Web:

[26] XBe e® ZNe t 2.5/XBe e -PRO® ZNe t 2.5 OEM RF Modules, Product Manual v1. x.4x – Z igBee Protocol (2012). Minnetonka: Digi International Inc. Retrieved 19/04/2012, from the World Wide Web:

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 9 (2D/3D pictures and videos) – How to connect a Texas Instruments BQ32000 Real Time Clock (BQ32000DR, Uno, 1.0)

1. Introduction:
I went on free sample spree a little while ago and then got myself a few “younametheDIYunfriendlypackage”-to-DIP adapters off ebay (more details on the adapters are in one of my previous posts (DIP adapters to convert less DIY friendly packages (SOP, SOIC, TSSOP, MSOP, SSOP, SOT, LCC, LGA)). This is the first little chip from my free sample batch I’ve soldered onto one of the adapters to make it breadboard friendly.

I’m going to use one of those on a XBee-to-Ethernet concentrator in my wireless sensor network to add a time stamp to data frames which I’m buffering locally onto a SD-card on the concentrator during ethernet down time.

For all those who prefer a video instructable, please head over to YouTube to find both a 2D and 3D video instructable based on this post:


2. Tech spec:
Package: SOIC-8
I2C Interface
Ambient Operating Temperature: –40°C to 85°C
Supply Voltage Range: 3V to 3.6V

Texas Instruments BQ32000 Main product page

BQ32000 data sheet


3.Where to get one/many:
The BQ32000DR is free to sample from TI, their price chart lists them for £0.75 in 1k quantities.

Farnell will sell you a single one for £1.85 (Link to Farnell)


4. Let’s hook it up:
Since we can’t easily connect the SOIC-8 package to the Arduino I’ve soldered it onto a SOIC-to-DIP adapter.

bq32000 on dip adapter

Looking at page two of the data sheet we connect it to the Arduino Uno as follows:

BQ32000 Pin4 -> Arduino GND
BQ32000 Pin5 -> Arduino Analog Pin 4 (SDA)
BQ32000 Pin6 -> Arduino Analog Pin 5 (SCL)
BQ32000 Pin8 -> Arduino 3.3V

Looking at page 3 of the same data sheet (and because I’ve had a look in the Arduino forum where people didn’t get the DS1307 to work without I2C pullup resistors ;) ) we also need to connect SDA and SCL with one 4.7KΩ pullup resistors to the Arduino’s 3.3V supply.


BQ32000 Fritzing files

As usual for a RTC the BQ32000DR also has a battery pin and a battery connected to this will get trickle charged from the main power supply. Both the main power supply and the battery connection should get capacitors on permanent circuits but for this little demo we’ll get away without the capacitors and battery.
I’m not going to spend much time explaining the IRQ pin, have a look at page 5 of the data sheet if you think it might be useful to you. Baseline, for a permanent circuit add another 4.7KΩ pullup resistor between 3.3V and IRQ (just like we did with the SDA/SCL lines) to ensure this get’s turned off when the BQ32000 is running off it’s battery.

Project 9 Arduino BQ32000


5. Let’s talk to it:
Since the BQ32000 is code and pin compatible with the popular Dallas/Maxim DS1307 RTC we can borrow the DS1307 Arduino library to talk to our BQ32000DR RTC :)

This version of the library works with the Arduino 1.0 IDE:
DS1307 Library
Simply unpack, copy the resulting DS1307 folder to your Arduino IDE library folder and open your Arduino IDE. You’ll now find the the examples I’m using under File/Examples/DS1307.

Let’s start with DS1307_demo_en. Upload, start the serial monitor and you should get more instructions on how this sketch works. Basically you paste a string into the serial monitor, hit send and thereby set the BQ32000DR to the current date/time.
The format is straight forward, just one typo to watch out. Make sure you replace the “A” in “A[00-49]” with a Y when setting the year. This is my example string:
h13m43s00D05M06Y12 R

Which gives me the following result in the serial monitor:

Project 9 terminal demo output

Now the second example, ds1307_rtc. This is very much the same as DS1307_demo_en just with the interactive part stripped out. The current time/date simply get set as variables in the void setup loop which runs once whenever the Arduino starts up before it moves on to loop through whatever you have sitting in void loop.


6. Conclusion:
As one would expect from Texas Instruments, a very nice no-nonsense RTC :)

FacebookGoogle GmailEvernoteDeliciousShare

Modifying a SLR tripod for the HTC EVO 3D


I’ve always had a thing for 3D pictures and movies hence my recent acquisition of a HTC EVO 3D. It’s the US Sprint version hence only works on Wifi in this coutry due to the lack of a LTE network. But since I simply want to use it as a 3D camera it was what I’d call a bargain on ebay for about £60 including a decent size memory card. I wouldn’t say I’ve got a steady hand so I started to investigate what sort of tripods would be available for this sort of device. Not surprisingly HTC didn’t have anything on offer and the best I could find was a “one size fits all” type ultra low budget mini tripod on Amazon. Apart from the fact that it was simply too tiny for what I was trying to do (the 3D pictures get a lot harder to see if taken very close up to the target) it’s mechanism also simply did extend far enough to accommodate the EVO 3D in it’s Otterbox Communter case. I also had a spare SLR tripod gathering dusts in a corner which was missing the adapter plate that is attached to the SLR camera and then snaps into the tripods top mounting platform. So I set out to spend a sunny afternoon modifying both :)


1. The mini tripod:

The vertical lever arm has a spring in it and after taking the whole thing apart I found that it would actually extend a lot further but the spring was not allowing it to. Old spring out, slightly longer spring in and the result now holds the EVO 3D firmly in place. I was a bit afraid the arm might be blocking one of the cameras but it doesn’t. To make it easier to insert the EVO 3D I also drilled a little hole and put in a tiny nail as a retention mechanism to ensure the arm doesn’t slide back the whole way. Yes, I admit it: The nail has been laying on my work bench for a month or so and I was trying to find use for it in a project  to avoid having to throw it away… ;)


2. The SLR tripod:

This had two known problems. Firstly the screw mechanism which allows to tilt the mounting platform is simply not well done. It has teeth hence doesn’t allow a lot of precision and usually ends up in a position I don’t want and I then try and compensate by extending/shortening one of the legs. I still haven’t got a full solution for this (probably means removing the teeth) but I have fitted a downwards facing screw which at least keeps the platform in a stable horizontal position. Second problem was that I simply do not have the adapter which fits into the mounting platform neither would I have been able to get one to mount the EVO 3D. The top part of the mini tripod which includes the clamp mechanism luckily unscrews from it’s lower leg part so I only had to find a screw with the right size thread and fix that to the mounting platform.

EVO 3D tripod 1

EVO 3D tripod 2

EVO 3D tripod 3

EVO 3D tripod 4


3. What’s it like to use:

The result is far more stable than I initially expected, has proven very workable during the first test session and I’m very happy with it :) This is one of the 3D pictures taken with the above setup, more can be found in my profile over at phereo:

FacebookGoogle GmailEvernoteDeliciousShare

Raspberry Pi Project 1 (2D/3D Pictures) – XBMC media streamer


The friendly postman left me a “you weren’t home” card yesterday so I got curious since I didn’t expect any deliveries. Farnell had given me a delivery slot for next week (28/05/2012 onwards) but a quick look into my profile confirmed that they had already sent it :) Followed by the usual 24hr wait and a somewhat restless night I finally managed to collect my first Raspberry Pi from my local main post office (at the other side of town, obviously) and documented the following “in car un-boxing” with a very happy tweet+picture :) Since I’ve been blessed with mandatory attendance at a XML training course although I have just passed a far more complex postgrad module on the matter of structured and unstructured data I had luckily already had time to prepare a repository of RasPi boot images and associated “stuff”. The following is a quick description of my first attempts to get some use out of the little board and at the end a couple of thoughts on further projects.

Raspberry Pi

1. To stream or not to stream:

Personally I don’t think that’s a real question hence the fact that during the refurb of our semi I decided to pull a bunch of AV cables as thick as my arm through the crawl space underneath the floor boards from the media center (<- she would call it the front room…) to the cupboard underneath the stairs. Said cupboard now also houses the main fan-out points for the down stairs ethernet and DVB-T wall sockets. I had a basic Intel quad core based machine in there for quite some time to basically stream video content off the central raid server and experiment with ripped HD content (<- motivated by the fact that I do own HD-DVDs and a USB HD-DVD/BluRay writer but no stand alone home cinema HD-DVD player). I think there aren’t many “stream my stuff” apps that I haven’t tried over the years and where I’m too lazy to mess with Ubuntu+VLC XBMC has proven to be a nice couche potato type front end. Since the old streaming PC was finally retired a few months ago in preparation of this setup I set out to get it to work on the RasPi. Mainly to avoid having to hook up the quad core portable to watch the last and final episode of Desperate Housewives…


2. XBMC vs Raspbmc:

Initially I thought about simply messing with the original Raspberry Pi Debian image ( to see how hard it would be to get XBMC into that but thanks to my postgrad modules I now routinely write spec and google for about half an hour before I embark on any new project. As usual this saved me about an hours worth of compiling for ARM and god knows what simply due to this website and the links on it with the two current main projects for XBMC based RasPi images: . The contenders were quickly identified as OpenELEC ( and Raspbmc (

I’ve tried both and as much as I like the idea behind OpenELEC it’s simply not quite there yet, mainly due to the fact that it feels a lot slower which is obviously the main problem on such a power poor board. Although the current Raspbmc image ( is classified as Beta it’s already very usable, boots and reacts fast and dealt well with the plugins I threw at it. Personally I’d put this down to the fact that the developer behind Raspbmc is the same guy that brought XBMC and 1080p decoding to the 1st gen Apple so he knows how to deal with underpowered platforms.


3. Raspbmc – ready, steady, boot:

Personally I got tempted to play around with the non-HDMI screen sockets but they don’t seem to be implemented yet due to missing drivers so the little thing went up against a 50″ plasma. I haven’t bothered yet to try and connect the 3.5 mm jack headphone socket to the Yamaha 6.1 Amp and I’m not sure how well Raspbmc deals with above HDMI-stereo or real 5.1 output via the 3.5mm jack at the moment but since the audio chips seems very boring standard stuff I’d assume it should simply work or require minimal work at best which I’m sure will be finished until the final image goes out.

AV wise I’ve set this up as HDMI only to the plasma with video as 1080p/60hz and stereo audio through the same HDMI cable to the TV.

I’ve seen various posts of people who tried XBMC on their RasPi with very poor results due to very slow SD-cards so I got something reasonable fast in form of a 8GB SanDisk Ultra (SDHC, 4, 15MB/s) which seems sufficient to give the little board enough I/O umpf. Building bigger lists of files can take a second or two and the same goes for listing available options in some of the plugins which scrape data off the interweb but keeping in mind the underlying system and the fact that Raspbmc is still Beta this is not only usable but actually quite impressive. The current RasPi only has a 10/100 NIC which makes sense as the chip in front of the NIC simply wouldn’t handle more (especially on the upstream side) so I’m hoping that the next version comes with a decent gigabit NIC which should be beneficial once the board is meant to crunch HD content or scrape tons of data off some website/service.


4. Raspbmc – plugins (UK):

Installing the plugins is simply down to copying the extracted files into a folder on the RasPi boot SD-card or installing the usual repositories. I’ve only tried TV ones so far which work very well. iPlayer for TV and radio works straight away after copying the plugin over, even BBCHD works stutter free! The 4oD still has this annoying bug and I’vd forgotten how to fix it but the 5oD one works without the need to turn on the brain and rewrite the messy perl script that comes with these two. TVcatchup also installs but even in low resolution the video stutters which I think is down to the codec it uses. From what I gather the RasPi doesn’t deal to well with MPEG2 but I haven’t really looked into the spec details of the GPU yet. I’d assume all this is fixable as soon as more people have the boards and feed back bugs.


5. Raspbmc – smb streaming:

No real surprises here, streaming from an Ubuntu based Samba share is simple to setup and works without flaws. I’ve tried xvid and high resolution h2.64 files and all play without stuttering which I still find amazing for a board this size :) I’ll do more tests to find out where the limits of the GPU are and which codecs it digests best but I’d assume that it should deal with all the files people usually watch and it should at least match if not even exceed capabilities of functionality built into most recent TVs/BluRay players. It surely outperforms my one year old plasma and BluRay player in regards to capabilities as a media player.


6. What next:

As usual, lots of ideas in my head :) Apart from the fact that I want to establish what the board is actually capable of with Raspbmc in regards to max video/audio rates I’d also like to test more of the XBMC plugins and hopefully I’ll get lovefilm to work on this so I won’t be sent to the mail box again ;) In regards to non media streaming projects I’m planning to try and talk to all sorts of ICs and Arduino shields once I’ve figured out what the pins do  and soldered a few dirty adapter boards. I remember this Gert-board thing and Lady Ada had a RasPi proto board in one of her blog posts but I’m not sure if either are actually on sale yet. I think the first think I’m going to try to talk to will be I2C sensors and an XBee Series 2 modules simply because I’ve got some kicking about but if I get enough spare time I want to replace the back-end of my current wireless sensor network with a RasPi. It simply needs to suck up data frames from the XBee and then store them in an internal MySQL database. Since it’s got an ethernet port it could obviously serve flot graphs on the data through Apache like my current Mini-ITX back-end but this should be a lot more portable and energy efficient. Last but not least, if said graphs and more stats/details on the sensor nodes could appear on a touch screen mounted to the back of the RasPi I would have a full MySQL storage an graphical reporting backend running off 5V and possibly even off a mid sized solar panel hence off grid :) Oh, and I still need a decent case…

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 8 (2D/3D pictures) – how to make your own SOIC-8 breakout boards from scrap (tmp175, Uno, 1.0)


Texas instruments were kind enough to provide me with samples of their tmp175 digital temperature sensor. They don’t come in the most DIY friendly package hence I had to make a breakout board before I could get the Arduino to talk to one of them.

The breakout board:
I’m sure they are available somewhere but I didn’t want to wait for another delivery and have a generous amount of IT scrap. So I set out to find something in the heap which I could chop up and which would have the same pitch as the tmp175s pins. The donor part was quickly identified as an old PCI network card, the bit that gets inserted onto the PCI slot was a perfect match in regards to pitch. So out comes the Dremel, on goes the diamond cutting disc and off comes the bit I want :)

The resulting bit of PCB wasn’t big enough to fit both sides of the sensor on it hence I’ve used two smaller parts, one for each side. I’ll check for more suitable cards with a wider area to solder onto at some point, AGP cards might be better for this purpose.

I’ve soldered each sensor pin to it’s own copper trail, drilled little holes, fed the cables through and soldered them to the copper trails. The result might not be pretty and would benefit from a bit of support underneath (hot glue or a bit of plastic…) but it’s free and it works :)

Reading from a tmp175:

The tmp175 has three address pins which means we can have up to 27 of them on one I2C strain. Quite a move up from the tmp104 I played with in Project 7 which is limited to just four. Quick glanze at the TI reference pdf ( and the first address option on page 8 is to connect all three address pins to ground which sets the sensor to a binary address of 1001000 (or 0×48 in hex which is what the wire library tends to digest in sketches). TI recommend pull up resistors for sda/scl and a capacitor but for this quick test I got away without them.

Once connected up it’s straight forward to read temperatures. There are additional registers to set min/max temperatures to trigger alarms on the alarm pin if the actual values move outside the specified range but for this project I’ve decided to keep the sketch simple and just read the current temperature.
The following sketch will print the temperature from a tmp175 on address 1001000/0×48 to the serial monitor.

Arduino sketch to read tmp175

I like this sensor, the possibility to have 27 of them on one I2C line makes it a good candidate for getting average readings. The I2C lines will obviously limit the range but this will still be a great sensor for confined space projects and it’s very easy to talk to.

FacebookGoogle GmailEvernoteDeliciousShare

Arduino Project 7 (2D/3D pictures) – How to read up to 32 tmp102 temperature sensors with one Arduino by using 4051 multiplexers (Arduino Uno/1.0)


I bought a few tmp102 sensors on matching breakout boards from SparkFun to take measurements around the greenhouse. Apart from the fact that this sensor is tiny, very energy efficient and responsive I mainly decided to go for these instead of thermistors because they are digital (no need for endless conversions) and since they are I2C they can all be connected to the same two wires. This model is limited to four devices per I2C bus which is enough for what I want to do. If you need more you will find plenty of tmpXYZ choices on TI’s website. I’ll start with connecting the maximum of four tmp102 sensors to one Arduino Uno board, mainly to explain how the addressing scheme works and then move on to a setup which allows for multiples of four sensors to be read with the same Arduino Uno with the help of 4051 multiplexers.

Some cold facts on the tmp102 before we start:
Low Power Digital Temperature Sensor with SMBus/Two-Wire Serial Interface in SOT563
resolution of 0.0625C
range of -40C to +125C
SMBus and two-wire interface compatibility
up to four devices on one I2C/TWI bus.
1.4V to 3.6VDC supply range

And some links with with more details:


1. The theory:
The idea is simple. Imagine the I2C interface like a little network. You connect your sensors to the two wires (analog pin 4+5 on the Arduino Uno), configure each sensor to have it’s own hardware address and then just send out a request through the two wires to talk to which ever address you want.


2. Let’s connect the first one:
Connect the sensor as follows:

On the tmp102 breakout board: -> On the Arduino Uno board:
V+  -> 3.3V
SDA -> analog pin 4
SCL -> analog pin 5

With the help of this sketch we can now get the current temperature reading form our first sensor.



3. Let’s connect some more:
To get more than one of these sensors to work on our I2C network we need to configure each one of them with it’s own hardware address. This is achieved by connecting the breakout boards ADDO pin to different Arduino pins. The four possible options are:

On the tmp102 breakout board: -> On the Arduino board: -> Translates to network address:
ADDO -> GND -> 1001000 -> 0×48 -> 72
ADDO -> 3.3V -> 1001001 -> 0×48 -> 73
ADDO -> SDA -> 1001010 -> 0×48 -> 74
ADDO -> SCL -> 1001011 -> 0×48 -> 75


Once all four sensors are connected the following sketch will get the current temperature reading form all four sensors.



4. Anything else it can do?
I didn’t expect much more from a temperature sensor, in fact this is a lot for such a tiny package. Still, it’s got a few more tricks up it’s sleeve. The TI manual mentions a few more registers towards the end, in addition to the current temperature this sensor also stores it’s configuration and highest/lowest temperature readings in registers which are accessible via I2C. I doubt that many people are going to be interested in the configuration register and further options of this sensor, feel free to consult the manual for further details. I can see use for the min/max temperature registers for stand alone setups (I tend to store sensor readings in a database) and the following sketch will display the content of the current/max/min temperature registers for all four sensors.



5. One more to go:
I had ordered five of these tmp102 sensors since I was afraid I might kill one during “testing”. They have proven very hardy, even running them on 5V or connecting various pins wrongly doesn’t seem to have caused my testing sensor any obvious damage. Obviously I couldn’t resist to try and make the fifth one work as well ;)


6. 2×4051=32xtmp102…
To prove that it is possible to read multiple strains of 4xtemp102 I’ve setup a little experiment with two 4051 multiplexers and two tmp102s which are both set to a 72 address by connecting their ADD0 pins to ground. Multiplexer nr1 (which is going to control all the SDA pins) has it’s z pin connected to analog pin 4 and multiplexer nr2 (which is going to control all the SDC pins) has it’s z pin connected to analog pin 5. Both multiplexers have their s0-2 pins connected to the same digital pins 8/9/10 which allows to select the eight different strains of tmp102s we can now start to connect. I’m sticking to two for the moment but this setup is obviously easily extendable.
For anyone who isn’t familiar with the 4051 there is a good introduction on the playground (


The following sketch will set the multiplexers, read both 72 tmp102s in turn and prints the result to the serial monitor.


FacebookGoogle GmailEvernoteDeliciousShare

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

Hit Counter provided by seo company