• aditya mehrotra.

filament updates: getting a hopper built in time for the resistors to arrive [updates]

So while my SPL simulation is running, I took a few minutes to build the prototype hopper for the filament extruder out of some very simple materials. In fact, we just used the casing of the old scioly frame. The white FRP.

Here's the main hopper bay, it's really just a curved piece of FRP that's been placed under the auger and attached with the two brackets shown. I don't think this structure will get very hot - but if it does, what we will do is add some insulation between the hopper and the brackets. In-fact, since we're waiting on those resistors we might as well try to add some insulation in.

Then we took a second piece of the FPR and attached one of the ends to the hopper itself cutting a slit allowing the auger to come through and then the other end to the top of the 3D printed motor mount. We sealed any gaps with the caution tape (mostly for looks) and wrote the fun "NO HANDS" message so no one goes reaching into the hopper. The idea is the plastic will get pulled into the extrusion chamber by the auger from this hopper.

Here's a good initial video of it working. We tested it to make sure none of the hopper interferes with the auger itself and the good news is, it doesn't. So we should be good to go overall - we're really just waiting for those 10K resistors to show up so we can complete the whole temperature reading setup and then we'll be good to go on the extrusion side I think. We might even be ready to start extruding things by the end of today! Now the only things left after the resistor are:

(1) all of the software
(2) the fabric casing for the whole structure
(3) the fabric hopper for the plastic
(4) the testing
(5) the forward cooling system to slowly cool the filament to harden (we could even use a water tray maybe)

But all of that is going to come only after we get the resistors and get the software running and run some test extrudes you know - because otherwise we'll probably end up ripping things off and modifying and etc. And we don't want to do too much ripping off.

We do, however, need to get this display working because for some reason it really is not working. And I don't think it's a power issue.

Okay... so we fixed the display by doing absolutely nothing. I wiggled the wires, I re-uploaded the code, and then I pressed the arduino reset button for a long time and then finally something happened - the display we created booted up and everything was fine.

While we're at this - what we're going to do is start setting up that code file for the actual version of this system.

Filament Labs | ONE (filament extrusion system)
 ----> filament_core.ino core machine software
 This software is the main core software for the filament
 labs ONE three-d printer filament extruder. This code controls
 the display, the auger, the heating elements, and reads data from
 the thermistor and the encoders. It allows users to select
 the material they would like to extrude and the machine
 automatically sets the settings.
 Filament Labs started making the ONE with the hopes of starting
 a recycling program that we could collect plastic that isn't 
 being recycled effieciently and turn it into three-d printer
 filament to reduce the wastage of resources. Please help our
 open source project by contributing! 
 Software Version: v0.0.1 BETA
 Date Last Modified: 06.12.2020
 Verification: un-verified
 Written by filament labs for the filament labs ONE
 This project is licensed under a Creative Commons Attribution
 4.0 International License.
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Servo.h>
// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
#define relay_pin 3
#define outputA A0
#define outputB A1
#define motor_pin 4
int counter = 0; 
int aState;
int aLastState;
Servo motor;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void setup() {
 // setup and diagnositcs code:
 Serial.println("Booting up Filament Labs ONE!");
 tft.begin(); //start the display
 //relay setup code for the system  
 pinMode(relay_pin, OUTPUT);
 digitalWrite(relay_pin, HIGH);
 //setup code for the encoder
 pinMode (outputA,INPUT);
 pinMode (outputB,INPUT);
 // Reads the initial state of the outputA and attaches the motor_pin
 aLastState = digitalRead(outputA);
 // run full system diagnostics 
 uint8_t x = tft.readcommand8(ILI9341_RDMODE);
 Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
 x = tft.readcommand8(ILI9341_RDMADCTL);
 Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
 x = tft.readcommand8(ILI9341_RDPIXFMT);
 Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
 x = tft.readcommand8(ILI9341_RDIMGFMT);
 Serial.print("Image Format: 0x"); Serial.println(x, HEX);
 x = tft.readcommand8(ILI9341_RDSELFDIAG);
 Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
 Serial.println(F("Diagnositcs over, ready to use!"));
 //start the system 
 //setups the motor by sending zero-motion signal
void loop() {
 // main code
 tickEncoder(); //measures the value of the encoder (see in aState)
 * tickEncoder() --> updates the encoder must be run at each timestep
void tickEncoder() {
 aState = digitalRead(outputA); // Reads the "current" state of the outputA
 // If the previous and the current state of the outputA are different, that means a Pulse has occured
 if (aState != aLastState){ 
 // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
 if (digitalRead(outputB) != aState) { 
 counter ++;
 } else {
 counter --;
 aLastState = aState; // Updates the previous state of the outputA with the current state
 * dispalySystemInfo() --> function that writes all the system information
 * to the screen of the device
unsigned long displaySystemInfo() {
 unsigned long start = micros();
 tft.setCursor(0, 10);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2);
 tft.println("filament labs | ONE");
 tft.setCursor(0, 20);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2);
 tft.setCursor(0, 50);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("System Information:");
 tft.setCursor(0, 65);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Max Wire Temperature: 1000 deg F");
 tft.setCursor(0, 75);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Max Allowed Wire Temperature: 500 deg F");
 tft.setCursor(0, 85);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Max Nozzle Temperature: 300 deg F");
 tft.setCursor(0, 95);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Max Motor Speed: 146 RPM");
 tft.setCursor(0, 105);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Motor Nominal Voltage: 12 V");
 tft.setCursor(0, 115);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Motor Encoder Resolution: 663 PPR");
 tft.setCursor(0, 125);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Heating Coil Nominal Voltage: 110 V");
 tft.setCursor(0, 140);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Extrudable Materials: Nozzle Temp/RPM");
 tft.setCursor(0, 155);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("PLA: 187 deg C/6 RPM");
 tft.setCursor(0, 165);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("ABS: 209 deg C/9 RPM");
 tft.setCursor(0, 175);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("HIPS: 200 deg C/9 RPM");
 tft.setCursor(0, 185);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("T45: 190 deg C/9 RPM");
 tft.setCursor(0, 195);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("TPU: 205 deg C/8 RPM");
 tft.setCursor(0, 205);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("HDPE: 200 deg C/9 RPM");
 tft.setCursor(0, 215);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("PETG: 210 deg C/6 RPM");
 tft.setCursor(0, 225);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("NYLON: 240 deg C/9 RPM");
 tft.setCursor(0, 240);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Software Version: v0.0.1");
 tft.setCursor(0, 250);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("Built by Filament Labs in Cambridge, MA");
 tft.setCursor(0, 260);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("For support contact: adim@mit.edu");
 tft.setCursor(0, 275);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.setCursor(0, 290);
 tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
 tft.println("This project is licensed under a Creative Commons Attribution 4.0 International License.");

So this first, beta version of the code, all we did was copy over the individual code files we were testing earlier from tutorials/etc to one code file and organized it out way. The code will first run diagnostics on all the system and then do any setup. Then it will ask the user to choose what kind of filament they are extruding and then it will control the temperature and the auger to extrude the filament. Most control algorithms in here are very simple bang-bang control algorithms because anything more isn't necessary.

#updates #omgrobots #filament_one #yay #arduino_projects

0 views0 comments
© copyright 2019 | aditya mehrotra