Posts Tagged ‘Arduino’

Protected: BaneThrower

By Joshua Madara on July 26, 2011 | Categories: Blog | Tags: , , , , | Enter your password to view comments.

This post is password protected. To view it please enter your password below:


Electronomicon NaviGlyph Preview

By Joshua Madara on July 8, 2011 | Categories: Blog | Tags: , , , | 1 Comment

Related articles: Electronomicon Preview 1 | FBLR Mind-Controlled Robot | Arduino + fischertechnik

In anticipation of my upcoming robomancy book project, I am modifying the Electronomicon project to include an actual robot. The NaviGlyph™ component moves the robot forward, reverse, left, or right, as the operator clicks on each glyph with her mouse.

Robot built with fischertechnik:
Robot

Arduino Duemilanove with Rugged Circuits motor shield in modified enclosure (packaging from the video camera that will be mounted on the robot):
Arduino + Motor Shield

The glyphs, actual size:
Glyphs

Glyphs (Glowing)

More Robots for Magic

By Joshua Madara on May 24, 2011 | Categories: Blog | Tags: , , | No Comments

Related articles: Parallax Scribbler 2 (S2)

I have been researching hobby robotics platforms for Arduino and Processing, for my robomancy book, and here are two that look promising although they both have some drawbacks. If you have any suggestions, please contact me or leave a message in the comments section below.

The Finch

The Finch was recently developed by Carnegie Mellon University, for computer science education. While it does not use Arduino, it does use a related AVR chip, and it can be programmed with Processing. The Finch has some great hardware features including obstacle and light sensors, a temperature sensor, 3-axis accelerometer, buzzer, and RGB LED in the nose. The body design is theriomorphic and charmingly ambiguous (bird-fish?), and may appeal to those who do not like their robots “clunky” looking.

The Finch is priced right at $99. Its biggest drawback is that it can only run when tethered by a USB cable to a computer. It has no internal power supply, so even if I communicate with it over wireless USB, I would need to find a way to power the robot. Also, the Finch’s design does not facilitate hacking/extending it, although that is not a huge deal given the number of features it has standard.

 

Farrusco

“Your First Robot” was developed by Guibot (Guilherme Martins) in Portugal, creator of the Motoruino, which runs Farrusco. I love the way this little guy’s IR sensor pivots back and forth like it is looking around (in a way, it is). Farrusco has bump sensors in addition to the IR, and Guibot promises future add-ons including a line follower, speakers and light sensors, and RGB LED. There does not appear to be much prototyping space on Farrusco’s body, but the Motoruino accepts Arduino shields, and this video shows it being controlled by an Android app or Kinect communicating over XBee radios.

Farrusco costs 139 € assembled and tested, or 79 € as a DIY kit. Considering that I would need to add some components to do all of the things I would like to for the book, it may not be cost effective for this project.

Electronomicon Preview 1

By Joshua Madara on May 17, 2011 | Categories: Blog | Tags: , , , , , | No Comments

Here is the first in a series of previews of the Electronomicon that I will be presenting at this year’s Esoteric Book Conference. Click the image to view it full-size in a light box.

Electronomicon Plan

Tickets to the conference are still available, and the art show and book fair are free to the public, so even if you are not ticketed, please feel free to come by and see me and the other artists there.

Processing + Arduino + Kymera

By Joshua Madara on February 13, 2011 | Categories: Blog, Portfolio | Tags: , , , | 10 Comments

Related articles: Wand-Controlled Robot

As a symbol of the magician’s intentionally directed will-power, the wand is an excellent interface for ritual computing with multimedia, and facilitates physical activity in ways that keyboards and mouses do not. Imagine projecting a giant digital sigil onto a wall, and after using the wand to banish the ritual space, you intone an incantation and thrust your wand toward the sigil which promptly ignites in a blaze of virtual fire. Or you could manipulate a virtual poppet, activate a robot servitor or eldritch machine, etc. There are nearly limitless possibilities.

Here is an example of using a Kymera Magic Wand to manipulate an icosahedron on my computer (sorry the animation is so difficult to see):

