Circuit Design

(1) Layer Functions:

To read more about active shielding, please see the document here.

(2) CDC Board:

download PCB design file

We designed a PCB board which uses the FDC1004 chip to convert the capacitance data sensed by the taxel to digital data. FDC1004 is a high-resolution, 4-channel capacitance-to-digital converter for implementing capacitive sensing solutions. Each channel has a full scale range of 15pF. FDC1004 also includes shield drives for sensor shields, which can reduce EMI (Electromagnetic Interference) and help focus the sensing direction of a capacitive sensor. Furthermore, it features an I2C interface for an MCU.

buy FDC1004 here   see document for FDC1004 here

We used the PCB boards to convert the data sensed by 4 taxels. The boards transfers data to the Arduino board through the I2C protocol.

2. Data Communication via Daisy Chain Connections

(1) Daisy Chain Implementation in I2C:

We used a daisy chain structure to connect multiple I2C devices together on the same bus. Each device has a unique address, and they communicate with the micro controller over a shared set of wires. (SCL for clock, SDA for data)

(2) TCA9548A (8-channel I2C Switch):

The TCA9548A multiplexer has 8 bidirectional translating switches that can be controlled through the I2C bus. The SCL/SDA upstream pair fans out to eight downstream channels. Any individual SCn/SDn channel or combination of channels can be selected, which determines the contents of the programmable control register. These downstream channels can be used to resolve I2C subordinate address conflicts.

buy TCA9548A here   see document for TCA9548A here

We used a TCA9548A multiplexer to read the data for taxels in one link, then use I2C communication to connect the multiplexers of each link in the series. An arduino board is also connected to this I2C bus, so it can read the data of each taxel by specifiying an I2C address and channel.

(3) I2C bus connection

In order to facilitate the multiplexers of different links to access the I2C bus, we designed a PCB board and used molex connectors to connect the boards together.

download PCB design file   buy molex connector here

(4) Arduino Reads data and Publishes it to ROS

From arduino side, we read data like this:

tcaselect(0, TCAADDR1);  //scl0 sda0

c[0] = gettaxelreading( ONEB );

Here, we first select the I2C address on the TCA9548A which is determined by the voltage level of the A2A1A0 pin, and specify which channel data on the TCA9548A needs to be read (channel 0 in this case). Then, We specify the number of the pin (ONEB in this case) on the FDC1004 chip that we need to read and read the data into the c[] array.

The complete code can be viewed here

3. Skin Maintenance