Showing posts with label solar. Show all posts
Showing posts with label solar. Show all posts

Sunday, 16 December 2012

Approaching a working version of Arduino Solar Monitor

Christmas is coming, so I have to get a working version of the Arduino Solar Panel monitor.

My original intent was that it would have the following features:

  1. Measure the collector differential temperature.
  2. Infer the water flow rate from pump speed.
  3. Calculate the instantaneous power being collected.
  4. Calculate hourly and daily average powers.
  5. Log this information to an SD card.
  6. To achieve (5) easily, derive the time from an external Real-Time-Clock (RTC).
Now, features 1-3 are working, phew.   Feature 5 is implemented, but I need to think about what I really want (is daily average power useful?  Or should I just integrate total heat collected in a day?

Features 5 and 6 are proving troublesome, as I think I am starting to get to the limit of a single Arduino board (or more precisely the ATMega 328 controller on the board).

The main problem is that I am running out of RAM, and am going to have to give some serious thought to how to manage it better (just like old times programming a Zilog Z80A.....).

One problem is the number of different interfaces (and hence libraries) that I am having to use to achieve this.  The base software uses:
  1. OneWire.h and DallasTemperature.h to do the temperature monitoring, using a One-Wire bus.
  2. LiquidCrystal.h to drive the LCD display, using parallel data transfer
To add SD card support and a real time clock, I will need:
  1. Wire.h and DS1307RTC.h to access the real time clock from an I2C interface.
  2. SD.h to access the SD card from a SPI interface.
Each library uses a bit of ram , and there is only 2k of ram on the chip, so I am running out of it rapidly.  When I tried to add the RTC code, the board re-booted every few seconds, which I think was an out of memory issue.

So, the de-scoped system is not going to do SD card logging.  As compensation I have added switches to the two spare digital lines to use to provide a simple user interface so you can scroll between instantaneous, hourly and daily data, and maybe even set the clock (but I do worry about running out of RAM again if I get too adventurous!

Given this, I have put the 'Version 1' hardware together, and mounted it in a cheap 2 gang socket pattress box with a blank cover cut out to hold the board:
The toggle switch on the front is for the display back-light - I thought that would be easier than a push-button if you were trying to use buttons for the interface - the new buttons are facing the bottom of the picture on the side of the front panel, so you can't see them on this photo (and I made a mess of cutting the holes for them, so it looks a bit ugly...).

Right, just got to sort out the software now.  Current version is on github.

Sunday, 2 December 2012

Arduino Based Solar Panel Power Monitor

My dad has a solar thermal collector on his roof (2x20 vacuum tube collectors).   His commercial controller gives total kWh collected, but I want an instantaneous kW indication.   I am developing this using Arduino (see Microcontrollers Revisited).

Version 1 used a 7 segment LED display:
But I have now received an LCD display off the slow boat from China courtesy of Ebay, so wanted to update it to give more information on the display.
The updated board is shown below:

I made a little mistake when I was modifying the circuit board, and when I added the LCD contrast potentiometer, I accidentally left it one of the digital output pins connected to ground if you turned the potentiometer too far.   The Arduino board suddenly stopped working altogeher, so I thought I had fried it.  I was pleasantly surprised when I powered it from a 9V battery rather than from the USB socket, because it came back to life and appeared to work normally.
We installed it on the panel, and started to get sensible readings off it this morning (see above picture), but it was reported dead this afternoon, with the Pin 13 LED flashing every now and then (which is odd because my software does not use Pin 13)....It starts to work if you power it down for a few minutes, but within 10 mins it crashes again with Pin 13 LED flashing.....So I think it is dead - will de-solder the nano and put another one in instead....

Well, replaced Arduino nano on the PCB with a new one.   It worked fine....for a while (10-15 mins), then as I was packing up, I noticed that the display was very dim, but the LED back light still worked ok, which made me think the battery was ok.   5 minutes later, it was doing the same behaviour as the previous one - no LCD display, and the Pin 13 LED flashing.   This time though, the new Aruino Nano has a working voltage regulator on the USB port.  When I plugged the board into the computer via USB, the board reset and is working fine again.....I must put a current meter on the 9V battery to make sure it is not pulling a ridiculous current or something.  If I am lucky it was just a dead battery, but I am still surprised that the LED backlight worked ok, when the arduino could not boot...I'll have to think about this a bit more...

There was definitely a dead battery involved - the 9V battery was only giving 5.9V, so I can see why the 5V voltage regulator may have been struggling.  The thing I need to find out though, is why is the battery dead?  This should be a nice low power circuit, but I will have to get a new one and check the current it is drawing.

Sunday, 25 November 2012

Microcontrollers Revisited

Quite a few years ago (probably 10), I started getting interested in using microcontrollers to do small computing tasks that required input-output, and low power consumption.   I did not get very far with them because every time I wanted to do something, I would have to write software from scratch (to talk to a display or sensor etc.).  Also there was a lot of soldering involved to put the boards together, with crytstals, capacitors etc. to support the microcontroller.

I recently discovered Arduino (http://arduino.cc), which is a simple microcontroller with a standard PCB board layout, where assembled boards are sold cheaply.  The Arduino Uno seems like a good one to use for prototypes, as all the I/O pins are taken out to headers that you can attach jumper wires to easily.   For 'production'  versions though, the Arduino Nano seems like a better option, as it is much smaller, and you can solder connections directly onto the board rather than using jumpers etc.  I bought a few of these (or at least clones of them) very cheap (~£11 each) off Ebay.

You can download a simple development environment where you can write the code for the boards in C/C++, compile it, and load it onto the board via USB - seems to work very well.

By far the best feature of Arduino though is the user contributed libraries - there are libraries for accessing one-wire devices, LCD displays etc., so you do not have to start from scratch for each project, which makes development much, much quicker.

So, I am starting to think of all of those 'I could make one of those, but it is a bit of a waste to use a full-blown computer for it' projects.   The ones I am starting on are:

  • Solar Thermal Monitor (Power Meter for water heater solar panel) - I have a first version working - see the solThMon directory in my Github repository.  A bit more description is provided in the github wiki.
  • Alternative Weather Station Receiver - the idea is to use a simple 433MHz radio receiver to read the signals from our weather station, so we do not need the big LCD display that came with it (no progress yet, but I have the hardware for it...).
To give an idea of what these things look like, here is a picture: