Final Project Dry Fil

...

Trying to think out of the box but came back to the box :)

Are you tired of wasting good filament due to moisture problem?
Do you want to avoid poping sound while extrusion?
Do you want to have a neat perfect print?
How to keep your filament dry?

The presentation date :First slot on 10th of july 2022 here is the video (seek to 02:05 ends at 05:23).
Here is the slide and video which were presented.

Copyright © MHQEP

Project Ideation

The idea of this project is to DIY a filament dryer, which will accommodate 1 spool of filament.
It is a great device which solves the ruining of the filament because of moisture absorbed from the air. This device will prevent that by maintaining temperature and humidity according to the filament specifications in that specific enclosure.
The idea is also mentioned in week1 .
I am excited and motivated to fabricate this idea as it will help many people.

    1. Starting from a hobbyist who prints on a 3d printer for personal use.
    2. To professional companies or institutes - example Fablab Egypt where this device will increase the life of the filament and get a very neat print.

I was inspired by the new filament dryer products which are sold on amazon and found this interesting portable device.
Also found some past projects of fab academy , but no one yet had made the portable concept

image
image

After discussing with my instructor it was advisable to start small and then extend beyond so as for my project the first aim will be to DIY fab dryer as a normal 1 spool filament dryer box and then if possible, I will customize it to be portable use as well.
The general Idea for this project is to maintain a certain temperature and humidity inside its enclosure to dehydrate the filament spool.
Main key features for this project are the heating element, the temperature/ humidity sensor and the control system (lcd + push buttons) to operate the machine manually, or any kind of communication module which will allow any user to control the machine easily.
Here is the new portable device sketch. The other one is the famous looking one (which will be made first).
Also for the cad design humble request to view week2 .

image image

Project Planning

The technical modules in my projects are as follow: from week17.

  1. Input :
    1. User Input: The project will contain 2 push buttons. To set the temperature according to the material.
    2. Sensing: temperature control will be needed in my project which is the vital technical module, it is to maintain the temperature and humidity inside the enclosure and dry the moisture from the filament.
  2. Action / Output :
    1. According to the temperature reading, the heater will turn on/off accordingly.
    2. The temperature reading will also be displayed on the LCD.
    3. To control the airflow and ventilation purposes, a small dc fan will be situated inside the base box.
  3. Power management:
    1. Adapter 5V 2A x2, one for the MCU and some components and other for the heater and a fan via mosfet for higher current supply.
  4. MCU:
    1. I will use attiny1614 for my final project as all the peripherals needed are there (as discussed in week4 ).
  5. Construction parts:
    1. I am thinking to 3d print the base box and the lid cover with PETG material to resist the heat.
    2. Transparent acrylic will be used for the enclosure to easily see the flament state through it.

Till now required components are:

    • Temperature and humidity sensor.
    • Fan.
    • Heater.
    • Lcd.
    • Push buttons.
    • Power cable.
    • Power switch button.
    • Mosfet / relay.
    • Interface (bluetooth / Ethernet module).
    • PCB- attiny1614 and other SMD components.
    • Screw terminals / pin headers.
    • Wire connectors for input / output devices. (small jumper wires).

My final project is divided into spiral tasks as Prof. Neil always suggests, which are:

SR. NO. Time Frame. Task
1 1 week Decide / Confirm components and calculate the power management accordingly.
2 1 day Laser cut prototype and assemble it.
3 5 days Requisite the components needed for assignment time frame.
4 2 days 1st spiral control/connect heater.
5 1 day 2nd spiral add - control/connect fan.
6 1 day 3rd spiral add - display on LCD.
7 1 day 4th spiral add - push buttons.
8 2 days 5th spiral test all together.
9 2 day Placing study of components on the prototype.
10 2 days Design pcb and fabricate.
11 3 days Design final project enclosure and fabricate.
12 3 days Design final project base box and fabricate.
13 2 days Design final project lid cover and fabricate.
14 1 day Assemble construction parts.
15 1 day Include components.
16 2 days Test full project.
17 7 days Debug any last issues
18 3 days Documentation
...

FAB LAB EGYPT filament rack

