Santa Cruz Museum, Pneumatic Tubes

Our friends at the Santa Cruz museum have built a Pneumatic Tubes system for donations.

Museduino Schematic




Arduino Day 2017

Arduino Day 2017

The Cultural Technology Development Lab will host an Arduino Day Show & Tell at the NM Museum of Natural History & Science, in Albuquerque NM.

Day: Saturday April 1st
Time: 10:00am-12:30pm
Where: Museum Classroom #2 (subject to change)
Cost: free

Open Source Hardware for Exhibits & Installations

10:00-10:15 – Welcome, What is Arduino Day, who are we & why do we participate?
10:15-11:15 – What is open source hardware? How is it used in museum environments? What are some examples? How have we built off of the Arduino platform to make robust, responsive exhibits, demonstrations
11:15-11:45- Museum tour of open source in action! Behind the fabric at the Hall of the Stars
11:45-12:30- Return to classroom, questions, additional demos,  resources, how to get involved.

Puppet Theater

Our puppet theater sample project (created for Hands of Enchantment Puppeteers in Albuquerque, NM) uses the Bluetooth LE Shield in order to control the color of the neopixel strips with the Adafruit Bluefruit LE Connect iphone/android app. The final version uses Museduino 2.0,  with 2 30-neopixel strips and 2 external power satellite boards.


Download Code

IR + Processing

The CTDL team spent a week at Grinnell College working with students on site specific installations. During our visit, we worked with student Jack Dunnington to implement sensors into his proposed video projection project.  The final installation implemented an IR Sharp to control fullscreen video via Processing3. The Museduino was used to handle input up to 15ft away from the laptop and projector setup.

Download Code


Pneumatic Tubes

Our pneumatic tube system is built as two stations that can send and receive messages on either end. Originally, each station housed their own arduino, but were autonomous systems, existing together but not communicating directly.

The original version was built for the Santa Fe children’s museum in NM.

Since then, we have redesigned our pneumatic tubes prototype with the Museduino. Now we can use one Arduino for both stations. When a station sends a message, the lightbulb on the receiving end gets a light pulse, and when the other side recieves the message, the sending side pulses. It’s a more real system, and despite the fact that its a complete anachronism, the joy of sending pneumatic messages feels current to us!


DC Motor


This tutorial will teach you how to implement a DC Motor with a Satellite Board of your choice.


Arduino + power and usb connectors
Museduino Shield
1 Museduino Satellite board
CAT5/RJ45 cables
DC Motor
1N4001 diode
1k resistor


Attach your Museduino Shield to your Arduino and connect a Satellite board on Port A. For this tutorial we are going to use Satellite I/O 3. Before we get started, take a look at the Pin Configuration Chart.


Both the Smorgasboard and External Power boards have a built-in Mosfet which is ideal for I/O that require more power than an Arduino digital output can handle directly.

When working with DC motors, it is also important to use a flyback Diode, which is a diode used to eliminate negative voltage spikes when power is suddenly reduced or removed. To prevent damage to the Mosfets on your Satellite boards, place the diode in parallel with the motor. Use pin 1 for power and pin 2 for Signal with an Open drain to Ground. Then place a resistor between pin 3 and 4.

Next, upload our example DC Motor sketch.


  Museduino | DC Motor Tutorial
  Set the speed of a DC motor.

//satellite Pin 1 on Port A
int s2A = A1;

//satellite Pin 3 on Port A 
int s3A = 9; //default arduino pin is D8, use PWM Select to swap with D9

int InputValue = 0; //potentiometer value
int motorValue = 0; //motor speed value

