Jump to content

[Sri Lanka] Sanjaya Bhanu


Recommended Posts

  • 2 weeks later...
  • 2 weeks later...

Hi All, 

 

First of all I'm super greatful to be competing against some of the best modders in the world and a big thanks goes to the team from TT, Andy, Lilly and everyone at TT. 

 

So for the first update, I started working on a 3D design. For now I won't go into details. but I will be 3D printing these designs and airbrushing them. for some cool looks. I am also thinking of adding some electronics to it to make it even cooler. 

I will leave it at that for this update, but I'll be back with another update very soon. 

 

image.thumb.png.b2b4c44f408ac3132b8ba78487fe0961.png

 

Update on the progressu 😆

so I started the 3d printing process, given that my printer is only a Sonic Mini 4k, the print area is really small and i have to print so many hours. So far close to 100 hours of printing alone 😭 

but here are some components. These are pillars of the structure and this is two pieces glued together. We need a total of 12 prints to make 6 pillars

4A7DA79A-BD89-46F1-A5EB-2D1BD4C4BB6F.thumb.jpeg.d2fa8482eed779d617cd65f6205d2b9f.jpeg21F048B4-9F3D-4CF0-BA20-8C0ADD6F4B50.thumb.jpeg.f47909bf42c4d2276f797f56c711407f.jpegF93B5BE4-2F22-426A-96B3-D337089E54BA.thumb.jpeg.e92027ab6478871922d399e70c3bce09.jpegD89E0C96-28D4-4083-B29C-C5B5A1699C64.thumb.jpeg.c5e2ef225eec596b853a4c7200a69e6e.jpeg

Link to comment
Share on other sites

Hi Guys m back with another update!

the pros of having a small resin printer is that you can print anything you can think of

but the cons of a small resin printer is that it’s small and cannot print anything big… sooo it’s time to glue 😭

this process by far took the longest time and it was really hard. And then I had to sand them down as well 😭😭😭 But I think it turned out really good. 
 

i used resin and and a UV lamp to make it a bit faster to work with than traditional glue. It also helps fill in the gaps easier

F4CD210D-BDDE-4904-A2AC-F36021968CA7.thumb.jpeg.7a930ea1d0fb373540a25ee82659c511.jpeg691E8E21-41CA-47A9-BADB-379BC3814EB0.thumb.jpeg.e308e26723bfbba9be8028fc3f1a0f8e.jpeg510617B0-1D41-4C4B-B10F-24C08747621E.thumb.jpeg.5bb054b9371e91e9662fefaba78f3ae0.jpegF5C66FEC-A138-47E2-9B04-599C8A69ED78.thumb.jpeg.092170d115626023d947f76b5d861d57.jpegD28303A2-0C6C-4DA0-A3B0-A7B41DE67458.thumb.jpeg.94d20166ac8c266a986a3f21c6b8315a.jpegC2D42AF4-B1AE-410A-9463-472CD7B18AD7.thumb.jpeg.b215db56a93671faff73e3304deab62d.jpeg5E8E584E-D057-4653-910C-7FD085F25F0F.thumb.jpeg.7e526552dcf47dcf0f7231299437fe6c.jpegE2939A13-80B7-4739-BC29-5C3399FA09EB.thumb.jpeg.68457456662a03251e050ee1421795f5.jpegEAC39D02-68C5-474F-A00B-64351B1AC6BB.thumb.jpeg.4375a9e07c4ab4c1dd19d721639efdd5.jpegC2406C9D-A33B-49D2-9222-35C34D99A9DD.thumb.jpeg.cb1ff54b867e20c7569ba975fb4da7b3.jpeg

 

Link to comment
Share on other sites

Adding more details to the paint.

i wanted to keep everything in metallic color. So the colors are as follow.

1. Gun metal as the main color

2. Star Silver for large accents

3. Copper for smaller intricate details

 

by far the most annoying and hard thing was cutting the masking tape for the fine details. 

