spark_counter/README.md

98 lines
3.4 KiB
Markdown
Raw Normal View History

2015-10-28 01:51:31 +01:00
the spark counter is a custom electricity meter with wireless data logging capability.
on one side I have:
* peacefair PZEM-004 power meter to measure the electricity consumption
* ATmega328P micro-controller to read the measurements out
* nRF24L01+ radio to transmit the values
on the other side:
* nRF24L01+ radio to receive the values
* Raspberry Pi single board computer to store the measurements in an influxDB time series database
* grafana graphical monitoring tool to display the electricity consumption
more information is available in the [wiki](https://wiki.cuvoodoo.info/doku.php?id=spark_counter).
2015-10-24 20:03:30 +02:00
arduino_nano
============
Arduino Nano firmware for the remote power meter side of the spark counter.
the source files are written in C and intended for the Atmel ATmega328P micro-controller.
This does not use the Arduino IDE.
It requires avrdude and avr-libc.
Connect the peacefair PZEM-004 power meter to the UART port of the Arduino Nano and the nRF24L01+ radio transceiver to the SPI port (detailed information in `nrf24.h`).
The spark counter firmware will periodically read the measurement values from the power meter (voltage, current, power, energy) and send them using the radio transceiver.
The destination address and channels for the radio communication can be set in EEPROM.
The format is the following:
- 4 bytes source address
- 4 bytes destination address
- 1 byte channel number
- 1 byte CRC8-ibutton checksum over the previous data
The default values are defined in `main.h` but will be overwritten by the raw EEPROM data in `eeprom.bin`.
Don't forget to use `make eeprom` to write the configuration data on the micro-controller.
The source code is interrupt driven when possible (timers, USART, SPI, nRF24 IRQ).
2015-10-28 01:51:31 +01:00
Arduino - nRF24L01+ connection
------------------------------
ATmega328P signal,ATmega328P pin,Arduino Nano pin,nRF24L01+ board pin,nRF24L01+ signal
GND,GND,GND,1,GND
,3V3 (add cap.),2,VCC
I/O,PB1,D9,3,CE
SS,PB2,D10,4,CSN
SCK,PB5,D13,5,SCK
MOSI,PB3,D11,6,MOSI
MISO,PB4,D12,7,MISO
INT0,PD2,D2,8,IRQ
2015-10-24 20:03:30 +02:00
rpi
===
Raspberry Pi program for the computer side of the spark counter.
2015-10-28 01:51:31 +01:00
the source files are written in C and require the [RF24 library](https://tmrh20.github.io/RF24/RPi.html) for the nRF24L01+ radio transciever and libcurl to save the measurement data in the influxdb time series database.
2015-10-24 20:03:30 +02:00
2015-10-28 01:51:31 +01:00
on the Raspberry Pi the [raspian](https://www.raspberrypi.org/downloads/raspbian/) OS is installer and the bcm2835 SPI kernel module is enabled (through `rasp-config`).
2015-10-24 20:03:30 +02:00
connect to nRF24L01+ to the SPI port of the Raspberry Pi and set up an influxdb database.
note
----
if you see the following error while compiling the RF24 eamples:
error: sleep was not declared in this scope
add the folling line to the corresponding source file:
#include <unistd.h>
error seen in `gettingstarted.cpp`, `gettingstarted_call_response`, and `transfer.cpp`
2015-10-28 01:51:31 +01:00
RPi - nRF24L01+ connection
--------------------------
RPi signal,RPi pin,nRF24L01+ board pin,nRF24L01+ signal
GND,P1_20,1,GND
+3V3,P1_17,2,VCC
GPIO25,P1_22,3,CE
GPIO8/CE0#,P1_24,4,CSN
GPIO11/SCLK,P1_23,5,SCK
GPIO10/MOSI,P1_19,6,MOSI
GPIO9/MISO,P1_21,7,MISO
GPIO24,P1_18,8,IRQ
2015-10-24 20:03:30 +02:00
pzem-004_probe.rb
=================
a simple script to query measurement values from the peacefair PZEM-004 power meter.
connect the power meter UART port using a USB to UART converter.
TODO
====
arduino_nano:
- use encryption for the RF communication (AES-128)
rpi:
- provide influxdb hostname, username, and password as parameter