Electronomicon NaviGlyph Preview

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:

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 (Glowing)

FBLR Mind-Controlled Robot

Related articles: Processing + EPOC via OSC | EPOC-to-Arduino “Goodbye, World” | Arduino + fischertechnik | BYTR Virtual Servitor

FBLR (“Fibbler”) is a robot that moves forward and backward, and turns left and right, in response to its operator’s thoughts. The signal flow is brain → Emotiv EPOCMind Your OSCsProcessingArduinofischertechnik robot. I wrote a Processing sketch (zipped with data files) that converts the EPOC signals via OSC messages, to Arduino signals that move the robot. The sketch uses the arduino, controlP5, and oscP5 libraries. The Arduino uses Firmata (standard with the Arduino software) and a motor shield from Rugged Circuits (see this article for more info).

FBLR Processing Interface

There are four knobs for adjusting the actuator thresholds. The EPOC’s Cognitiv values are compared to said thresholds to determine whether to enable the robot’s motors and which directions to turn them in:

Cognitiv Action Motor 1 Direction Motor 2 Direction
PUSH 0 0
PULL 1 1
LEFT 1 0

Setting a knob to 0 (all the way to the left) will enable its associated motors regardless of the Cognitiv value. Four bars display the levels of the incoming Cognitiv values; if a value is greater than or equal to its threshold, the bar displays green, otherwise it displays red.

The slider can be used to change the delay from 0 to 200 milliseconds. The shorter the delay, the more frequently OSC messages are evaluated, but the robot may also “stutter” for trying to retrieve messages faster than they are delivered. There are a variety of ways to handle this; I chose one that was simple and effective but not the most elegant. I found that 100ms makes for smooth operation most of the time. Note also that push, pull, left, and right are evaluated in that order by the draw() loop, so if, e.g., push and left both exceed their threshold values, only moveForward() will fire.

Here is an EmoScript for EmoComposer, to test the interaction without needing the headset. See the Emotiv EPOC SDK guide for more about that.

Occult Applications

Mankind’s oldest fantasy is to move something with the power of thought. // Tan Le, co-founder of Emotiv

Any use of the EPOC seems to be magical in a folk sense, but I am interested in new-media interactions that respond to explicitly magical intentions or commands (e.g. sigil concentration), ecstatic or gnostic states of consciousness, state entity projections, etc. I expect the EPOC to feature in some of the robomancy projects I will be developing in the near future.

FBLR mind-Controlled Robot

Arduino + fischertechnik

Related articles: Portable Arduino Lab | FBLR Mind-Controlled Robot

Arduino + fischertechnik 1

This week I blew the dust off my old fischertechnik Experimenta Computing kit to see about controlling it with Arduino. If I can control the kit with Arduino, I can get it to respond to the EPOC via OSC with Processing. More about that later.

The kit was made to interface with a PC via parallel port. It includes I/O for four motors/lamps/etc. (M1 – M4), eight binary switches (E1 – E8), and two analog inputs for pots, photo-resistors, etc. (EX, EY). The models on the base plate are powered through a distributing box that connects to the interface via a 20-pin IDC ribbon cable. Here is a pinout that I sorted out with a multimeter:
fischertechnik IDC Pinout

Obviously, Arduino has enough I/O to handle the kit’s variety — almost. The kit’s motors are powered by 6–9vdc, so I am using a Rugged Circuits motor driver shield and 9v battery to power two of them. The shield will not power four motors, but M3 and M4 can be connected to two of Arduino’s other PWM pins in order to power other components. Here is a sketch for a switch to turn the motor on when pressed:

#define M1 3 // motor output
#define M1_DIR 12 // direction output, not used in loop
#define E1 5 // binary input (push switch)

int toggle = 0;

void setup() {
  // configure all outputs off for now
  pinMode(M1, OUTPUT); digitalWrite(M1, LOW);
  pinMode(M1_DIR, OUTPUT); digitalWrite(M1_DIR, LOW);
  // configure input
  pinMode(E1, INPUT);
  analogWrite(M1, 0); // motor off for now

void loop() {
  if(digitalRead(E1) == HIGH) {
    toggle = 1;
  while(toggle == 1) {
    analogWrite(M1, 255);
    if(digitalRead(E1) == LOW) {
    toggle = 0;
  analogWrite(M1, 0);

Since the motor shield has stackable headers, I am thinking about creating a shield for the remaining I/O, using a Technological Arts IDC ribbon cable to breadboard adapter and an Adafruit proto shield kit.

Cf. scratchfisch.org, a Scratch driver for fischertechnik kits.