Category: Uncategorized

  • Andrew’s Video Essay: A New Turn

    Sadly, I do have to start this post differently than the other ones. 

    This project is an inherently political project. This project stems from both love and hatred for the theatre community that built me up since age eight to ultimately reject me for who I was at twenty-three. There was a rejection for who I was in the context of politics.

    Donald Trump ran a campaign based on policies to get rid of trans* people in the public eye (banning trans women from sports, stripping our history from school curriculums and libraries across the United States) and getting rid of the care we need starting from denying those under eighteen access to reversible puberty blockers and in those who are old enough to start hormone replacement therapy (or HRT), hormones. About 1.1% of Americans identify as transgender, and another 1.5% did not identify as either male or female, leading to the assumption that these individuals are nonbinary. This is the creation of a trans hysteria. 

    I do not have the time to doom over the policies of our president-elect– I spent the weekend doing that already. What I do have time for is how to make this into art. The election threw in another chapter into this video essay. I am speaking with friends and former interviewees about the recent election, and that impact on their art. I will be talking to more people about how art from other times of oppression lead to the creation of today’s art.

    For now, I will be rewriting bits, choosing a new center to focus on, and going through with that plan.

  • Significant Progress: 3D Molecular Representations

    Hands up, crying emoji. Just cause I relate...

    Where we left off…

    Hello again to those reading the blog. It has been a complete struggle with the multi extruder going from issues galore to straight up malfunctioning. Point being I have made basically no progress with the multi extruder, and I plan to try my best to get something over the next few weeks. Regardless, to keep moving forward I have been mostly working with CAD to figure out a good way to interconnect multi-subunit structures. I have already printed one of the designs and I feel pretty good about how it came out.

    First off check out those organic supports… even if they didn’t improve the efficiency of printing, I would use them, I mean look at how cool they look.

    There are many parameters that have changed since when I first started printing these structures and I think for those who are trying to replicate this process it would be good to go over each change separately. Furthermore, there are many steps to this process that I never touched on and those will also be listed here as well.

    Where and how to find STL files of 3D molecular structures…

    Where: I have always taken STL files from a website called the Protein Data Bank (rcsb.org)

    Finding STL Files:

    • To obtain a molecular structure STL file you must first assign a 3D representation to the molecule of choice. This can be done after moving to the “Explore in 3D” window.
    Image showing what you would see during this first step.
    • When you are able to view your desired structure in 3D, we are then able to edit the 3D representation of the molecule. This is done under the “Add Representation” setting which is under “Components”
      • Note: Ensure you remove all of the previous representation that were assigned to the model prior to exporting the STL file. If this step is skipped, the compounding representations cause issues during printing.
      • Note: I have always used the “Gaussian Surface” or “Molecular Surface” representation for my prints, but I did find the “Gaussian Surface” representation prints more cleanly (Even though I think Molecular Surface looks way better 🙁 )
    Image showing what you would see during this second step.
    Image to disclaim the note below.

    Note: Noticed how there are both “Cartoon” and “Gaussian Surface” representations present for the polymer. If you look closely there are sections where the cartoon representation (ball and stick) is sticking out of the Gaussian surface.

    • After the representation is assigned to your Polymer (molecule) it may be in your best interest to delete the “water molecules” and ligands (unless you wish to print these as well in which case you will have to edit the ligands representation in the same fashion as stated in the last step).
    Image showing where to remove the water molecules.
    • Finally scroll down to “Export Geometry” as an “STL file.”
    Image showing where to export the STL file.
    What 3D-Printing Software do I use and what settings have I changed from default…

    Software: At my university we use Prusa printers and have therefore opted to use the Prusa software for 3D-printing. Keep in mind that any 3D-printing software can be used to have a similar effect, however I cannot promise the information I have provided transfers.

    Changes to settings: (At this point 11/11/24)

    • One of the main changes I made to my printer settings was the use of “Organic” supports. This was a fairly recent development for me however for the particular models I am printing it makes a huge difference.
      • Note: Regardless of how nice the organic supports are, soluble supports are still vastly superior.
    • Making minor adjustments to extruder/heat bed temperatures (increasing if clogging is an issue or decreasing if the print quality seems reduced; i.e drooping).
    • Other support settings that I have changed with variable rates of success include: reduction in “Top Interface Layers,” changing the support “Pattern,” and changing the support “Interface Pattern.”

    I have gone into more detail concerning most of these changes on other blog posts so check there if you are interested.

    The New and Improved?…

    Now that we got that out of the way I can discuss the progress I made over the last couple of weeks. I have been working with a molecule called hemoglobin during my last few prints and this is not without reason. Hemoglobin is the oxygen carrying molecule that resides in our blood which is composed of 4 subunits (typically 2 alpha and 2 beta subunits however there are some forms that are 2 alpha and 2 gamma). Of these 4 subunits each contains what is referred to as a protoporphyrin ring which is a complex ring structure that contains an iron center which is responsible for binding molecules like oxygen, carbon monoxide, and other molecules like 2,3-BPG. The 4 subunits of hemoglobin are folded into a quaternary structure that is formed through multiple hydrogen bonds and disulfide bridges. I know that sounds like a bunch of nonsense, but all of these characteristics of hemoglobin can be represented in a single 3D molecular representation. The bonding between subunits will be represented with pegs in some precise locations (not all as that would be crazy) and the distinct protoporphyrin rings can be shown using a disk that slides in and out of the model. That was a long-winded explanation but here is the final product…

    Image showing off model and stand separated.
    Image showing model and stand connected.
    Image of model and stand connected (different POV).
    Image of just the model to highlight the disks.

    Notice the disks. These are the disks that represent the protoporphyrin ring systems. There are only two just because I just wanted to test an idea. Also, later on these will be a different color to the base model.

    Image showing the model with the disks removed.

    What’s Next…

    These next few weeks are exciting as we have received a shipment of new PVA filament for soluble supports. The last batch seemed to have gone bad as large segments of the filament absorbed too much moisture. We also purchased a 3D filament dryer which I would highly recommend to anyone that plans to take on larger 3D printing projects.

    Furthermore, I plan on switching to a new design a new molecule called BCR-ABL. Now if you want to explore this before my next post GO FOR IT. I will be providing a semi-in-depth explanation of what this protein is, why is it a good protein for 3D modeling, and how it related to chronic myeloid leukemia (CML) in my next post. Oooooo, sneak peek I know… exciting.

    Seek peek secret...
  • Andrew’s Video Essay (I have lost track of time)

    The creative block is here.

    I really talk about “blocks” in creativity when it comes to reading or writing. I cannot finish a book or I cannot finish writing a piece. Those feelings are valid and true even when you are the only one stopping yourself. The new frontier, for me, is combining both the feelings of art and research. Well, I have hit the researcher’s block.

    There is a little site on the internet called the Internet Archive. I highly encourage everyone to at least see the library of what they offer. Earlier in the month, someone launched a DDOS attack on the site, making the public lose access to tons of data only found on the Internet Archive. This for me was a pinnacle moment. Libraries do not keep access to weird art, they keep access to what is most circulated and what will be most circulated. A “dead” art movement might be the first thing gone. When I saw the Internet Archive was down, I sat down with my advisors on this project and asked what I could do.

    The answer? Wait.

    After the month of October, I can finally log in. This was impossible yesterday when I checked on the site. The writing and recording of artists all around the globe are now back. I still wonder if I am in that creative block still. I only found out about the log in a minute ago. I still cannot explain the pouring of emotion over me. My job is back, but do I dive back in or wade in the waters?

  • Shifting Goals: 3D Molecular Representations

    Hello everyone, this is my fourth blog post that outlines updates on my 3D molecular representations project. This one might be shorter than previous posts, but there are a few things that I need to address. Firstly, the soluble support that I was using previously (Polydissolve S1 from Polymaker, PVA Filament) went bad and I am currently waiting for the new filament to come in. I was not aware that I needed to keep this filament in a very dry environment, and it seems the filament absorbed too much moisture and became extremely flimsy. This seems to be the reason why there were so many MMU loading errors and misprints as when the filament tries to move through the MMU tubing and into the MMU extruder it kept getting jammed. Secondly, I have tried to transition into using a combination of PETG/PLA filaments instead of the PLA/PVA filaments however I am still having issues with printing with multiple filaments.

    Side note: That weird white looking stuff on the base is spray glue from when I attempted to save this print with the only glue that I had near me… 🙁

    Stand Issue… And SOLUTION!

    I was satisfied with the old stand design, however, when I attempted to remove the supports, the peg snapped, and I decided to redesign the stand. The issue seemed to be a lack of support to the base of the peg which made it very unstable. Also, remember in a previous post I talked about added a simple design in the stand that displays the molecular name… well I did it and it turned out quite nicely. The new design is shown below:

    Also, this grey filament is PETG just like with the blue filament shown previously, and I must say it looks so much better than PLA. But just like with PLA, I still have some “support scarring” on the bottom of the model as shown below.

    Different Print Settings…

    I decided to make an effort to supplement the soluble support and did some digging into the advanced print settings on Prusa and found a few interesting things. Firstly, the default print settings have the interface pattern set to one that is most ideal for soluble supports and there is another setting that is recommended when soluble supports are not used.

    Under the “Print Settings” tab in Prusa, there is the “Rectilinear” option, which is ideal for non-soluble supports while the “Concentric” option is for soluble supports.

    Secondly, there is an option to make the interface layer between the supports and model much thinner and therefore easier to remove.

    Thirdly, there are support pattern options labeled “Grid,” “Snug,” and “Organic” which essentially changes the design of the support.

    • Grid: The default style that prioritizes sturdiness over all else and can result in supports that are extremely difficult to remove.
    • Snug: Similar to Grid except the supports conform to the shape of overhangs and results in reducing filament waste, easier to remove supports, and reduced stability in some parts of the print.
    • Organic: Think of tree branches that wrap around the model to give support instead of scaffolding like with Grid and Snug. This method is fast and cheap to print however it is a poor option for some models and often excels when used to print something like a mini figure.

    In the past I have always used “Grid” as that is what is set at default however, I tried using “Snug” for the redesign stand, and I personally think it helped with support removal. I have yet to use Organic however, I will be trying that sometime this week. Below is an image of the “Organic” support style that I found on google since it can be hard to visualized.

    Next Steps…

    My next objective is to take a molecular structure like hemoglobin and separate it into its 4 subunits (2 alpha and 2 beta subunits) for multiple reasons:

    1. This will allow for the models to be disassembled to be viewed as not just one structure but as multiple structures that come together and form one structure.
    2. This will improve print quality because molecular models are very complex and the autogenerated supports within the model can get stuck. This wouldn’t be an issue if I could figure out soluble support printing, but you know how that goes.
    3. This will allow for larger models to be printed as the separate parts can be arranged on the heat bed instead of altogether. This can further improve print quality as well because the model is being printed in a more horizontal fashion instead of vertically.
    4. This will allow pegs to be created in locations of known cysteine-cysteine disulfide bridges to further illustrate how these amazing molecules are created and folded. This is not just for looks either as the pegs will allow the model to be put together and displayed on the stand.

    That’s all for now. See you next week!

  • Evelynestallation Blog Post 6!

    Hello, friends! This was a huge week for the project- Cartland and I installed the lights on Saturday, October 19! We completely changed the plan while doing the installation because Cartland realized the lights fit perfectly within little grooves in the wall the media wall is mounted on. It’s going to look so cool!

    I also coded a loop that cycles for the day and one that cycles through the night. I’ll add my code to the bottom of this post!

    I had a few difficulties with the amount of voltage going into the lights, so I adjusted the code to be less bright and added a second voltage input for the lights on floor 2. I did accidentally fry the board on the 3rd floor, but we’re getting new ones, so hopefully they’ll work well. Quick tip: when you’re wiring a digital pin, don’t forget to also connect a ground wire to your microcontroller from your lights. Otherwise, you will probably fry your board.

    All we have left to do now is fix the 3rd floor board, check the timing of the code so it works well together, and figure out what we’re putting on the media wall! Come to the HCC on Friday, October 25 to see the lights in action!

    #include <Adafruit_NeoPixel.h>
    #ifdef __AVR__
      #include <avr/power.h>
    #endif
    #define PIN      5
    #define PIN2     7
    #define NUMPIXELS 300
    #define NUMPIXELS2 178
    
    Adafruit_NeoPixel pixels2(NUMPIXELS2, PIN2, NEO_GRB + NEO_KHZ800);
    
    Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    
    #define DELAYVAL 15
    #define DELAYVAL2 50
    #define DELAYVAL300 10 
    #define BIGDELAYLOOP  15400
    
    
    void setup() {
    #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
      clock_prescale_set(clock_div_1);
    #endif
    
      pixels.begin(); 
        pixels2.begin();
     
    
    
    }
    
    void loop() {
      for (int g=0; g<12; g++)
    {
      for(int i=0; i<NUMPIXELS; i++) {
    
    
        pixels.setPixelColor(i, pixels.Color(0, 0, 0));
         pixels.show();
       
        }
        for(int i=0; i<NUMPIXELS2; i++) {
    
    
        pixels2.setPixelColor(i, pixels2.Color(0, 0, 0));
         pixels2.show();
       
        }
      //rainbows comet loop
      
        for(int i=NUMPIXELS; i>71; i--) {
     
       pixels.setPixelColor(i, pixels.Color(255, 0, 0));
       pixels.setPixelColor(i+1, pixels.Color(255, 62.5, 0));
       pixels.setPixelColor(i+2, pixels.Color(255, 127.5, 0));
       pixels.setPixelColor(i+3, pixels.Color(0, 255, 0));
       pixels.setPixelColor(i+4, pixels.Color(0, 127.5, 255));
       pixels.setPixelColor(i+5, pixels.Color(0, 0, 255));
       pixels.setPixelColor(i+6, pixels.Color(255, 0, 255));
       pixels.setPixelColor(i+7, pixels.Color(0, 0, 0));
     
        
       
       pixels.show();
       delay(DELAYVAL300*4);
        }
        
        for(int i=0; i<NUMPIXELS; i++) {
    
    
        pixels.setPixelColor(i, pixels.Color(0, 0, 0));
         pixels.show();
       
        }
        for(int i=22; i<NUMPIXELS2; i++) {
     
       pixels2.setPixelColor(i, pixels2.Color(255, 0, 0));
       pixels2.setPixelColor(i-1, pixels2.Color(255, 62.5, 0));
       pixels2.setPixelColor(i-2, pixels2.Color(255, 127.5, 0));
       pixels2.setPixelColor(i-3, pixels2.Color(0, 255, 0));
       pixels2.setPixelColor(i-4, pixels2.Color(0, 127.5, 255));
       pixels2.setPixelColor(i-5, pixels2.Color(0, 0, 255));
       pixels2.setPixelColor(i-6, pixels2.Color(255, 0, 255));
       pixels2.setPixelColor(i-7, pixels2.Color(0, 0, 0));
     
        
       
       pixels2.show();
       delay(DELAYVAL300*4);
        }
        
        for(int i=0; i<NUMPIXELS2; i++) {
    
    
        pixels2.setPixelColor(i, pixels2.Color(0, 0, 0));
         pixels2.show();
       
        }
         delay(BIGDELAYLOOP);
        
        
        //triple sparkle
    
         for (int a=0; a<100; a++)
    {
    long w= random(0,NUMPIXELS);
    long p= random(0,NUMPIXELS);
    long q= random(0,NUMPIXELS);
    long ww= random(0,NUMPIXELS2);
    long pp= random(0,NUMPIXELS2);
    long qq= random(0,NUMPIXELS2);
    
        pixels.setPixelColor(w, pixels.Color(255, 255, 255));
        pixels.show();
        pixels.setPixelColor(p, pixels.Color(255, 255, 255));
        pixels.show();
        pixels.setPixelColor(q, pixels.Color(255, 255, 255));
        pixels.show();
       
        pixels2.setPixelColor(ww, pixels2.Color(255, 255, 255));
        pixels2.show();
        pixels2.setPixelColor(pp, pixels2.Color(255, 255, 255));
        pixels2.show();
        pixels2.setPixelColor(qq, pixels2.Color(255, 255, 255));
        pixels2.show();
    
       delay(200);
    
       pixels.setPixelColor(w, pixels.Color(0, 0, 0));
       pixels.setPixelColor(p, pixels.Color(0, 0, 0));
       pixels.setPixelColor(q, pixels.Color(0, 0, 0));
       pixels.show();
    
       pixels2.setPixelColor(ww, pixels2.Color(0, 0, 0));
       pixels2.setPixelColor(pp, pixels2.Color(0, 0, 0));
       pixels2.setPixelColor(qq, pixels2.Color(0, 0, 0));
       pixels2.show();
    }
    for(int i=NUMPIXELS; i>0; i--) {
    
    
        pixels.setPixelColor(i, pixels.Color(0, 0, 0));
         pixels.show();
       
        }
    
        for(int i=NUMPIXELS2; i>0; i--) {
    
    
        pixels2.setPixelColor(i, pixels2.Color(0, 0, 0));
         pixels2.show();
       
        }
    //rainbow wash
    
    for (int s=0; s<NUMPIXELS; s++){
     pixels.setPixelColor(s+51, pixels.Color(125, 0, 0));
    pixels.show();
    pixels2.setPixelColor(s, pixels2.Color(125, 0, 0));
    pixels2.show();
       delay(DELAYVAL300*2);
    
        }
        
    
     for(int i=0; i<NUMPIXELS; i++) {
       pixels.setPixelColor(i+51, pixels.Color(125, 62.5, 0));
      
       pixels.show();
       pixels2.setPixelColor(i, pixels2.Color(125, 62.5, 0));
    pixels2.show();
       delay(DELAYVAL300*2);
        }
           
    
        for(int i=0; i<NUMPIXELS; i++) {
       pixels.setPixelColor(i+51, pixels.Color(127.5, 127.5, 0));
      
       pixels.show();
       pixels2.setPixelColor(i, pixels2.Color(127.5, 127.5, 0));
    pixels2.show();
       delay(DELAYVAL300*2);
        }
       
        
         for(int i=0; i<NUMPIXELS; i++) {
       pixels.setPixelColor(i+51, pixels.Color(0, 127.5, 0));
      
       pixels.show();
       pixels2.setPixelColor(i, pixels2.Color(0, 127.5, 0));
    pixels2.show();
       delay(DELAYVAL300*2);
        }
         
    
        for(int i=0; i<NUMPIXELS; i++) {
       pixels.setPixelColor(i+51, pixels.Color(0, 0, 127.5));
       pixels.show();
       pixels2.setPixelColor(i, pixels2.Color(0, 0, 127.5));
    pixels2.show();
       delay(DELAYVAL300*2);
        }
        
         
    
         for(int i=0; i<NUMPIXELS; i++) {
       pixels.setPixelColor(i+51, pixels.Color(75, 0, 100));
       pixels.show();
       pixels2.setPixelColor(i, pixels2.Color (75, 0, 100));
    pixels2.show();
       delay(DELAYVAL300*2);
        }
            
    
    
    
    for(int i=0; i<NUMPIXELS; i++) {
    
    
        pixels.setPixelColor(i, pixels.Color(0, 0, 0));
         pixels.show();
         pixels2.setPixelColor(i, pixels2.Color(0, 0, 0));
    pixels2.show();
       
        }
    
        //rainbow sparkle
    
     for (int a=0; a<200; a++)
    {
    long w= random(0,NUMPIXELS);
    long p= random(0,NUMPIXELS);
    long q= random(0,NUMPIXELS);
    long ww= random(0,NUMPIXELS2);
    long pp= random(0,NUMPIXELS2);
    long qq= random(0,NUMPIXELS2);
    long x= random(0,255);
    long y= random(0,255);
    long z= random(0,255);
    long xx= random(0,255);
    long yy= random(0,255);
    long zz= random(0,255);
    long xxx= random(0,255);
    long yyy= random(0,255);
    long zzz= random(0,255);
        pixels.setPixelColor(w, pixels.Color(x, y, z));
        pixels.show();
        pixels.setPixelColor(p, pixels.Color(xx, yy, zz));
        pixels.show();
        pixels.setPixelColor(q, pixels.Color(xxx, yyy, zzz));
        pixels.show();
         pixels2.setPixelColor(ww, pixels2.Color(x, y, z));
        pixels2.show();
        pixels2.setPixelColor(pp, pixels2.Color(xx, yy, zz));
        pixels2.show();
        pixels2.setPixelColor(qq, pixels2.Color(xxx, yyy, zzz));
        pixels2.show();
       delay(200);
        pixels.setPixelColor(w, pixels.Color(0, 0, 0));
        pixels.show();
        pixels.setPixelColor(p, pixels.Color(0, 0, 0));
        pixels.show();
        pixels.setPixelColor(q, pixels.Color(0, 0, 0));
        pixels.show();
         pixels2.setPixelColor(ww, pixels2.Color(0, 0, 0));
        pixels2.show();
        pixels2.setPixelColor(pp, pixels2.Color(0, 0, 0));
        pixels2.show();
        pixels2.setPixelColor(qq, pixels2.Color(0, 0, 0));
        pixels2.show();
    
    }
    
        //fade into blue
    
    
    for (int s=0; s<125; s++){
      for(int i=0; i<NUMPIXELS; i++) {
       
     pixels.setPixelColor(i, pixels.Color(0, 0, s));
    pixels.show();
     pixels2.setPixelColor(i, pixels2.Color(0, 0, s));
    pixels.show();
    for (int f=0; f<5; f++)
    {
      s++;
    }
       
      }
    
        }
        //fade every other to pink
    
      for (int r=0; r<125; r++) {
        for(int i=0; i<NUMPIXELS; i++) {
       if (i % 2 == 0) {
    pixels.setPixelColor(i, pixels.Color(r, 0, 125));
    pixels.show();
     pixels2.setPixelColor(i, pixels2.Color(r, 0, 125));
    pixels2.show();
    for (int f=0; f<5; f++)
    {
      r++;
    }
       
       }
       
       
      }
      }
    
    
      //blue/pink marquee
    
      for (int f=0; f<5; f++){
        for(int i=0; i<NUMPIXELS; i++) {
       if (i % 2 == 0) {
    pixels.setPixelColor(i, pixels.Color(0, 0, 125));
    pixels.show();
     pixels2.setPixelColor(i, pixels2.Color(0, 0, 125));
    pixels2.show();
       }
       else {
        pixels.setPixelColor(i, pixels.Color(63, 0, 63));
    pixels.show();
     pixels2.setPixelColor(i, pixels2.Color(63, 0, 63));
    pixels2.show();
       }
       
      }
      delay (100);
    
     for(int i=0; i<NUMPIXELS; i++) {
       if (i % 2 == 0) {
    pixels.setPixelColor(i, pixels.Color(63, 0, 63));
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(63, 0, 63));
    pixels2.show();
       }
       else {
        pixels.setPixelColor(i, pixels.Color(0, 0, 125));
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(0, 0, 125));
    pixels2.show();
       }
       
      }
    
    delay (100);
      } 
    
    //fade all to pink 
    
    for (int r=0; r<63; r++) {
        for(int i=0; i<NUMPIXELS; i++) {
       if (i % 2 ==! 0) {
    pixels.setPixelColor(i, pixels.Color(r, 0, 63));
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(r, 0, 63));
    pixels2.show();
    r++;
    
       }
       
      }
      }
      //reverse wash out 
    for (int s=NUMPIXELS; s>0; s--){
     pixels.setPixelColor(s, pixels.Color(0, 0, 0));
    pixels.show();
    pixels2.setPixelColor(s-122, pixels2.Color(0, 0, 0));
    pixels2.show();
       delay(DELAYVAL300);
    
        }
    
    
    //end of 5 minute code
        for (int p = 0; p<55; p++)
      {
    int x=0;
    
    int y = 50;
    
    //blue set and sparkle
      for(int i=0; i<NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 0, y));
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(0, 0, y));
    pixels2.show();
      }
    
    for (int a=0; a<60; a++)
    {
    long w= random(0,NUMPIXELS);
        pixels.setPixelColor(w, pixels.Color(255, 255, 255));
        pixels.show();
        pixels2.setPixelColor(w, pixels2.Color(255, 255, 255));
    pixels2.show();
       delay(225);
       pixels.setPixelColor(w, pixels.Color(0, x, y));
       pixels2.setPixelColor(w, pixels2.Color(0, x, y));
    pixels2.show();
    }
    
      //green shift, 225 delayvals
    
    for (int z = 0; z<50; z++){
    
    for(int i=0; i<NUMPIXELS; i++) {
    
    pixels.setPixelColor(i, pixels.Color(0, x, y));
    
    pixels.show();
    
    pixels2.setPixelColor(i, pixels2.Color(0, x, y));
    pixels2.show();
    
    }
    
    delay(DELAYVAL);
    
    y--;
    
    x++; }
    
    
    
    //sparkle, 450 delayvals
    
    for (int a=0; a<60; a++)
    {
    long w= random(0,NUMPIXELS);
        pixels.setPixelColor(w, pixels.Color(255, 255, 255));
        pixels.show();
        pixels2.setPixelColor(w, pixels2.Color(255, 255, 255));
    pixels2.show();
       delay(225);
       pixels.setPixelColor(w, pixels.Color(0, x, y));
       pixels.show();
       pixels2.setPixelColor(w, pixels2.Color(0, x, y));
    pixels2.show();
    }
    
    
    
    //shift to blue, 255 delayvals
    
    for (int p = 0; p<50; p++){
    
    for(int i=0; i<NUMPIXELS; i++) {
    
    pixels.setPixelColor(i, pixels.Color(0, x, y));
    
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(0, x, y));
    pixels2.show();
    
    }
    
    delay(DELAYVAL);
    
    y++;
    
    x--; }
    
    
    }
      //end of 12 hour daytime loop
    
      //begin 12 hour nighttime loop-- 2400 repetitions of 30-second loop
    
      for (int q=0; q<2400; q++)
      {
      int x=0;
      int y=0;
      int z=120;
    
    for (int t=0; t<50; t++) //red to green
    {
    for(int i=0; i<NUMPIXELS; i++) {
    
    pixels.setPixelColor(i, pixels.Color(z, x, y));
    
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(z, x, y));
    pixels2.show();
    
    }
    
    delay(DELAYVAL2);
    
    z--;
    x++;
    }
    
    for (int t=0; t<50; t++) //green to blue
    {
    for(int i=0; i<NUMPIXELS; i++) {
    
    pixels.setPixelColor(i, pixels.Color(z, x, y));
    
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(z, x, y));
    pixels2.show();
    
    }
    
    delay(DELAYVAL2);
    
    y++;
    x--;
    }
    
    for (int t=0; t<50; t++) //blue to red
    {
    for(int i=0; i<NUMPIXELS; i++) {
    
    pixels.setPixelColor(i, pixels.Color(z, x, y));
    
    pixels.show();
    pixels2.setPixelColor(i, pixels2.Color(z, x, y));
    pixels2.show();
    
    }
    
    delay(DELAYVAL2);
    
    y--;
    z++;
    } 
     
      }
        
    }
    }
    
  • Third Steps: 3D Molecular Representations

    Image of the hemoglobin molecule described in a previous blog post.

    Good evening, everyone, I am back once again with another update on my “3D Molecular Representations” project. Since my last post I have been working in CAD and trying my hardest to get this MMU printer to work. In this blog post I will mostly be talking about what I have been up to in CAD as I did not make much progress on fixing the printer issues. Also, the image above shows the print that was running in my last blog post. I personally think the white appears to have a pinkish shade to it as a result of red and white filament being dispensed through the same extruder. I would have expected the wipe tower would completely negate this effect but it that does not seem to be the case.

    Designing a Molecule Stand!

    Since my goal is to print models of molecular structures, I thought I might want to have a nice figure stand. This was a simple task and I’m pretty proud with how it looks.

    Image of the simple base and peg design.

    How It’s Made…

    Image of the first step which is a drawing of a rectangle and triangle.

    First start with a thin rectangle with a triangular top using the sketch tool.

    Image showing how the extrude function is used.

    Then using the extrude tool, extend both shapes symmetrically to the distance that you desire.

    Image showing placement of next triangle.

    Then flip your object 90 degrees and use the sketch tool to draw another triangle.

    Image showing how to extrude using special tools to create the pyramid shape.

    Then extend the new shape but make sure you change “cut” to “intersect” in order to create the pyramid like shape.

    Image showing how fillets are made.

    Then to create fillets, select each of the corner edges and use the fillet tool (or press f) to create fillets.

    Image showing how Chamfers are made.

    To add Chamfers, select each of the top edges and press the modify tab to select “chamfer.”

    Image of the final baseplate.

    I was also thinking it might be super simple to make a little “design” in the base of the stand that displays the name of the figure. I think next for the next iteration I’ll make an effort to include this detail.


    Making Pegs for the Stand!

    The Issue…

    My goal in this step is to make a peg attached to the stand which matches up perfectly to a hole in the model itself. This step took me a bit of time since I was not familiar with mesh objects vs model objects. Model objects are basic structures that can be easily made in CAD with a sketch and extrude tool, whereas mesh objects are complex structures constructed by connecting varied sizes of triangles to order to replicate the shape a desired object. When I tried to use both mesh and model objects in Fusion360, the two would not interact with each other and could not act as a single piece but would instead operate as two separate entities. When working with STL files (the files used for 3D printing) it will almost always contain mesh objects.

    The Solution…

    Now on the surface this is not an issue since the stand and the peg are to be printed separately. However, in order to make a peg hole in the model the mesh and model objects must be able to interact with each other. A model object, in this case a tube, is used to delete a “tube shaped” section of the mesh object to replicate a peg hole. Shown below are a series of images that outline how this is done.

    Image showing how the cylinder can be made.

    First upload the STL file of choice and then create a circle using the sketch tool and extend it to the desired length. The diameter of the circle dictates the size of the peg hole, and the length will dictate how deep the peg hole will be.

    Image showing placement of cylinder.

    Drag the cylinder into the STL model and position it in the location of the peg hole.

    Image showing how to use tessellate.

    Use the tessellate function on the cylinder.

    Image showing where the combine tool is.

    Use the combine tool on the cylinder and the STL model ensuring to select the settings shown below.

    Image showing how to use the combine tool.

    Ensure the “target body” is the STL object and the “tool body” is the cylinder. Select the cut option and press ok.

    Image showing the STL after being cut.

    The Result…

    Image of STL with stand design.

    The BIG BAD…

    The Great Multi-Extruder Printing Problem

    In my last blog post I discussed a big issue I have been running into with multi-extruder printing which is… well working with multiple extruders. I have found that using any filament other than PLA in the MMU results in clogging, jamming, misprints, filament oozing, and print crashes. I seriously cannot think of a solution to this issue and will be trying my best to address the issue next time.

    Sneak Peak

    For the sake of progress, I decided use PETG filament with PLA filament instead of PVA/PLA. This is because the two filaments are heated at different temperatures and would therefore cool at different times, causing the bond between them to be weaker.

    -PLA recommends a nozzle temperature of around 215°C and a heat-bed temperature of 60°C.

    -PETG recommends a nozzle temperature of around 250°C and a heat-bed temperature of 70-80°C.

    Now after all that good idea talk… ruined because once again the MMU struggled to dispense two different forms of filament without clogging and canceling the print. Instead, I started a print using only PETG using the non-MMU printer just to test the fit of the peg in the hole. My guess is the hole on the model needs to be just slightly wider in diameter to the peg and will also require a deeper hole. Regardless, see you next time!

  • Andrew’s Video Essay #3

    It has genuinely been a while since I talked about this project and where I am at with this project. A note to any students reading this: October is one of the hardest months to exist as a senior. Even though I took a week off from posting anything, I still have updates about my project.

    I took a trip to DC the other weekend with my friend– and a huge feature on the video essay– Billie. We met in Theatre History and ended up bonding over performance art, so of course I asked her to see a weird stage play with me. We ended up seeing Dracula: A Comedy of Terrors at the Workhouse Arts Center. I was not allowed to take any photos of the show or inside of the theatre, so trust me when I say it was like nothing I have seen before. Turns out the night we came, we ran into two of our former classmates who were in the audience, and two UMW alums were involved in the production.

    Billie and I walked around DC and talked about theatre all day and how we’ve seen each other grow inside and outside of theatre. We ended up having to shut up about that because it was a good topic to talk about in this video essay. Our conversation really tied the vision I had of the project together, and we will record the rest whenever we both have free time. We both have plans to see more art in general with the Hirshhorn releasing a new exhibit entitled Basquiat x Bansky.

    My next post will only be a week away! That post will focus more on research and how I put my thoughts together in the form of a script. Look forward to that when you have the chance.

  • Evelynestallation Blog Post #5!

    Hey everyone! Thanks for reading today’s blog post! For the past two weeks, I’ve looked at several big questions that will dictate the course of this entire project. The first question is how to power the lights. They run off of 5 volt energy, and a typical wall socket puts out 240 volts. That’s a huge difference. Fortunately, Amazon sells a product that steps down the voltage from a wall socket to 5 volts. Here’s the link- it even comes with a little piece that lets me attach wires to the positive and negative outputs!

    Amazon link DC power converter

    However, the next big question doesn’t have a quick Amazon fix. We want to sync these lights up to the HCC media wall, which would be insanely cool. I met with Josiah, who runs the Media Wall, on Monday. He told me that the media wall is controlled by a Macbook and is connected via cables that run from the projector to a closet on the second floor of the HCC. The projector itself can’t connect to WiFi or Bluetooth. Upon further reflection, the best way to sync the lights with an ethernet-controlled projector is probably… massive amounts of code that time the lights really specifically. Oh, and turning everything on at the exact same time.

    Trying to brute-force the project presents another difficulty: that of timing. Arduino coding can do almost anything, but what it can’t do is magically know the time. In order to set the lights on a cycle that matches the media wall during the day and shifts to something soothing at night, I have to program the Arduino to count every second and add it all up.

    I visited my favorite Internet forum (Arduino Project Hub) to find out more about counting seconds and found some handy open-source code made for a clock. I’m attaching the link below as this blog post’s code. Of course, it’ll take modification, but there is potential within this code for a 24-hour system that controls sparkly lights and changes vibes completely during the night. I hope you have fun with this code, and I can’t wait to include my version of it!

    Arduino Clock Project

  • Second Steps: 3D Molecular Representations

    Generic picture of a molecular model in CAD software.

    3D Printing

    Hello everyone! Its been a little too long since my first post but I am back and with a lovely mess of problems. Over the last few weeks, I have been looking into how to use a 3D printer. More specifically, I am trying to learn how to use a multi-extruder printer. The two major benefits of a multi extruder printer are utilizing multiple colors for a single print and utilizing soluble supports. The image below shows a 3D print that uses PLA filament as structural support. Specifically in rainbow print of the protein “Seipin” you can see the rough surface where the structural supports were pulled. Let me just say it is not fun trying to pick these models apart without breaking something along with it.

    Sepin Protein 3D Print (rainbow colored)
    tRNA 3D print (red)

    The idea behind using soluble supports is that simply submerging the model in water after printing dissolves supports, leaving just the model behind. The specific filament I am going to be using is Polydissolve S1 from Polymaker which is a PVA filament that is soluble in water and compatible with PLA filament as well.

    The Issue…

    I am currently unable to print using soluble filament at all. This issue has presented itself in many forms. I’ll start with the simplest mistakes and move to the mistakes that are currently unsolved.

    The image below is not a soluble filament print, but it does show THE ISSUE… with non-soluble support prints.

    Image of a non-scientifically accurate Bacteriophage that broke after printing.

    The Simplest: The Wipe Tower

    If you are familiar with multi-extruder 3D printing, there is a function called the “Wipe Tower.” The Wipe Tower is a structure that is printed in association to your model in order to allow for smooth transitions between the different color/type of filament. An example of what I mean is shown in the video below.

    The issue is PrusaSlicer, the software I use, does not “allow” soluble material to be printed with a wipe tower. This is not true and can be bypassed by following these steps:

    Print Settings (Top Tab) –>Support Material (Left Side Tab) –> Top Contact Z Distance set to “0 (soluble)”

    This allows for the wipe tower to be enabled in the “Multiple Extruders” side tab by checking the box. Subsequently the options “support material/raft/skirt extruder” and “support material/raft interface extruder” can be set to the extruder of your choice containing the soluble material (Mine was 2 but it does not matter as long as it is the same as the extruder the material is loaded in).

    Picture showing where to change the Z-distance.
    Picture showing how to assign extruders to supports only.

    The Annoying but Simple: Loading/Unloading Errors

    A very frustrating, but simple, issue I run into is the loading and unloading errors that can sometimes occur multiple times in a single print. My current guess into why this is happening so much is due to PVA material being much softer than PLA and the material does not guide as nicely as the PLA. I think this because I only have consistent errors when trying the PVA material and almost never have the issue using only PLA material. If you are reading and have a better suggestion for a different brand of PVA filament let me know!!

    Also, I am sorry I forgot to take a video of this event but I’m sure it’ll happen again so look forward to that.

    The Most Complex: INFINITE LOADING..

    The biggest, and most frustrating, issue is after everything is set up and the print is started. During this time the MMU (Multi-Material Unit) would endlessly load and unload the filament. Occasionally I would have issue with the 3D printer just going to the corner of the baseplate and unloading filament endlessly which is not good. This leads me to believe this is a program/machine error and not due to the PVA material. There are many different ways to approach this problem and based on my initial research on Reddit, some others found a similar issue and it was a hardware problem. After ensuring there are no clogs or any too loose/tight screws we can ensure sensors are working properly. The filament sensor may be my issue here however I have yet to check.

    Image of a labeled MMU Prusa Printer filament module. Includes filament sensor label.

    Again, I forgot to video this issue but trust me it’ll happen again so stay tuned.

    Moving Forwards: Multi-Color Print

    Instead of never using this multi-extruder 3D printer due to the issues with soluble support I decided to just print with multiple colors of PLA material. To show off the multi-color print best I decided to print a representation of Hemoglobin from the protein database (code: 3PEL). Strangely enough without any troubleshooting this print test started immediately without any issues at all. As much as I wish I could show the final product right away at the time of writing this it has yet to be completed (It takes 13 hours for a 2in x 2in model).

    Image of the Hemoglobin model including structural supports and the wipe tower.
    The hemoglobin model without structural supports or wipe tower. Red and orange highlight different subunits.

    Next Steps: More Work in 3D Printing

    The plan for my next blog post will be to move past the issues I ran into over the last few weeks and actually get even the simplest model printed. If that does not go to plan, then I might start designing a mini-final project. My vision for this includes a model that can be stuck together with pegs that were added using AutoDesk Fusion.

  • Andrew’s Video Essay #2

    Okay, I have to go back in time to talk about this moment.

    It’s April 2024. I am feeling generally horrible. Five months before this, I was told I would never be able to do something I am getting my degree in. Instead of creating art, I start writing a senior proposal with the basic in a published paper titled “Nightmares and Dreams on Progesterone: Trans* Embodiment and Intermedia.” The published paper was essentially an autobiography/instruction guide for art from a creative named Lorelei d’Andriole, and her work in performance art. I fell in love with this particular paper, and emailed the author immediately. Once I figured out that I was heading in this direction with my video essay, I emailed Lorelei again, and we set up a Zoom meeting from her home in Lansing, Michigan.

    Lorelei was an absolute joy to talk with. She gave me honest, thoughtful answers about the work I am going to produce, and she even gave me advice about the future in an interview about her work. We talked about the struggles of practicing art as transsexuals, what the transition period looks like for artists, and some of the topics mentioned in her work. I won’t spoil the whole interview– because some of it is for the video essay– but meeting and talking to Lorelei was the first step I needed in order to take this project from point A to point B.

    This project was stagnant the past few weeks. There is not much to do when you are working with nothing, but I do see the vision of this project getting clearer, which is something I could not say two weeks ago. Now, time for more research and scripting.