Gabriella Levine

ongoing and past work
sensor networks

DJI WooKong flight controller manuals


1. How to charge the Lipo batteries : STEP_BY_STEP_INSTRUCTRIONS_CHARGING_LiPos_OCTOKONG

2. How to fly manual mode: DJI_octocopter_instructions_manual

3. How to fly DJI Wookong-m set an Auto mission: dji_groundstation_automission


The Bellflower Project

Technical Diagrams

The Bellflower Project will showcase the potential of sustainable energy sources. By engaging the public in a creative, non-institutional way, we are hoping to show (not tell) the NYU and larger community the benefits of energy harvesting. The Bellflower project is a series of small, public kinetic sculptures that run on solar power. Each “bellflower” biomimetically recreates an opening flower – five petals will slowly open as they collect solar energy, revealing a spiral of musical bars (like large xylophone bars). As the sculpture gathers energy, the bars begin to play, creating unique melodies and chords that vary depending on weather conditions and time of day. Ideally, the project would be embedded in an urban agriculture garden, promoting biodiversity while demonstrating the power of sustainable energy harvesting. Our goal is to aesthetically improve the quotidian life of the community, as well as potentially educating the public about environmentally responsible power consumption.


Transpiration is a data-driven, reactive projection in 240 Central Park South. It is demonstrative of the motion of the elevators through the elevator shafts, based on the flux of people in and out of the building. The data is collected using the security cameras deployed in the four elevators.

Romantic Lighting Sensor and Networked sensors

A wireless robotic locomotive doorbell surveillance camera

I started making a wireless doorbell that would make a phone ring

Perhaps the phone no longer requires 20 Hz at 48 to 90 volts AC because it doesn’t have those vintage brass bells but rather a buzzer with a piezo, but I couldn’t figure out how to get the right waveform – then the phone went missing. so… my doorbell is a number of layered moving servos activated by a joystick. There is a wireless camera attached to the top which plays back on a screen (or a computer if I go through a little unit (from GrassValley I have).

Jerky camera robot arm prototype:

Camera mounted:

Testing the servos:

Wirelessly controlling three servos with my joystick:

I used a joystick that I had previously hacked into, for the networked PONG game that is in the hall of ITP.

Here are some photos from the process:

How to get data on the internet without a computer

I did this using the Arduino ethernet shield.

Below is the script for the server that Arduino calls in its HTTP request.

The server has the following function: if there is data added to it through a GET request, it stores that data in a text file (called datalog.txt) that is also on the same server. That way my sensor data can be stored as a text file. Secondly, when the server is called with no request, it shows the text of the text file. This way, I can write a program to pull the data from that website and graph it (processing.js, perhaps… more to come later this week on that).

click here for a text file of the code in case it is not showing up correctly below

// put the name and path of the text file in a variable.
// this is the text file where we'll store the data:
$filename = 'datalog.txt';

//make sure the file is not empty:
if (file_exists($filename)) {
       // get the contents of the file
       // and put them in a variable called $fileContents:
       $fileContents = file_get_contents($filename);

       // if there is new data from the client, it'll
       // be in a request parameter called "data".
       if (isset($_REQUEST['data'])) {
               // append what the client sent as 'data' to
               // the variable holding the file contents:
               $fileContents = $fileContents . "\n". $_REQUEST['data'];
               // put the file contents back into the file
               // you're overwriting the whole file when you do this:
               file_put_contents($filename, $fileContents);
       } else {
               // there was no data sent in the request
               // so show the old stuff:
               echo $fileContents;

From the Arduino side, this is the code I use, for now, to append my text file. It is adapted from the example WebClient in the Ethernet library on Arduino.

I just had to enter my MAC address of the ethernet shield and the IP address of the server I am making the request to.

The next step will be to continually make requests as sensor data comes in, to have a legible CSV.

  Web client
 This sketch connects to a website (
 using an Arduino Wiznet Ethernet shield. 
 * Ethernet shield attached to pins 10, 11, 12, 13
 created 18 Dec 2009
 by David A. Mellis

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x03 };
IPAddress server(69,89,31,63); // Google

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // start the serial library:
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
  // give the Ethernet shield a second to initialize:

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    // Make a HTTP request:
    client.println("GET /understanding_networks/dataLogger.php?data=it_works_yay HTTP/1.1");
   // client.println("GET /understanding_networks/dataLogger.php?data=1233212321232123 HTTP/1.0");
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");

void loop()
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c =;

  // if the server's disconnected, stop the client:
  if (!client.connected()) {

    // do nothing forevermore:


more to come



Glacial ice melt from global warming has raised water levels, drowning buildings and transforming the landscape into a dynamic marine environment.

Swarm Behavior:
A decentralized swarm forms a city of autonomous agents replacing the idea of a traditional city with a dynamic mesh. Reliance on the swarm creates stability, self-organization and community.

SM_ART has migratory behaviors allowing agents to reposition themselves in order to avoid unstable conditions in the water. The water poses new threats to the sustainability of the habitat in the form of toxins (oil/nuclear waste), piracy, large animals and plastic debris. Avoiding these dangers allows SM_ART to be sustainable.

Carbon fixation processes are carried out by phytoplankton which live in the cellar of SM_ART. The waste is converted into structural material through the chemical reaction process.

Agents can move between network hosts and sub-networks creating new ideas of neighborhoods, cities and the permanence of place.

Through technological advances in self-regulatory systems SM_ART survives. SM_ART gathers solar and wave energy and converts it into electrical and metabolic energy (food growth). Complex waste disposal systems rely on the new green biotechnology.

Come join Emily Webster and Gabriella Levine, and live with the SM_ARTians!