CuVoodoo

the sorcery of copper

User Tools

Site Tools


spark_counter

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
spark_counter [2015/10/25 18:40] – add pictures kingkevinspark_counter [2015/12/05 12:54] – add git link kingkevin
Line 1: Line 1:
-The spark counter is a custom electricity meter.+The spark counter is a custom electricity meter with wireless data logging capability.
  
 On one side I have: On one side I have:
Line 10: Line 10:
   * a [[#Raspberry Pi|Raspberry Pi single board computer]] to store the measurements in an [[https://influxdb.com/|influxDB time series database]]   * a [[#Raspberry Pi|Raspberry Pi single board computer]] to store the measurements in an [[https://influxdb.com/|influxDB time series database]]
   * a [[http://grafana.org/|grafana graphical monitoring tool]] to display the electricity consumption   * a [[http://grafana.org/|grafana graphical monitoring tool]] to display the electricity consumption
 +
 +{{:spark_counter:dsc02371.jpg?0x300|complete spark counter}}
  
 ====== peacefair PZEM-004 ====== ====== peacefair PZEM-004 ======
  
-The [[http://www.aliexpress.com/wholesale?catId=0&SearchText=peacefair|peacefair]] [[http://www.aliexpress.com/wholesale?catId=0&SearchText=peacefair+pzem-004|PZEM-004]] is a simple power meter.+The [[http://www.aliexpress.com/wholesale?catId=0&SearchText=peacefair|peacefair]] [[http://www.aliexpress.com/wholesale?catId=0&SearchText=peacefair+pzem-004|PZEM-004]] is a simple power meter ({{:spark_counter:peacefair_pzem-004_porduct.pdf|datasheet}}).
 It: It:
   * measures voltages 80-260 V AC   * measures voltages 80-260 V AC
Line 23: Line 25:
   * provides a TTL UART port to query these values (or set an alarm so to beep when a provided power threshold is reached)   * provides a TTL UART port to query these values (or set an alarm so to beep when a provided power threshold is reached)
  
-{{:spark_counter:dsc02361.jpg?0x200|}} +{{:spark_counter:dsc02361.jpg?0x200|PZEM-004 front}} 
-{{:spark_counter:dsc02359.jpg?0x200|}}+{{:spark_counter:dsc02359.jpg?0x200|PZEM-004 back}}
  
 The voltage measurement is done over the power input port. The voltage measurement is done over the power input port.
Line 31: Line 33:
 A drawing on the back of the device will describe how to connect the wires. A drawing on the back of the device will describe how to connect the wires.
  
-{{:spark_counter:dsc02328.jpg?0x200|}}+{{:spark_counter:dsc02328.jpg?0x200|PZEM-004 opto-couplers}}
  
 The meter also provides a UART port to query the measured values. The meter also provides a UART port to query the measured values.
Line 65: Line 67:
 I removed the pizeo-element to prevent this annoying sound. I removed the pizeo-element to prevent this annoying sound.
  
-{{:spark_counter:dsc02344.jpg?0x200|}}{{:spark_counter:dsc02325.jpg?0x200|}}{{:spark_counter:dsc02327.jpg?0x200|}}+{{:spark_counter:dsc02344.jpg?0x200|PZEM-004 board front}} 
 +{{:spark_counter:dsc02325.jpg?0x200|PZEM-004 board back}} 
 +{{:spark_counter:dsc02327.jpg?0x200|PZEM-004 board IC}}
  
 The power meter uses a single chip solution, the [[http://www.sdicmicro.com/products.html?ic=SD3004|SDIC microelectronics SD3004]] ({{:spark_counter:sd3004_datasheet_v0.2c.pdf|datasheet}}). The power meter uses a single chip solution, the [[http://www.sdicmicro.com/products.html?ic=SD3004|SDIC microelectronics SD3004]] ({{:spark_counter:sd3004_datasheet_v0.2c.pdf|datasheet}}).
Line 73: Line 77:
 ====== ATmega328P ====== ====== ATmega328P ======
  
 +{{:spark_counter:dsc02354.jpg?0x200|development board}}
 +{{:spark_counter:dsc02365.jpg?0x200|development setup}}
 {{ :spark_counter:ic_dev_arduino_nano-30.svg?400|Arduino Nano pinout}} {{ :spark_counter:ic_dev_arduino_nano-30.svg?400|Arduino Nano pinout}}
  
Line 79: Line 85:
  
 USART to query the power meter, SPI to communicate with the nRF24L01+, and the nRF24L01+ protocol are implemented in C (using a lot of interrupts). USART to query the power meter, SPI to communicate with the nRF24L01+, and the nRF24L01+ protocol are implemented in C (using a lot of interrupts).
-The source code is available [[https://to.do|in this git]].+The source code is available [[https://git.cuvoodoo.info/kingkevin/spark_counter/tree/master|in this git]].
 I prefer directly writing in the registers as described in the [[http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf|datasheet]] rather than using an [[https://www.arduino.cc/en/Main/Software|abstract IDE]] and [[https://github.com/TMRh20/RF24|libraries]]. I prefer directly writing in the registers as described in the [[http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf|datasheet]] rather than using an [[https://www.arduino.cc/en/Main/Software|abstract IDE]] and [[https://github.com/TMRh20/RF24|libraries]].
 This way I learn how it works in details. This way I learn how it works in details.
Line 96: Line 102:
 ====== nRF24L01+ ====== ====== nRF24L01+ ======
  
-{{:spark_counter:dsc02353.jpg?0x150|}}+{{:spark_counter:dsc02353.jpg?0x150|nRF24L01+ module}}
 {{ :spark_counter:nrf24l01_pinout.jpg?250|nRF24L01+ pinout}} {{ :spark_counter:nrf24l01_pinout.jpg?250|nRF24L01+ pinout}}
  
Line 103: Line 109:
  
 On the [[#ATmega328P|micro-controller]] side I implemented the complete SPI-based protocol using the [[https://www.nordicsemi.com/eng/content/download/2726/34069/file/nRF24L01P_Product_Specification_1_0.pdf|datasheet]]. On the [[#ATmega328P|micro-controller]] side I implemented the complete SPI-based protocol using the [[https://www.nordicsemi.com/eng/content/download/2726/34069/file/nRF24L01P_Product_Specification_1_0.pdf|datasheet]].
-The source code is available [[https://to.do|in this git]].+The source code is available [[https://git.cuvoodoo.info/kingkevin/spark_counter/tree/master|in this git]].
  
 On the [[#Raspberry Pi|computer]] side I use the [[https://github.com/TMRh20/RF24|RF24 library]]. On the [[#Raspberry Pi|computer]] side I use the [[https://github.com/TMRh20/RF24|RF24 library]].
Line 110: Line 116:
 ====== Raspberry Pi ====== ====== Raspberry Pi ======
  
 +{{:spark_counter:dsc02375.jpg?0x200|RPi setup}}
 {{ :spark_counter:pi-gpio-header-26-sm.png?200|RPi P1 header}} {{ :spark_counter:pi-gpio-header-26-sm.png?200|RPi P1 header}}
  
Line 116: Line 123:
  
 To receive the measurements I used a [[#nRF24L01+|nRF24L01+ transceiver]] with the [[https://github.com/TMRh20/RF24|RF24 library]]. To receive the measurements I used a [[#nRF24L01+|nRF24L01+ transceiver]] with the [[https://github.com/TMRh20/RF24|RF24 library]].
-The source code is available [[https://to.do|in this git]]. +The source code is available [[https://git.cuvoodoo.info/kingkevin/spark_counter/tree/master|in this git]].
-The values are then simply stored in an [[https://influxdb.com/|InfluxDB]] time series database for visualisation in [[http://grafana.org/|grafana]].+
  
 [[http://elinux.org/RPi_Low-level_peripherals#P1_Header|RPi]] - nRF24L01+ connection: [[http://elinux.org/RPi_Low-level_peripherals#P1_Header|RPi]] - nRF24L01+ connection:
Line 129: Line 135:
 | GPIO9/MISO | P1_21 | 7 | MISO | | GPIO9/MISO | P1_21 | 7 | MISO |
 | GPIO24 | P1_18 | 8 | IRQ | | GPIO24 | P1_18 | 8 | IRQ |
 +
 +The values are then simply stored in an [[https://influxdb.com/|InfluxDB]] time series database for visualisation in [[http://grafana.org/|grafana]].
 +
 +{{:spark_counter:grafana.png?0x200|grafana visualization}}
spark_counter.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1