Cat’s Brain

Well, not exactly HER brain, per-say. However, it is her brain for her science project on the brain. She’s in junior high now (reserve your old-man jokes now), so she has lofty projects from here on out. Cat had to demonstrate ten parts of the brain, so we built it … electronics style.

An Arduino is the main chunk of the brain, running the LEDs, via optocouplers, to allow a low and high side to the circuit. 9v is running the high side, while the low-side is stepped down to 5v by the Arduino. I think, it’s an elegant solution to Emerystein’s Monster!

Gallery and code follow:

#Arduino code
const int ONE = 0;
const int TWO = 1;
const int THREE = 2;
const int FOUR = 3;
const int FIVE = 4;
const int SIX = 5;
const int SEVEN = 6;
const int EIGHT = 7;
const int NINE = 8;
const int TEN = 9;
const int ELEVEN = 10;
const int BUTTON = 11;
int countUp = 0;
int buttonState = LOW;
int pressedButton = 0;
long lastDebounceTime = 0;
long debounceDelay = 200;
const int SYNONE = 50;
long blinkOne = 0;
const int SYNTWO = 100;
long blinkTwo = 0;
void setup() {                
  pinMode(ONE, OUTPUT);
  pinMode(TWO, OUTPUT);
  pinMode(THREE, OUTPUT);
  pinMode(FOUR, OUTPUT);
  pinMode(FIVE, OUTPUT);
  pinMode(SIX, OUTPUT);
  pinMode(SEVEN, OUTPUT);
  pinMode(EIGHT, OUTPUT);
  pinMode(NINE, OUTPUT);
  pinMode(TEN, OUTPUT);
  pinMode(ELEVEN, OUTPUT);
  pinMode(BUTTON, INPUT);
void loop() {
  if (buttonPressed())
    if (countUp >= 12) {
      countUp = 0;
void synFire() {
  if (countUp == 11)
    int randOne = random(ONE, ELEVEN);
    int randTwo = random(ONE, ELEVEN);
    unsigned long firstFire = millis();
    if ((firstFire - blinkOne) > SYNONE) {
      blinkOne = firstFire;
      digitalWrite(ELEVEN, HIGH);
    if ((firstFire - blinkTwo) > SYNTWO) {
      blinkTwo = firstFire;
      digitalWrite(ELEVEN, HIGH);
boolean buttonPressed() {
 boolean state = false;
 buttonState = digitalRead(BUTTON);
 if (pressedButton == 0) {
   if ((millis() - lastDebounceTime) > debounceDelay)
     if (buttonState == HIGH) {
       state = true;
       lastDebounceTime = millis();
       pressedButton = 1;
 if (pressedButton == 1 && buttonState == LOW) {
   pressedButton = 0;
 return state; 
void brainMode(int mode) {
  switch(mode) {
    case ONE:
      digitalWrite(ONE, HIGH);
      digitalWrite(TWO, HIGH);
      digitalWrite(TEN, HIGH);
    case TWO:
      digitalWrite(TWO, HIGH);
    case THREE:
      digitalWrite(THREE, HIGH);
    case FOUR:
      digitalWrite(FOUR, HIGH);
    case FIVE:
      digitalWrite(FIVE, HIGH);
    case SIX:
      digitalWrite(SIX, HIGH);
    case SEVEN:
      digitalWrite(SEVEN, HIGH);
    case EIGHT:
      digitalWrite(EIGHT, HIGH);
    case NINE:
      digitalWrite(NINE, HIGH);
    case TEN:
      digitalWrite(TEN, HIGH);
    case ELEVEN:
      digitalWrite(ELEVEN, HIGH);
void writeLow()
  digitalWrite(ONE, LOW);
  digitalWrite(TWO, LOW);
  digitalWrite(THREE, LOW);
  digitalWrite(FOUR, LOW);
  digitalWrite(FIVE, LOW);
  digitalWrite(SIX, LOW);
  digitalWrite(SEVEN, LOW);
  digitalWrite(EIGHT, LOW);
  digitalWrite(NINE, LOW);
  digitalWrite(TEN, LOW);
  digitalWrite(ELEVEN, LOW);

S.T.O.R.M. Annual Red Fish Trip, 2012

The annual trip to Red Fish this year was spectacular! We had several great dives, and the vis was GREAT! Wade was kind enough to let me use his tanks and tear his regs apart, so I could test out my new Nomad XT. What a wonderful way to dive. Thanks Wade!

In this video, you’ll see Wade, Ellis, Dom, and me. Great dives, great friendships, great food, great extended family time. We even had a couple of Ellis’s student with us this year: Jamie and Victoria. It was just great company, all around. Now, back to the shop to start on the new automated Nitrox blending device. WEEEEEEEE!!!!