Inside the YHDC SCT013 current transformer

The YHDC SCT013 series is very popular for use in energy monitor projects.


Warning, the core is VERY hard, but VERY brittle, don’t hit it with anything hard, don’t grip in with pliers, don’t drop it on a hard surface.

The coil and half core are held in the lower housing by two obvious catches which click over the bobbin. Removal means pulling the assembly upwards gently whilst releasing the catches and feeding cable into the housing. One of the catches will probably catch on the slot in the bobbin, be prepared to release it.


An ideal tool for the purpose is an ordinary $2 DIP chip puller which can be used to get purchase on the two ears on the bobbin that can be seen in this pic. Push a little cable into the housing, pull upwards while releasing the catches, then feed more cable and the assembly is pulled upwards from the housing.

Above is the PCB detail. This one has a TVS (the black component) and no burden resistors. There is a place for two parallel 0806 burden resistors on the board.

The PCB floats on two plastic pin extensions of the bobbin. You may obtain benefit in securing it with two very small fillets of hot melt adhesive as above, small enough so as to not interfere with the guide rails in the enclosure.

Burden resistors

So if you wanted to add a burden resistor for 0.333V out at 50mA secondary current, R=0.3333/0.05=6.6667. You could do this with 1% resistors in the E12 value series, 12Ω and 15Ω will give the desired resistance. Likewise for 1V out, 22Ω and 220Ω in parallel will give the desired value of 20Ω.

If you wish to remove existing burden resistors, they can be removed with specialised tooling but small SMD resistors will usually melt the other side solder moments after melting the first side. Position a toothpick with one had to push the resistor sideways, with the other and use the soldering iron to eat one side to melt, move the soldering iron to the other side and push the resistor sideways with the toothpick as soon as both sides melt.


A CT that has no load could develop extreme and damaging voltage within the secondary winding in the presence of primary current. If the CT assembly does not have an integral burden resistor, it is wise to install a TVS or pair of inverse series 9V Zener diodes to prevent excessive voltage lest the external load be disconnected.


SCT-010-000 current transformer protection

The YHDC SCT-010-000 clip-on or non-invasive current transformer is widely used in DIY energy monitor applications, and is readily available on eBay for A$6 including post.

A key issue with current transformers is that current in the primary winding will cause excessive voltages in the secondary winding unless the secondary winding is suitably loaded. The broad rule of thumb is NEVER disconnect the output connections whilst current flows through the primary.


YHDC’s website is typical of Chinese web sites, and I could not find a datasheet for information on the internal circuit and possibly internal protection.
Continue reading SCT-010-000 current transformer protection

EmonTx3 v3.4 ‘wired’ implementation


EmonTx3 is a measurement node for an energy measurement system. It has measurement inputs for 4 current transformers, AC voltage, 6 DS1820B temperature sensors and a meter pulse counting sensor.

The standard configuration uses a HopeRF RFM69CW radio transceiver to emonhub running on some host.

This article describes modifications to the system to use a wired serial connection to the emonhub host.

Above is the emonTx3 board.

The approach taken is a minimal change to existing firmware and software, no change to existing hardware, and inexpensive components to extend the connection.

Outline of the solution

The existing firmware writes a debug stream to the connector used for firmware upgrade. It is a different format to that used for the radio link, and there are good reasons for that, but it means writing an interface handler for emonhub to parse the debug stream.

emonTx V3.4 Discrete Sampling V2.80

No EEPROM config
RFM69CW Node: 8 Freq: 433Mhz Group: 210


The solution involves some hardware to interface the emonTx3 to the wire line, and a similar interface at the other end to the host running emonhub.


Above is the debug stream from the modified firmware.
Above is an adapter (~$3) from the TTL levels of the UART port to RS485. The port is currently run at 115200bps, and that can be carried 800m with good noise immunity on good copper using RS485.


Above is the host end adapter.

Firmware changes

The firmware was changed to repurpose the output that may be used for switching power to the DS19B20 sensors, it is now used primarily as an RTS signal to the RS485 adapter to reduce current consumption when there is no traffic. In fact, the RTS signal has been asserted also at times when the DS18B20 sensors are read and it could also be used for its original purpose without conflict.

Host changes

Assigning a consistent name to the RS485 adapter

A problem with USB serial adapters is that they may acquire different device names depending on the order in which they are started.

This is solved in this solution by use of FTDI adapters which have a serial number that uniquely identifies the adapter, and setting udev rules to assign a consistent symbolic link to the device. It is this symbolic link that is used in emonhub.conf

The link is achieved by adding the file /etc/udev/rules.d/75-RS485.rules with the contents below (the contents must match the actual adapter).

#Assign fixed symlink to RS485 adapter for emonttx


The udevadm command will provide the information needed.

root@emonpi(rw):log# udevadm info -n /dev/ttyUSB0
P: /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
S: serial/by-id/usb-FTDI_FT232R_USB_UART_A9WRVDPD-if00-port0
S: serial/by-path/platform-20980000.usb-usb-0:1.2:1.0-port0
S: ttyRS485-0
E: DEVLINKS=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9WRVDPD-if00-port0 /dev/serial/by-path/platform-20980000.usb-usb-0:1.2:1.0-port0 /dev/ttyRS485-0
E: DEVNAME=/dev/ttyUSB0
E: DEVPATH=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0
E: ID_BUS=usb
E: ID_PATH=platform-20980000.usb-usb-0:1.2:1.0
E: ID_PATH_TAG=platform-20980000_usb-usb-0_1_2_1_0
E: ID_TYPE=generic
E: ID_USB_DRIVER=ftdi_sio
E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
E: MAJOR=188
E: TAGS=:systemd:

