terça-feira, 28 de abril de 2015

DiY motor de acompanhamento eq2

O corre-corre do dia a dia me deixou ausente, mas vamos lá. Como vimos na última postagem, o motor vagabundo da eq2 queimou, e eu fiquei vendido com minha montagem, pois no Brasil não havia uma única loja com motorização eq2 à venda.
Resolvi então usar a cabeça e bolar uma motorização para a eq2. Defini que tinha que ser barata, ser rústica ("bruta mesmo"), e precisa. Eu tinha um arduíno em casa e fui atrás de informação. Eis os materiais usados!

Motor de passo retirado de um sistema de iluminação de festa. Nema 23, 14v, 0,35a, 1,8segundos por passo. Me cobraram 25 reais por isso. Qualquer motor de passo bipolar com tensão até 14, e corrente até 500mA serve, embora seja melhor usar um com resolução de 1,8º.

Sucata de impressora. Pedi umas engrenagens numa assistência técnica, e o dono me deu essa carcaça(ainda ganhei uns motores cc e várias partes de aço galvanizado). Free

Caixa patola, botões, pinos terminais e uma placa universal para prototipagem. Custou 15 reais  numa loja de materiais eletrônicos.


Com um arco de serra cortei uma das chapas da carcaça da impressora pra servir de suporte para o motor. Foi chato de cortar sem uma morsa nem uma mesa firme. Mas nada do outro mundo. O desenho foi feito para fixar nos parafusos embaixo do sem fim do eixo R.A. A engrenagem foi reaberta com o ferro de solda para dar entrada ao eixo do motor. Esquente e coloque no eixo com o plástico ainda mole.
Aqui o motor já fixado no suporte. A engrenagem substituiu a engrenagem metálica original. Como o eixo é cônico, ultrapassei apenas a ponta do ferro de soldar, e coloquei o parafuso como ficava na engrenagem original. Nesse caso a relação das engrenagens ficou apenas 2-1. Mas como elas não custaram nada, ficou ótimo.
Motor no lugar. Sendo testado em halfstep.

 O arduíno e o "shield" com o ci l297d.
O Arduíno(acima) custa em média 45 reais

O "joystick" já pronto!A alimentação é pelo próprio jack do arduíno, a porta usb para programação também ficou pra fora. Na lateral está um conector 4 pinos (macho) para o motor.

Custo total, 85 reais. Com microsteps, ficou um treco muito, muito mais robusto as que motorizações que existem à venda, e bastante preciso. A resolução ficou 0,197 segundos de arco por passo. Se colocar um 130mm na montagem, pelo critério de rayleigh a resolução o telescópio dá 1,07s de arco , então a resolução da motorização está bem abaixo da resolução máxima do 130mm..

Finalmente testei a montagem no bequinho de casa, só deu pra tirar uma foto, com tempo de exposição de 60s, da estrela Spica, com alinhamento mais ou menos.

Nesse projeto se faz necessário o uso de uma fonte 12v, 0,5A no mínimo. Se quiser sair de casa precisarei de uma bateria 12v7ah dessas de moto eletrica de criança. Vai alimentar a montagem e o aquecedor anti-orvalho que estou fazendo por dezenas de horas.

Abaixo o código para arduíno em 32microsteps,


int A = 3;
int B = 9;
int C = 11;
int D = 10;
long d25 = 64;
long d50 = 127;
long d75 = 191;
long dutyCycle = 127; //Preguiça de mudar checa-botão, rsrs...
int sobe2x = 2;
int desce2x = 4;
int sobe8x = 5;
int desce8x = 6;
long tempoPasso = 197;

void setup() {
  Serial.begin(9600);
  pinMode(A, OUTPUT);  
  pinMode(B, OUTPUT);  
  pinMode(C, OUTPUT);  
  pinMode(D, OUTPUT);
  pinMode(sobe2x, INPUT_PULLUP);
  pinMode(desce2x, INPUT_PULLUP);
  pinMode(sobe8x, INPUT_PULLUP);
  pinMode(desce8x, INPUT_PULLUP);

}

