Ria John
Published © GPL3+

Cylo Period Tracker

Cylo is a Period Tracker that can be hung in your bedroom so you can visually see as you get closer to your period.

BeginnerWork in progress20 hours216
Cylo Period Tracker

Things used in this project

Hardware components

Adafruit Feather HUZZAH with ESP8266 WiFi
Adafruit Feather HUZZAH with ESP8266 WiFi
×1
Adafruit NeoPixel Digital RGB LED Strip 144 LED, 1m White
Adafruit NeoPixel Digital RGB LED Strip 144 LED, 1m White
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Hot glue gun (generic)
Hot glue gun (generic)
Soldering iron (generic)
Soldering iron (generic)
Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Custom parts and enclosures

Components

Schematics

Circuit

Code

Cylo Code

Arduino
// A basic everyday NeoPixel strip test program.

// NEOPIXEL BEST PRACTICES for most reliable operation:
// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.
// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.
// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
//   connect GROUND (-) first, then +, then data.
// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
//   a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.
// (Skipping these may work OK on your workbench but can fail in the field)

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN    13

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 56

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)


// setup() function -- runs once at startup --------------------------------

void setup() {
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}


// loop() function -- runs repeatedly as long as board is on ---------------

void loop(){
  
  segment1(strip.Color(255,   0,   0), 100); // Red
  delay(5000);
  segment2(strip.Color(255,   0,   0), 100); // Red
  delay(5000);
  segment3(strip.Color(255,   0,   0), 100); // Red
  delay(5000);
  segment4(strip.Color(255,   0,   0), 100); // Red
  delay(5000);
  segment1(strip.Color(0,   0,   0), 0); // off
  segment2(strip.Color(0,   0,   0), 0); // off
  segment3(strip.Color(0,   0,   0), 0); // off
  segment4(strip.Color(0,   0,   0), 0); // off
  delay(5000);
}

void segment1(uint32_t color, int wait) {
  for(int i=0; i<=15; i++) { // For each pixel between x and y
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
  }
      strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
}
void segment2(uint32_t color, int wait) {
  for(int i=16; i<=31; i++) { // For each pixel between x and y
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
  }
  strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
}
void segment3(uint32_t color, int wait) {
  for(int i=32; i<=45; i++) { // For each pixel between x and y
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
  }
  strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
}
void segment4(uint32_t color, int wait) {
  for(int i=46; i<=56; i++) { // For each pixel between x and y
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
  }
  strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
}


// Some functions of our own for creating animated effects -----------------

// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single 'packed' 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}

Credits

Ria John
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.