Studying the population dynamics of groups of organisms provides an example of how physics (nonlinear dynamics, ODEs, limit cycles, chaos, etc.) can be used to gain further insight into fundamental biological processes.
Goal: Maintain rotifer population in an algae culture in order to observe predator-prey dynamics between the two species.
Download pdf15ppt ASW Preparation
15ppt F Media preparation
Hatching Protocols
Culturing Protocols
Our algae was cultured in F media, so all cultures are essentially 100% F media, but the given percentage of algae represents the initial prey population.
Experiment 1: Predator-prey observation
Experiment 2: Light Variation
Experiment 3: Population variation
Experiment 4: Predator population variation
Experiment 5: Prey population variation
Modifications to shaking incubator:
With TEMT6000:
#include
#include
#include
//TMP36 Pin Variables
int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade with a
//500 mV offset to allow for negative temperatures
int servoPin = 6;
int RELAY1 = 9;
int lightSensor;
const int chipSelect = 8;
Servo servo;
// servo position (degrees)
int angle = 0;
/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
Serial.begin(9600); //Start the serial connection with the computer
//to view the result open the serial monitor
pinMode(RELAY1, OUTPUT);
servo.attach(servoPin);
Serial.print("Initializing SD card...");
// check for SD card
if (!SD.begin(chipSelect)){
Serial.println("SD card failed or not present");
return; }
Serial.println("SD card initialized");
}
void loop() // run over and over again
{
//getting the voltage reading from the temperature sensor
int reading = analogRead(sensorPin);
// converting that reading to voltage, for 3.3v arduino use 3.3
float voltage = reading * 5.0;
voltage /= 1024.0;
// print out the voltage
Serial.print(voltage); Serial.println(" volts");
// now print out the temperature
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((voltage - 500mV) times 100)
Serial.print(temperatureC); Serial.println(" degrees C");
if (temperatureC < 30) {
digitalWrite(RELAY1,HIGH);
} else {
digitalWrite(RELAY1,LOW);
}
// scan from 0 to 180 degrees
for(angle = 0; angle < 40; angle=angle+20)
{
servo.write(angle);
delay(300);
}
// now scan back from 180 to 0 degrees
for(angle = 40; angle > 0; angle=angle-20)
{
servo.write(angle);
delay(300);
}
// start string for datalogging
String tempdata = "";
String data1 = "";
String data2 = "";
String data3 = "";
// read in data from TEMT6000 and TMP36
lightSensor = analogRead(1);
tempdata += String(temperatureC);
data1 += String(lightSensor);
// convert to volts and lux
float volts = lightSensor * 3.3 / 1024.0;
float amps = volts / 10000; // across 10k resistor (on chip)
float lux = amps * 2000000;
data2 += String(volts);
data3 += String(lux);
// print output to serial monitor
//Serial.println("voltage:");
//Serial.println(volts);
//Serial.println("\n");
//Serial.println("lux:");
//Serial.println(lux);
//Serial.println("\n");
// open temperature sensor data file
File dataFile0 = SD.open("temp.txt", FILE_WRITE);
// write to file
if (dataFile0) {
dataFile0.println(tempdata);
dataFile0.println("\n");
dataFile0.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening temp.txt");
}
// open sensor data file
File dataFile1 = SD.open("sensor.txt", FILE_WRITE);
// write to file
if (dataFile1) {
dataFile1.println(data1);
dataFile1.println("\n");
dataFile1.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening sensor.txt");
}
// open voltage data file
File dataFile2 = SD.open("voltage.txt", FILE_WRITE);
// write to file
if (dataFile2) {
dataFile2.println(data2);
dataFile2.println("\n");
dataFile2.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening voltage.txt");
}
// open lux data file
File dataFile3 = SD.open("lux.txt", FILE_WRITE);
// write to file
if (dataFile3) {
dataFile3.println(data3);
dataFile3.println("\n");
dataFile3.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening lux.txt");
}
delay(300);
}
Without TEMT6000
#include
#include
//TMP36 Pin Variables
int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade with a
//500 mV offset to allow for negative temperatures
int RELAY1 = 9;
const int chipSelect = 8;
/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
Serial.begin(9600); //Start the serial connection with the computer
//to view the result open the serial monitor
pinMode(RELAY1, OUTPUT);
Serial.print("Initializing SD card...");
// check for SD card
if (!SD.begin(chipSelect)){
Serial.println("SD card failed or not present");
return; }
Serial.println("SD card initialized");
}
void loop() // run over and over again
{
//getting the voltage reading from the temperature sensor
int reading = analogRead(sensorPin);
// converting that reading to voltage, for 3.3v arduino use 3.3
float voltage = reading * 5.0;
voltage /= 1024.0;
// now print out the temperature
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((voltage - 500mV) times 100)
Serial.print(temperatureC); Serial.println(" degrees C");
if (temperatureC < 30) {
digitalWrite(RELAY1,HIGH);
} else {
digitalWrite(RELAY1,LOW);
}
// start string for datalogging
String tempdata = "";
// read in data from TMP36
tempdata += String(temperatureC);
// open temperature sensor data file
File dataFile0 = SD.open("temp.txt", FILE_WRITE);
// write to file
if (dataFile0) {
dataFile0.println(tempdata);
dataFile0.println("\n");
dataFile0.close();
Serial.print(tempdata);
Serial.println("\n");
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening temp.txt");
}
delay(3000);
}