|
本帖最后由 xinxi2014 于 2020-7-9 09:41 编辑
设置好所需长度和数量的线材后,自动完成切割。 硬件材料 1*Arduino UNO 1*电机驱动器 1*23步进电机 1*12v转5v稳压模块 1*支架、螺钉、垫片等 2*轮胎 灵感来源 人工线轴上拉出几千根长20cm的22awg电线并不是一件有趣的事。它很无聊,而且很容易出现不准确。需要2个人花上2天才能手动拉完706个22awg电线。如果你只有一个线轴(一次拉1个线),则需要更长的时间。使用Arduino切线机,你需输入所需的长度和数量,即可预先输入所需的长度和数量,就可以自动完成。
- #include <math.h> //#math
- #include <Servo.h> //From Library
- Servo servoMain; // Define Servo
- #include <SoftwareSerial.h> // soft serial for LCD
- #define stp 2 //define stepper
- #define dir 3 //define stepper
- #define MS1 4 //define stepper
- #define MS2 5 //define stepper
- #define MS3 6 //define stepper
- #define EN 7 //define stepper
- float a; //variable assignment qty
- float b; //variable assignment inches
- float c; //variable assignment required motor steps
- float W; //removed from functions for now, might need later.
- char junk = ' '; //any random character input.
- char val; // Data received from the serial port
- char user_input;
- int x; //Probably over loaded on assignments, not sure. Remove later and test.
- int y;
- int state;
- SoftwareSerial mySerial(0, 11); // pin 11 = TX
- void setup() // set up
- {
- pinMode(15, OUTPUT); // set the pin to input
- servoMain.attach(9); // servo on digital pin 9
- pinMode(13, OUTPUT); // LED on pin 13
- pinMode(stp, OUTPUT); //B.E.D
- pinMode(dir, OUTPUT); //B.E.D
- pinMode(MS1, OUTPUT); //B.E.D
- pinMode(MS2, OUTPUT); //B.E.D
- pinMode(MS3, OUTPUT); //B.E.D
- pinMode(EN, OUTPUT); //B.E.D
- resetBEDPins(); //Set step, direction, microstep and enable pins to default states
- Serial.begin(9600); // set up Serial library at 9600 bps
- mySerial.begin(9600); // set up serial port for 9600 baud
- Serial.println("Lets Cut Some Wires!"); //welcome message in serial window
- Serial.println("");
- Serial.flush(); //clear the input que.
- }
- void loop()
- {
- {
- mySerial.write(" "); // clear display
- mySerial.write(" ");
- mySerial.write(254); // move cursor to beginning of first line
- mySerial.write(128);
- mySerial.write("Solution Systems Feed n Cut!");
- delay(2);
- }
- Serial.println("Enter Quantity, Press ENTER"); // user Input request qty
- while (Serial.available() == 0) ; // Wait here until input buffer has a character
- {
- a = Serial.parseFloat(); // new command in 1.0 forward
- Serial.print("a = "); Serial.println(a, DEC);
- while (Serial.available() > 0) // .parseFloat() can leave non-numeric characters
- { junk = Serial.read() ; } // clear the keyboard buffer
- }
- Serial.println("Enter Length in Inches, Press ENTER");
- while (Serial.available() == 0) ;
- {
- b = Serial.parseFloat();
- Serial.print("b = "); Serial.println(b, DEC);
- while (Serial.available() > 0)
- { junk = Serial.read() ; } // clear the keyboard buffer
- c = (float( b*26 ));
- Serial.print("Motor Steps = ");
- Serial.println(c, DEC); Serial.println();
- }
- Serial.println("Ready to Begin? Press ENTER"); // user Input request Y or N?
- digitalWrite(EN, LOW); //Pull enable pin low to set FETs active and allow motor control
- while (Serial.available() == 0); // IF data is available to read,
- {
- val = Serial.read(); // read it and store it in val
- if (val == 'y')
- {
- Serial.println("Here We Go!");
- delay(10);
- for (a; a>0; a--){ // this step checks if the quantity entered (a) is greater than 0,... and deducts 1 from a.
- Feedft(); // if it is it repeats the step feed and cut function again.
- }
- }
- else {
- Serial.println("Restarting Setup..."); // otherwise restart
- }
- delay(10); // Wait 10 milliseconds for next reading
- }
- { junk = Serial.read() ; } // clear the keyboard buffer
- }
- //Reset Big Easy Driver pins to default states
- void resetBEDPins(){
- digitalWrite(stp, LOW);
- digitalWrite(dir, LOW);
- digitalWrite(MS1, LOW); // leaving wired and in sketch for now, not using micro-step control at this time.
- digitalWrite(MS2, LOW);
- digitalWrite(MS3, LOW);
- digitalWrite(EN, HIGH);
- }
- //Functions
- void Feedft(){
- Serial.println("Feeding Wire at default step mode.");
- digitalWrite(dir, LOW); //Pull direction pin low to move "forward"
- for(x= 1; x<c; x++){ //Loop the forward stepping enough times for motion to be visible
- digitalWrite(stp,HIGH); //trigger one step forward
- delay(1);
- digitalWrite(stp,LOW); //Pull step pin low so it can be triggered again
- delay(1);
- } //Need to add a stepper done moving function here!!!!!!!!!!!!!<==================
- ServoMainCut(); //Run the Cut Function
- delay(2000);
- Serial.println("Cutting Wire!"); //Fair Warning.....
- // RepeatCount(); //Run the repeat function
- { junk = Serial.read();} //Clear the keyboard buffer
- }
- //funtion Servo Cut
- void ServoMainCut(){
- digitalWrite(13, HIGH);
- delay(100);
- digitalWrite(13, LOW);
- servoMain.write(177); // CUT!! Turn Servo Left to 176 degrees
- delay(750); // Wait 1.5 second
- servoMain.write(65); // Open Cutter Turn Servo Left to 65 degrees
- digitalWrite(13, HIGH);
- delay(100);
- digitalWrite(13, LOW);
- }
|
|
|