The Kymera wand is a programmable infrared remote control device developed and sold by The Wand Company in the UK. It is marketed for television RC.

Kymera Magic Wand

The Kymera can transmit up to 13 distinct infrared signals in response to these distinct actions:

  1. Rotate anticlockwise
  2. Rotate clockwise
  3. Flick upwards
  4. Flick downwards
  5. Flick left
  6. Flick right
  7. Tap on top
  8. Tap on side
  9. Big swish
  10. Push forward
  11. Double tap on top
  12. Double tap on side
  13. Pull back

The wand contains a vibrator that pulses a number of times to let you know what state the wand is in, similar to the haptic feedback in video game controllers and cellular telephones. Signal programming is a cinch as the wand records signals from other RC devices. For the example in this article, I programmed my wand with a Sony television RC.

To interface with my computer, I am using an Arduino microcontroller with a Parallax IR receiver from Jameco, and Ken Shirriff’s outstanding multi-protocol infrared remote library. The Arduino translates the IR signals into hexadecimal values which it sends to Processing over the serial port. The Processing sketch draws and animates the icosahedron in response to the hex values received.

Arduino Infrared Decoder

Source Code

Here is the source code for what is shown in the above demo video.

Arduino

/**
 * Wand Test 1 (Arduino)
 * by Joshua Madara, hyperRitual.com
 * requires IRremote library by Ken Shirriff
 * http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(57600);
  irrecv.enableIRIn(); // start the receiver
}

void loop() {
  if (irrecv.decode(&results)) { // if there is something to send
    Serial.println(results.value, HEX); // send current value to Processing
    irrecv.resume(); // receive the next value
  }
}

Processing

/**
 * Wand Test 1 (Processing)
 * by Joshua Madara, hyperRitual.com
 * requires Dimension3D, Shape3D, and Icosahedron by
 * Ira Greenburg
 * Processing \ Examples \ 3D \ Form \ Icosahedra
 */

import processing.serial.*;

Serial arduinoPort; 

Icosahedron ico1;
float xRot = 0;
float yRot = 0;
float zoom = 0;
int sw1 = 0; // switch state variable

void setup(){
  size(800, 600, P3D);
  arduinoPort = new Serial(this, Serial.list()[1], 57600);
  ico1 = new Icosahedron(100);
  stroke(255, 0, 0);
  noFill();
}

void draw(){
  background(0);
  lights();
  translate(width/2, height/2);
  getWandState();
  switch(sw1) {
    case 1: // rotate down
      xRot-=0.05;
      break;
    case 2: // rotate up
      xRot+=0.05;
      break;
    case 3: // rotate left
      yRot-=0.05;
      break;
    case 4: // rotate right
      yRot+=0.05;
      break;
    case 5: // zoom in
      zoom+=5;
      break;
    case 6: // zoom out
      zoom-=5;
      break;
  }
  //pushMatrix();
  translate(0, 0, zoom);
  rotateX(xRot);
  rotateY(yRot);
  ico1.create();
  //popMatrix();
}

void getWandState() {
  while(arduinoPort.available() > 0) {
    String inBuffer = arduinoPort.readString();
    if(inBuffer != null) {
      String theValue = inBuffer.trim();
      println(theValue);
      if(theValue.equals("210") == true) { // flick down
        sw1 = 1;
      } else if(theValue.equals("A10") == true) { // flick up
        sw1 = 2;
      } else if(theValue.equals("410") == true) { // flick left
        sw1 = 3;
      } else if(theValue.equals("C10") == true) { // flick right
        sw1 = 4;
      } else if(theValue.equals("E10") == true) { // push forward
        sw1 = 5;
      } else if(theValue.equals("610") == true) { // pull back
        sw1 = 6;
      } else if(theValue.equals("110") == true) { // big swish
        sw1 = 0;
      }
    }
  }
}

fundRaiser

twitter

randomQuote

Magic is about changing the state or essence of persons, objects, acts and events through certain special and non-trivial kinds of actions with opaque causal mediation. » Jesper Sørensen, A Cognitive Theory of Magic