Sign In SIGN UP UPGRADE

Arduino + Analog Light Sensor

Analog Light Sensor splash image

Getting started

Analog Light Sensors are a little bit more responsive and smooth than their digital counterparts. The GA1AS202WP from Adafruit is a great little analog light sensor. Hook it up to your Arduino and grab some of that data!

Materials

If you're going to use the Node.js route, you do not need an internet shield — just a USB connection from your Arduino to your computer.

Analog Light Sensor Parts

Hooking it up

GA1A VCC Arduino 5V
GA1A OUT Arduino A0
GA1A GND Arduino GND

Analog Light Sensor hookup

Software

Download and install all libraries into your usual Arduino Library Folder.
The default is usually at /User/Documents/Arduino/Libraries.

If you're using the Arduino wifi shield, make sure to use version 1.0.3 of the Arduino IDE!

The script

The choice is yours! You can use an Arduino sketch for this project, or a Node.js script.

Using the Arduino sketch

Grab your choice of Arduino script here:

Open up analoglight.ino and let's go through it. First we initialize a plotly graph. If you're using a wifi shield, remember to change these wireless credentials to your own in the sketch!

plotly graph("username", "api_key", tokens, "filename", nTraces);

In the setup() function, we're going to initialize the graph. Once it's initialized, we're going to open the stream. graph.openStream() opens the plotly stream and graph.plot() is where all the data gets piped in. Let's check it out:

graph.init();
graph.openStream();

Your code is now all set up!

Using the Node.js script

First, you need to set up your Arduino for Node.js interaction.

Next, download the analoglight.js script.

Open analoglight.js, and let's go through it! First we create a new plotly object with your credentials:

var plotly = require('plotly')("username", "api_key");

The init_data object is what we send to plotly when we initialize the graph. We are sending empty arrays to act as containers for our data. You can also choose the maximum number of points to display.

Don't forget to change the 'streamtoken' to your own!

var init_data = [{
    x : [],
    y : [],
    stream : {
        token : 'streamtoken',
        maxpoints : 5000
    }
}];

We're going to use plotly.plot() to initialize our graph and plotly.stream() to pipe our data.

First we'll set up our board (let johnny-five connect to the Arduino over serial). Once that's successful, we'll initialize the graph.

When our Plotly graph is ready, we'll initialize a stream. Then, every time our analog light sensor gets a "data" event (set to the sensor's 'freq' value, we'll fire off that data to our stream. We also take that raw data and send it to be converted to lux.

Check out the full analoglight.js for better error handling practices.

board.on("ready", function() {
    var analog_light_sensor = new five.Sensor({pin: "A0", freq: 1000, thresh: 0.5});
    plotly.plot(data,layout,function (err, res) {
    var stream = plotly.stream('25tm9197rz', function (err, res) {
        console.log(res);
    });
    var stream_2 = plotly.stream('unbi52ww8a', function (err, res) {
        console.log(res);
    });

    analog_light_sensor.on("data", function() {
        rawValue = this.value;
        var data = {
            x : getDateString(),
            y : rawValue
        };
        // write the data to the plotly stream
        stream.write(JSON.stringify(data)+'\n');
        // write lux data to plotly stream
        RawToLux(rawValue);
    });
});

RawToLux() is an extra function that converts the raw light data to lux, and streams it to your second Plotly stream.

function RawToLux(raw) {
    var rawRange = 1024; // 3.3v
    var logRange = 5.0; // 3.3v = 10^5 lux

    var logLux = raw * logRange / rawRange;

    var data = {
        x : getDateString(),
        y : pow(10, logLux);
    };
    console.log(data);
    // write the data to the plotly stream
    RawToLux(rawValue);
    stream_2.write(JSON.stringify(data)+'\n');
}

Wrapping it up

Using the Arduino sketch

By now you've got your Arduino wired up to the analog light sensor, you've got it set up for internet connectivity, you've uploaded your sketch, and you're ready to go.

Start streaming! Plug in your Arduino, and go check out your live results!

Using the Node.js script

By now you've got your Arduino wired up to the analog light sensor, you've modified your node script, and you're ready to go.

Start streaming! Plug in your Arduino to your USB port, and run the script from the command line:

$ node analoglight.js

You can watch the console to see the url returned from Plotly's server. Now go check out your live stream!