Você está na página 1de 22

DEPARTAMENTO DE MECNICA DE PRECISO

MICROPROCESSADORES II (MP II) E ELETRNICA III (ELET III)


1 SEMESTRE DE 2013

TRABALHO DE PESQUISA
CONTROLE DE MOTOR DE PASSO

Integrantes:
Danilo Cesar dos Santos Pedro 11107560
Marcelo Tadao Saita 11107785
Michel Chagury 11107426
Samuel Paim 08109957
Fabio Seisdedos

Professor: Sergio Augusto Senra


Data da entrega: 01 de Dezembro de 2013
Contedo

I. INTRODUO ............................................................................................ 1

II. Desenvolvimento ......................................................................................... 3

1. Material Utilizado ................................................................................... 3

Arduino Mega 2560 ..................................................................................... 3

Fios para ligaes ....................................................................................... 4

Resistores ................................................................................................... 4

Botoeiras ..................................................................................................... 5

Carregador de celular................................... Error! Bookmark not defined.

Cabo de impressora .................................................................................... 6

Driver ULN2003 + Motor de Passo para Arduinos e Microcontroladores .... 6

2. Montagem ............................................................................................. 8

3. Funcionamento ..................................................................................... 9

4. Programao ......................................................................................... 9

Cdigo fonte ................................................................................................ 9

III. Concluso .............................................................................................. 20

IV. Referencias Bibliogrficas ...................................................................... 20

1. Referncias bibliogrficas ................................................................... 20

2. Bibliografia .......................................................................................... 20
I. INTRODUO

Arduino, palavra por vezes traduzida ao portugus como Arduno,2 4


uma plataforma de prototipagem eletrnica de hardware livre, projetada com
um microcontrolador Atmel AVR de placa nica, com suporte de entrada/sada
embutido, uma linguagem de programao padro, a qual tem origem em
Wiring, e essencialmente C/C++. O objetivo do projeto criar ferramentas
que so acessveis, com baixo custo, flexveis e fceis de se usar por artistas e
amadores. Principalmente para aqueles que no teriam alcance aos
controladores mais sofisticados e de ferramentas mais complicadas.
Pode ser usado para o desenvolvimento de objetos interativos
independentes, ou ainda para ser conectado a um computador hospedeiro.
Uma tpica placa Arduino composta por um controlador, algumas linhas de
E/S digital e analgica, alm de uma interface serial ou USB, para interligar-se
ao hospedeiro, que usado para program-la e interagi-la em tempo real. Ela
em si no possui qualquer recurso de rede, porm comum combinar um ou
mais Arduinos deste modo, usando extenses apropriadas chamadas de
shields. A interface do hospedeiro simples, podendo ser escrita em vrias
linguagens.
Arduino uma plataforma de computao open-source baseado em uma
simples placa com entradas e sadas tanto digitais como analgicas. Possui um
prprio ambiente de desenvolvimento que implementa a Linguagem C. O
Arduino pode ser usado para desenvolver objetos interativos autnomos ou
pode ser conectado a um software em seu computador. O Ambiente de
desevolvimento(IDE) open-source pode ser obtido gratuitamente (atualmente
disponvel para Mac OS X, Windows, e Linux).

1
O Arduino Mega 2560 uma placa de microcontrolador baseada no
ATmega2560. Ele possui 54 pinos de entradas/sadas digitais, 16 entradas
analgicas,4 UARTs (portas seriais de hardware), um oscilador de cristal de 16
MHz, uma conexo USB, uma entrada de alimentao, uma conexo ICSP e
um boto de reset.
Ele contm tudo o que necessrio para dar suporte ao
microcontrolador, basta conectar a um computador com um cabo USB ou a
uma fonte de alimentao e j est pronto para comear. O mega compatvel
com a maioria dos shields desenhados para os Arduino Uno, Duemilanove e
para o Diecimila. Possui ainda o dobro de memria do antigo Arduino Mega.

2
II. Desenvolvimento

1. Material Utilizado

Arduino Mega 2560

Tamanho 5,3cm x 10,2cm x 1,0cm


Microcontrolador
ATmega2560

Tenso de operao 5V
Tenso de entrada
7-12V
(recomendada)
Tenso de entrada (limites) 6-20V
Pinos de entrada/sada (I/O)
54 (dos quais 14 podem ser sadas PWM)
digitais

3
Pinos de entrada analgicas 16
Corrente DC por pino I/O 40mA
Corrente DC para pino 3,3V 50mA
Memria Flash 256KB (dos quais, 4KB so usados pelo bootloader)
SRAM 8KB
EEPROM 4KB
Velocidade de Clock 16MHz
Plataforma RISK

Fios para ligaes