Interfacer module to parse the debug stream

An additional interfacer module was written to parse the debug stream, and it was hooked to the main module.

The interfacer is configured in emonhub and port layout copied in from source.

(the contents must match the actual adapter).

#Assign fixed symlink to RS485 adapter for emonttx


Code source

Code source is available the original git emonhub repo, and in the following git repository forked from the official repo:


The wired configuration is under test with emonhub installed on a Ubuntu server, and about 40m of cat5e cabling from emonTx3 to host. No issues have arisen.

References / links


Arduino 1.6.12 – adding Optiboard boards.txt

Optiboot is the default bootloader for Arduino Uno, and I use it other Arduinos (eg Nano) for all the good reasons Arduino put it on Uno.

To make that work conveniently, I append the Optiboot boards.txt file to the Arduino distribution.

Above is a screen dump of the options added by the appended file. Continue reading Arduino 1.6.12 – adding Optiboard boards.txt

Arduino 1.6.12 & 1.6.13 AVRDUDE issues

Arduino 1.6.12 has several AVRDUDE related issues.

It comes packaged with AVRDUDE which in my installation is located at C:\Users\owen\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino6\bin\avrdude.exe . This reports itself as “Version 6.3, compiled on Sep 12 2016 at 17:24:16”.

Also relevant is the avrdude.conf file (C:\Users\owen\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino6\etc\avrdude.conf).

This article relates to failures to program a bootloader, and failures to program the application using the very common USBASP.

There were two obvious problems:

  1. a false warning message about setting SCK rate, and fatal failure to contact the target; and (when that is resolved)
  2. failure to verify efuse=0x05.

Continue reading Arduino 1.6.12 & 1.6.13 AVRDUDE issues

ADS1115 ADC checkout – #1

I have application for an analogue to digital converter (ADC) in a noisy environment, so a possible solution is to place an ADC module very close to the analogue sensors and use some form of digital connection back to a microcontroller. A possible protocol is I2C, and has the advantage that several ADC modules can be attached to the same bus, along with other peripherals Eg LCD.

ads1115-00The above ADS1115 modules have four input channels, 16 bit conversion, flexible input mux, and were available on eBay for less than A$4, so worth a try.
Continue reading ADS1115 ADC checkout – #1

Fan controlled by humidity sensor – pre implementation data gathering

This article documents measurements of temperature and relative humidity (RH) over 10 days prior to implementing the fan solution to provide a baseline for designing the Fan controlled by humidity sensor.

A RC-4HC datalogger was used to collect temperature and RH measurements over 10 days which included a range of late winter weather, some rain, some fine clear days. The logger was located at 1.5m above floor level in the shed in a relatively clear spot in the middle of the area..

Screenshot - 22_08_16 , 15_53_17

Above is a chart of temperature and RH. The daily RH peaks are typically between 08:00 and 09:30, and pretty much coincide with the minimum observed temperature. There is clearly a lag from outside temperature which would tend to be minimum a few hours earlier, and a lower minimum (there were plenty of frosty days in the sample set). Continue reading Fan controlled by humidity sensor – pre implementation data gathering

Time to get some experience with 32bit microcontrollers – some progress

At Time to get some experience with 32bit microcontrollers I wrote that after almost 50 years working with 8bit microcomputers and microcontrollers, I thought it about time to get my hands dirty on some 32bit microcontrollers.

This article reports some work in the STM stream.

I abondoned the ST Discovery board in favour of a low cost basic ST32F103 development board costing about $4 on eBay. The chip is a 32bit microcontroller clocked at 72MHz.

As a learning vehicle, I decided to implement the functionality contained in Arduino thermistor thermometer – a tutorial.

The development environment is Eclipse with the GNU ARM toolchain, a debugger probe, the basic development board, and a 1602 LCD display with I2C backpack and an inexpensive CP2102 USB RS232-TTL interface.


Above is the working trial. The GDB debugger allows On Chip Debugging (OCD).
Continue reading Time to get some experience with 32bit microcontrollers – some progress

Fan controlled by humidity sensor – design technique

This article gives an outline of the process used in designing the Fan controlled by humidity sensor to use my Generic heating / cooling controller design (hcctl).

Arduino thermistor thermometer – a tutorial gave a method for designing a thermometer based on a formula predicting the behaviour of the sensor. This article explains a different approach where that is not possible.


Above is a characteristic from the manufacturer’s data.

The curves to no lend themselves to simple curve fits, so a cubic spine interpolation will be made based on key points from the curve.

Four our purposes, the mean curve (green) is sufficient for design.

Screenshot - 24_07_16 , 08_16_07


Above, the mean curve was digitised to capture the shape of the curve, 17 points were used.
Continue reading Fan controlled by humidity sensor – design technique

Arduino app to set DS1307 Real Time Clocks.

I use a number of implementations of the DS1307 or DS3231 Real Time Clock chip, preferably the latter these days as they are considerably more accurate and compatible with DS1307 code.

In some applications, it is necessary or sometimes just better to preset the clock before connecting it into the application, and the need arises to set the clock ‘stand alone’. The method I have used for this has been clumsy and not as accurate as one might want for the DS3231, so this article describes a new solution.


The solution uses an Arduino as the engine if you like. Above is an Arduino Pro, but a range of similar Arduinos would be equally suitable. ALso pictured are three RTCs, one connected to pins A2, A3, A4 and A5 providing GND, VCC, SDA and CLK respectively. Continue reading Arduino app to set DS1307 Real Time Clocks.