User Tools

Site Tools


bdev:filamentextruder_recyclebot

Warning: Undefined array key -1 in /var/www/html/dokuwiki/inc/html.php on line 1458

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
bdev:filamentextruder_recyclebot [2022/10/25 17:36]
richard
bdev:filamentextruder_recyclebot [2022/11/05 23:52] (current)
richard
Line 1: Line 1:
 ====== Filament extruder recyclebot ====== ====== Filament extruder recyclebot ======
  
 +====== filabotmega.ino ======
  
 +
 +<code>
 +
 +#include <PID_v1.h> 
 +#include <Wire.h>
 +#include <SoftwareSerial.h>
 +#define motorInterfaceType 1
 +
 +
 +#define THERMISTOR_PINA A11
 +#define TEMPCONTROLA 10
 +
 +//Define the aggressive and conservative Tuning Parameters
 +double aggKpA=150, aggKiA=0.5, aggKdA=0;
 +int thermoelectricval = 255;
 +int celsius;
 +int levelstreamon;
 +double settemp = 0;
 +double Setpoint, Input, Output, OutputA, OutputB, OutputC;
 +int tme = 250;
 +
 +//Specify the links and initial tuning parameters
 +PID myPIDA(&Input, &OutputA, &Setpoint, aggKpA, aggKiA, aggKdA, DIRECT);
 +
 +
 +const int stepsPinA = 11;
 +const int directionPinA = 12;
 +const int enablePinA = 2;
 +
 +
 +const int stepsPinB = 3;
 +const int directionPinB = 4;
 +const int enablePinB = 5;
 +
 +const int stepsPinC = 7;
 +const int directionPinC = 8;
 +const int enablePinC = 9;
 +
 +const int gobuttonA = A0;
 +const int stopbuttonA = A1;
 +const int speedpotA = A2;
 +
 +const int gobuttonB = A5;
 +const int stopbuttonB = A6;
 +const int speedpotB = A3;
 +
 +const int gobuttonC = A7;
 +const int stopbuttonC = A10;
 +const int speedpotC = A4;
 +
 +int directionA = 0;
 +int directionB = 0;
 +int directionC = 0;
 +
 +int ton = 0;
 +
 +int buttonastate = 0;
 +int buttonbstate = 0;
 +int buttoncstate = 0;
 +int afl = 0;
 +int bfl = 0;
 +
 +String command;
 +long int currpos;
 +long int pos;
 +
 +void setup() {
 +  // put your setup code here, to run once:
 +  Serial.begin(115200);
 +  pinMode(stepsPinA, OUTPUT);
 +  pinMode(directionPinA, OUTPUT);
 +  pinMode(enablePinA, OUTPUT);
 +  pinMode(stepsPinB, OUTPUT);
 +  pinMode(directionPinB, OUTPUT);
 +  pinMode(enablePinB, OUTPUT);
 +  pinMode(speedpotA, INPUT);
 +  pinMode(gobuttonA, INPUT);
 +  pinMode(stopbuttonA, INPUT);
 +  pinMode(speedpotB, INPUT);
 +  pinMode(gobuttonB, INPUT);
 +  pinMode(stopbuttonB, INPUT);
 +  pinMode(speedpotC, INPUT);
 +  pinMode(gobuttonC, INPUT);
 +  pinMode(stopbuttonC, INPUT);
 +
 +  digitalWrite(enablePinA,LOW);
 +  digitalWrite(enablePinB,LOW);
 +  digitalWrite(directionPinA, LOW);
 +  digitalWrite(directionPinB, LOW);
 +  digitalWrite(directionPinC, LOW);
 +  currpos = 0;
 +}
 +
 +void loop() {
 +
 +   Input = read_temp("A");
 +   double gap = abs(Setpoint-Input); //distance away from setpoint
 +   myPIDA.SetTunings(aggKpA, aggKiA, aggKdA);
 +   myPIDA.Compute();
 +   analogWrite(TEMPCONTROLA,OutputA);
 +
 +   int rawvalue = analogRead(THERMISTOR_PINA);
 +   int rawvalueA = rawvalue;
 +   float celsiusA = read_temp("A");
 +
 +
 +
 +  Serial.print("");
 +  
 +  digitalWrite(stepsPinA, HIGH);
 +  digitalWrite(directionPinA, LOW);
 +  digitalWrite(enablePinA, HIGH);  
 +
 +
 +  digitalWrite(stepsPinB, LOW);
 +  digitalWrite(directionPinB, LOW);
 +  digitalWrite(enablePinB, LOW); 
 +
 +  digitalWrite(stepsPinC, LOW);
 +  digitalWrite(directionPinC, HIGH);
 +  digitalWrite(enablePinC, LOW); 
 +
 +
 +/*
 +  if (levelstreamon == 1) {
 +   Serial.print("A: ");
 +   Serial.print(rawvalueA);
 +   Serial.print(" ");
 +   Serial.println(celsiusA);
 +   Serial.print("Settemp: ");
 +   Serial.println(settemp);   
 +   delay(500);
 +  }
 +
 +
 +
 + if (digitalRead(stopbuttonA) ==HIGH){
 +  if (bfl == 0){
 +   if (directionA==0){directionA = 1; digitalWrite(directionPinA, HIGH); }else{directionA=0; digitalWrite(directionPinA, LOW);}
 +    Serial.print(directionA);
 +    Serial.println(" direction changed");
 +    bfl = 1;
 +   }
 +  } else { bfl = 0; }
 +
 + if (digitalRead(gobuttonA) == 1){
 +   Serial.println("moving A");
 +   runnerA();
 +  }
 +
 + if (digitalRead(stopbuttonB) ==HIGH){
 +  if (bfl == 0){
 +   if (directionB==0){directionB = 1; digitalWrite(directionPinB, HIGH); }else{directionB=0; digitalWrite(directionPinB, LOW);}
 +    Serial.print(directionB);
 +    Serial.println(" direction changed");
 +    bfl = 1;
 +   }
 +  } else { bfl = 0; }
 +
 + if (digitalRead(gobuttonB) == 1){
 +  Serial.println("moving B");
 +   runnerB();
 +  }
 +
 + if (digitalRead(stopbuttonC) ==HIGH){
 +  if (bfl == 0){
 +   if (directionC==0){directionC = 1; digitalWrite(directionPinC, HIGH); }else{directionC=0; digitalWrite(directionPinC, LOW);}
 +    Serial.print(directionC);
 +    Serial.println(" direction changed");
 +    bfl = 1;
 +   }
 +  } else { bfl = 0; }
 +
 + if (digitalRead(gobuttonC) == 1){
 +  Serial.println("moving C");
 +   runnerC();
 +  }
 +  */
 +
 +
 +  
 + if(Serial.available())
 + {
 +    char c = Serial.read();
 +    if (c== '\n')
 +    {
 +      currpos = parseCommand(command, currpos);
 +      command = "";
 +    }
 +    
 +    else
 +    {
 +      command +=c;
 +    }
 + }
 + delay(30);
 +}
 +
 +long int parseCommand(String com, long int currpos)
 +{
 +  //Serial.print("Your command: ");
 +  //Serial.println(com);
 +
 +  if(com.equalsIgnoreCase("readpot")){
 +   readpotentionmetersanity();
 +  }
 +  else if(com.equalsIgnoreCase("info")){
 +    Serial.println("Extruder spool speed controller");
 +  }
 +  else if (com.substring(0,7) == "settemp") {
 +    settemp = com.substring(8).toDouble();
 +    Setpoint = settemp;
 +    Serial.print("settemp: ");
 +    Serial.println(settemp);
 +  }
 +  else if(com.equalsIgnoreCase("levelstreamoff")){
 +   levelstreamon = 0;
 +  } 
 +  else if(com.equalsIgnoreCase("levelstreamon")){
 +   levelstreamon = 1;
 +  } 
 +  else if(com.equalsIgnoreCase("readlevel")){
 +     int rawvalue = analogRead(THERMISTOR_PINA);
 +     float celsius = read_temp("A");
 +     Serial.print("A: ");
 +     Serial.println(celsius);
 +  }
 +  else {
 +   Serial.print("Did not recognize ");
 +   Serial.println(com);
 +  }
 +   return currpos;
 +}
 +
 +int readpotentionmetersanity(){
 + int val = analogRead(speedpotA);
 + Serial.print("speed pinA: ");
 + Serial.println(val);
 + val = analogRead(speedpotB);
 + Serial.print("speed pinB: ");
 + Serial.println(val); 
 + val = analogRead(speedpotC);
 + Serial.print("speed pinC: ");
 + Serial.println(val); 
 +}
 +
 +
 +int runnerA(){
 +   int stpper = 1;
 +   int speed = analogRead(speedpotA);
 +   int stepdelay = map(speed, 0, 1023, 1, 2000);
 +   while(stpper > 0){
 +   speed = analogRead(speedpotA);
 +   stepdelay = map(speed, 0, 1023, 1, 2000);
 +   digitalWrite(stepsPinA,HIGH); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   digitalWrite(stepsPinA,LOW); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   if (digitalRead(stopbuttonA) ==HIGH){ break; }
 + }
 + return 0;
 +}
 +
 +int runnerB(){
 +   int stpper = 1;
 +   int speed = analogRead(speedpotB);
 +   int stepdelay = map(speed, 0, 1023, 1, 2000);
 +   while(stpper > 0){
 +   speed = analogRead(speedpotB);
 +   stepdelay = map(speed, 0, 1023, 1, 2000);
 +   digitalWrite(stepsPinB,HIGH); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   digitalWrite(stepsPinB,LOW); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   if (digitalRead(stopbuttonB) ==HIGH){ break; }
 + }
 + return 0;
 +}
 +
 +int runnerC(){
 +   int stpper = 1;
 +   int speed = analogRead(speedpotB);
 +   int stepdelay = map(speed, 0, 1023, 1, 2000);
 +   while(stpper > 0){
 +   speed = analogRead(speedpotC);
 +   stepdelay = map(speed, 0, 1023, 1, 2000);
 +   digitalWrite(stepsPinC,HIGH); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   digitalWrite(stepsPinC,LOW); // Output high
 +   delayMicroseconds(stepdelay); // Wait 1/2 a ms
 +   if (digitalRead(stopbuttonC) ==HIGH){ break; }
 + }
 + return 0;
 +}
 +
 +#define NUMTEMPS 20
 +short temptable[NUMTEMPS][2] = {
 +   {1, 841}, {54, 255},
 +   {107, 209},
 +   {160, 184},
 +   {213, 166},
 +   {266, 153},
 +   {319, 142},
 +   {372, 132},
 +   {425, 124},
 +   {478, 116},
 +   {531, 108},
 +   {584, 101},
 +   {637, 93},
 +   {690, 86},
 +   {743, 78},
 +   {796, 70},
 +   {849, 61},
 +   {902, 50},
 +   {955, 34},
 +   {1008, 3}
 +};
 +
 +float read_temp(String sensor_type)
 +{
 +   int THERMISTOR_PIN = 0;
 +   if (sensor_type == "A"){
 +    THERMISTOR_PIN = THERMISTOR_PINA;
 +   }
 +   int rawtemp = analogRead(THERMISTOR_PIN);
 +   float current_celsius = 0;
 +
 +   byte i;
 +   for (i=1; i<NUMTEMPS; i++)
 +   {
 +      if (temptable[i][0] > rawtemp)
 +      {
 +         float realtemp  = temptable[i-1][1] + (rawtemp - temptable[i-1][0]) * (temptable[i][1] - temptable[i-1][1]) / (temptable[i][0] - temptable[i-1][0]);
 +
 +         if (realtemp > 255)
 +           realtemp = 255; 
 +           current_celsius = realtemp;
 +           break;
 +      }
 +   }
 +
 +   // Overflow: We just clamp to 0 degrees celsius
 +   if (i == NUMTEMPS)
 +   current_celsius = 0;
 +
 +   return current_celsius;
 +}
 +
 +</code>
  
  
