Streuth.. I’ve just realised I’ve been running this blog since 2005! Doesn’t time fly. My interest in using Atmel technology for home control started with an article I wrote back in 2012 simply called “Home Thermostat”. At that time I was just playing – but messing with prototypes really isn’t much fun so shortly thereafter I design the “UberBareBoard”. That article was followed up by my first attempt at home control over the Internet and part 2 by which time I was starting to see some real potential for not only my home but our holiday cottage business and for our place in Spain. Then came more updates as I got to grips with the more powerful Atmega1284p chip and started to develop my own PC-based test tools. By July I had it all figured out – or so I thought – using RF24NETWORK software providing a mesh-type network of radios still using the NRF24L01 radio.
Amazing how things change. The NRF24L01 boards which – I’ll grant you are cheap, continue to function poorly –they do not like stone walls and the RF24NETWORK is not a true mesh – you have to specify every node in the mesh which makes replacing boards a lot of fun.. and it really cannot handle one of the boards going offline. Finally, no-one has yet made effective use of interrupts when using these radio boards in a network – which puts further limitations on what you can do – as you spend your time constantly polling the radio network.
Over the summer, my pal Aidan and I have been working hard – we now have a decent Atmega 1284-based board to work with – you’ll see it below. Late July I discovered the Radiohead library – the nearest our little processors have come to seeing a proper mesh network.. but that now pushes the 328 chips out of the window – as the library takes them near the limit of their available program memory and as for the tiny 2K of RAM – just not enough. For boards at the end of the chain, perhaps – and I have 3 working installations using these – but for the master board, the 328 is no longer an option.
In August while enjoying the sun, it hit me – the NRF24L01 chips don’t have the ability to know how strong the incoming radio signal is – so how the hell can a network possibly know which is the best unit to route the signal through – and that started me on the hunt for alternatives – which brings us neatly into this post.
If you’ve been following my blogs you’ll know about my on-going work on home control but firstly you’ll see the phrase “Arduino” bandied around. I use this merely for convenience as I use a lot of the Arduino libraries out there – but my boards are home-grown. I’m particularly fond of the Atmega1284p chip because, unlike the standard Arduinos you see our there, this has 4* the RAM – which means it’s less likely to run out. It also has 4* the FLASH memory – so just when Arduino sketches are running out of room, the 1284p is just getting started.
I used to use hand-made boards and there are plenty of those lying around, but these days I’m using a design we put together called the “Aiduino” – so-called because my pal Aidan did the board layout. This particular design has stood the test of time and I use these on everything. It has space for both 3v3 and 5v regulators, the chip, the usual support components and that’s about it.
You’ll see a typical Aiduino above with edge connectors for all the port pins and an SPI connector near the middle. I don’t bother putting the programming interface on the board as the low-cost FDDI interfaces do that all for you – why waste valuable board space. I simply allocate a 6-way connector on the edge of the board for programming.
Armed with these boards, I have LCD display controllers (for wall mount displays), a master controller with Ethernet card and “slave” units to control lighting etc. All of these units talk to each other using NRF24L01 radios which are very cheap 2,4Ghz popular radio modules. There are two problems with these radios – firstly they are very low power and secondly they are on the same radio broadcast range as just about everything else including WIFI – and they DON’T like stone walls.
I’ve looked at the cheap FSK units as used in radio remotes – no-where near powerful enough.
Aidan and I are investigating some Atmel chips with on-board radio – these look promising but getting all of that running in the Arduino IDE and hence keeping access to the Arduino libraries – is proving a challenge but watch this space as he’s working on this right this minute. We’d like to produce (where others have failed) a tiny radio module which runs on SPI and which internally handles all the mesh coding and massive buffering – as well as offering other functions to take the load off the main boards.. Meanwhile…
I’ve looked at the RF22 modules – but these come from the USA and hence are a little expensive (inc. postage).. but only in the last few weeks have I discovered even cheaper Si4332-based radio boards from China which are compatible with the RF22 modules and hence can work with the likes of the Radiohead library for Arduino – a simple but fully functional “mesh radio” library. Not only that but these radios and library combined, unlike the slightly less expensive (but only just) NRF24L01 units, make good use of interrupts to ensure you can actually do something else while the radios are working!!
See the radio on the right – that’s one of them. They are tiny which poses a problem for prototyping as the edge connector is 0.05” pitch – but it’s do-able with care.
Below you’ll see one of my bodged Aiduinos which has the radio board mounted on top of the 1284P chip. If this all pans out I’ll make a board that incorporates the radio… and in the process of research I’ve found out some interesting things about these little radios.
I can say that I’ve had 3 of these running in mesh mode and the range covered by 3 equally spaced units (the centre one acting merely as a message relay in this case) covers from my garage, to my greenhouse – through 4 stone walls and an intermediate lightweight wall – which is WAY better than the NRF24L01 chips can manage.
At first I managing a couple of message round trips a second – I needed to get the speed up to dozens of round trips a second in order to allow me to, for example round-robin poll several units to update the mobile phone.
Well that worked too thanks to some help from the designer of the Radiohead library – a change from the library defaults brought me to 100 package round trips a second – when I say package – we’re talking about, say a 20 byte package going there and back – and with additional maintenance bytes (from, to, ID etc.)
The chip used in these radios, the Si4332 is supposed to handle a maximum +20db output – I managed +17db – but I’m convinced the little spring aerials are now the limiting factor – with full power I can now get through 2 stone walls but not right across the house.. but WAY better than the NRF24L01 chips even when the latter have stub aerials.
To run these radio boards, they need 3v3 power. Our Aiduinos run on 5v but have 3v3 out. You can feed the one output from the radio directly but the inputs to the chip might be damaged by direct connection to 5v logic – one option is a level convertor, another is a resistive divider. I found that for the 3 inputs that need it, 470r series resistors do the job just fine (The NRF chips work off 3v3 but will accept 5v signals directly). Why don’t I just run everything off 3v3? Speed and driving other devices, that’s why.
I’ve now modified the Radiohead library so that I can also get a flag when data is passed THROUGH the unit so it’s now possible to indicate the success of not only incoming packets but those passed on elsewhere – very handy for debugging and there’s nothing wrong with pretty lights anyway.
So there it is – what looks like a reasonably inexpensive radio solution for home control and with a tiny mod, the standard Ethernet library handles the Atmega 1284 chips no problem – it’s detailed in here somewhere but boils down to adding the chip to one of the library conditionals for the Mega boards. I did notice when these radios are running constantly, a slight decrease in range of my plug-in-the-wall mains controller handsets as they are on the same frequency range – but in my application, such all-out non-stop transmission would only occur when say the mobile phone is actually polling the units – otherwise it’s just about occasional updates and checks. As for the handsets interfering with the network – they don’t – maybe thanks to the frequency-hopping technology embedded in the boards. Incredible technology for such a low price.
Far more to come in the future. I plan to add moisture detection for our plants, gas monitoring for the home, I already have lighting and heating control working in 2 of the properties. I also have IR remote control and radio mains control underway. Do look in.
This is the latest to date in my series of articles on home control which started with my original article on a cottage thermostat in which I envisaged a very simple controller. Then came the UberBareBoard article about an Atmega328-based Arduino clone, initial attempts to master the NRF24L01 radio. The next article was the first item entitled home control and after this – then part 2 and then the winter update – then the April 2014 update and then things really started to move as I discovered better networks – then came the full mesh article – by this time I had everything starting to run the way I wanted things but for the radio network – as you’ll realise by now, that issue is starting to disappear.