Keshav Kai S. Krishna
Published © LGPL

Robot Companion Pendant

First attempt at building a small companion in pendant form so it can be worn easily. Very janky as it was slapped together in about 3 days

BeginnerWork in progress278
Robot Companion Pendant

Things used in this project

Hardware components

SparkFun MicroView - OLED Arduino Module
SparkFun MicroView - OLED Arduino Module
×1
SparkFun MicroView - USB Programmer
SparkFun MicroView - USB Programmer
×1
Micro USB 5V 1A 18650 TP4056 Lithium Battery Charger
×1
Female Header 8 Position 1 Row (0.1")
Female Header 8 Position 1 Row (0.1")
×1
Li-Ion Battery 270mAH
×1
Pushbutton switch 12mm
SparkFun Pushbutton switch 12mm
×1
SparkFun Snappable Protoboard
SparkFun Snappable Protoboard
×1

Software apps and online services

Arduino IDE
Arduino IDE
LCD Assistant
This is used to convert monochrome bit map files to pixel arrays that can be easily displayed on the screen of the Microview.
Fusion 360
Autodesk Fusion 360
I actually used Autodesk Inventor but the files can be opened and edited in fusion 360

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)
Small hand file
Tape, Double Sided
Tape, Double Sided
Aluminium foil tape

Story

Read more

Custom parts and enclosures

Enclosure Lid stl file

Enclosure Base stl file

Schematics

Wiring Diagram

Code

Arduino Skecth

C/C++
#include <MicroView.h>      // include MicroView library

uint8_t sprite_1_f1 [] = {
0xFF, 0xE1, 0xE1, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x40, 0x40, 0x20, 0x10, 0x10, 0x88, 0xC4, 0xE2, 0xE2, 0xF1, 0xF1, 0xF1, 0xF1, 0x71, 0x71, 0x3F,
0x3F, 0x71, 0x71, 0xF1, 0xF1, 0xF1, 0xF1, 0xE2, 0xC2, 0xC4, 0x88, 0x10, 0x10, 0x20, 0x40, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE1, 0xE1, 0xE1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x40, 0x20, 0x10, 0x08, 0x88, 0xC4, 0xC2, 0xE2, 0xF1, 0xF8,
0xF8, 0xFC, 0x7E, 0x3F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x81, 0x80, 0x80, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0x80, 0x81, 0x81, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8,
0xF0, 0xE1, 0xE2, 0xC4, 0x84, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xFC, 0x3E, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0x0F, 0x67,
0x67, 0x0F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0xFE, 0xFC, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0x7D, 0xF9, 0xF9, 0xF1, 0xE2, 0xC2, 0xC4, 0x88,
0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x01, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7E,
0x7E, 0x5F, 0x7F, 0x3F, 0x2F, 0x3F, 0x1F, 0x0F, 0x07, 0x81, 0x40, 0x20, 0x20, 0x10, 0x08, 0x08,
0x84, 0xC2, 0xC2, 0xE1, 0xF1, 0xF9, 0xF9, 0x7D, 0x3F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F,
0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xF1, 0xE1, 0xC2, 0x84, 0x84, 0x08, 0x10, 0x10, 0xE0,
0xE0, 0x10, 0x10, 0x08, 0x84, 0x84, 0xC2, 0xE1, 0xF1, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x3F, 0x1F,
0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7E, 0x7E, 0xFF,
0xFF, 0x7E, 0x7E, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};

uint8_t sprite_1_f2 [] = {
0xFF, 0xE1, 0xE1, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x40, 0x40, 0x20, 0x10, 0x10, 0x88, 0xC4, 0xE2, 0xE2, 0xF1, 0xF1, 0xF1, 0xF1, 0x71, 0x71, 0x3F,
0x3F, 0x71, 0x71, 0xF1, 0xF1, 0xF1, 0xF1, 0xE2, 0xC2, 0xC4, 0x88, 0x10, 0x10, 0x20, 0x40, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE1, 0xE1, 0xE1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x40, 0x20, 0x10, 0x08, 0x88, 0xC4, 0xC2, 0xE2, 0xF1, 0xF8,
0xF8, 0xFC, 0x7E, 0x3F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x81, 0x80, 0x80, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0x80, 0x81, 0x81, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8,
0xF0, 0xE1, 0xE2, 0xC4, 0x84, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xFC, 0x3E, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x9F, 0x0F, 0x67, 0x67, 0x0F,
0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0xFE, 0xFC, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0x7D, 0xF9, 0xF9, 0xF1, 0xE2, 0xC2, 0xC4, 0x88,
0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x01, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x3E, 0x7E, 0x7F,
0x7F, 0x5F, 0x7F, 0x3F, 0x2F, 0x3F, 0x1F, 0x0F, 0x07, 0x81, 0x40, 0x20, 0x20, 0x10, 0x08, 0x08,
0x84, 0xC2, 0xC2, 0xE1, 0xF1, 0xF9, 0xF9, 0x7D, 0x3F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F,
0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xF1, 0xE1, 0xC2, 0x84, 0x84, 0x08, 0x10, 0x10, 0xE0,
0xE0, 0x10, 0x10, 0x08, 0x84, 0x84, 0xC2, 0xE1, 0xF1, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x3F, 0x1F,
0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7E, 0x7E, 0xFF,
0xFF, 0x7E, 0x7E, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};

uint8_t sprite_1_f3 [] = {
0xFF, 0xE1, 0xE1, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x40, 0x40, 0x20, 0x10, 0x10, 0x88, 0xC4, 0xE2, 0xE2, 0xF1, 0xF1, 0xF1, 0xF1, 0x71, 0x71, 0x3F,
0x3F, 0x71, 0x71, 0xF1, 0xF1, 0xF1, 0xF1, 0xE2, 0xC2, 0xC4, 0x88, 0x10, 0x10, 0x20, 0x40, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE1, 0xE1, 0xE1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x40, 0x20, 0x10, 0x08, 0x88, 0xC4, 0xC2, 0xE2, 0xF1, 0xF8,
0xF8, 0xFC, 0x7E, 0x3F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x81, 0x80, 0x80, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0x80, 0x81, 0x81, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8,
0xF0, 0xE1, 0xE2, 0xC4, 0x84, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xFC, 0x3E, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x9C, 0x0E, 0x67, 0x67, 0x0F, 0x9F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0xFE, 0xFC, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0x7D, 0xF9, 0xF9, 0xF1, 0xE2, 0xC2, 0xC4, 0x88,
0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x01, 0x07, 0x0F, 0x1E, 0x3E, 0x3F, 0x3F, 0x7F, 0x7F,
0x7F, 0x5F, 0x7F, 0x3F, 0x2F, 0x3F, 0x1F, 0x0F, 0x07, 0x81, 0x40, 0x20, 0x20, 0x10, 0x08, 0x08,
0x84, 0xC2, 0xC2, 0xE1, 0xF1, 0xF9, 0xF9, 0x7D, 0x3F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F,
0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xF1, 0xE1, 0xC2, 0x84, 0x84, 0x08, 0x10, 0x10, 0xE0,
0xE0, 0x10, 0x10, 0x08, 0x84, 0x84, 0xC2, 0xE1, 0xF1, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x3F, 0x1F,
0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7E, 0x7E, 0xFF,
0xFF, 0x7E, 0x7E, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};



uint8_t sprite_1_f8 [] = {
0xFF, 0xE1, 0xE1, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x40, 0x40, 0x20, 0x10, 0x10, 0x88, 0xC4, 0xE2, 0xE2, 0xF1, 0xF1, 0xF1, 0xF1, 0x71, 0x71, 0x3F,
0x3F, 0x71, 0x71, 0xF1, 0xF1, 0xF1, 0xF1, 0xE2, 0xC2, 0xC4, 0x88, 0x10, 0x10, 0x20, 0x40, 0x80,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE1, 0xE1, 0xE1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x40, 0x20, 0x10, 0x08, 0x88, 0xC4, 0xC2, 0xE2, 0xF1, 0xF8,
0xF8, 0xFC, 0x7E, 0x3F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x81, 0x80, 0x80, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0x80, 0x81, 0x81, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8,
0xF0, 0xE1, 0xE2, 0xC4, 0x84, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xFC, 0x3E, 0x1F, 0x1F, 0x0F, 0x07, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xE1,
0xCC, 0xCC, 0xE1, 0xF3, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0xFE, 0xFC, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0x7D, 0xF9, 0xF9, 0xF1, 0xE2, 0xC2, 0xC4, 0x88,
0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x01, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F,
0x7F, 0x5F, 0x7F, 0x3F, 0x2F, 0x3F, 0x1F, 0x0F, 0x07, 0x81, 0x40, 0x20, 0x20, 0x10, 0x08, 0x08,
0x84, 0xC2, 0xC2, 0xE1, 0xF1, 0xF9, 0xF9, 0x7D, 0x3F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F,
0x1F, 0x3F, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xF1, 0xE1, 0xC2, 0x84, 0x84, 0x08, 0x10, 0x10, 0xE0,
0xE0, 0x10, 0x10, 0x08, 0x84, 0x84, 0xC2, 0xE1, 0xF1, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x3F, 0x1F,
0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7E, 0x7E, 0xFF,
0xFF, 0x7E, 0x7E, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};








int buttonPin = 2;         // push button pin
volatile uint8_t displaySelect = LOW;        // variable to store the display status
volatile uint8_t pressCount = 0; 

void setup() {
    uView.begin();          // start MicroView
    uView.clear(PAGE);      // clear page

    pinMode(buttonPin, INPUT_PULLUP);      // initialize the pushbutton pin as an input

   /* Enables interupt 0 on pin 2 to trigger on a falling edge of the button press */
   attachInterrupt(digitalPinToInterrupt(buttonPin), button_press, FALLING);
}

void loop() {


  /* Changes sprites displayed based on the state of the display select */
  if(displaySelect == HIGH)
  {
    uView.drawBitmap(sprite_1_f1);
    uView.display();

    delay(500);

    uView.drawBitmap(sprite_1_f2);
    uView.display();

    delay(500);

    uView.drawBitmap(sprite_1_f3);
    uView.display();

    delay(500);

    uView.drawBitmap(sprite_1_f2);
    uView.display();

    delay(500);

    uView.drawBitmap(sprite_1_f1);
    uView.display();

    delay(500);

  }
  else
  {

    uView.clear(PAGE);      // clear page
     uView.display(); 
   }
}


void button_press()
{

  /* Toggles display state*/
  displaySelect = !displaySelect;

//////////////////////////////////////  Tester  //////////////////////////////////////
//  /*Check if the pushbutton is pressed. 
//    if it is not pressed, the displaySelect is HIGH:*/
//  if (displaySelect == HIGH) 
//  {     
//    uView.setCursor(0,0);       // set cursor at 0,0
//    uView.print("OFF");         // print OFF
//    uView.display();
//  } 
//  else 
//  {
//    uView.setCursor(0,0);
//    uView.print("ON ");
//    uView.display();
//  }    

}

Microview based Pendant Companion Repo

This repository contains all the code, CAD and sprite files used to create my first simple pendant based companion bot

Credits

Keshav Kai S. Krishna

Keshav Kai S. Krishna

2 projects • 2 followers
Just trying to make the world I want to live in. A world with giant robot creatures, ghosts in the shell and living sustainably.

Comments