Still need to dive in:

    • Research.
    • Kind of heaters (heater wire / 3d printers / Reptile).
    • Which material to use for gripping the heater.
    • Power supply (220v).
    • Casing environment unknown.
    • Sensor Dht11? place?.
    • Will it work on different materials.

Professor Neil taught us an important lesson which is to have spiral development so I incorporated it in my final project. I found it a very useful and important skill which can also be used in various things in our lives. Thus I kept my documentation accordingly.
Spirals:

1. Minimum features:

I started my final project journey by discussing the idea of my project with my instructors and noting their comments on it. The feedback for this project was positive with many cool ideas but mainly targeting to make it as simple as possible so that I could really achieve it.
A. Components:
BOM, bill of materials played a very important role in the process, as according to the components I can finally start designing in CAD. Thus, I did some research for every component that I have listed and confirmed my choice with my instructors.
The BOM is included above. As for the heater, I planned to use a heating pad because it was compact and small with low wattage ( small power supply for my whole project).

image
image image

B. CAD: (prototype)
I started designing a low fidelity prototype of my final project. I kept it as simple as possible so that after I fabricate it , test all components and integrate it then only I will know all the addons and final design concepts. So that is why I fabricated everything on a laser CNC machine and made a bending part by fabricating a living hinge on wood. I made a simple box on maker case website and added the living hinge but the total length was too long for the machine to cut so I had to divide it into parts. I added the puzzle joint on the sides and kept the living hinge all one part.
On the top of the box I drew a simple ventilation design, to indicate the hot air flow from inside to the top enclosure.
Finally I added 2 parallel rectangular 5x 50mm slots for the filament to fit on it and keep it gripped.
I included some basic fixed holes like LCD and push buttons on the front side of the box and on the side big holes for the fan to ventilate the air for the electronics.
I fabricated an additional layer of wood to act as a separator for the heater from electronics. As wood is good insulation.

DXF files
image
image image

