Igem Tec 2016



Our sensor measures transformation efficience (qualitative) and protein production efficiency (quantitative) by analyzing the surface of a sample petri dish and comparing it to a successful test. Since there exists no unit to measure how effective the transformation was, evaluating our protein expression is our main aim.

We transformed Myxobacteria to produce Reflectin, a protein able to reflect light. Parting from the fact that there are sensors that detect the amount of light that is emitted from a source; the sensor was developed based on Myxobacteria’s Reflectin production.

The sensor runs a scan across the surface to map the regions in which colonies deployed as well as the empty spaces. The LEDs (light source) light up the scanned surface, where Reflectin will make honour to its name and reflect the light. It is important to mention that red leds are useful because they fit the sensitivity of photoresistors. Both detector and source of light move at the same time, so that the light reflected is instantly detected. It is also relevant to mention that the sensor must run a scan at determined lapses to evaluate the evolution of expression, since the process of transformation of the cell and its production of the protein are not instantaneous (changes on the surface are slow) and depend on incubation time and conditions.

How does it work?

Photoresistors change their resistance according to the amount of light: the greater the light, the smaller the resistance. Through a voltage divider, we can measure the value of resistance in terms of electrical voltage. Voltage can be measured by the microcontroller of the Arduino.

Reflectin will reflect the light coming from the light source; which is going to be detected by the photoresistor. This will produce a drop in the resistance of the photoresistor, which will result in a higher voltage measured due to the fact that the voltage is actually measured by a constant resistor, and due to the voltage divider it be a higher voltage.

Each photoresistor will give us, after the voltage divider, a level of voltage that is going to be written into a .txt file. This way, we are going to map an X and Y surface; in which each coordinate is a voltage value.

The .txt file will be uploaded to a server, and will be plotted. Each X value is a photoresistor; and the Y value is the value across the petri dish.

Relevance in the project

The measurement represents a very important part of our project because it provides us with useful data to introduce in a model which then gives us predictions about the expression of our interest protein. This predictions can be taken into consideration when we develop a risk assessment process to know the impact of the project on a larger scale.

Results and how to interpret

Each line of photoresistors represents a segment of the sample. When graphed and lined together, they will map the surface of the petri dish and the contents. If certain point of the coordinate presents a high value, then it means that there is Reflectin is present.

DIY Sensor - Materials

Component Units
Arduino UNO 1
USB cable type B (for the Arduino) 1
Photoresistors 11
100kΩ resistor 3
Multiplexor 74153 2
H Bridge L293d 1
Red LED 4
DVD drive 1
5V Power Source 1
AWG 22 wire 3 meters
Soldering iron 1
Solder 60% tin and 40% lead 1 meter
Perfboard 20x20 cm

Due to the fact that the Arduino UNO has only six ADC channels, we need to measure the value of each of the photoresistors. In order to achieve this, we use a multiplexor to select each photoresistor one by one. After this, we need a circuit to control the scanning system. We use a DVD drive and place the sensors so that they scan line by line as shown in the following picture.

Diagram showing how the sensor scans the data

A light source is used to illuminate the surface scanned. The reflectin will act reflecting the light emitted by red LEDs. After all the surface is scanned, a .txt file is created so that the results can be uploaded to a server. Red leds are useful because they fall well into the sensitivity of the photoresistors.

Each photoresistor is calibrated using a BH1750 light sensor, which has a 16-bit resolution. The light sensor is used as a reference against the same light source and inclination. The BH1750 has its output expressed in lux.

In order to calibrate each sensor, an LED was set. It is written the maximum value sensed by the photoresistor and the maximum value measured by the BH1750. This produces a correspondence of values.

BH1750 light sensor characteristic curves.
Sensitivity of the photoresistors.

Each line of photoresistors represents a segment of the sample. When graphed and lined together, they will map the surface of the petri dish and the contents. If certain point of the coordinate presents a high value, then it means that there is reflectin is present.

Conceptual Development

The sensor can be broken into six stages.

  • 1. Sensing stage. – Light coming from a LED is directed to the surface. The proteins reflect part of the light. The array of sensors detect the reflected light.
  • 2. Acquisition algorithm. – The data from the sensors is entered to the MCU.
  • 3. Conversion stage. - Here, the continuous analog signal from each photoresistor is converted to a digital discrete value using the internal ADC of the MCU. These values are readable by computers.
  • 4. Packet conversion. - The data from each scan is converted to a packet in .csv file format.
  • 5. Server uploading. - The packets are uploaded to the server.
  • 6. Data plotting. – The server plots the data of each packet so that is graphically understandable.
Scanning flowchart


ADC. - Analog to Digital Converter. A device that converts a continuous analog signal into digital discrete signal readable by a microcontroller.

MCU. - Microcontroller. A computer on an integrated circuit.

Sensor Array Scanner

The sensor works like an office scanner. The scanner part is composed by 10 photoresistors aligned so that they cover the Y axis of the sample. They are in series with a 100kΩ resistor. Using a voltage divider, it is obtained the value that corresponds to a determined level of light. Using a 16-bit resolution optical sensor, the value of the photoresistor is proportionally assigned to the value obtained with the optical sensor. This way, the sensors are calibrated. Because the optical sensor already has a curve that outputs the results in lumens, we can determine the amount of light using the photoresistors.

Why using photoresistors instead of an optical sensor? The answer is that photoresistors are affordable and easy to buy in Mexico; as well as accessible in any country in the world since they are easy to find and acquire. Also, the sensitivity can be adjusted using a voltage divider using the correct resistor. This way, the sensor can be adjusted with more sensitivity to a big or small amount of light.

The ADC used is inside the Arduino UNO, which has an ATmega328P. This ADC has a resolution of 10 bits, which in total gives us 1024 values for the sensors. (Atmel Corporation, 2015). After each value of the photoresistors is stored, the sensor will move forward to scan the next section.

The data is transmitted using the Serial Port emulated by the Arduino to Processing, a program that will create a .txt file which will store all the values.

After each file is created, a newer file with newer data will replace the old one. Each file represents the state of the myxobacteria at certain hour of the process.

Finally, the data is periodically uploaded to a server.

The periodicity of the scanning can be readjusted so that the scanning process occurs every 10 minutes, 20 minutes, 30 minutes and so forth.


An external website has been developed to allow the uploading and visualization of data scanned by this sensor. The server’s front-end is made in the state-of-the-art bootstrap framework, while the back-end relies on the robust Laravel Php engine. The website is hosted at a team member’s server and can be found at the address

The uploading is reserved for registered users, to avoid any unauthorized person to upload random data as if it were legitimate scans. Uploads can be configured to be a one-shot or a periodic re-upload in order to automatically upload new data gathered by the sensor. A small text-based console shows color-coded feedback to the uploader, as well as provides upload logs for the current session.

Screenshot of the server's main menu
Upload view
Scan display view

Guests, and registered users, are able to view the results of the scans in the other section. Scans are both shown as raw data (numbers obtained from each sensor in a grid) and plotted as a 3D surface. Each scan is automatically tagged with the date and time of its upload.