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/11/02 17:30]
richard
bdev:filamentextruder_recyclebot [2022/11/05 23:52] (current)
richard
Line 1: Line 1:
 ====== Filament extruder recyclebot ====== ====== Filament extruder recyclebot ======
  
 +====== filabotmega.ino ======
  
- 
-Here is code for controlling 2 motors: 
  
 <code> <code>
  
 +#include <PID_v1.h> 
 #include <Wire.h> #include <Wire.h>
 #include <SoftwareSerial.h> #include <SoftwareSerial.h>
-#define dirPin 4 
-#define stepPin 3 
 #define motorInterfaceType 1 #define motorInterfaceType 1
  
-const int stepsPinA = 2+ 
-const int directionPinA = 3+#define THERMISTOR_PINA A11 
-const int enablePinA = 4+#define TEMPCONTROLA 10 
-const int stepsPinB = 5+ 
-const int directionPinB = 6+//Define the aggressive and conservative Tuning Parameters 
-const int enablePinB = 7;+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 gobuttonA = A0;
 const int stopbuttonA = A1; const int stopbuttonA = A1;
 const int speedpotA = A2; const int speedpotA = A2;
-const int gobuttonB = A3+ 
-const int stopbuttonB = A4+const int gobuttonB = A5
-const int speedpotB = 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 directionA = 0;
 int directionB = 0; int directionB = 0;
 +int directionC = 0;
  
 int ton = 0; int ton = 0;
Line 34: Line 61:
 int buttonastate = 0; int buttonastate = 0;
 int buttonbstate = 0; int buttonbstate = 0;
 +int buttoncstate = 0;
 int afl = 0; int afl = 0;
 int bfl = 0; int bfl = 0;
Line 56: Line 84:
   pinMode(gobuttonB, INPUT);   pinMode(gobuttonB, INPUT);
   pinMode(stopbuttonB, INPUT);   pinMode(stopbuttonB, INPUT);
 +  pinMode(speedpotC, INPUT);
 +  pinMode(gobuttonC, INPUT);
 +  pinMode(stopbuttonC, INPUT);
 +
   digitalWrite(enablePinA,LOW);   digitalWrite(enablePinA,LOW);
   digitalWrite(enablePinB,LOW);   digitalWrite(enablePinB,LOW);
   digitalWrite(directionPinA, LOW);   digitalWrite(directionPinA, LOW);
   digitalWrite(directionPinB, LOW);   digitalWrite(directionPinB, LOW);
 +  digitalWrite(directionPinC, LOW);
   currpos = 0;   currpos = 0;
 } }
Line 65: Line 98:
 void loop() { void loop() {
  
- /* +   Input = read_temp("A"); 
- Serial.print("buttonastate "); +   double gap = abs(Setpoint-Input); //distance away from setpoint 
- Serial.println(buttonastate); +   myPIDA.SetTunings(aggKpA, aggKiA, aggKdA); 
- Serial.print("buttonbstate"); +   myPIDA.Compute(); 
- Serial.println(buttonbstate); +   analogWrite(TEMPCONTROLA,OutputA); 
- delay(100); + 
- */+   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 (digitalRead(stopbuttonA) ==HIGH){
Line 82: Line 148:
   } else { bfl = 0; }   } else { bfl = 0; }
  
- if (digitalRead(gobuttonA) == HIGH){+ if (digitalRead(gobuttonA) == 1){ 
 +   Serial.println("moving A");
    runnerA();    runnerA();
   }   }
Line 95: Line 162:
   } else { bfl = 0; }   } else { bfl = 0; }
  
- if (digitalRead(gobuttonB) == HIGH){+ if (digitalRead(gobuttonB) == 1){ 
 +  Serial.println("moving B");
    runnerB();    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())  if(Serial.available())
  {  {
Line 134: Line 211:
   else if(com.equalsIgnoreCase("info")){   else if(com.equalsIgnoreCase("info")){
     Serial.println("Extruder spool speed controller");     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 {   else {
Line 149: Line 244:
  Serial.print("speed pinB: ");  Serial.print("speed pinB: ");
  Serial.println(val);   Serial.println(val); 
- //int stepdelay map(val, 0, 1023, 1, 1000); + val analogRead(speedpotC); 
- //Serial.print("stepdelay or speed: "); + Serial.print("speed pinC: "); 
- //Serial.println(stepdelay);+ Serial.println(val); 
 } }
  
Line 187: Line 282:
 } }
  
 +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;
 +}
  
-</code>+#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>
  
  
bdev/filamentextruder_recyclebot.1667410233.txt.gz · Last modified: 2022/11/02 17:30 by richard