Project tutorial

SketchBoard

Longboard that draws on its underside using an XY-plotter based on your travels

  • 4,234 views
  • 20 comments
  • 3 respects

Components and supplies

Longboard
×1
Soft Wood
×1
360 Servo Motors
×2
A000066 iso both
Arduino UNO & Genuino UNO
×1
Steel Rods
×2
Acrylic Bearings
×4
AA Batteries
×4
Battery Case
×2
Pen
×1
Rubber Bands
×10
Zipties
×8
Wires
×10
GY-521 MPU-6050 3 Axis Gyroscope + Accelerometer Module For Arduino
×1
Circuit Board
×1
Acrylic Pen Holder
×1
Paper
×4

About this project

Description

SketchBoard offers a fresh take on creating the artwork on the underside of your board. Your journey acts as the artist to your board's canvas through the use of an XY-plotter. The plotter moves a pen back and forth along the board, and rotates left and right when you turn in the respective directions. SketchBoard offers this question to riders: are we riding to create art, or is the board itself art?

Initial Brainstorm

modes of transportation:

  • Snowshoes
  • skiis
  • snowboard
  • chairlift
  • slip’n’slide
  • hot-air balloon
  • pogo stick
  • parachute
  • kayak
  • canoe
  • flying squirrel suit
  • surfboards
  • boogieboards
  • windsailing
  • kitesailing
  • cardboard on sand
  • cardboard on stone/metal slide!!
  • sled
  • slide
  • umbrella (Mary Poppins)
  • broomstick
  • skateboards
  • segway
  • scooter
  • surrey (4-person bicycle car thing)
  • paddleboats
  • tandem bicycle
  • zipline
  • raft
  • innertube
  • hang-gliding
  • rickshaw
  • shopping cart
  • trapeze
  • bumper cars
  • baby carriers
  • dogsled
  • waterslide
  • unicycle
  • stilts
  • rolla-bolla
  • heelys
  • wakeboards
  • human hamster balls
  • mountain boarding
  • handcart
  • boxcar derby
  • walker
  • cane
  • skimboarding
  • rollerblades
  • ice skates
  • rock-climbing
  • spiderman gloves/shoes
  • waveboard
  • imagination
  • book
  • skate/waveboard design changes as you ride it. designs and patterns based on how you ride it
  • accelerometer? display of some kind
  • swaggy walker, destigmatize it.

Combos:

  • unicycle-wheelchair
  • tandem skateboard/scooter
  • tandem-bicycle: relationship test?
  • rollerblade/skateboard combo

Refined Brainstorm

Main Question: are we riding to create art, or is the board itself art?

Feedback from other groups:

  • play around with weight (faster = lighter drawing, etc.)

  • lights on the edge of the board

    • visibility issue

    • affects externally

  • lights or wings turn on or sprout out when you go faster

  • matrix of LEDs on the bottom, maps out path of turning.

    • adjust fidelity of path based on how far you travel

    • translates motion into art

    • pacman grid (end of path = start of path on opposite sides)

  • lights on side are history of ride

  • lights change colors based on mileage

    • gamify it (x miles = new colors, patterns, etc.)

  • target professional skateboarders

    • films self doing tricks?

    • cameras

  • look at people at skatepark at Clark Kerr or people at Stanley @ night

Arduino Code

sketchboardMaker.ino
Arduino Code

