Difference between revisions of "Code Arduino Control Valve"
Tanwir.ahmad (talk | contribs) (Blanked the page) |
Tanwir.ahmad (talk | contribs) |
||
Line 1: | Line 1: | ||
+ | /*kodingan arduino control valve manual. | ||
+ | kodingan ini berjalan saat dicoba langsung dengan valve | ||
+ | namun saat saya gabungkan codingan control valve dengan temperature , data pengambilan temperatur tidak terbaca /teraquisisi saat sedang | ||
+ | mengontrol valvenya. Saya masih mencari dan memperbaiki untuk kodingannya */ | ||
+ | |||
+ | #include "Stepper.h" | ||
+ | #define STEPS 32 // Number of steps for one revolution of Internal shaft | ||
+ | // 2048 steps for one revolution of External shaft | ||
+ | |||
+ | volatile boolean TurnDetected; // need volatile for Interrupts | ||
+ | volatile boolean rotationdirection; // CW or CCW rotation | ||
+ | |||
+ | const int PinCLK=2; // Generating interrupts using CLK signal | ||
+ | const int PinDT=3; // Reading DT signal | ||
+ | const int PinSW=4; // Reading Push Button switch | ||
+ | |||
+ | int RotaryPosition=0; // To store Stepper Motor Position | ||
+ | |||
+ | int PrevPosition; // Previous Rotary position Value to check accuracy | ||
+ | int StepsToTake; // How much to move Stepper | ||
+ | |||
+ | // Setup of proper sequencing for Motor Driver Pins | ||
+ | // In1, In2, In3, In4 in the sequence 1-3-2-4 | ||
+ | Stepper small_stepper(STEPS, 8, 10, 9, 11); | ||
+ | |||
+ | // Interrupt routine runs if CLK goes from HIGH to LOW | ||
+ | void isr () { | ||
+ | delay(5); // delay for Debouncing | ||
+ | if (digitalRead(PinCLK)) | ||
+ | rotationdirection= digitalRead(PinDT); | ||
+ | else | ||
+ | rotationdirection= !digitalRead(PinDT); | ||
+ | TurnDetected = true; | ||
+ | } | ||
+ | |||
+ | void setup () { | ||
+ | |||
+ | pinMode(PinCLK,INPUT); | ||
+ | pinMode(PinDT,INPUT); | ||
+ | pinMode(PinSW,INPUT); | ||
+ | digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch | ||
+ | attachInterrupt (0,isr,FALLING); // interrupt 0 always connected to pin 2 on Arduino UNO | ||
+ | } | ||
+ | |||
+ | void loop () { | ||
+ | small_stepper.setSpeed(800); //Max seems to be 700 | ||
+ | if (!(digitalRead(PinSW))) { // check if button is pressed | ||
+ | if (RotaryPosition == 0) { // check if button was already pressed | ||
+ | } else { | ||
+ | small_stepper.step((RotaryPosition*100)); | ||
+ | RotaryPosition=0; // Reset position to ZERO | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Runs if rotation was detected | ||
+ | if (TurnDetected) { | ||
+ | PrevPosition = RotaryPosition; // Save previous position in variable | ||
+ | if (rotationdirection) { | ||
+ | RotaryPosition=RotaryPosition-1;} // decrase Position by 1 | ||
+ | else { | ||
+ | RotaryPosition=RotaryPosition+1;} // increase Position by 1 | ||
+ | |||
+ | TurnDetected = false; // do NOT repeat IF loop until new rotation detected | ||
+ | |||
+ | // Which direction to move Stepper motor | ||
+ | if ((PrevPosition + 1) == RotaryPosition) { // Move motor CW | ||
+ | StepsToTake=-100; | ||
+ | small_stepper.step(StepsToTake); | ||
+ | } | ||
+ | |||
+ | if ((RotaryPosition + 1) == PrevPosition) { // Move motor CCW | ||
+ | StepsToTake=100; | ||
+ | small_stepper.step(StepsToTake); | ||
+ | } | ||
+ | } | ||
+ | } |
Latest revision as of 13:31, 22 April 2020
/*kodingan arduino control valve manual. kodingan ini berjalan saat dicoba langsung dengan valve namun saat saya gabungkan codingan control valve dengan temperature , data pengambilan temperatur tidak terbaca /teraquisisi saat sedang mengontrol valvenya. Saya masih mencari dan memperbaiki untuk kodingannya */
#include "Stepper.h" #define STEPS 32 // Number of steps for one revolution of Internal shaft // 2048 steps for one revolution of External shaft
volatile boolean TurnDetected; // need volatile for Interrupts volatile boolean rotationdirection; // CW or CCW rotation
const int PinCLK=2; // Generating interrupts using CLK signal const int PinDT=3; // Reading DT signal const int PinSW=4; // Reading Push Button switch
int RotaryPosition=0; // To store Stepper Motor Position
int PrevPosition; // Previous Rotary position Value to check accuracy int StepsToTake; // How much to move Stepper
// Setup of proper sequencing for Motor Driver Pins // In1, In2, In3, In4 in the sequence 1-3-2-4 Stepper small_stepper(STEPS, 8, 10, 9, 11);
// Interrupt routine runs if CLK goes from HIGH to LOW void isr () { delay(5); // delay for Debouncing if (digitalRead(PinCLK)) rotationdirection= digitalRead(PinDT); else rotationdirection= !digitalRead(PinDT); TurnDetected = true; }
void setup () { pinMode(PinCLK,INPUT); pinMode(PinDT,INPUT); pinMode(PinSW,INPUT); digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch attachInterrupt (0,isr,FALLING); // interrupt 0 always connected to pin 2 on Arduino UNO }
void loop () { small_stepper.setSpeed(800); //Max seems to be 700 if (!(digitalRead(PinSW))) { // check if button is pressed if (RotaryPosition == 0) { // check if button was already pressed } else { small_stepper.step((RotaryPosition*100)); RotaryPosition=0; // Reset position to ZERO } }
// Runs if rotation was detected if (TurnDetected) { PrevPosition = RotaryPosition; // Save previous position in variable if (rotationdirection) { RotaryPosition=RotaryPosition-1;} // decrase Position by 1 else { RotaryPosition=RotaryPosition+1;} // increase Position by 1
TurnDetected = false; // do NOT repeat IF loop until new rotation detected
// Which direction to move Stepper motor if ((PrevPosition + 1) == RotaryPosition) { // Move motor CW StepsToTake=-100; small_stepper.step(StepsToTake); }
if ((RotaryPosition + 1) == PrevPosition) { // Move motor CCW StepsToTake=100; small_stepper.step(StepsToTake); } } }