Introduction: Fazendo Uma Grua De Stop-Motion (com Sucata)

Atividade aconteceu em 3 dias no mês de Outubro/2013, Alejandro Messias (do Laboratório Hacker de Campinas) e Antonio Celso (Instrutor SESC/Campinas)  coordenaram o Lab.

Bom pessoal o que nos propomos a construir é esse instrumento (que aí é comercial, proprietário e manual):

http://stopmotionmagazine.com/?p=358

http://stopmotionmagazine.com/?cat=16

O desafio é: usando coisas de baixo custo e/ou sucatas construir um aparelho que tenha a mesma funcionalidade que o comercial.
A proposta em geral foi usar uma impressora sucata, e seus próprios motores, e para controlar o Arduíno.

Step 1: Material

Pra montagem usamos:

- Impressora 710C;

- Circuito integrado L293D;

- Sensor Ultrassônico HC-SR04;

- ProtoBoard;

- Fonte AT/ATX;
- Fios.

Step 2: Desmontando a Impressora 710C

Desmontando a impressora

Ferramentas:


Torx (T10);

2 chaves de fenda.

Segui esse passos, que está em inglês e sem fotos:

http://www.fixyourownprinter.com/forums/inkjet/13265

1 - Tirar a tampa que dá acesso ao carrinho;

2- Soltar os parafusos Torx;

Agora teremos que destravar a caixa plástica, o esquema é  usar duas chaves de fenda, uma na frente e outra atrás, forçando as travas, ai está, puxe a carcaça pro lado, ela deve sair facilmente (acredite ela sai fácil!rere).

Usamos da impressora a estrutura, e os motores, só ligamos o arduíno ao motor do carrinho (motor de corrente contínua), depois faremos testes com motor de passo.

Step 3: Ligando O Motor CC

Esse é motor que usamos ele tem uma boa potência (movimenta o carrinho dos cartuchos). Ligamos ele ao Arduíno.

Usamos um L293D que é um CI com 4 ponte-H, a ligação foi feita usando o seguinte tutorial:

http://labdegaragem.com/profiles/blogs/tutorial-de-como-utilizar-motor-dc-com-l293d-ponte-h-e-arduino

Esse circuito tem suas portas exatamente iguais ao SN754410ne ( que é muito usado em outras montagens de exemplos do Arduíno).

Step 4: Ligando O Sensor De Posição

Usamos o HC-SR04 para saber a posição do carrinho, é bem simples o uso desse componente, essas referências ajudaram:

http://blog.repeatdomiau.com.br/miadas/arduino-com-ultrassom-hcsr04
http://elecfreaks.com/store/download/HC-SR04.pdf

Step 5: Referência

http://arduino.cc/en/Tutorial/MotorKnob

http://www.ti.com/lit/ds/symlink/uln2803a.pdf

http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm

http://www.nmbtc.com/pdf/motors/PM42M048.pdf

http://arduino.cc/en/Tutorial/StepperBipolar

http://homepage.cs.uiowa.edu/~jones/step/example.html

http://www.precisionroller.com/instructions/hp-designjet-printhead-belt-replacement/

http://www.fixyourownprinter.com/forums/inkjet/13265

Step 6: O Código-fonte

Grua

/*

This example code is in the public domain.

*/

#define LEFT 9 // Passa o sinal para o L293D (esquerda)

#define RIGHT 10 // Passa o sinal para o L293D (direita)

#define echoPin 13 //Pino 13 recebe o pulso do echo

#define trigPin 12 //Pino 12 envia o pulso para gerar o echo

#define TEMPOS 2


void setup() {               

pinMode(LEFT, OUTPUT);    

pinMode(RIGHT, OUTPUT);

  pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe)

  pinMode(trigPin, OUTPUT); // define o pino 12 como saida (envia) 

Serial.begin(9600);







long v = lerDistancia();

Serial.println(v);

mover(250);               

v = lerDistancia();

Serial.println(v);



}



void mover(int pos){ // funça que movimento o carrinho



long v = lerDistancia();

while(v > 20000){

   v = lerDistancia();

}



int new_pos = pos - v;

Serial.println(new_pos);

if(new_pos < 0){

   // Esquerda

   Serial.println("Left");

   digitalWrite(LEFT, HIGH);

   long last = v;

   while(true){     

     long vl = lerDistancia();

     Serial.print(":"); Serial.print(

     vl); Serial.pr

    

     int("."); Serial.print(vl - last);

     if(vl <= pos && vl < 20000){

       break;

     }                 

     last = vl;

     delay(60);

    

   }       

   digitalWrite(LEFT, LOW);

  

  

  

   Serial.println(":");

} else {

   // Direita

   digitalWrite(RIGHT, HIGH);

   Serial.println("Right");

   long last = v;

   while(true){

       long vr = lerDistancia(); 

       Serial.print(":"); Serial.print(vr);Serial.print("."); Serial.print(last - vr);

       if(vr  >= pos && vr < 20000){

         break;

       }

       last = vr;   

       delay(60);

    }

    Serial.println(":");

    digitalWrite(RIGHT, LOW);

}



}

long lerDistancia(){

   digitalWrite(trigPin, LOW);   //seta o pino de trigger com um pulso baixo "LOW"

   delayMicroseconds(15);   // delay de 15 microssegundos

   digitalWrite(trigPin, HIGH);  //seta o pino de trigger com pulso alto "HIGH"

   delayMicroseconds(10);  //delay de 10 microssegundos

   digitalWrite(trigPin, LOW); //seta o pino 12 com pulso baixo novamente

  

   long duration = pulseIn(echoPin,HIGH);   //pulseInt lê o tempo entre a chamada e o pino entrar em high

   long distancia = (duration * 337) / 2000; //Dessa forma temos a nossa precisão em milimetros 

//Esse calculo é baseado em s = v . t, lembrando que o tempo vem dobrado

//porque é o tempo de ida e volta do ultrassom

   return distancia;

  

}

void lerDistancia(int tempo){

   int it = tempo / TEMPOS;

   for(int i=0;i<it;i++){

     long t = lerDistancia();

     Serial.print("T:");

     Serial.print(t);

     delay(TEMPOS);

   }

}

void loop() {

int red = Serial.parseInt();

if(red){

     long v = lerDistancia();

     Serial.println(v);

       mover(red);       

     v = lerDistancia();

     Serial.println(v);

}



}