Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Arnov Sharma
Published © MIT

OverEngineered Pen Holder 3.0

Its a pen holder equipped with programmable display.

BeginnerFull instructions provided1 hour238
OverEngineered Pen Holder 3.0

Things used in this project

Hardware components

Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
×1
Seeed Studio XIAO Expansion Board
Seeed Studio XIAO Expansion Board
×1

Software apps and online services

Fusion
Autodesk Fusion
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

STEP FILE

BASE

Sketchfab still processing.

Holder

Sketchfab still processing.

Schematics

SCH

Code

Quote Sketch

C/C++
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR   0x3C

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("I hold pens and your secrets. Shhh!");   //QUOTE01
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Hold onto your pens, we are going digital!");  //QUOTE02
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Penning down ideas, one byte at a time!"); //QUOTE03
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Who needs a diary when you have a pen holder with a screen?!"); //QUOTE04
  display.display();
  delay(2000);


}

Dilating Eyes

C/C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128  // OLED display width, in pixels
#define SCREEN_HEIGHT 64  // OLED display height, in pixels

// Declaration for SSD1306 display connected using I2C
#define OLED_RESET    -1  // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Define eye parameters
const int eyeCenterX1 = 40; // X position for left eye
const int eyeCenterX2 = 88; // X position for right eye
const int eyeCenterY = 32;  // Y position for both eyes
const int eyeRadius = 20;   // Radius of the eye
const int minPupilRadius = 5;   // Minimum radius of the pupil
const int maxPupilRadius = 10;  // Maximum radius of the pupil
const int animationSpeed = 50;  // Speed of the animation

void setup() {
  // Initialize the display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.display();
  delay(2000); // Pause for 2 seconds

  // Clear the buffer
  display.clearDisplay();
}

void loop() {
  for (int i = minPupilRadius; i <= maxPupilRadius; i++) {
    drawCatEyes(i);
    delay(animationSpeed);
  }
  for (int i = maxPupilRadius; i >= minPupilRadius; i--) {
    drawCatEyes(i);
    delay(animationSpeed);
  }
}

// Function to draw the cat eyes with dilating pupils
void drawCatEyes(int pupilRadius) {
  display.clearDisplay();

  // Draw left eye
  display.drawCircle(eyeCenterX1, eyeCenterY, eyeRadius, SSD1306_WHITE);  // Eye outline
  display.fillCircle(eyeCenterX1, eyeCenterY, pupilRadius, SSD1306_WHITE); // Pupil

  // Draw right eye
  display.drawCircle(eyeCenterX2, eyeCenterY, eyeRadius, SSD1306_WHITE);  // Eye outline
  display.fillCircle(eyeCenterX2, eyeCenterY, pupilRadius, SSD1306_WHITE); // Pupil

  display.display();
}

Credits

Arnov Sharma
330 projects • 337 followers
Just your average MAKER
Contact

Comments

Please log in or sign up to comment.