Alex Glow
Published

Archimedes: The AI Robot Owl

A wearable robotic owl familiar. Archimedes judges your emotions, via Google AIY.

Advanced24 hours13,331
Archimedes: The AI Robot Owl

Things used in this project

Hardware components

AIY Vision
Google AIY Vision
Archimedes' brain!
×1
Arduino MKR1000
Arduino MKR1000
Controls the servos.
×1
Servos (Tower Pro MG996R)
×2
Jumper wires (generic)
Jumper wires (generic)
I used a bunch of male-male, female-female, and other jumper wires.
×1
Raspberry Pi Zero Wireless
Raspberry Pi Zero Wireless
(Should be included in the AIY Vision Kit.)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Custom parts and enclosures

Owl head

Archimedes' head! Big enough to hold the Raspberry Pi assembly, with the piezo speaker and camera glued into his eyes.

Owl hat

Archimedes' hat holds the big arcade button, with the wires leading down into his head.

Feather bunch

I designed this as a tail, but ended up putting it in front instead. It's a cute little bunch of feathers.

Left wing

You need one of these and one of owl-wing-R. That should be obvious. I definitely printed two left wings.

Right wing

One of these, and one of owl-wing-L :)

Schematics

Arduino schematic (for servo control)

Controls the top and bottom servos of the pan/tilt gimbal, giving Archimedes life :)

Arduino schematic – preview image

Here's what's in the Fritzing file (above).
Archie duino zazyqx5od5

Code

Arduino code (for servos)

C/C++
Work in progress: this wiggles Archimedes randomly between his servos' endpoints. Eventually, it'll be controlled by the Pi. :)
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo topservo;
Servo botservo;
Servo boxservo;

// twelve servo objects can be created on most boards

const int ledIn = 2;
int topL = 130; // tested to 135
int topR = 95; // tested to 95
int topmid = 115; // 115
int botUp = 130; // tested to 120
int botDn = 100; // tested to 80
int botmid = 100; // 100

int boxUp = 100; // tested to 100
int boxDn = 15; // tested to 15

int toppos = topmid;
int botpos = botmid;
int boxpos = 0;

void setup() {
  pinMode(ledIn, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  
  topservo.attach(9);
  botservo.attach(10);
  boxservo.attach(11);

  topservo.write(topmid);
  botservo.write(botmid);
  boxservo.write(boxDn);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
}

void loop() {
  toppos = random(topR, topL);
  botpos = random(botDn, botUp);
  boxpos = random(0, 100);

  topservo.write(toppos);
  botservo.write(botpos);
  if (boxpos > 95) {
    openBox();
  }

  delay(1000);
  
}

void openBox() {
  boxservo.write(boxUp);
  delay(3000);
  boxservo.write(boxDn);
}

Google AIY Vision Kit demo code

I use the Joy Detection demo for Archimedes' brain; it takes pictures and annotates them with emotions, and also snaps a photo when you press the button (https://github.com/google/aiyprojects-raspbian/tree/aiyprojects/src/examples/vision/joy).

Credits

Alex Glow

Alex Glow

80 projects • 789 followers
The Hackster team's resident Hardware Nerd. I like robots, music, EEG, wearables, and languages. FIRST Robotics kid.

Comments