Line 18: Line 368:
  
 <code> <code>
-#include <AccelStepper.h> 
- 
  
 #include <Wire.h> #include <Wire.h>
Line 27: Line 375:
 #define motorInterfaceType 1 #define motorInterfaceType 1
  
-AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); +int enablePin = 9;
- +
- +
- +
-//const float stepsperul = 230; //resolution of 1ml disposable syringes +
-//const float stepsperul = 131.53; //resolution of 1ml disposable syringes +
-//const float stepsperul = 272.12; //resolution of 250ul glass syringe +
- +
- +
-int enablePin = 5;+
 int estepsPin = 3; int estepsPin = 3;
-int directionPin = 4;+int directionPin = 2;
 int direction = 0; int direction = 0;
-int elimitPin A1;  +int ton 0
-//int esteps 1000+int speedpot A5
-//int esteprate 500+int buttona A4
-//int estepsincrement 0+int buttonb A3
-int estepcount = 0; +int buttonastate = 0; 
- +int buttonbstate 0
-int speedpot A2+int afl 0
- +int bfl 0;
-//float stepsperul 23//resolution of 1ml disposable syringes +
-const float stepsperul 131.43;+
  
-int acc = 30; 
 String command; String command;
 long int currpos; long int currpos;
Line 58: Line 394:
 void setup() { void setup() {
   // put your setup code here, to run once:   // put your setup code here, to run once:
-  stepper.setMaxSpeed(1000*16); 
   Serial.begin(115200);   Serial.begin(115200);
   pinMode(enablePin, OUTPUT);   pinMode(enablePin, OUTPUT);
   pinMode(directionPin, OUTPUT);   pinMode(directionPin, OUTPUT);
   pinMode(estepsPin, OUTPUT);   pinMode(estepsPin, OUTPUT);
-  pinMode(elimitPin, INPUT); +  pinMode(speedpot, INPUT); 
-  digitalWrite(elimitPinHIGH); +  pinMode(buttonaINPUT); 
 +  pinMode(buttonb, INPUT);
   digitalWrite(enablePin,LOW);   digitalWrite(enablePin,LOW);
 +  digitalWrite(directionPin, LOW);
   currpos = 0;   currpos = 0;
-  stepper.setAcceleration(acc); 
 } }
  
 void loop() { void loop() {
   // put your main code here, to run repeatedly:   // put your main code here, to run repeatedly:
 + buttonastate = digitalRead(buttona);
 + buttonbstate = digitalRead(buttonb);
 + /*
 + Serial.print("buttonastate ");
 + Serial.println(buttonastate);
 + Serial.print("buttonbstate");
 + Serial.println(buttonbstate);
 + delay(100);
 + */
 +
 + if (buttonbstate ==HIGH){
 +  if (bfl == 0){
 +   if (direction==0){direction = 1; digitalWrite(directionPin, HIGH); }else{direction=0; digitalWrite(directionPin, LOW);}
 +    Serial.print(direction);
 +    Serial.println(" direction changed");
 +    bfl = 1;
 +   }
 +  } else { bfl = 0; }
 + if (buttonastate == HIGH){
 +   runner(estepsPin, directionPin, speedpot, buttona); 
 +  }
 +
 +
  if(Serial.available())  if(Serial.available())
  {  {
Line 80: Line 439:
       command = "";       command = "";
     }     }
-    else +     
 +    else
     {     {
       command +=c;       command +=c;
Line 93: Line 453:
   //Serial.println(com);   //Serial.println(com);
  
-  //"G1E10F200"; +  if(com.equalsIgnoreCase("readpot")){ 
-  String part1 = com.substring(0,com.indexOf("e")); +   readpotentionmetersanity(speedpot);
-  if (part1.equalsIgnoreCase("g1")){ +
-    String part2 = com.substring(com.indexOf("e")+1,com.indexOf("s")); +
-    String part3 = com.substring(com.indexOf("s")+1,com.indexOf("a")); +
-    String part4 = com.substring(com.indexOf("a")+1); +
-    int vpos = part2.toInt(); +
-    pos = vpos * stepsperul;  +
-    int vfeed = part3.toInt(); +
-    int feed = vfeed * stepsperul; +
-    //int acc = part4.toInt(); +
-    //int feed = vfeed; +
-    int acc = feed/3; +
-    if ((pos-currpos) < 0) { +
-      feed = feed * -1; +
-    } +
-    moveacc((pos-currpos), feed, acc); +
-    currpos = pos;+
   }   }
-  else if(com.equalsIgnoreCase("m114")){ +  if(com.equalsIgnoreCase("g")){ 
-   Serial.print("Step Position: "); +   readpotentionmetersanity(speedpot); 
-   Serial.print(pos); +   runner(estepsPin, directionPin, speedpot, buttona);
-   Serial.print(" volume Position: "); +
-   Serial.println((pos/stepsperul),3); +
-  }  +
-  else if(com.equalsIgnoreCase("g28e0")){ +
-   currpos = homing(estepsPin,directionPin,elimitPin); +
-   currpos = 0; +
-   pos = 0; +
-  }  +
-  else if(com.equalsIgnoreCase("readinput")){ +
-   Serial.print("Input "); +
-   Serial.println(digitalRead(elimitPin)); +
-  }  +
-  else if(com.equalsIgnoreCase("d")){ +
-   if (direction == 0){ +
-    direction = 1; +
-   } +
-   Serial.print("direction is "); +
-   Serial.println(direction);+
   }    } 
   else if(com.equalsIgnoreCase("info")){   else if(com.equalsIgnoreCase("info")){
-    Serial.println("multistepper");+    Serial.println("Extruder spool speed controller");
   }   }
   else {   else {
Line 142: Line 468:
   }   }
    return currpos;    return currpos;
-} 
- 
- 
-void moveacc(long int inc, int spd, int acc){ 
- //speed is in steps per second 
- stepper.setCurrentPosition(0); 
- stepper.setAcceleration(acc); 
- while(stepper.currentPosition() != inc){ 
-    stepper.setSpeed(spd); 
-    stepper.runSpeed(); 
- } 
 } }
  
 int readpotentionmetersanity(int speedPin){ int readpotentionmetersanity(int speedPin){
 + int val = analogRead(speedPin);
  Serial.print("speed pin: ");  Serial.print("speed pin: ");
- Serial.println(analogRead(speedPin)); + Serial.println(val); 
- int val = analogRead(A2); +  
- int stepdelay = map(val, 0, 1023, 1, 1000);  + //int stepdelay = map(val, 0, 1023, 1, 1000); 
- Serial.print("stepdelay: "); + //Serial.print("stepdelay or speed: "); 
- Serial.println(stepdelay); + //Serial.println(stepdelay);
 } }
  
  
-int movespeedadjust(int stepsPin, int direction, int directionPin, int limitPin, int speedPin){ +int runner(int stepsPin, int directionPin, int speedpot, int buttona){ 
-  if (direction == 0){ +  Serial.println("its running ...");
-   digitalWrite(directionPin,LOW); // Set Dir high +
-  } else { +
-   digitalWrite(directionPin,HIGH); // Set Dir high +
-  } +
- stepper.setCurrentPosition(1); +
- int val = analogRead(A2); +
- int stepdelay = map(val, 0, 1023, 1, 1000);  +
- while(stepper.currentPosition() > 0){ +
-    int spd = analogRead(A2) * stepsperul; +
-    int acc = spd/3; +
-    stepper.setAcceleration(acc); +
-    stepper.setSpeed(spd)+
-    stepper.runSpeed(); +
-    int checker = digitalRead(limitPin); +
-     if (checker == HIGH){ +
-      break; +
-     }  +
- } +
-+
- +
- +
-int homing(int stepsPin, int directionPin, int limitPin){ +
-  digitalWrite(directionPin,LOW); // Set Dir high +
-  int checker = 1; +
-  int cnter = 0;+
   int stpper = 1;   int stpper = 1;
 +   int speed = analogRead(speedpot);
 +   int stepdelay = map(speed, 0, 1023, 1, 1000);
    while(stpper > 0){    while(stpper > 0){
-    checker digitalRead(limitPin); +   speed analogRead(speedpot); 
-    if (checker == HIGH){ +   stepdelay map(speed, 0, 1023, 1, 2000); 
-      cnter = cnter + 1; +   //stepdelay 100
-    } +   digitalWrite(stepsPin,HIGH); // Output high 
-    else { +   delayMicroseconds(stepdelay); // Wait 1/2 a ms 
-      cnter = 0; +   digitalWrite(stepsPin,LOW); // Output high 
-    } +   delayMicroseconds(stepdelay); // Wait 1/2 a ms 
-    if (cnter > 4){ +   if (digitalRead(buttonb) ==HIGH){ break
-      stpper = 0+ } 
-    } + return 0;
-    digitalWrite(stepsPin,HIGH); // Output high +
-    delayMicroseconds(200); // Wait 1/2 a ms +
-    digitalWrite(stepsPin,LOW); // Output low +
-    delayMicroseconds(200); // Wait 1/2 a ms +
-   +
-   digitalWrite(directionPin,HIGH); // Set Dir high +
-   for(int x 0x < 18; x++){ // Loop 200 times +
-    digitalWrite(stepsPin,HIGH); // Output high +
-    delayMicroseconds(1000); // Wait 1/2 a ms +
-    digitalWrite(stepsPin,LOW); // Output low +
-    delayMicroseconds(1000); // Wait 1/2 a ms +
-   +
-    int stepcount 0+
-    return stepcount;+
 } }
  
bdev/filamentextruder_recyclebot.1666719378.txt.gz · Last modified: 2022/10/25 17:36 by richard