void p1(long velocidade){
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
  delay(velocidade);
  Serial.println("1");
}
void p2(long velocidade,long d){
    digitalWrite(A, HIGH);
    analogWrite(B, d);
    digitalWrite(C, LOW);
    digitalWrite(D, LOW);
    delay(velocidade);
    Serial.println("2");
}
void p3(long velocidade){
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
  delay(velocidade);
  Serial.println("3");
}
void p4(long velocidade, long d){
    digitalWrite(A, HIGH);
    digitalWrite(B, LOW);
    digitalWrite(C, LOW);
    analogWrite(D, d);
    delay(velocidade);
    Serial.println("4");
}
void p5(long velocidade){
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  delay(velocidade);
  Serial.println("5");
}
void p6(long velocidade, long d){
    analogWrite(A, d);
    digitalWrite(B, LOW);
    digitalWrite(C, LOW);
    digitalWrite(D, HIGH);
    delay(velocidade);
    Serial.println("6");
}
void p7(long velocidade){
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  delay(velocidade);
  Serial.println("7");
}
void p8(long velocidade, long d){
    digitalWrite(A, LOW);
    digitalWrite(B, LOW);
    analogWrite(C, d);
    digitalWrite(D, HIGH);
    delay(velocidade);
    Serial.println("8");
}
void p9(long velocidade){
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  delay(velocidade);
  Serial.println("9");
}
void p10(long velocidade, long d){
    digitalWrite(A, LOW);
    digitalWrite(B, LOW);
    digitalWrite(C, HIGH);
    analogWrite(D, d);
    delay(velocidade);
    Serial.println("10");
}
void p11(long velocidade){
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, LOW);
  delay(velocidade);
  Serial.println("11");
}
void p12(long velocidade, long d){
    digitalWrite(A, LOW);
    analogWrite(B, d);
    digitalWrite(C, HIGH);
    digitalWrite(D, LOW);
    delay(velocidade);
    Serial.println("12");
}
void p13(long velocidade){
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, LOW);
  delay(velocidade);
  Serial.println("13");
}
void p14(long velocidade, long d){
    digitalWrite(A, LOW);
    digitalWrite(B, HIGH);
    analogWrite(C, d);
    digitalWrite(D, LOW);
    delay(velocidade);
    Serial.println("14");
}
void p15(long velocidade){
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
  delay(velocidade);
  Serial.println("15");
}
void p16(long velocidade, long d){
    analogWrite(A, d);
    digitalWrite(B, HIGH);
    digitalWrite(C, LOW);
    digitalWrite(D, LOW);
    delay(velocidade);
    Serial.println("16");
}
void motorOff(){
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
}
void checaBotao(long tempoPasso){
  while(digitalRead(sobe2x)==LOW&&digitalRead(desce2x)==HIGH&&digitalRead(sobe8x)==HIGH&&digitalRead(desce8x)==HIGH){
    p1(tempoPasso/4);
    p2(tempoPasso/4, dutyCycle);
    p3(tempoPasso/4);
    p4(tempoPasso/4, dutyCycle);
    p5(tempoPasso/4);
    p6(tempoPasso/4, dutyCycle);
    p7(tempoPasso/4);
    p8(tempoPasso/4, dutyCycle);
    p9(tempoPasso/4);
    p10(tempoPasso/4, dutyCycle);
    p11(tempoPasso/4);
    p12(tempoPasso/4, dutyCycle);
    p13(tempoPasso/4);
    p14(tempoPasso/4, dutyCycle);
    p15(tempoPasso/4);
    p16(tempoPasso/4, dutyCycle);
    }
    while(digitalRead(sobe2x)==HIGH&&digitalRead(desce2x)==LOW&&digitalRead(sobe8x)==HIGH&&digitalRead(desce8x)==HIGH){
    p16(tempoPasso/4, dutyCycle);
    p15(tempoPasso/4);
    p14(tempoPasso/4, dutyCycle);
    p13(tempoPasso/4);
    p12(tempoPasso/4, dutyCycle);
    p11(tempoPasso/4);
    p10(tempoPasso/4, dutyCycle);
    p9(tempoPasso/4);
    p8(tempoPasso/4, dutyCycle);
    p7(tempoPasso/4);
    p6(tempoPasso/4, dutyCycle);
    p5(tempoPasso/4);
    p4(tempoPasso/4, dutyCycle);
    p3(tempoPasso/4);
    p2(tempoPasso/4, dutyCycle);
    p1(tempoPasso/4);
    }
    while(digitalRead(sobe2x)==HIGH&&digitalRead(desce2x)==HIGH&&digitalRead(sobe8x)==LOW&&digitalRead(desce8x)==HIGH){
    p1(tempoPasso/32);
    p2(tempoPasso/32, dutyCycle);
    p3(tempoPasso/32);
    p4(tempoPasso/32, dutyCycle);
    p5(tempoPasso/32);
    p6(tempoPasso/32, dutyCycle);
    p7(tempoPasso/32);
    p8(tempoPasso/32, dutyCycle);
    p9(tempoPasso/32);
    p10(tempoPasso/32, dutyCycle);
    p11(tempoPasso/32);
    p12(tempoPasso/32, dutyCycle);
    p13(tempoPasso/32);
    p14(tempoPasso/32, dutyCycle);
    p15(tempoPasso/32);
    p16(tempoPasso/32, dutyCycle);
    }
    while(digitalRead(sobe2x)==HIGH&&digitalRead(desce2x)==HIGH&&digitalRead(sobe8x)==HIGH&&digitalRead(desce8x)==LOW){
    p16(tempoPasso/32, dutyCycle);
    p15(tempoPasso/32);
    p14(tempoPasso/32, dutyCycle);
    p13(tempoPasso/32);
    p12(tempoPasso/32, dutyCycle);
    p11(tempoPasso/32);
    p10(tempoPasso/32, dutyCycle);
    p9(tempoPasso/32);
    p8(tempoPasso/32, dutyCycle);
    p7(tempoPasso/32);
    p6(tempoPasso/32, dutyCycle);
    p5(tempoPasso/32);
    p4(tempoPasso/32, dutyCycle);
    p3(tempoPasso/32);
    p2(tempoPasso/32, dutyCycle);
    p1(tempoPasso/32);
 
    }
}

