Good afternoon I'm Cheems :],
I'm having issues with my project where my infrared sensors react too slow. The project is to have the robot stop at each syringe pump dispenser to mix each solution on after the other. I want my arm to stop directly stop right under a syringe pump dispenser but the sensors don't give inputs fast enough. I've linked my project below...
Youtube Video of my project:https://www.youtube.com/watch?v=P1-joIYc45g
As you can see the arm just slightly misses syringe pumps 1 and 2. I kind of regret using IR sensors >.<....
I'm trying to slow the 360 servo motor but so far that's as slow I can get it. Can I make it go slower?
Can I edit my code so that it reacts to the infrared sensors faster?
Can anyone recommend any other switch or sensor that would be more efficient in this situation?
I'm open to any suggestions for better accuracy.
Please and thank you :]
int stage_state = 1;
void loop(){
int Btn_read = digitalRead(Pump1_Btn);
int IR_read = analogRead(Reciever_pin);
char customKey = customKeypad.getKey();
Serial.println(IR_read);
if(customKey != NO_KEY){
Serial.println("Please Wait");
/*---------------------Polling Statements----------------*/
if(stage_state == 1){
goto STAGE1;
}
else if(stage_state == 2){
goto STAGE2;
}
else if(stage_state == 3){
goto STAGE3;
}
else if (stage_state == 4){
goto STAGE4;
}
/*---------------------Goto While Loops----------------------------*/
STAGE1:
Serial.println("Stage 1 Begin: ");
while(stage_state == 1){
Btn_read = digitalRead(Pump1_Btn);
Serial.println(Btn_read);
//FIND PUMP 1
//Motor Counter Clock
servo_360.writeMicroseconds(1400);
if(Btn_read == LOW){
//Motor Stop
servo_360.write(1500);
delay(1000);
//Dispense Syringe Pump 1
Pump1();
delay(1000);
//Turn a Bit to Mix
Arm_Clock(TURN_30);
delay(1000);
//Mix Solutions
Mix();
delay(1000);
//increment stage counter
stage_state += 1;
delay(1000);
break;
}
else{
//Motor Counter Clock
servo_360.writeMicroseconds(1400);
}
}
STAGE2:
Serial.println("Stage 2 Begin: ");
//Turn Pump 2 IR Emitter on 3.3v
analogWrite(Emitter1_pin, 186);
while(stage_state == 2){
IR_read = analogRead(Reciever_pin);
Serial.println(IR_read);
//FIND PUMP 2
//Motor Clock
servo_360.writeMicroseconds(1600);
if(IR_read >= 1){
//Motor Stop
servo_360.write(1500);
delay(1000);
//Dispense Syringe Pump 2
Pump2();
delay(1000);
//Turn to mix
Arm_Clock(TURN_45);
delay(1000);
//Mix Solution
Mix();
delay(1000);
//increment stage counter
stage_state += 1;
delay(1000);
//Turn Pump 1 IR Emitter off
analogWrite(Emitter1_pin, 0);
break;
}
else{
//Motor Counter Clock
servo_360.writeMicroseconds(1600);
}
}
STAGE3:
Serial.println("Stage 3 Begin: ");
//Turn Pump 3 IR Emitter on 3.3v
analogWrite(Emitter2_pin, 186);
while(stage_state == 3){
IR_read = analogRead(Reciever_pin);
Serial.println(IR_read);
//FIND PUMP 2
//Motor Clock
servo_360.writeMicroseconds(1600);
if(IR_read >= 1){
//Motor Stop
servo_360.write(1500);
delay(1000);
//Dispense Syringe Pump 3
Pump3();
delay(1000);
//Trun to Mix
Arm_Clock(TURN_45);
delay(1000);
//Mix Solution
Mix();
delay(1000);
//increment stage counter
stage_state += 1;
delay(1000);
//Turn Pump 1 IR Emitter off
analogWrite(Emitter2_pin, 0);
break;
}
else{
//Motor Counter Clock
servo_360.writeMicroseconds(1600);
}
}
STAGE4:
Serial.println("END CODE");
while(1){
/*TEMPORARILY STOP CODE*/
}
}
}