Warning: Embedding code files within the project story has been deprecated. To edit this file or add more files, go to the "Software" tab. To remove this file from the story, click on it to trigger the context menu, then click the trash can button (this won't delete it from the "Software" tab).

#include <Servo.h>  // servo library

#include "Timer.h" //Timer library



Timer t;



//servo1 is a 360 servo, writing values changes direction and speed 

//(0 is full speed in one direction, 90 is stop, and 180 is full speed in opposite direction)

// values in between change the speed

Servo servo1;  //FISHING LINE SERVO: servo control object for longwise movement



//servo2 is a 180 servo, writing values tells it which angle to move to. only get one speed.

Servo servo2;  //PEN SERVO: servo control object for widthwise movement of pen. 

const int groundpin = 18;             // analog input pin 4 -- ground

const int powerpin = 19;              // analog input pin 5 -- voltage

const int xpin = A3;                  // x-axis of the accelerometer

const int ypin = A2;                  // y-axis

const int zpin = A1;                  // z-axis (only on 3-axis models)





//accelerometer threshold  values to indicate if board is centered or turning

const int centeredMin = 500;

const int centeredMax = 550;

const int leftTurn = 500;

const int rightTurn = 550;



//number of samples to take from accelerometer

const int sampleSize = 10;



//how long for the fishing line servo to move in one direction before switching

const int switchTime = 10000;



//is the fishing line servo moving forward or not

boolean forward = false;



//readings from accelerometer

int xValue;

int yValue;



//timer event

int stopEvent;



void setup()

{

  Serial.begin(9600);

  //fishing line servo goes in pin 6

  servo1.attach(6);

  //pen servo goes in pin 10

  servo2.attach(10);

  pinMode(groundpin, OUTPUT);

  pinMode(powerpin, OUTPUT);

  digitalWrite(groundpin, LOW);

  digitalWrite(powerpin, HIGH);

  //Checks every switchTime seconds to change direction

  int stopEvent = t.every(switchTime, moveX);

  //center the pen arduino

  servo2.write(90);

  delay(1000);

  //start the fishing line arduino

  servo1.write(0);

}



void moveX() {

  if (forward) {

    forward = false;

    servo1.write(0);

  } else {

   forward = true;

   servo1.write(180); 

  }

}



void loop()

{

  //check if it's time to switch directions

  t.update();

  

  //here until the for loop is gathering samples from the accelerometer to be averaged

  int position;

  int xAvg;

  int yAvg;



  xValue = analogRead(xpin);

  yValue = analogRead(ypin); 

  

  xAvg = 0;

  yAvg = 0;

  

  for(int i = 0; i < sampleSize; i++) {

    xAvg += analogRead(xpin);

    yAvg += analogRead(ypin);

  }

  

  //average readings from the accelerometer

  xAvg = xAvg/sampleSize;

  yAvg = yAvg/sampleSize;



  //if readings say its centered

  if(yAvg > centeredMin && yAvg < centeredMax) {

   //center the arduino

   servo2.write(90);

   //if readings say left turn

  } else if(yAvg < leftTurn) {

   //turn to the 50 degree angle

   servo2.write(50); 

   //if readings say right turn

  } else if(yAvg > rightTurn) {

    //turn to the 130 degree angle 

    servo2.write(130); 

  } else {

    //else, center it

   servo2.write(90); 

  }

  

}

SCHEMATIC DIAGRAM

FINAL PRODUCT

Progress Images

Future Questions and Considerations

Future Questions>Something we debated a lot in our team was the advantages and disadvantages of using sharpies or dry-erase markers. Although the sharpies offered more precision and permanence, the dry-erase markers offered ease of erasing and redrawing on the same sheet of paper. We also wondered how the use of e-ink could be applied to our board, removing the need for pen and paper entirely.

ConsiderationsWe considered adding a visual aspect to the sides and top of the board as well. Since the art is done on the underside, you could only see it when you stop and flip up the board. Adding side or top visuals would allow passerby's to enjoy the board as well. For the future, we also wanted to allow the board to wirelessly receive text messages and then write the messages onto the bottom of the board. Lastly, we thought of integrating the drawing device into the board itself, so that it didn't rely on the contraption we built on top of it. This would allow for a less clunky board, and then we wouldn't have to raise the axels. 

Build Instructions

Step 1: Get a Longboard

Pretty self-explanatory. Find yourself a longboard you can use!

Step 2: Increase Height of Board

You'll have to increase the height of your board to make room for the XY-plotter underneath. To do this, we laser cut wood and added the wood underneath the axles, therefore extending the height of the axles.

Step 3: Cut Rod Risers

Laser cut two rod risers using our provided Illustrator file. Place them on the board on opposite sides, and move them into the board until there isn't any space underneath the risers.

Step 4: Stick Steel Rods Through Risers

After cutting your steel rods down to size, stick them into the risers

Step 5: Cut and Glue Bearings

Cut out 16 acrylic rings using our Illustrator file and glue them together in groups of 5. This will give you 4 acrylic bearings for the platform.

Step 6: Cut Servo Platform Using Illustrator File

This will be where the servors, Arduino, and batteries are all stored.

Step 7: Zip Tie Bearings to Platform

Secure the bearings into their appropriate holes using zip ties

Step 8: Place Servos, Arduino, and Batteries onto the Platform

The X-axis servo will fit into a hole, while the Y-axis servo is held down via rubber bands and acrylic circles. The pen holder is also glued onto the X-axis servo. Batteries and the Arduino are rubber banded and screwed respectively onto the underside of the platform.

Step 9: Create Splitter Wires for Arduino

Solder wires together to make splitters for the servo power and ground.

Step 10: Hook Accelerometer into Arduino

Place the accelerometer into the analog pins of the Arduino

Step 11: Load Code into Arduino

Load the code on our page into the Arduino

Step 12: Connect batteries to Arduino and Servos

Hook up servos before the Arduino!

Step 13: Begin Your Journey!

Ride out and make art!

ILLUSTRATOR LASERCUT FILE

SKETCHBOARD COMPONENTS

Demo In Situ

We talked with Pro Longboarder JP-Z about his experience with the SketchBoard

Code

sketchboardMaker.inoC/C++
sketchboardMaker.ino
#include <Servo.h>  // servo library

#include "Timer.h" //Timer library



Timer t;



//servo1 is a 360 servo, writing values changes direction and speed 

//(0 is full speed in one direction, 90 is stop, and 180 is full speed in opposite direction)

// values in between change the speed

Servo servo1;  //FISHING LINE SERVO: servo control object for longwise movement



//servo2 is a 180 servo, writing values tells it which angle to move to. only get one speed.

Servo servo2;  //PEN SERVO: servo control object for widthwise movement of pen. 

const int groundpin = 18;             // analog input pin 4 -- ground

const int powerpin = 19;              // analog input pin 5 -- voltage

const int xpin = A3;                  // x-axis of the accelerometer

const int ypin = A2;                  // y-axis

const int zpin = A1;                  // z-axis (only on 3-axis models)





//accelerometer threshold  values to indicate if board is centered or turning

const int centeredMin = 500;

const int centeredMax = 550;

const int leftTurn = 500;

const int rightTurn = 550;



//number of samples to take from accelerometer

const int sampleSize = 10;



//how long for the fishing line servo to move in one direction before switching

const int switchTime = 10000;



//is the fishing line servo moving forward or not

boolean forward = false;



//readings from accelerometer

int xValue;

int yValue;



//timer event

int stopEvent;



void setup()

{

  Serial.begin(9600);

  //fishing line servo goes in pin 6

  servo1.attach(6);

  //pen servo goes in pin 10

  servo2.attach(10);

  pinMode(groundpin, OUTPUT);

  pinMode(powerpin, OUTPUT);

  digitalWrite(groundpin, LOW);

  digitalWrite(powerpin, HIGH);

  //Checks every switchTime seconds to change direction

  int stopEvent = t.every(switchTime, moveX);

  //center the pen arduino

  servo2.write(90);

  delay(1000);

  //start the fishing line arduino

  servo1.write(0);

}



void moveX() {

  if (forward) {

    forward = false;

    servo1.write(0);

  } else {

   forward = true;

   servo1.write(180); 

  }

}



void loop()

{

  //check if it's time to switch directions

  t.update();

  

  //here until the for loop is gathering samples from the accelerometer to be averaged

  int position;

  int xAvg;

  int yAvg;



  xValue = analogRead(xpin);

  yValue = analogRead(ypin); 

  

  xAvg = 0;

  yAvg = 0;

  

  for(int i = 0; i < sampleSize; i++) {

    xAvg += analogRead(xpin);

    yAvg += analogRead(ypin);

  }

  

  //average readings from the accelerometer

  xAvg = xAvg/sampleSize;

  yAvg = yAvg/sampleSize;



  //if readings say its centered

  if(yAvg > centeredMin && yAvg < centeredMax) {

   //center the arduino

   servo2.write(90);

   //if readings say left turn

  } else if(yAvg < leftTurn) {

   //turn to the 50 degree angle

   servo2.write(50); 

   //if readings say right turn

  } else if(yAvg > rightTurn) {

    //turn to the 130 degree angle 

    servo2.write(130); 

  } else {

    //else, center it

   servo2.write(90); 

  }

  

}

Comments

Similar projects you might like

DIY Relay Outlet Arduino

Project tutorial by Ben Jones

  • 23,869 views
  • 17 comments
  • 31 respects

Mystick

Project tutorial by Mystick

  • 2,101 views
  • 19 comments
  • 5 respects

Kite Power Autopilot

Project in progress by 3 developers

  • 3,722 views
  • 15 comments
  • 7 respects

Unlock your door with a knock

Project tutorial by Ashraf Nabil

  • 19,426 views
  • 10 comments
  • 54 respects

Magoo

Project in progress by 4 developers

  • 7,253 views
  • 12 comments
  • 34 respects

Sole Searching

Project in progress by 5 developers

  • 7,224 views
  • 12 comments
  • 12 respects
Add projectSign up / Login