Arduino + Photoresistor

Photoresistor splash image

Getting started

Want to log some ambient light data? Starting an indoor garden and you want to find out which windows would be best to start growing from? Look no further! You can easily interface your Arduino with Plotly to stream all of that goodness into a delightful graph! Make informed decisions based on your results!


  • Arduino-compatible board
  • Your choice of Arduino internet shield
    (WIFI, CC3000, Ethernet, GSM)
  • Photoresistor
  • Hookup wires
  • 10k resistor
  • Half-size breadboard

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.

Photoresistor Parts

Hooking it up


Photoresistor hookup


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 lightsensor.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:


In the loop() function, we're going to start streaming our sensor data!

void loop() {
    int lightsensor_reading = analogRead(lightsensor_pin);
    graph.plot(millis(), lightsensor_reading, tokens[0]);

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 lightsensor.js script.

Open lightsensor.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 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 sensor gets a "data" event (set to the sensor's 'freq' value, we'll fire off that data to our stream.

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

board.on("ready", function() {
    var photoresistor = new five.Sensor({ pin: "A0", freq: 50 });
    plotly.plot(data,layout,function (err, res) {
        var stream ='streamtoken', function (res) {
        photoresistor.scale().on("data", function() {
            var data = { x : Date(), y : this.value };

Wrapping it up

Using the Arduino sketch

By now you've got your Arduino wired up to the 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 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 lightsensor.js

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