C. Electronic circuit: / Programming and Integrating:
I used the spiral development method for the electronic designing and programing both together and integrating them in spirals.
I started with each component on its own and got familiar with the circuit design as well as programming in Arduino C on attiny 1614 which I had fabricated in week 6. Example I started with the 2 LEDs and 1 push button with simple blinking code as the button pressed. Then I added the LCD with I2C connection, I used 2 libraries for it: wire.h for the I2C connection and liquidcrytal.h library for the LCD display.
I integrated 1 fan in the current circuit and coding but it did not work as the attiny doesn't give out enough current to run the fan. So I decided to use the mosfet as practiced in the output devices week. Finally it worked.
It was time to explore the heater which I had bought. I had used the mosfet again to check the circuit connection and whether the heater itself was in working condition or not. But I couldn't use it thoroughly as I hadn't integrated the ntc thermistor sensor yet.
I used prof. Neil ntc board circuit connection but couldn't understand the code so I had to search for it. Thanks to my instructors who also helped me in my search found a simple code with simple connection and tried on the sensor separately and it worked.
I finally integrated the code by getting help from my previous coding and some comments from my instructors to use the push buttons as interrupts when I explored this function for the first time.
The code finally was integrated and did some tests with integration of circuits also.
The fan and the heater were first connected to one mosfet, I observed that the fan didn't work properly in parallel nor in series connection. So I decided to use 2 mosfets.

                                    #include                            // library for I2C connection
                                        #include               //liberary for LCD with I2C 
                                        LiquidCrystal_I2C lcd(0x27, 20, 4);         // set the LCD address to 0x27 for a 16 chars and 2 line display
                                        #define btngreen 9                          // set button green on pin no. 9
                                        #define btnred 8                            // set button red on pin no. 8
                                        #define ledgreen 2                          // set led green for power on pin no. 2
                                        #define ledred 3                            // set led red for heater indication on pin no. 3
                                        #define fan 0                               // set fan for air direction on pin no. 0
                                        #define sensor 10                           // set thermistor sensor on pin no. 10
                                        #define heater 1                            // set heater on pin no. 1
                                        float t;                                    //create variable for temperature analog reading input
                                        char bluetooth = '0';                       //create variable for serial blutooth reading check
                                        bool sys = false;                           // make the sys funcion off
                                        void btngreen_int(void)                     //interupt command when pressed button green
                                        {
                                            sys = true;                             // make the sys funcion on
                                        }
                                        
                                        void btnred_int(void)                       //interupt command when pressed button green
                                        {
                                            sys = false;                            // make the sys funcion off
                                        }
                                        void setup() {
                                          pinMode(btngreen, INPUT_PULLUP);          // input pullup to gnd
                                          pinMode(btnred, INPUT_PULLUP);            // input pullup to gnd
                                          pinMode(ledgreen, OUTPUT);                // led green output
                                          pinMode(ledred, OUTPUT);                  // led red output
                                          pinMode(fan, OUTPUT);                     //  fan via mosfet
                                          pinMode(sensor, INPUT);                   // temperaturesensor
                                          pinMode(heater, OUTPUT);                  // heater via mosfet
                                          lcd.init();                               // initialize the lcd
                                          lcd.backlight();                          // blink black light
                                          lcd.setCursor(1, 0);                      //set cursor to the first row on the first cell
                                          lcd.print("Welcome");                     // display welcome on LCD
                                          delay(500);                               // delay 5 seconds for view it properly
                                          attachInterrupt(digitalPinToInterrupt(btngreen), btngreen_int, FALLING); //interrupt command for button green which directs to button green funtion commands and its status is whenever it reads LOW.
                                          attachInterrupt(digitalPinToInterrupt(btnred), btnred_int, FALLING);     //interrupt command for red green which directs to red green funtion commands and its status is whenever it reads LOW.
                                          digitalWrite(ledgreen, 1);                // set green led on
                                          digitalWrite(ledred, 0);                  // set red led off
                                          Serial.begin(9600);                       // start serial communication for bluetooth
                                        }
                                        void loop() 
                                        {
                                           if(Serial.available() > 0) {            // if statement for serial availability
                                            bluetooth = Serial.read();             // save the reading in this variable
                                          if (bluetooth == '1')
                                              sys = true;                          // when the reading decects 1 starts the sys function
                                          else if (bluetooth == '0')
                                              off();                               // when the reading decects 0 starts the off function
                                           }
                                          if(sys)                                  // when sys function called do the following 
                                          {
                                            int temp = calcT();                    // put the reading of calcT output in temp variable
                                            if(temp <= 52 && temp >= 48)           // when the temperature reaches between 48 to 52 do the following
                                              limit();                            // start limit reached function
                                             if (temp < 48)                       // when the temperature is below 48 degrees do the following
                                              hearteron();                        // start heateron function
                                            else if (temp > 52)                   // when the temperature is above 52 degrees do the following
                                              off();                              // start off function
                                         }
                                         else                                     // when sys function is not called do the following
                                           off();                                 // start off function
                                        }
                                        float calcT() {                           // wehn calcT function is called do the following
                                          int t = analogRead(sensor);             // read the thermistor sensor NTC and save it in this variable
                                          float B = 3750;                         // do the calculations to return the temperature in degrees
                                          float T0 = 298.15;
                                          float R0 = 10000.0;
                                          float R1 = 10000.0;
                                          float rr1;
                                          rr1 = R1 * t / (1024.0 - t);
                                          t = 1 / (log(rr1 / R0) / B + (1 / T0));
                                          return (float)(t - 273.15);
                                        }
                                        void hearteron()
                                        {
                                          lcd.clear();
                                          lcd.setCursor(1, 0);
                                          lcd.print("Heating T:");
                                          lcd.setCursor(13, 0);
                                          lcd.print(calcT());
                                          digitalWrite(ledred, 1);
                                          digitalWrite(fan, 1);
                                          digitalWrite(heater, 1);
                                        }
                                        void limit() {
                                          lcd.clear();
                                          lcd.setCursor(1, 0);
                                          lcd.print("Temperature:");
                                          lcd.setCursor(13, 0);
                                          lcd.print(calcT());
                                          lcd.setCursor(2, 1);
                                          lcd.print("Limit reached");
                                        }
                                        void off() {
                                          lcd.clear();
                                          lcd.setCursor(1, 0);
                                          lcd.print("Off Temperature:");
                                          lcd.setCursor(13, 0);
                                          lcd.print(calcT());
                                          lcd.setCursor(2, 1);
                                          lcd.print("Ready");
                                          delay(10);
                                          digitalWrite(ledred, 0);
                                          digitalWrite(heater, 0);
                                          digitalWrite(fan, 0);
                                        }
                                
