Chinese AD8307 power measurement module #3

At Chinese AD8307 power measurement module #2 I concluded that the modified AD8307 was useful on HF, and through to 54MHz depending on accuracy requirements.

This article looks at combining the AD8307 module with a display option based on an Arduino Nano.


Above is a demonstration of the display prototype. The module in the foreground is an Arduino Nano (~$6), and behind it a 16×2 LCD with I2C module (combined, ~$4). The Android tablet is connected to the Nano using a OTG cable (~$1) and is logging the measurements (optional) and powering the equipment. The red and black clips are connected to a power supply to simulate the voltage from the AD8307. The same configuration should work with any Arduino phone or tablet if it supports OTG.

Features of the Nano for this task:

  • on-board regulator, and can be powered by 8-15V (eg an external battery) or 5V via the USB connector (eg power pack, 5V USB Power Bank);
  • supplies 5V for the AD8307 module;
  • provides for A/D conversion and flexible display presentation (here a bar graph and dBm figure; and
  • software developed in the free Arduino IDE using freely available library modules.

I should note that this prototype uses a ‘true’ Nano, it contains a FTDI chip for the USB interface. In their inimitable style, the Chinese are producing pretend copies that use other USB chips that may require special drivers and may not work with some platforms (eg the Android above). Don’t believe their claims, check the pics of the underside that the chip has sufficient legs.


Note that the Nano has a design fault, the FTDI Test pin has been left floating which can cause unreliability when initialising. A small dob of solder to bridge it to the AGND pin (see above) solves the reliability issue caused by the floating pin. The Chinese being the ultimate copyists faithfully copy this defect… so most clones that use the FTDI chip will have the problem.

The I2C module is described at I2C – LCD interface.

A 10kΩ resistor was soldered across the module output pins, and the module recalibrated for intercept -90dBm and slope 10mV/dB. This results in a maximum voltage of 1.1V (the ADC reference voltage) for -90+1.1/0.010=20dBm (just above the AD8307 maximum).

Code for the prototype is very simple, and limited only by imagination.

Here is the code.

//AD8307 power / voltage / current meter
//Owen Duffy 2016/05/11

#define VREF 1.1
#define AVG 5
#define INTERCEPT -90
#define SLOPE 0.010

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <LcdBarGraphX.h>

byte lcdNumCols=16;
int sensorPin=A0; // select the input pin for the AD8307
unsigned AdcAccumulator; // variable to accumulate the value coming from the sensor
float vin;
float rt;
float dbm;
int i;
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);  // Set the LCD I2C address
LcdBarGraphX lbg(&lcd,lcdNumCols);

void setup(){
  while (!Serial){;} // wait for serial port to connect. Needed for Leonardo only

void loop(){
    //read the value from the AD8307:
  //calculate average vin
  lbg.drawValue((vin-0.1)/(VREF-0.1)*50,48);//2.0dB per step
  // Print a message to the LCD.
  lcd.print("Power: ");
  lcd.print(" dBm     ");


You will need the LcdBarGraphX library which is available on Git. This is a fork of the library and it contains some format ‘improvements’.


Above is a live test of the system. The green 18650 Power Bank supplies 5V via the USB cable to the Nano which in turn powers the display and AD8307 module.


Above is a close up of the display with bar graph on the top line (-80-116dBm) and power indicated in dBm. If a computer / tablet etc were connected to the USB port instead of the Power Bank, it would power the system and receive meter readings every second or so.


  • The prototype is a proof of concept to a low cost and simple RF power meter.
  • Implementation will include some ‘maker’ activity which may interest some hams.
  • Rework of the AD8307 module is the most technically challenge task, the rest is stuff the kids at school do with robotics hardware.