// the setup routine runs once when you press reset:
void setup() { 
  // initialize potoentiometer as input and the motor pin as an output.
  pinMode(s2A, INPUT);
  pinMode(s3A, OUTPUT); 


// the loop routine runs over and over again forever:
void loop() {
  //read value from potentiometer
  inputValue = analogRead(s2A);
  //map value from 0 (off) to 255 (on)
  motorValue = map(inputValue, 1023, 0, 0, 255);
  //if motorvalue > 0, set the speed
  if(motorValue > 0) {
    analogWrite(s3A, motorValue);
  } else {
    //stop the motor
    digitalWrite(s3A, LOW);


NeoPixel RGB LED Strip (External Power)


This tutorial will teach you how to use the External Power Satellite board while implementing a NeoPixel RGB LED Strip.


Arduino + power and usb connectors
Museduino Shield
Museduino External Power board
CAT5/RJ45 cable
NeoPixel RGB LED Strip
Switching Power Supply
Female DC Power adapter


For detailed information getting started with Neopixels, please review the Adafruit NeoPixel Uberguide. The NeoPixel LED Strip requires a power supply with a minimum of 3.6 Amps. For this tutorial, we recommend using the External Power satellite board and a 5V DC Switching Power Supply which can handle up to 10 amps.


Take a look at the The External Power satellite board. Notice that the board is equipped with 3 External Power jumpers which allow you to switch from 5V to 6-12V. When external power is in use, the red LED indicating 6-12V will be on.


To setup our NeoPixel Strip, connect its wires to satellite pin 5 on the External Power board. The strip has four wires; power (red), signal (white), and two grounds (black).


Based on the Satellite pin configuration, you will use terminal block pins 1, 3, and 4. A small screwdriver is needed to close the screw terminals.


Next, use the external power jumper directly across from satellite pin 5 to switch to external power.


In order to use the Switching Power Supply, connect the Female DC Power adapter to the two pin terminal block. Use male-to-male jumper wires or wire strippers to make your own.



Plugin your Switching Power Supply to the Female DC Power adapter.


Via CAT5 cable, connect the External Power satellite power board to Port A. Then connect your Arduino via usb to upload the program to control the NeoPixel strip.



Download the Adafruit_NeoPixel library. For this tutorial, upload the strandtest sketch to your Arduino. This sketch uses Arduino digital pin 6 which you setup earlier in this tutorial (Satellite Pin 5 on Port A).



Servo Motors (PWM Select)


This tutorial will teach you how to implement a servo motor and use PWM Select.


Arduino + power and usb connectors
Museduino Shield
Museduino Smorgasboard
CAT5/RJ45 cable
Servo Motor
Male to Female Jumper wires

pwm tutorial parts


Before we get started, let’s learn about the PWM Select feature. In our Satellite I/O chart, there are 4 pins that denote PWM Select. Each pin is designated to a port.


Next, look at your Museduino Shield and locate the two red dip switches. Each switch is placed between two ports. The dip switch to the left is between port A and B. The other is placed between port C and D.


These switches are designed to swap a PWM pin between two ports. By default digital pin 8 is on port A. However, in the instance that an extra PWM pin is needed on port A, the switch allows you to swap digital pin 8 with digital pin 9 on port B.


When both switches are pushed up towards A or D, you can follow the Satellite I/O chart for default PWM Select pins. If either switch is pushed down towards B or C, satellite pins 3 and 5 are swapped. If the right switch pushed up towards D, satellite pins 3 and 5 are swapped.

Now that you have learned about the PWM Select feature, let’s implement a servo motor on port D. First, connect the Museduino and Smorgasboard satellite via Cat5 on port D.

servo tutorial

Then, connect your jumper wires to the Servo Motor.


Next, connect the opposite ends of the jumper wires to the PWM select arduino pin on your Smorgasboard Satellite. In this instance, satellite i/o 3 on port D is denoted as PWM Select.


Use pins 1 (power), 3 (signal), and 4 (ground).



  Museduino | Servo Motors (PWM Select) Tutorial
  Servo Motor repeatedly turns from 0 to 180 degrees, then 180 to 0 degrees.

Servo servo;  // create servo object to control a servo 
              // a maximum of eight servo objects can be created 
int pos = 0;    // variable to store the servo position 

//Use PWM Select switch to swap default pin D2 with D3~
int s3D = 3; // Digital Pin 3 on Satellite Pin 3 via Port D
void setup() 
  servo.attach(s3D);  // attaches the servo on pin 3 to the servo object 
void loop() 
  for(pos = 0; pos =1; pos-=1)     // 180 degrees to 0 degrees 
    servo.write(pos);                // tell servo to go to position
    delay(15);                       // waits 15ms for the servo to reach the position 


Once your code is uploaded, make sure your switch is in the correct position.