Team 13

RTEM - Weight Scale

Yiran Tian, Tzerwei Lai



1. Project Description


The aim of this project is to test the weight of the object. An ADC board were constructed to convert the analogue signals from the force sensing resistor and convert these to digital signals that can be read by a Raspberry Pi. With coding in Linux system, the diagram of data plotted on the screen.


2. Hardware


The main components of the weight scale are ADC7705 and Interlink Electronics Force Sensing Resistor. The most significant parts of the project we defined were digital part which contains ADC and Raspberry Pi and analogue part where the resistor and scale pan is.


2.1 Analogue Part


2.1.1 Force-to-Voltage Conversion Circuit


A voltage divider circuit was chosen for the force sensing resistor because it is the easiest force-to-voltage conversion. The output can be expressed by the equation:

 Vout= \frac{Rm \times VCC}{Rm+Rfsr}

According to the datasheet, the Rm and Vout relation is also determined as follow:


Figure 1: Voltage Divider Relationship (5v VCC)[i]

Because the ADC775 input range is from 0-2.5v, the Rm finally decided was 3k and the power supply to the voltage divider was 5v. To improve the voltage divider performance, a voltage follower was used. The AMP chosen was LM324, and the circuit is shown below:


Figure 2: Voltage Divider Circuit Design


2.1.2 Scale Pan


To measure the weigh, a pan should be created to place the measuring target. The scale pan we made is as follow:


Figure 3: Wight Scale Pan

Three holes were drain to install footholds, and the force sensing resistor was place under one of the footholds. Restricted by the limited development time, only one sensor was used in the project. To use one sensor to measure the weight, target should be placed on the gravity focus of the pan, and the pressure on each foothold is roughly equal to 1/3 of the target weight. So the design on the first stage is to measure the force on one of the three footholds and calculate to get the weight of the target.


2.1.3 Connection


The Analogue part has basic connection, respectively VCC, AIN+ and GND. The detail of AIN+ connection will discuss later in 2.2.1 section. As discussed previous, the VCC chosen was 5v, and the 5v voltage supply can be found on the AD7705 EAGLE board[ii]


2.2 Digital Part


Digital part contains the ADC7705 circuit and Raspberry Pi. ADC7705 convert the output voltage of the analogue part which including weight information into digital signal, and send to Raspberry Pi through SPI communication interface. Raspberry Pi will receive the ADC data by thread and display the target actual weight in gram with its screen.


2.2.1 ADC7705 Connection


The ADC7705 has 2 differential input channels with 16bits output. After setup, the default input of the ADC is channel 1 which is SCV2 on the board[iii]. According to the conclusion above, the measuring range is from 0v to around 2v, so the minus differential input chosen was 1.25v. By using a voltage divider circuit, 1.25v voltage supply can be easily generated from MPC1525 2.5v output pin. The circuit is shown as below:


Figure 4: 1.25v generate circuit

Besides, the ADC can be attached to Raspberry Pi by using EAGLE board. No more attention needs to be paid on this part.


3. Software


All the information the Raspberry Pi get is from AD7705. And the communication interface with AD7705 is SPI. Corresponding device can be found in /dev/spidev0.0 in Linux.

After initialise the SPI interface, adcreader->start() function is called to start a new thread which is design to read the ADC output. While the thread running, data is written into the ring buffer, and every 20ms, the timer event will trigger to plot all the data collected during the previous 20ms on the screen.

The whole code can be found in:


4. Test and Result


Few tests had done to verification the design. The pan was putted on a flat platform and connects to the ADC. The exactly gravity focus is hard to decide so the measuring target was put upon the foothold which press the sensor. Two bottles of water were chosen as weight reference. One is Sprite 500ml bottle; another is Coca cola 330ml can. The weight of those two should be around respectively 500g and 330g. The test and result is shown as follow:



Figure 5: 500ml Sprite bottle



Figure 6: 500ml Sprite reading, about 480g



Figure 7: 330ml Coco-Cola Can



Figure 8: 330ml Coco-Cola Can reading, about 310g

A demo video can be found in: 


5. Improvement


5.1 Hardware


Since time is limit, we only use one force sensing resistor to examine our value which make us to put object close to the edge and hard to detect the accurate value. In order to make data more precise, all three columns should connect force sensing resistor. As the AD obtains statistics which get from AIN1 to AIN3, the accurate weight can be measure from this strategy.


5.2 Software


In the diagram, the left side of thermometer haven’t been used to detect the weight. With using it written as a code to indicate the value of the weight, we can point the precise weight to reduce the human error when reading the data.







[i] INTERLINK ELECTRONICS, Interlink Electronics FSR Force Sensing Resistors [Online]. INTERLINK ELECTRONICS. Available from: [Accessed March 30, 2014].

[ii] Bernd Porr, 2013, rpi_ad7705 [Online]. Available from: [Accessed March 30, 2014].

[iii] ANALOG DEVICES, 2006, 3V/5V, 1mW, 2-/3-Channel, 16Bit, Sigma-Delta ADCs [Online]. ANALOG DEVICES. Available from: [Accessed March 30, 2014].