Here, three high school students will report the full process of creating their own low-cost micro plate reader.
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Here, three high school students will report the full process of creating their own low-cost micro plate reader.
2341608864693_.pic.jpgworkingJPEG Image - 136.28 kB - 12/25/2020 at 02:52 |
|
|
9D3C0497-1ED3-445A-89C5-8015109BFFDF.jpegWorking togetherJPEG Image - 3.61 MB - 11/21/2020 at 06:50 |
|
|
We received financial support for our micro plate reader built project, and in order to test the ability for tardigrades in adapting extreme environments, we enhanced the function of our micro-plate reader to meet our goals. we modified the micro plate reader built based on the open source into an application-specific micro-plate reader that can simulate the atmospheric environment of Mars. The instrument enables us to test the stress resistance of Cyanobacteria in an environment to be as close as possible to the actual scene of Martian immigration.
Images below shows the final product of our augmented micro-plate reader.
on the top of the micro-plate reader, we added an incubation light that's suitable for Cyanobacteria growth, whenever we're testing the samples(the device is running), the light will be turned off automatically and turned back on when the reader is not running a program.
On each side of the device, we annexed two tubes for the instillation of nitrogen gas and the extraction of oxygen as we are creating a vacuum space for the samples. ( this is a big part of our project since there's no oxygen on the mars)
Another major adjustment we made is the change of the micro-plate carrier, the new steel capsule allows the samples being protected from outer space as well as keeping it inside a vacuum space.
Our focus of the day(week) is to fix minor mistakes in our code, which includes the Python program and Arduino program. The first major obstacle that came into our way is that the micro plate holder will incessantly bump the bumper without stoping and the second issue is that the position of the calibration point on the micro plate does not match the system's calibration coordinate.
Thin image shows our current progress with the Arduino code,
(Sorry for the late update) In the past few weeks, we've been working on adjusting the LED light and to implement the calibration of our micro-plate reader. We made an aluminum layer to shelter from external light source and augment the intensity of light inside the optical instrument. After we successfully achieved it, we moved our attention to the testing section( still working on it).
The image above documents the making process of the aluminum sheer, we used a double layer aluminum to conceal the inside and outside of optical instrument and attached both side to a double face adhesive tape.
These two picture shows how our wires are connected, and each serves a specific function to the main board.
We've been working on the LED light over the past few weeks and we finally made progress this time!
The LED light successfully turned bright after we tried multiple times. (In the first trial, the original ultra-violet light bulb broke, In the second trial, we made a mistake in assembling the light. )
In the process of Debugging, we learned that seemingly inconsequential things can lead to great failures, hence, we should always be careful in learning。
This image shows 2 types of LED with different light color.
We finished the manufacturing parts and moved to the programming section. The program to run the visual section of the spectrometer was developed by kpszym and mpatte on GitHub (https://github.com/brianchowlab/OSP). It is used to transfer the commend on the laptop to the spectrometer using python 2.7. We faced major challenges in restructuring the program because we are using a spectrometer of a different brand. Since we cannot reference the original library, we developed our own. After that, we run the code for the first time and start debugging. We had to use notepad++ to mass substitute predefined values in the original code.
Today was one of those grand assemble days, and one of the last ones. I believe we used all the different machines provided to us in the lab today to create, mold, drill, and transform different parts and pieces of our microplate. 3D printing, hole drilling, laser cutting, and fitting screws were all the fun we had today. Since we have finally assembled our final microplate reader, and only need to make a few changes and adjustments here and there, the next step will be more coding based rather than mechanical based. This piecemeal we are creating and assembling step by step every week is really helping us to learn more about the science world, mainly mechanically, but later we expect to be also chemistry and biology related too!
This week, we start to finish up the Optical assembly part of the microplate reader. While adding the LED to its stand, we designed a new way to fasten the belt to itself. After that, we managed to mount the optical part to the reader.
This week is the first week after the Chinese new year break, we continued with the construction of the x/y axis of the plate reader. we redesigned the joint that connects the belt and reprinted the 3D model of the bumper.
Today we mainly worked on fitting all the final versions of our models that we created, for instance, tightening our belts that control our X and Y axis again. Adding on, we continued working on our code that control the X and Y axis movements of the plate holder. For example, stopping when it hits the switch on the end of the track, and moving to the (0,0) position when activated. Along the way, we met quite a few difficulties such as short-circuiting, connecting the wrong wires with the Arduino board, and not finding the bugs in our codes. However, we were able to solve most of our issues in our code and looking forward to coding the LED lights next week!
Our Code:
// System Inialization Setup
String protocolString = "";
boolean protocolWait = false;
String parsedString = "";
int startIndex = 0;
String totalString = "";
String ledString = "";
unsigned long Timecount1;
unsigned long Durationcount1;
unsigned long Time1;
unsigned long Duration1;
unsigned long Timecount2;
unsigned long Durationcount2;
unsigned long Time2;
unsigned long Duration2;
unsigned Direction1;
unsigned Direction2;
int DIRCount1 = 0;
int DIRCount2 = 1;
const int DIRPin1 = 2;
const int STEPPin1 = 3;
const int ENNPin1 = 8;
const int DIRPin2 = 4;
const int STEPPin2 = 7;
const int ES1 = 12;
const int ES2 = 13;
int STEPState1 = LOW;
int DIRState1 = HIGH;
int STEPState2 = LOW;
int DIRState2 = HIGH;
unsigned int XPosition;
unsigned int YPosition;
void initOutput() {
//digitalWrite(ENNpin,HIGH); // Disable motors
//We are going to overwrite the Timer1 to use the stepper motors
// STEPPER MOTORS INITIALIZATION
// TIMER1 CTC MODE
TCCR1B &= ~(1<<WGM13);
TCCR1B |= (1<<WGM12);
TCCR1A &= ~(1<<WGM11);
TCCR1A &= ~(1<<WGM10);
// output mode = 00 (disconnected)
TCCR1A &= ~(3<<COM1A0);
TCCR1A &= ~(3<<COM1B0);
// Set the timer pre-scaler
// Generally we use a divider of 8, resulting in a 2MHz timer on 16MHz CPU
TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (2<<CS10);
//OCR1A = 125; // 16Khz
//OCR1A = 100; // 20Khz
OCR1A = 250; // 8Khz
TCNT1 = 0;
TIMSK1 |= (1<<OCIE1A); // Enable Timer1 interrupt
//digitalWrite(ENNpin, LOW); // Enable stepper drivers
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB
}
pinMode(DIRPin1, OUTPUT);
pinMode(STEPPin1, OUTPUT);
pinMode(DIRPin2, OUTPUT);
pinMode(STEPPin2, OUTPUT);
pinMode(ENNPin1, OUTPUT);
pinMode(ES1, INPUT);
pinMode(ES2, INPUT);
digitalWrite(DIRPin1, HIGH);
digitalWrite(STEPPin1, LOW);
digitalWrite(DIRPin2, LOW);
digitalWrite(STEPPin2, HIGH);
digitalWrite(ENNPin1, LOW);
XPosition = 1;
YPosition = 1;
initOutput();
while (HIGH != digitalRead(ES1) && HIGH != digitalRead(ES2)) {
digitalWrite (DIRPin1, LOW);
if (STEPState1 == LOW) {
STEPState1 = HIGH;
delayMicroseconds(100);
} else {
STEPState1 = LOW;
delayMicroseconds(100);
}
digitalWrite (DIRPin2, LOW);
if (STEPState1 == LOW) {
STEPState2 = HIGH;
delayMicroseconds(100);
} else {
STEPState2 = LOW;
delayMicroseconds(100);
}
XPosition = 0;
YPosition = 0;
}
}
void loop() {
// Serial.println("pass");
if (Serial.available() > 0) {
protocolString = Serial.readString();
Serial.println(protocolString);
for (int i = 0; i <= protocolString.length(); i++){ // Analyze command string one character at a time
parsedString...
As Spring Break begins, we have again several consistent days where we can come everyday to the lab. Yesterday and today are two quite busy ones, as we worked on several different aspects of this project, the 3D model parts, opto-mechanical parts, and also parts that needs to be laser cutted and fitted together for the optical areas of the microplate reader. We also designed and 3D printed several appropriate models used to place the switches along the X and Y axis, these are used to make the plate holder stop when it hits the extremes of the axes.
Adding on, we also used CNC to drill holes that are missing in the kits we purchased for the opto-mechanical parts.
Last but not least, we also worked drawing a few figures on Inkscape in order to laser cut them and fit all the optical components together. We kept redesigning these components since we had to constantly test out new ones, to see whether they worked better than the failed prototypes we designed earlier.
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates
http://labmedical.en.hisupplier.com/product-1196543-Microplate-Culture-Plate.html
Hi, here is a link to the image of a "Micro Plate".
They are used as small test tubes in modern enzyme-linked immunosorbent assay (ELISA).It is a fundamental tool in modern medical testing.