Arduino file
image image
image image image image

D. Electronic design & Fabrication Soldering Stuffing:
I started designing my PCB as soon as I confirmed and tested my circuit diagram. I designed it on kicad as practiced throughout the academy and fabricated on Roland mdx20 machine. My design included more than 28 pin headers which provided MCU GPIOs, VCC and GND as required for each component. I also added a screw hole as a drill to be made while fabrication for the screw to hold the pcb itself. Some initials and text were also inserted to indicate the component connection with the board.
I also had cut my board layout on red vinyl sheet on roland vinyl cutter machine, to give my board a professional look and also as an alternative to silkscreen :)

image image image image image
image image

E. CAD: redesign for final enclosure
I redesigned the final model after confirming all aspects needed to confirm for designing.
I included the following: insulating holder, wire holder slots, programing slot, thermistor sensor slot, loft tool for ventilation and nut slot for pcb fixation.
here is the CAD model

image
image

F. Fabrication:
2 major methods of afbrication was used:
1) 3D printing : I fabricated my base box on Prusa mks3, orange PLA+ material so that it matches the prusa color and ABS black material for the middle top cover to have the strenght to take the weight of the filament spool & doesn't melt when the heater is working and passsing the hot air through it continously.
2) laser cutting: for my enclosure I used 2mm transparent acrylic sheet so that the filament spool is visible.
I used the same sheet for acrylic bending on stove and finishing it with hot air gun.

image image
image

G. Integration / wire management
This was very tideous job as my calculations were wrong and it was very dificult to my big hands in the project, but after so much effort and time I finally came to satisfying conclsion, waiting for the next spiral to design and integrate and do wire mangement more better.
I had to solder jumper wires to the components for better connectivity.

image
image

H. Debugging/integrating complete features
The debugging and testing method was fused in all stated steps above. But to clearify I documented it separately as challenges and issues with its solution.
1) clearence test.
The base box was fabricated by 2 materials, the box by PLA and the lid cover by ABS. So I tested with small scaled cube box and cover to test the clearence between the 2 materials for a perfect snap fit. 0.2mm clearance was observed to be the best clearence for the prusa 3 printer in the lab.
2) slots and holes test.
Fabricating on 3d printers results in shrinkage in the holes and slots, so I had to compensate the clearance and tolarence so that every component would fit perfectly. Tip: Instead of printing the part 2 times, laser cut it many times and make sure that the components fit perfectly or not because the clearencehere and kerf differance are the same.
3) code debugging for bluetotth communication.
Bluetooth communication was added later in the spiral development, so as I integrated the code for the bluetooth serial communication, the buttons lost its function and didn't know how to deal with the code. At first I tried a simple if statement code with "and &&" in between for adding the bluetooth. But manually works and bluetooth communication didnt responded. Then I changed the symbol to "or ||" stil one functions and other not. At last my instructor helped me with it by trying to add interupt option which led to satisfying result with both manually and bluetooth communication working properly together.
4) Fixing the PCB needed to drill on pcb manually which caused the pcb not to function well.
Solution was to re solder some components. Because of the vibration or force or while gripping the pcb while drilling the components might got loose.

image

I. Dry Run:
Observation from testing the part.
1) The enclosure does not heat properly either beacuse of the heater itself is weak or the clearence is high from the fan or the sensor position it wrong.
2) The design of the enclosure needs more revising and updating to be more user friendly.
3) The Power cable slot and the nut of the board and the wire holders, not to mention the middle insulator holder part also need revising.
4)The bluetooth code need also revision, as the off system is not working properly.
5) The arcylic enclosure need attention because it is now very dirty. recommended new bending and handling it with more productive way and with up most care.
6) Advance feature needs rotary incoder with presets, to be more user friendly.

image

Stay tuned for more updates and addons complete and nice to have features.