456A6381-2882-4895-B904-84927B86EFBD.thumb.jpeg.75f29c2377a5499f34ac920fa21b21d2.jpegD20D8B6A-CFDB-42C6-82F6-AF7FDC8AFFB1.thumb.jpeg.99818e4d98076d19c7805acac6a6f8b6.jpeg7574A3DC-867F-40A5-96E9-8FA8D6FBB316.thumb.jpeg.0b24ca8cf005c9f0a9e02500a9e7a0b5.jpeg152E02CE-449E-4282-BD6A-AA5D61F17223.thumb.jpeg.8f54ce9963d6005179309174a99da42d.jpeg5A84FCAB-13F4-4EDE-8700-61BA5CD0D043.thumb.jpeg.9106ab3cbf2e7a94b9b8422a7a7d2d19.jpegF4D87205-D6A8-4C33-835C-987E8A92CE93.thumb.jpeg.2867f3642d9f5b5cc87620f6b06d7f97.jpeg490E32B6-72CC-44E4-B541-C934CD81127A.thumb.jpeg.d4e6b15aac90f1c5d5bfdd93a0f90f50.jpeg

Link to comment
Share on other sites

I’ve been doing a lot of wiring on this, rush off to the ending. Each half of the mod contains an ESP32 to control lighting Motors. 
i printed several mechanical parts, and also individually soldered 5050 SMD LEDs onto the RAM to make sure that it can be lit up.9AF424A6-913B-4352-92E1-CADBE5AAD0C6.thumb.jpeg.b1e63f864eb3c082c98667069a190acc.jpeg50681497-5042-43B9-8BFD-40DFE5E3A68D.thumb.jpeg.04fbecd492dd685da8fe8eecd75e7ffa.jpeg106D3F51-5036-4402-B36E-EC32AD613260.thumb.jpeg.13170d35d5f3f5be8e9817f8126e6ac0.jpeg50681497-5042-43B9-8BFD-40DFE5E3A68D.thumb.jpeg.04fbecd492dd685da8fe8eecd75e7ffa.jpeg6E150AC4-C664-4080-8C0D-6A88DAE0B6C2.thumb.jpeg.0cfbeff59d2a50dfe1b6ef6fda44056a.jpeg35785BA6-73AD-4DB6-B642-363AB715FB2A.thumb.jpeg.5e1b2b05463926483c371428f03f5d0e.jpeg515EEFB9-9089-4095-9689-31F062F28E23.thumb.jpeg.938f4a357e9c83fa42710748198c63f0.jpeg4915226F-9808-4BFD-8C81-F0C3C9BA582A.thumb.jpeg.22b88a93b303e2cec928db4da0d55912.jpegD69257C3-EA7C-4630-BA3D-A67F5F17A35C.thumb.jpeg.6c69f0d0827ce672d87b6e9720786e64.jpeg48BED1FD-690A-4D06-8517-B078B0000A81.thumb.jpeg.0e2ea27c0e954a25f1c00bc91e0f6668.jpeg

All the mechanical and Electronic work is included below.

26108973-7F57-47BA-A4FE-431B34514AC3.jpeg

FAE90856-1C6A-44F2-B348-32FAD202048F.jpeg

Link to comment
Share on other sites

So I had to write custom code to make this all light up and function how I wanted. You can see below the code used. You are also free to use it if u need it for a build.

 

ESP8266(the main controller)

