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
WRITE OK
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.
Cheers,
LJ
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.
Follow me on Twitter, Google+, YouTube, Thingiverse or by email to receive the latest updates.