Table of contents

Tuesday, 21 April 2015

Solar powered wireless weather station - part 2

Over the weekend I have built a prototype of a sensor/transmitter.  The only job it will have to do is:
-  wake up periodically
-  power up the sensors
-  read: temperature (DS18B20), humidity (DHT11), light (LDR), battery voltage
-  send a package using NRF24L01+
-  power off the sensors
-  go back to sleep

Having this setup on a breadboard I have written a very simple program using Arduino (my goal is to write optimised code in C, but at this stage I just wanted to prove the concept).

After compilation, Transmitter.ino takes 14kB (15k with serial output) of available 32kB flash in ATmega328P. One thing I don’t like in my program is that I have hardcoded the sensor ID – it means that if I wanted 10 sensors I would need to flash 10 different programs.

I think I will add 4 or 5-way dip-switch allowing me to choose one of 15 or 31 addresses (the receiver has ID=0 hence only 15/31 are left for the sensors).

I hooked it up to a solar power bank (it has 2600mAh LiPo battery). I have connected the uC directly to the battery (4.1V max. once charged) but I had to add 1N4148 diode before the radio transceiver (it operates at 3.3V). Using a variable PSU I have discovered that everything works fine until 3.1V (minus voltage drop on the diode for the radio), then the DHT11 humidity sensor goes mental (0% humidity) and then at 2.9V the radio stops transmitting (which is good as I’m already getting rubbish readings at this voltage).

The solar bank circuit shuts off the step-up converter if there is nothing plugged in to the 5V USB port (which is good in my case as I’m connecting the uC to the battery directly) but the solar circuit works and charges the battery if enough light is provided.

The funny thing is that it has a built-in LED indicating charging the battery.
In specific conditions (little amount of sunlight) the solar panel was producing enough voltage to trigger the LED on, which was draining the built-in battery...
I don’t have exact figures off the top of my head but it was something like 3mA going from the panel and additional 6mA from the battery (?!?). After cutting off the LED, the current started to flow into the battery J
It wasn’t of course a problem in a direct sunlight but even then, the LED was consuming more energy than my complete circuit will.

The receiver is just another Arduino with NRF24L01+, formatting and forwarding the packet to the serial port. Receiver.ino – 8kB of flash (or 10k with serial output).

Here is an example of what comes out of transmitter:

27: 220C 3323V 40% 299

27        - sensor’s packet counter
220C      - temperature: 22.0C
3323V     - battery voltage: 3.323V
40%       - humidity (0-99%)
299       - light amount (0-1023)
WRITE OK  - NRF24L01+ acknowledgment

And here is how it looks in a serial monitor on the receiver’s side:

260-27: 1  220C  3323V  40%  299

260    - receiver’s packet counter
27     - received sensor’s packet counter
1      - senor ID (extracted from transmission header)
220C   - received temperature: 22.0C
3323V  - received voltage: 3.323V
40%    - received humidity (0-99%)
299    - received light amount (0-1023)

The next step I’m thinking of is building a second sensor/transmitter and a better, standalone receiver, probably with some LCD displaying the readings.

All comments/support appreciated as usual.


If you like my project and/or you would like to support it, please use the Donate button ☺ 
Follow me on Twitter, Google+, YouTube, Thingiverse or by email to receive the latest updates.

No comments:

Post a Comment