// A non-blocking 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    4
#define LED_PIN1    5
#define LED_PIN2    0
#define LED_PIN3    2

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

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip1(LED_COUNT, LED_PIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2(LED_COUNT, LED_PIN2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip3(7, LED_PIN3, 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)

unsigned long pixelPrevious = 0;        // Previous Pixel Millis
unsigned long patternPrevious = 0;      // Previous Pattern Millis
int           patternCurrent = 0;       // Current Pattern Number
int           patternInterval = 2000;   // Pattern Interval (ms)
int           pixelInterval = 150;       // Pixel Interval (ms)
int           pixelQueue = 0;           // Pattern Pixel Queue
int           pixelCycle = 0;           // Pattern Pixel Cycle
uint16_t      pixelCurrent = 0;         // Pattern Current Pixel Number
uint16_t      pixelNumber = 7;  // Total Number of Pixels
int           blnkint = 500;
int           blnkhld = 64;
int           blnkoff = 500;
int           brthint = 30;
bool          swon = 0;
int           prevon = 0;
int           br = 0;
int           brdr = 0;
unsigned long brthPrev = 0;
unsigned long blnk1Prev = 0;
unsigned long blnk2Prev = 0;
unsigned long rainbowPrev = 0;
long firstPixelHue = 0;


int a = 5;
int b = 4;
int c = 3;
int d = 2;
int e = 1;
int f = 0;

int g = 0;

void ICACHE_RAM_ATTR isr(){
  Serial.println("ISR");
  if (swon == 0){
    swon = 1;
    digitalWrite(13, LOW);

  }
  else {
    swon = 0;
    strip3.fill(strip.Color(0,   0,   0));
    strip3.show();
    digitalWrite(13, HIGH);
  }
}


// setup() function -- runs once at startup --------------------------------
void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(12), isr, FALLING);
pinMode(12, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

  

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.clear();            // Turn OFF all pixels ASAP
  strip.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)
  strip1.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip1.clear();            // Turn OFF all pixels ASAP
  strip1.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)  
  strip2.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip2.clear();            // Turn OFF all pixels ASAP
  strip2.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)
  strip3.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip3.clear();            // Turn OFF all pixels ASAP
  strip3.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)
 strip.fill(strip.Color(127,   0,   0));
 strip1.fill(strip.Color(127,   0,   0));
 strip2.fill(strip.Color(127,   0,   0));
 strip3.fill(strip.Color(0,   0,   0));
 strip3.show();
  
}

// loop() function -- runs repeatedly as long as board is on ---------------
void loop() {
  unsigned long currentMillis = millis();                     //  Update current time
  if (swon == 0) {
    
  if(currentMillis - brthPrev >= brthint) {
    brthPrev = currentMillis;
        Serial.println("lp brth");
    breath();
  }
  if(currentMillis - blnk1Prev >= blnkint) {//  Check for expired time
    strip1.fill(strip.Color(255, 0, 0));
    Serial.println("lp blnk1");
    strip1.show();
 }
  if(currentMillis - blnk1Prev >= blnkint+blnkhld) {        //  Check for expired time
    strip1.fill(strip.Color(0, 0, 0));
    Serial.println("lp blnk1 off");
    blnk1Prev = currentMillis;
    strip1.show();
   }
  
    if(currentMillis - blnk2Prev >= blnkint+blnkoff) {        //  Check for expired time
    strip2.fill(strip.Color(255, 0, 0));
    Serial.println("lp blnk2");
    strip2.show();
  }
    if(currentMillis - blnk2Prev >= blnkint+blnkoff+blnkhld) {        //  Check for expired time
    strip2.fill(strip.Color(0, 0, 0));
    Serial.println("lp blnk2 off");
    blnk2Prev = currentMillis;
    strip2.show();
  }

  }
  if (swon == 1) {
    Serial.println("swith pressed");
    
  if(currentMillis - pixelPrevious >= pixelInterval) {
        pixelPrevious = currentMillis;
        theaterChase(strip.Color(255, 255, 255), strip.Color(200, 200, 200),strip.Color(150, 150, 150),strip.Color(100, 100, 100),strip.Color(50, 50, 50),strip.Color(25, 25, 25)); // White
  }
  if(currentMillis - rainbowPrev >= 20) {  
        rainbowPrev = currentMillis;     
        rainbow();
}
}
}

// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void breath(){
Serial.println("breath");
Serial.println(br);
if (brdr == 0){
  if(br < 225){
    br = br+5; 
    strip.fill(strip.Color(br, 0, 0));
  }
  else {
    brdr = 1;
  }
}
if (brdr == 1){
  if(br >0){
    br = br-5;
    strip.fill(strip.Color(br, 0, 0));
  }
  else {
    brdr = 0;
  }
}
  strip.show();
  
}

void rainbow() {   
  // Hue of first pixel runs 5 complete loops through the color wheel.
  // Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
  // means we'll make 5*65536/256 = 1280 passes through this loop:
  if(firstPixelHue < 65536){
    firstPixelHue += 256;
    // strip.rainbow() can take a single argument (first pixel hue) or
    // optionally a few extras: number of rainbow repetitions (default 1),
    // saturation and value (brightness) (both 0-255, similar to the
    // ColorHSV() function, default 255), and a true/false flag for whether
    // to apply gamma correction to provide 'truer' colors (default true).
    strip3.rainbow(firstPixelHue);
    // Above line is equivalent to:
    // strip.rainbow(firstPixelHue, 1, 255, 255, true);
    strip3.show(); // Update strip with new contents
  }
  else {
    firstPixelHue = 0;//  Loop the cycle back to the begining
  }
}

