Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Newcomers » Newcomers » Requesting Help With CNC Project
Requesting Help With CNC Project [message #1814895] Sun, 22 September 2019 00:09 Go to next message
Shreeniket Joshi is currently offline Shreeniket JoshiFriend
Messages: 1
Registered: September 2019
Junior Member
I am new to Arduino and this forum.

I have made a setup with Arduino Uno, Nema 17, T8 lead screw, IR Sensor and a DC motor.
I am trying to establish a code which
1) Resets Home position of the Machining Head on the lead screw
2) Has an action button, which operates only when the position of the Head is on the lead screw, goes down the specified depth
3) Takes input from user to run the DC Motor (to rotate the tool on the machine head)
4) Takes second input to stop rotating and return to the reset position.
I am facing one major problem and two minor problems:

Major Problem:
To remove an error which was later resolved, I added the line: action_permit=0
Now due to some reason (I have pulled a lot of hairs trying to understand this), when I remove this action_permit line, the DC Motor rotation is stopped. I have to include this line to rotate my DC Motor.

Minor Problem:
To get input from the user as to control when the DC motor starts and stops, I included the code which accepts 'y' for yes (start rotating the DC motor) and 'n' as no (stop rotation and return to home position)

Minor Problem:
I am not sure how to control the PWM, I have copied the code from a video, but do not know how to reach maximum and minimum rpm; also I understand the variation between PWM value and RPM is not linear. Any feedback on how to precisely control the rpm of the motor would be great

int IR_signal=2;
int DC_ENB=11;
int DC_IN3=4;
int DC_IN4=5;
int STE_dir=6;
int STE_step=7;
int STE_ena=10;
int button_reset=8;
int button_action=9;
//define arduino pin
int action_permit;//0-action part is not allowed to run. 1-action part is allowed to run
int IRon;
int COUNT;//the amount of steps that the machine head should go
int HEIGHT;//total height that the machine head should go
int i;
int reset_on;
int action_on;
String Switch_DC;

//parameter
void setup() {
// put your setup code here, to run once:
pinMode(IR_signal,INPUT);
pinMode(button_reset,INPUT);
pinMode(button_action,INPUT);
//input part
pinMode(DC_ENB,OUTPUT);
pinMode(DC_IN3,OUTPUT);
pinMode(DC_IN4,OUTPUT);
pinMode(STE_dir,OUTPUT);
pinMode(STE_step,OUTPUT);
pinMode(STE_ena,OUTPUT);
//output part
action_permit=0;// ban the action part at the beginning
COUNT=0;
HEIGHT=0;

//original value of parameters
//digitalWrite(DC_ENB,HIGH);
analogWrite(DC_ENB,200);
digitalWrite(STE_ena,LOW);
digitalWrite(DC_IN3,HIGH);
digitalWrite(DC_IN4,HIGH);
//original pin output
Serial.begin(9600);
// start the monitor
}

void loop() {
// put your main code here, to run repeatedly:
reset_on=digitalRead(button_reset);
action_on=digitalRead(button_action);
//read the signal from the button
if(reset_on==0)//reset button is pressed
{
delay(10);
// preventing manual error
if(reset_on==0)
{
RES();
}
}
if(action_on==0)//action button is pressed
{
delay(10);
// preventing manual error
if(action_on==0)
{
ACT();
}
}
}
void RES()//reset part
{
while(action_permit==0)//when 0, this "while" loop will keep running
{
IRon=digitalRead(IR_signal);// read the signal from IR sensor
if(IRon==1)// machine head is not in original position
{
delay(1);
//ensure the signal is not happened by a BUG
IRon=digitalRead(IR_signal);
if(IRon==1)
{
digitalWrite(STE_dir,LOW);
digitalWrite(STE_step,HIGH);
delay(1);
digitalWrite(STE_step,LOW);
delay(1);
//if machine head is not in original position, it will go up for one step
}
}//if HIGH, go up
else if(IRon==0)
{
action_permit=1;
COUNT=0;

}//once machine head reaches the original position, controller will get out this loop and allow action part to run
}
}
void ACT()//action part
{
if(action_permit==1)
{

for(i=0;i<3523;i+=1)
{
digitalWrite(STE_dir,HIGH);
digitalWrite(STE_step,HIGH);
delay(1);
digitalWrite(STE_step,LOW);
delay(1);
}
delay(100);
for(i=0;i<100;i+=1)
{
digitalWrite(STE_step,HIGH);
delay(10);
digitalWrite(STE_step,LOW);
delay(10);
}
action_permit=0;

Serial.println("Please press y to start tool rotation");
while((Serial.available()==0))
{
//waiting for input
}
Switch_DC=Serial.readString();
if (Switch_DC == "y")
action_permit=0;
{
analogWrite(DC_ENB,200);
digitalWrite(DC_IN3,HIGH);
digitalWrite(DC_IN4,LOW);
delay(2000);
}

Serial.println("Please press n to stop tool rotation");
while((Serial.available()==0))
{
//waiting for input
}
Switch_DC=Serial.readString();
if(Switch_DC == "n")
action_permit=0;
{
analogWrite(DC_ENB,200);
digitalWrite(DC_IN3,LOW);
digitalWrite(DC_IN4,LOW);
}
digitalWrite(STE_dir,LOW);
for(i=0;i<4523;i+=1)
{
digitalWrite(STE_step,HIGH);
delay(1);
digitalWrite(STE_step,LOW);
delay(1);
}
action_permit=0;
}
}

Thank you so much for your time! I would be really grateful if I can get some guidance.
Re: Requesting Help With CNC Project [message #1814902 is a reply to message #1814895] Sun, 22 September 2019 05:38 Go to previous message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
If your question were about the Eclipse tools that support Arduino, I would suggest you ask on the CDT forum, but your question seems more generally about how to write programs for Arduino. For that you should find a forum specifically focused on Arduino or a more general forum one such as StackOverflow.


Ed Merks
Professional Support: https://www.macromodeling.com/
Previous Topic:sha512sum failing for eclipse-jee-2019-09-R-linux-gtk-x86_64
Next Topic:Problems during coding
Goto Forum:
  


Current Time: Sat Apr 27 04:37:37 GMT 2024

Powered by FUDForum. Page generated in 0.08443 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top