Hello,
I would like to build a turbidimeter to check the growth of bacteria since I don't have one in the lab. I have seen this project but I don't like the sensor because it is too big and must be immersed in the solution (which would contaminate the sample).
I have seen this one, which is about a spectrophotometer. Actually it would be even better but it is an overkill.
I am looking for an instrument where I can stick a 15 mL Falcon tube and measure the reduction of light intensity from a light source.
What emitter and sensor would you recommend? something I can buy from amazon, easy peasy.
Thank you
TCS3200
Sorry a very long url from google but show the use of the sensor possible.
Thank you, it looks very interesting!
https://www.amazon.de/s?k=TCS3200&ref=nb_sb_noss_2
Just an addendum, if I place a LED at the other side of a cuvette, would the TCS230 Color Sensor be used to sense the light intensity reduction?
Probably. Try it and let us know.
Conventional turbidity measurements are usually done by measuring light scattering, rather than absorbance. The detector is mounted 90 degrees away from the light source. But either method can be used to monitor bacterial growth in solution.
I would use an LED for the light source (with a constant current source to limit the current, for stability) and the TSL2591 as the detector.
I imagine a rectangular block with a hole drilled in it to fit the sample tube, and two holes perpendicular to the tube and to each other (for the light source and detector) would work well.
I have plugged the color sensor to a Leonardo following this scheme and ran this:
#include "Arduino.h"
#define S0 4 // purple
#define S1 5 // brown
#define S2 7 // orange
#define S3 6 // yellow
#define sensorOut 8 // green
// 5v = red, GRD = white
int redFreq = 0;
int greenFreq = 0;
int blueFreq = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// color
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
Serial.begin(9600);
}
void loop() {
// read red
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
redFreq = pulseIn(sensorOut, LOW);
Serial.print("R = ");
Serial.print(redFreq);
delay(100);
// read green
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
greenFreq = pulseIn(sensorOut, LOW);
Serial.print("G = ");
Serial.print(greenFreq);
delay(100);
// read blue
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
blueFreq = pulseIn(sensorOut, LOW);
Serial.print("B = ");
Serial.print(blueFreq);
delay(100);
}
but nothing happens. When I open the serial terminal (shouldn't it open by itself), it remains empty...
It is a problem of hardware or sketch?
The tutorial was designed for the Uno. You may need to change some pins for the Leonardo.
Make sure that you can run the Blink program on the Leonardo, and use Serial.print() before starting a complex project.
In particular, after Serial.begin(), you should add this line:
while (!Serial); //wait for connection with host PC to be established
shouldn't it open by itself
No.
Do you have the Serial monitor set to 9600 bps? (I prefer to use 115200, gives much faster communication).
Further on this, I tried with this blink sketch:
#include "Arduino.h"
void setup()
{
// initialize LED digital pin as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// blink 3 times
for (int i=1; i=3; i++) {
digitalWrite(LED_BUILTIN, HIGH); // ON
delay(100);
digitalWrite(LED_BUILTIN, LOW); // OFF
delay(100);
}
// keep off
delay(150);
// blink once
digitalWrite(LED_BUILTIN, HIGH); // ON
delay(250);
digitalWrite(LED_BUILTIN, LOW); // OFF
delay(250);
}
Building it did not give any error, also it was uploaded into Leonardo with no problems, but it does not blink. Did I forget something?
How does it look? Always on I guess?
One thing you forgot your eyes are not as fast as an Arduino... a sustained 0.1s on/0.1s off sequence (do have a good look at your for loop, there are two errors in there) will look as constant on.
No, the problem is that there is nothing at all. The 50 ms might have been too fast, but the 250 I could see it properly in previous tests.
for (int i=1; i=3; i++) {
could this be a clue?
I am looking for an instrument where I can stick a 15 mL Falcon tube and measure the reduction of light intensity from a light source.
Turbidimetry measures the cloudiness or turbidity of a solution. As demonstrated in Fig. 17.4B, the photodetector is placed such that it is in direct line with the incident light and the solution, usually referred to as either a 0° or 180° angle. The light source should emit a wavelength in the near ultraviolet range (290–410 nm).
https://www.sciencedirect.com/topics/medicine-and-dentistry/turbidimetry
Now UV leds are easy - but UV detectors not so. As a suitable compromise I'd suggest a blue LED and a silicon photodiode as the sensor.
Receive wavelength Range (nM) 400-1000
I have a circuit here you could use Operational Amplifiers tutorial: comments and questions here please - General Electronics - Arduino Forum post #13.
You can use a square wave (led on / off / on) to reduce the effect of ambient light on your tests.
Needs a bit of engineering - maybe a cardboard tube to hold the LED and photodiode.
Have a look at this thread also Building a Tubidity meter - General Electronics - Arduino Forum
Thank you for the links, but first I need to load the firmware. The hint is that for (int i=1; i=3; i++) {
only runs only once? But it is inside void loop(), hence that should be already an infinite loop. Or should I use something like:
do {
Block of statements;
}
while(1);
for (int i=1; i=3; i++) {
says: set i = 1; set i=3; increment i.
you dont have a condition for the loop to end. should you have i<=3?
This is an infinite loop:
for (int i=1; i=3; i++) {
}
This is a loop that runs once or never, honestly not sure, I think it's never:
for (int i=1; i==3; i++) {
}
This is a loop that runs two times, then quits:
for (int i=1; i<3; i++) {
}
This way it runs three times:
for (int i=0; i<3; i++) {
}
This way it also runs three times but the value of iterator i is one higher, so if you're working with arrays this method can land you in deep trouble:
for (int i=1; i<=3; i++) {
}
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.