void theaterChase(uint32_t color, uint32_t color1, uint32_t color2, uint32_t color3, uint32_t color4, uint32_t color5) {  //  Update delay time
  strip.clear();
  strip1.clear();
  strip2.clear();
  if(a < (pixelNumber - 1)){
    a = a+1;
    strip.setPixelColor(a, color); //  Set pixel's color (in RAM)
    strip1.setPixelColor(a, color); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(a, color); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    a = 0;
    strip.setPixelColor(a, color); //  Set pixel's color (in RAM)
    strip1.setPixelColor(a, color); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(a, color); //  Set pixel's color (in RAM)
}
  if(b < (pixelNumber - 1)){
    b = b+1;
    strip.setPixelColor(b, color1); //  Set pixel's color (in RAM)
    strip1.setPixelColor(b, color1); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(b, color1); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    b = 0;
    strip.setPixelColor(b, color1); //  Set pixel's color (in RAM)
    strip1.setPixelColor(b, color1); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(b, color1); //  Set pixel's color (in RAM)
}
  if(c < (pixelNumber - 1)){
    c = c+1;
    strip.setPixelColor(c, color2); //  Set pixel's color (in RAM)
    strip1.setPixelColor(c, color2); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(c, color2); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    c = 0;
    strip.setPixelColor(c, color2); //  Set pixel's color (in RAM)
    strip1.setPixelColor(c, color2); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(c, color2); //  Set pixel's color (in RAM)
}
  if(d < (pixelNumber - 1)){
    d = d+1;
    strip.setPixelColor(d, color3); //  Set pixel's color (in RAM)
    strip1.setPixelColor(d, color3); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(d, color3); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    d = 0;
    strip.setPixelColor(d, color3); //  Set pixel's color (in RAM)
    strip1.setPixelColor(d, color3); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(d, color3); //  Set pixel's color (in RAM)
}
  if(e < (pixelNumber - 1)){
    e = e+1;
    strip.setPixelColor(e, color4); //  Set pixel's color (in RAM)
    strip1.setPixelColor(e, color4); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(e, color4); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    e = 0;
    strip.setPixelColor(e, color4); //  Set pixel's color (in RAM)
    strip1.setPixelColor(e, color4); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(e, color4); //  Set pixel's color (in RAM)
}
  if(f < (pixelNumber - 1)){
    f = f+1;
    strip.setPixelColor(f, color5); //  Set pixel's color (in RAM)
    strip1.setPixelColor(f, color5); //  Set pixel's color (in RAM)                       //  Update strip to match
    strip2.setPixelColor(f, color5); //  Set pixel's color (in RAM)              //  Update strip to match
}
else{
    f = 0;
    strip.setPixelColor(f, color5); //  Set pixel's color (in RAM)
    strip1.setPixelColor(f, color5); //  Set pixel's color (in RAM)                //  Update strip to match
    strip2.setPixelColor(f, color5); //  Set pixel's color (in RAM)
}
    strip.show();                             //  Update strip to match 
    strip1.show();                             //  Update strip to match 
    strip2.show();                             //  Update strip to match 

}

 

ESP32(motor controller)

// MultiStepper.pde
// -*- mode: C++ -*-
//
// Shows how to multiple simultaneous steppers
// Runs one stepper forwards and backwards, accelerating and decelerating
// at the limits. Runs other steppers at the same time
//
// Copyright (C) 2009 Mike McCauley
// $Id: MultiStepper.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $

#include <AccelStepper.h>

// Define some steppers and the pins the will use
// Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper2(AccelStepper::FULL4WIRE, 26, 33, 25, 32);

bool swon = 0;


void setup()
{  
    pinMode(34, INPUT);
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(500.0);
    stepper2.moveTo(1000000000.0);
}

void loop()
{
    swon = digitalRead(34);
    if (swon == 0){
    stepper2.run();
}
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...