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/26 20:41]
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); 
- 
- 
- 
-//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 turnon = 4; 
 int enablePin = 9; int enablePin = 9;
 int estepsPin = 3; int estepsPin = 3;
Line 42: Line 380:
 int direction = 0; int direction = 0;
 int ton = 0; int ton = 0;
- 
-int elimitPin = A1;  
-//int esteps = 1000; 
-//int esteprate = 500; 
-//int estepsincrement = 0; 
-int estepcount = 0; 
- 
 int speedpot = A5; int speedpot = A5;
- 
 int buttona = A4; int buttona = A4;
 int buttonb = A3; int buttonb = A3;
- 
- 
 int buttonastate = 0; int buttonastate = 0;
 int buttonbstate = 0; int buttonbstate = 0;
 +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 69: 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(turnon, OUTPUT); 
-  digitalWrite(turnon, HIGH);  
- 
   pinMode(enablePin, OUTPUT);   pinMode(enablePin, OUTPUT);
   pinMode(directionPin, OUTPUT);   pinMode(directionPin, OUTPUT);
   pinMode(estepsPin, OUTPUT);   pinMode(estepsPin, OUTPUT);
- 
- 
   pinMode(speedpot, INPUT);   pinMode(speedpot, INPUT);
   pinMode(buttona, INPUT);   pinMode(buttona, INPUT);
   pinMode(buttonb, INPUT);   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); 
- buttonastate = analogRead(buttona); + buttonbstate = digitalRead(buttonb);
- buttonbstate = analogRead(buttonb);+
  /*  /*
- Serial.print("buttona: "); + Serial.print("buttonastate "); 
- Serial.println(analogRead(buttona)); + Serial.println(buttonastate); 
- */  + Serial.print("buttonbstate"); 
- if (buttonbstate < 1020){ + Serial.println(buttonbstate); 
-  Serial.println("buttonbstate is low"); + delay(100); 
- } else { Serial.println("buttonbstate is high"); }+ */
  
- if (buttonastate < 1020){ + if (buttonbstate ==HIGH){ 
-  Serial.println("buttonastate is low"); +  if (bfl == 0){ 
- } else { Serial.println("buttonastate is high"); }+   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);  
 +  }
  
  
- Serial.println(buttonbstate); 
- Serial.print("speedpot: "); 
- Serial.println(analogRead(speedpot)); 
- delay(100); 
- /* 
- if (digitalRead(buttona) == HIGH){ 
-  Serial.println("power set"); 
-  if (ton==0){ton = 1;}else{ton=0;} 
- } 
- if (digitalRead(buttonb) == HIGH){ 
-  Serial.println("direction set"); 
-  if (direction==0){direction = 1;}else{direction=0;} 
- } 
- */ 
  if(Serial.available())  if(Serial.available())
  {  {
Line 130: Line 439:
       command = "";       command = "";
     }     }
-    else +     
 +    else
     {     {
       command +=c;       command +=c;
Line 143: 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("readpot")){+  if(com.equalsIgnoreCase("g")){
    readpotentionmetersanity(speedpot);    readpotentionmetersanity(speedpot);
-  } +   runner(estepsPin, directionPin, speedpot, buttona);
-  else if(com.equalsIgnoreCase("m114")){ +
-   Serial.print("Step Position: "); +
-   Serial.print(pos); +
-   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 195: 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 +  int stpper = 1; 
-  } else { +   int speed = analogRead(speedpot); 
-   digitalWrite(directionPin,HIGH); // Set Dir high +   int stepdelay = map(speed, 0, 1023, 1, 1000); 
-  } +   while(stpper > 0){ 
- stepper.setCurrentPosition(1)+   speed = analogRead(speedpot); 
- int val = analogRead(A2); +   stepdelay map(speed, 0, 1023, 1, 2000); 
- int stepdelay = map(val, 0, 1023, 1, 1000);  +   //stepdelay = 100
- while(stepper.currentPosition() > 0){ +   digitalWrite(stepsPin,HIGH); // Output high 
-    int spd = analogRead(A2* stepsperul+   delayMicroseconds(stepdelay); // Wait 1/2 a ms 
-    int acc spd/3+   digitalWrite(stepsPin,LOW); // Output high 
-    stepper.setAcceleration(acc); +   delayMicroseconds(stepdelay); // Wait 1/2 a ms 
-    stepper.setSpeed(spd); +   if (digitalRead(buttonb) ==HIGH){ break; }
-    stepper.runSpeed(); +
-    int checker = digitalRead(limitPin); +
-     if (checker == HIGH){ +
-      break; +
-     +
  }  }
 + return 0;
 } }
  
- 
-int homing(int stepsPin, int directionPin, int limitPin){ 
-  digitalWrite(directionPin,LOW); // Set Dir high 
-  int checker = 1; 
-  int cnter = 0; 
-  int stpper = 1; 
-   while(stpper > 0){ 
-    checker = digitalRead(limitPin); 
-    if (checker == HIGH){ 
-      cnter = cnter + 1; 
-    } 
-    else { 
-      cnter = 0; 
-    } 
-    if (cnter > 4){ 
-      stpper = 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 = 0; x < 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; 
-} 
 </code> </code>
  
bdev/filamentextruder_recyclebot.1666816900.txt.gz · Last modified: 2022/10/26 20:41 by richard