Resistores

4
Botoeiras

Fonte de Alimentao

5
Cabo de impressora

Driver ULN2003 + Motor de Passo para Arduinos e


Microcontroladores

Tenso: 5V.
Dimetro: 28mm.

6
ngulo Passo: 5,625 x 1/64.

Relao de reduo: 1/64.

5 Linha 4 fase pode ser acionado pelo chip ULN2003 comum tambm
pode ser conectado em fase de placa de desenvolvimento.

Ligao directa e fcil de usar motor de passo utilizado na placa de


desenvolvimento.
Dimenses: 31mm x 35mm.
Motor de passo com Driver ULN2003.
A, B, C, D de quatro fases LED indica o estado do trabalho motor de
passo.
Motor de passo com uma interface padro, quando usado diretamente
pluggable.
Tamanho placa Mdulo: 2,8 centmetros x 2,8 centmetros x 2cm -
1.1inch x 1.1inch x 0.79inch.
Tamanho do motor: 3,2 centmetros x 3,2 centmetros - 1.26inch x
1.26inch.
Torque de atrito: 600-1200 gf.cm
Torque Inicial: 300 gf.cm

Pacote inclui:
1 Drive x ULN2003
1 x motor de passo

Mdulo Laser

7
LDR

2. Montagem

Motor de Passo
Foi montado o circuito utilizando o Arduino Mega igual ao esquema
abaixo.

O circuito foi montado utilizando o Arduino Mega 2560, foi conectado as


portas 6,7,8 e 9 o driver de motor de passo ULN 2003 com um motor e outro
driver idntico as portas 1,2,3 e 4. Os drivers foram alimentado pelos 5V do
prprio arduino.

8
Foi ligado entre as portas 12 e 5V do Arduino um boto que controla o
motor 1 e entre as portas 13 e 5V um boto que controla o motor 2.

3. Funcionamento

Neste circuito quando pressionado o boto ligado porta 12 do


Arduino o programa muda o sentido de rotao do motor 1. Quando
pressionado o boto ligado porta 13 o programa muda o sentido de rotao
do motor 2.

4. Programao

Cdigo fonte
O Arduino Mega 2560 utiliza a linguagem de programao C, para
compilar os seus programas. O cdigo fonte do programa deste controlador de
motores de passo descrito abaixo:

Comeo do cdigo

//declare variables for the motor pins


int const motorPina = 1; // Blue - 28BYJ48 pin 1
int const motorPinb = 2; // Pink - 28BYJ48 pin 2
int const motorPinc = 3; // Yellow - 28BYJ48 pin 3
int const motorPind = 4; // Orange - 28BYJ48 pin 4

int const motor2Pina = 6; // Blue - 28BYJ48 pin 1


int const motor2Pinb = 7; // Pink - 28BYJ48 pin 2
int const motor2Pinc = 8; // Yellow - 28BYJ48 pin 3
int const motor2Pind = 9;

int const in_button = 12;


int const in_button2 = 13; // Red - 28BYJ48 pin 5 (VCC)

9
float motorSpeed =1; //variable to set stepper speed
//int potPin = 2; //potentiometer connected to A2
//int potValue = 0; //variable to read A0 input

//////////////////////////////////////////////////////////////////////////////
void setup()
{
//declare the motor pins as outputs
pinMode(motorPina, OUTPUT);
pinMode(motorPinb, OUTPUT);
pinMode(motorPinc, OUTPUT);
pinMode(motorPind, OUTPUT);

pinMode(motor2Pina, OUTPUT);
pinMode(motor2Pinb, OUTPUT);
pinMode(motor2Pinc, OUTPUT);
pinMode(motor2Pind, OUTPUT);

pinMode(in_button, INPUT);
pinMode(in_button2, INPUT);

// Serial.begin(9600);
}

int num = -1 ;
int num2 = -1 ;
//inicia o loop arduino
void loop(){

if (digitalRead(in_button)==HIGH)
{
num = num * -1;
delay(1000);

10
}

if (digitalRead(in_button2)==HIGH)
{
num2 = num2 * -1;
delay(1000);
}

if (num > 0 )
{
// 1
digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);
delay(motorSpeed);
// 2
digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);
delay (motorSpeed);
// 3
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);
delay(motorSpeed);
// 4
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, LOW);

11
delay(motorSpeed);
// 5
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, LOW);
delay(motorSpeed);
// 6
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, HIGH);
delay(motorSpeed);
}
if (num < 0 )
{
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, HIGH);
delay(motorSpeed);

12
digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, HIGH);
delay(motorSpeed);

digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, LOW);
delay(motorSpeed);

digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, HIGH);
digitalWrite(motorPind, LOW);
delay (motorSpeed);

digitalWrite(motorPina, LOW);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);
delay(motorSpeed);

digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, HIGH);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);
delay (motorSpeed);

digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, LOW);

13
delay (motorSpeed);

digitalWrite(motorPina, HIGH);
digitalWrite(motorPinb, LOW);
digitalWrite(motorPinc, LOW);
digitalWrite(motorPind, HIGH);
delay (motorSpeed);
}

if (num2 > 0 )
{
// 1
digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);
// 2
digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, LOW);
delay (motorSpeed);
// 3
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, LOW);

14
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);
// 4
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);
// 5
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);
// 6
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, HIGH);
delay (motorSpeed);
// 7
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, HIGH);
delay(motorSpeed);
// 8
digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, HIGH);
delay(motorSpeed);
}
if (num2 < 0 )

15
{
digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, HIGH);
delay(motorSpeed);

digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, HIGH);
delay(motorSpeed);

digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);

digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, HIGH);
digitalWrite(motor2Pind, LOW);
delay (motorSpeed);

digitalWrite(motor2Pina, LOW);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, LOW);
delay(motorSpeed);

digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, HIGH);
digitalWrite(motor2Pinc, LOW);

16
digitalWrite(motor2Pind, LOW);
delay (motorSpeed);

digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, LOW);
delay (motorSpeed);

digitalWrite(motor2Pina, HIGH);
digitalWrite(motor2Pinb, LOW);
digitalWrite(motor2Pinc, LOW);
digitalWrite(motor2Pind, HIGH);
delay (motorSpeed);
}
}
Final do Cdigo

17
5. Sensor Laser

Conforme o esquema acima demonstrado o circuito para acionar o um


LED, utilizando o corte de um feixe de luz do laser.

O LDR recebe a luz do laser, quando algum objeto fica entre a luz do
laser o LDR aumenta a sua resistncia eltrica. O LDR est ligado porta
analgica A0 do arduino. O arduino interpreta a variao de tenso causada
pela variao de resistncia eltrica e aciona o diodo ligado a sua porta digital
13.

6. Cdigo Fonte

// <<<<<<<Comentrios no cdigo

18
int sensorPin = A0; // entrada analgica
int ledPin = 13; // Porta do led
int sensorValue = 0; // Valor analgico da tenso variada pelo LDR

// declarao dos tipos das portas:


void setup()
{
pinMode(ledPin, OUTPUT); //Indica porta do led como sada
pinMode(sensorPin, INPUT); // Indica porta analgica do LDR como entrada
Serial.begin(9600); //Comunicao do arduino com o computador caso ligado.
}

void loop()
{ //Comeo do void loop

sensorValue = analogRead(sensorPin); //L valor analgico na porta do ldr e


grava na varivel

Serial.println(sensorValue); //Escreve na tela do computador o valor do LDR


entre 0 e 1023
delay(1);
// aguarda 1 milissegundo para escrever novamente

if ( sensorValue >= 300 ) //Se o valor do sensor maior que 300


{
digitalWrite(ledPin, HIGH); // Ascende o led
}
else
{
digitalWrite(ledPin, LOW); // Apaga o led
}

} //Final do Void Loop

19
III. Concluso

Com base no contedo desenvolvido com os microprocessadores


demonstrado que possvel fazer sistemas de controle de motores com
preciso. Bastando analisar como ser necessrio fazer o movimento de um ou
mais motores.

IV. Referencias Bibliogrficas

1. Referncias bibliogrficas

ARDUINO. Arduino. Disponvel em: <http://www.arduino.cc/>. Acesso em: 14


mai. 2013.

WIKIPDIA. Arduino. Disponvel em: <http://pt.wikipedia.org/wiki/Arduino>.


Acesso em: 01 jun. 2013.

2. Bibliografia

ASSOCIAO BRASILEIRA DE NORMAS TCNICAS. NBR: 10520:


informao e documentao: citaes em documentos: apresentao. Rio de
Janeiro, 2002.

______. NBR: 14724: informao e documentao: trabalhos acadmicos:


apresentao. Rio de Janeiro, 2002.

______. NBR: 6023: informao e documentao: referncias: elaborao. Rio


de Janeiro, 2002.

______. NBR: 6024: informao e documentao: numerao progressiva das


sees de um documento escrito: apresentao. Rio de Janeiro, 2002.

______. NBR: 6027: informao e documentao: sumrio: apresentao. Rio


de Janeiro, 2002.

CS, Danilo Da. Manual Terico-Prtico para Elaborao Metodolgica de


Trabalhos Acadmicos. So Paulo: Jubela Livros, 2008.

20