The Panamanian golden frog (Atelopus zeteki) is critically endangered. It may be extinct in the wild--it was last seen in the highlands of Panama in 2008. The zoological community collected a group of golden frogs as populations started to decline. Now they may only be alive in the Amphibian Ark--a transnational network of zoos, universities, and private institutions.
The Golden Frog is now possibly extinct in the wild largely because of the chytrid fungus--a deadly disease. Just before chytrid hit the highlands of Panama, the zoological community collected them and launched a breeding program. The Maryland Zoo and the National Aquarium in Baltimore have produced thousands of Golden Frogs, rescuing this species from the brink of extinction.
The breeding program has been almost too successful. Right now there are too many Golden Frogs, and not enough space in zoos. Plans are being laid to reintroduce the Golden Frog into the wilds of Panama, but since the chtrid fungus is still in the environment these reintroduction programs are proceeding cautiously.
This art work, "A Utopia for the Golden Frog", is a demonstration piece to show that individual "citizen scientists" are capable of caring for this species using retrofit everyday artifacts. This climate controlled and biosecure tank can only hold a few adult frogs. Since it does not contain water the frogs will not breed. Building on the spirit of Do-It-Yourself Biology, a grassroots scientific movement, this installation is meant to illustrate the possibilities of increasing the carrying capacity of the amphibian conservation network amidst a large scale mass extinction event.
The Utopia for the Golden Frog of Panama is currently on display at Proteus Gowanus, an art gallery in Brooklyn, New York. This installation is on display next to tanks of Xenopus laevis, another species of frog that is indirectly implicated in driving the Golden Frog, and many other amphibians, extinct. Xenopus can carry the pathogenic chytrid fungus in its skin without apparent symptoms. Initially, starting in the 1930s, Xenopus was transported around the world for use as a pregnancy test. Injecting urine from pregnant humans into Xenopus makes it ovulate. Xenopus is also common in the pet trade, sold at many corner stores in America and abroad. Many other organisms, like waterfowl and humans who don't wash their boots, can also play a role in transporting the chytrid fungus. But, the Xenopus Pregnancy Test is believed to be the original route for transporting this deadly disease around the world.
I try to keep my code well commented, but if you need any clarification please feel free to email me @ graysonearle@gmail.com.
The equipment you'll need:
The onboard computer is an
Arduino connected to an
LCD screen.
A
temperature and humidity sensor, and two
relays which control the power to the cooling mechanism in the fridge and the lights inside (which generate a slight bit of heat).
As for the web server atop the fridge, this is optional, but allows one to graph the temperature/humidity data over time, and have real time monitoring in case of a power failure, assuming the internet connection remains active.
You'll need a laptop and
Processing (a free program), as well as a webcam, which can be purchased for under $10 on eBay (but try to recycle one, they are everywhere). For those more familiar with Processing, note that you need to install edtftpj, an FTP library, in order for this to work. I've zipped it all up for the beginners, download it
here.
/* GOLDEN FROG UTOPIA ARDUINO SOURCE */
//DHT STUFF
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
// temp
#define MINTEMP 68;
#define MAXTEMP 73;
//LCD STUFF
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
byte degree[8] = {
0b01110,
0b01010,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int scrollStage = 0;
void setup() {
// set up serial communication
Serial.begin(9600);
// set up custom characters
lcd.createChar(2, heart);
lcd.createChar(1, degree);
// set up DHT device
dht.begin();
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print the title
lcd.setCursor(0, 0);
lcd.print(" UTOPIA");
lcd.setCursor(0, 1);
lcd.print("FOR THE GOLDEN FROG");
// print the heart
lcd.write(2);
// activate pins for power tails
pinMode(3, OUTPUT); // for lights
pinMode(4, OUTPUT); // for fridge
}
void loop() {
// read humidity and temperature
float h = dht.readHumidity();
float tempC = dht.readTemperature();
// convert to Fahrenheit
float t = tempC * 1.8 + 32;
//set the cursor (x,y) starting at 0
// print temp data
lcd.setCursor(0, 2);
lcd.print("Temperature:");
lcd.print(t);
lcd.write(1);
lcd.print("F");
// print humidity data
lcd.setCursor(0, 3);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print("%");
// temperature management via powertail
// temp is 20 - 22.8 in C or 68 to 73 in F
// FRIDGE
if(t >= 71) {
digitalWrite(4, HIGH); // fridge ON
}
if(t < 69) {
digitalWrite(4, LOW); // fridge OFF
}
// LIGHTS
if(t >= 74) {
digitalWrite(3, LOW); // lights OFF
} else {
digitalWrite(3, HIGH);// lights ON
}
// send the data to the computer for web upload
Serial.println(t);
}
/* GOLDEN FROG UTOPIA PROCESSING SOURCE */
// Reading Temp/Humid stuff
import processing.serial.*;
// webcam stuff
import processing.video.*;
Capture cam;
// Serial recieving stuff
int lf = 10; // Linefeed in ASCII
String myString = "71.1 90";
Serial myPort; // Serial port you are using
float num;
// FTP stuff
FTPClient ftp; // Declare a new FTPClient
String[] files; // Declare an array to hold directory listings
void setup ()
{
String[] devices = Capture.list();
println(devices);
frameRate(1);
cam = new Capture(this, 640, 480,devices[3]);
// arduino serial stuff
myPort = new Serial(this, Serial.list()[0], 9600); // set first open serial as our connection
myPort.clear(); // clear it (?)
}
void draw ()
{
// go through the processes in order
snapPhoto();
checkSerial();
makeFile();
uploadFile();
myPort.clear();
}
void snapPhoto() {
if (cam.available() == true) {
cam.read();
// you can display the image with the below code, but it's faster to just save it
// image(cam, 0, 0);
cam.save("cam_1.jpg");
}
}
void checkSerial(){
// Receive STUFF
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString); // Prints String
//num=float(myString); // Converts and prints float
//println(num);
}
}
}
void makeFile() {
// this next line is just for testing..
//String words = myString;
// split the words at a space, fills array
String[] list = split(myString, " ");
// create new string array
String[] output = new String[1];
// change the first element in the array just add the two strings with a <BR>
output[0] = "<h1>Temperature:</h1> " + list[0] + "°F<BR>" + "<h1>Humidity:</h1> " + list[1] + "%";
// println(output);
// save
saveStrings("temp.html", output);
}
void uploadFile() {
try
{
// set up a new ftp client
ftp = new FTPClient();
ftp.setRemoteHost("YOUR FTP INFO HERE"); // ie. ftp.site.com
// set up listener
FTPMessageCollector listener = new FTPMessageCollector();
ftp.setMessageListener(listener);
// connect to the ftp client
println ("Connecting");
ftp.connect();
// login to the ftp client
ftp.login("FTP ACCOUNT", "PASS");
// set up in passive mode
ftp.setConnectMode(FTPConnectMode.PASV);
// set up for ASCII transfers
ftp.setType(FTPTransferType.ASCII);
/* get the directory contents and print it to console
println ("Directory before put:");
files = ftp.dir(".", true);
for (int i = 0; i < files.length; i++)
{
println (i+" "+files[i]);
} */
// copy ASCII file to server and overwrite the existing file
println ("Putting file");
ftp.put("PATH/TO/temp.html",
"temp.html", false); // source file, dest. file
ftp.setType(FTPTransferType.BINARY);
ftp.put("PATH/TO/cam_1.jpg",
"cam_1.jpg", false); // source file, dest. file
// Shut down client
ftp.quit();
// Print out the listener messages
String messages = listener.getLog();
println ("Listener log:");
// End message - if you get to here it must have worked
println(messages);
}
catch (Exception e)
{
//Print out the type of error
println("Error "+e);
}
}
Eben Kirksey earned his Ph.D. from the University of California-Santa Cruz and is currently a Mellon Fellow and Visiting Assistant Professor at the CUNY Graduate Center in New York City. His first book, Freedom in Entangled Worlds: West Papua and the Architecture of Global Power, will be published by Duke University Press in April 2012.
Grayson Earle is an MFA candidate at Hunter College working with emerging technology as it relates to art. His work has been featured in galleries around the city including 3LD in Manhattan.
graysonearle@gmail.com
Michael Khadavi is a web developer and an ecological designer who
earned a B.A. in Anthropology from City University of New York-Queens
College in 2008. As the Director of the Amphibian Steward Network, of
Tree Walkers International, he conducted a study of the chytrid fungus
in private poison dart frog collections.