// Universidade Federal do Rio de Janeiro - UFRJ // Instituto de Física - IF // Mestrado Profissional de Ensino de Física // Trabalho de Dissertação // Autor: Vinícius de Paula Silveira //------------------------------------------------- //Biblioteca para uso dos motores de passo #include //Portas para o seletor de velocidade #define pinVel1 51 #define pinVel2 52 #define pinVel3 53 //Portas do motor de passo 1 (Terra) #define Terra1 7 #define Terra2 8 #define Terra3 9 #define Terra4 10 Stepper mTerra(2050,Terra1,Terra3,Terra2,Terra4); //Portas do motor de passo 2 (Lua) #define Lua1 3 #define Lua2 4 #define Lua3 5 #define Lua4 6 Stepper mLua(2050,Lua1,Lua3,Lua2,Lua4); //Portas dos Leds indicadores de velocidade #define ledVel1 48 #define ledVel2 47 #define ledVel3 44 #define ledVel4 45 #define ledVel5 40 //Portas dos Leds indicadores de sentido #define ledSentido1 36 #define ledSentido2 35 //Portas dos Leds Start/Stop #define ledStart 32 #define ledStop 31 //Portas do Botao de sentido e de Start/Stop #define btnSentido 28 #define btnStartStop 27 //Variavel global que define o sentido de rotação dos motores int sentido; void setup(){ //Definição de entradas Pull-Up pinMode(pinVel1,INPUT_PULLUP); pinMode(pinVel2,INPUT_PULLUP); pinMode(pinVel3,INPUT_PULLUP); pinMode(btnSentido,INPUT_PULLUP); pinMode(btnStartStop,INPUT_PULLUP); //Definição das portas dos leds como Output pinMode(ledVel1,OUTPUT); pinMode(ledVel2,OUTPUT); pinMode(ledVel3,OUTPUT); pinMode(ledVel4,OUTPUT); pinMode(ledVel5,OUTPUT); pinMode(ledSentido1,OUTPUT); pinMode(ledSentido2,OUTPUT); pinMode(ledStart,OUTPUT); pinMode(ledStop,OUTPUT); } void loop(){ //Variavel que lê o estado da chave que define o sentido de rotação bool S1=digitalRead(btnSentido); //Comando para definir o valor da variavel sentido e acender as luzes correspondentes if(S1){sentido=1; digitalWrite(ledSentido1,HIGH); digitalWrite(ledSentido2,LOW); } else{sentido=-1; digitalWrite(ledSentido1,LOW); digitalWrite(ledSentido2,HIGH); } if (pinBotaoRetencao()) { digitalWrite(ledStart,HIGH); digitalWrite(ledStop,LOW); } else { digitalWrite(ledStart,LOW); digitalWrite(ledStop,HIGH); } //Variaveis com a leitura dos pinos do seletor de velocidade bool V1=digitalRead(pinVel1); bool V2=digitalRead(pinVel2); bool V3=digitalRead(pinVel3); //Condições para acionar as funções de velocidade if((V1==0)&&(V2==1)&&(V3==1)){velocidade1();} if((V1==0)&&(V2==0)&&(V3==1)){velocidade2();} if((V1==1)&&(V2==0)&&(V3==1)){velocidade3();} if((V1==1)&&(V2==0)&&(V3==0)){velocidade4();} if((V1==1)&&(V2==1)&&(V3==0)){velocidade5();} } void velocidade1(){ //Acende os leds indicadores da velocidade digitalWrite(ledVel1,HIGH); digitalWrite(ledVel2,LOW); digitalWrite(ledVel3,LOW); digitalWrite(ledVel4,LOW); digitalWrite(ledVel5,LOW); //Move os motores if(pinBotaoRetencao()){ mTerra.setSpeed(2); mLua.setSpeed(2); for(int i=1;i<7;i++){ mTerra.step((sentido)*2); mLua.step((sentido)*1); } mTerra.step((sentido)*1); mLua.step((sentido)*1); } } void velocidade2(){ //Acende os leds indicadores da velocidade digitalWrite(ledVel1,LOW); digitalWrite(ledVel2,HIGH); digitalWrite(ledVel3,LOW); digitalWrite(ledVel4,LOW); digitalWrite(ledVel5,LOW); //Move os motores if(pinBotaoRetencao()){ mTerra.setSpeed(3); mLua.setSpeed(3); for(int i=1;i<6;i++){ mTerra.step((sentido)*2); mLua.step((sentido)*1); } mTerra.step((sentido)*1); mLua.step((sentido)*1); } } void velocidade3(){ //Acende os leds indicadores da velocidade digitalWrite(ledVel1,LOW); digitalWrite(ledVel2,LOW); digitalWrite(ledVel3,HIGH); digitalWrite(ledVel4,LOW); digitalWrite(ledVel5,LOW); //Move os motores if(pinBotaoRetencao()){ mTerra.setSpeed(6); mLua.setSpeed(6); for(int i=1;i<6;i++){ mTerra.step((sentido)*2); mLua.step((sentido)*1); } mTerra.step((sentido)*1); mLua.step((sentido)*1); } } void velocidade4(){ //Acende os leds indicadores da velocidade digitalWrite(ledVel1,LOW); digitalWrite(ledVel2,LOW); digitalWrite(ledVel3,LOW); digitalWrite(ledVel4,HIGH); digitalWrite(ledVel5,LOW); //Move os motores if(pinBotaoRetencao()){ mTerra.setSpeed(9); mLua.setSpeed(9); for(int i=1;i<5;i++){ mTerra.step((sentido)*2); mLua.step((sentido)*1); } mTerra.step((sentido)*1); mLua.step((sentido)*1); } } void velocidade5(){ //Acende os leds indicadores da velocidade digitalWrite(ledVel1,LOW); digitalWrite(ledVel2,LOW); digitalWrite(ledVel3,LOW); digitalWrite(ledVel4,LOW); digitalWrite(ledVel5,HIGH); //Move os motores if(pinBotaoRetencao()){ mTerra.setSpeed(11); mLua.setSpeed(11); for(int i=1;i<5;i++){ mTerra.step((sentido)*2); mLua.step((sentido)*1); } mTerra.step((sentido)*1); mLua.step((sentido)*1); } } //Função para a retenção do botão Start-Stop bool pinBotaoRetencao() { #define tempoDebounce 50 //(tempo para eliminar o efeito Bounce EM MILISEGUNDOS) bool estadoBotao; static bool estadoBotaoAnt; static bool estadoRet = true; static unsigned long delayBotao = 0; if ( (millis() - delayBotao) > tempoDebounce ) { estadoBotao = digitalRead(btnStartStop); if ( estadoBotao && (estadoBotao != estadoBotaoAnt) ) { estadoRet = !estadoRet; delayBotao = millis(); } estadoBotaoAnt = estadoBotao; } return estadoRet; }