// the loop routine runs over and over again forever:
void loop() {
   p1(tempoPasso);
   p2(tempoPasso, d75);
   p2(tempoPasso, d50);
   p2(tempoPasso, d25);
   checaBotao(tempoPasso);
   p3(tempoPasso);
   p4(tempoPasso, d25);
   p4(tempoPasso, d50);
   p4(tempoPasso, d75);
   checaBotao(tempoPasso);
   p5(tempoPasso);
   p6(tempoPasso, d75);
   p6(tempoPasso, d50);
   p6(tempoPasso, d25);
   checaBotao(tempoPasso);
   p7(tempoPasso);
   p8(tempoPasso, d25);
   p8(tempoPasso, d50);
   p8(tempoPasso, d75);
   checaBotao(tempoPasso);
   p9(tempoPasso);
   p10(tempoPasso, d75);
   p10(tempoPasso, d50);
   p10(tempoPasso, d25);
   checaBotao(tempoPasso);
   p11(tempoPasso);
   p12(tempoPasso, d25);
   p12(tempoPasso, d50);
   p12(tempoPasso, d75);
   checaBotao(tempoPasso);
   p13(tempoPasso);
   p14(tempoPasso, d75);
   p14(tempoPasso, d50);
   p14(tempoPasso, d25);
   checaBotao(tempoPasso);
   p15(tempoPasso);
   p16(tempoPasso, d25);
   p16(tempoPasso, d50);
   p16(tempoPasso, d75);
   checaBotao(tempoPasso);
}

Um comentário: