universidade do estado do amazonas - ueatiagodemelo.info/monografias/2011/tcc-edson-borges.pdf ·...

83
UNIVERSIDADE DO ESTADO DO AMAZONAS - UEA ESCOLA SUPERIOR DE TECNOLOGIA ENGENHARIA DE COMPUTA¸ C ˜ AO EDSON SOARES BORGES CARRO ROB ˆ O EM ARDUINO COM COMUNICA ¸ C ˜ AO SEM FIO Manaus 2011

Upload: vanmien

Post on 16-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE DO ESTADO DO AMAZONAS - UEA

ESCOLA SUPERIOR DE TECNOLOGIA

ENGENHARIA DE COMPUTACAO

EDSON SOARES BORGES

CARRO ROBO EM ARDUINO COM

COMUNICACAO SEM FIO

Manaus

2011

EDSON SOARES BORGES

CARRO ROBO EM ARDUINO COM COMUNICACAO SEM FIO

Trabalho de Conclusao de Curso apresentado

a banca avaliadora do Curso de Engenharia

de Computacao, da Escola Superior de

Tecnologia, da Universidade do Estado do

Amazonas, como pre-requisito para obtencao

do tıtulo de Engenheiro de Computacao.

Orientador: Prof. M.Sc. Jucimar Maia da Silva Jr.

Manaus

2011

ii

Universidade do Estado do Amazonas - UEA

Escola Superior de Tecnologia - EST

Reitor:

Jose Aldemir de Oliveira

Vice-Reitor:

Marly Guimaraes Fernandes Costa

Diretor da Escola Superior de Tecnologia:

Mario Augusto Bessa de Figueiredo

Coordenador do Curso de Engenharia de Computacao:

Danielle Gordiano Valente

Coordenador da Disciplina Projeto Final:

Raimundo Correa de Oliveira

Banca Avaliadora composta por: Data da Defesa: 16/12/2011.

Prof. M.Sc. Jucimar Maia da Silva Jr. (Orientador)

Prof. M.Sc. Ricardo da Silva Barbosa

Prof. M.Sc. Raimundo Correa de Oliveira

iii

CIP - Catalogacao na Publicacao

B732C Borges, Edson Soares

Carro robo em Arduino com Comunicacao sem fio / Edson Borges; [orien-

tado por] Prof. M.Sc. Jucimar Maia da Silva Jr. - Manaus: UEA, 2011.

82 f.; il. col.; tab.; 30cm

Trabalho de Conclusao de Curso (Graduacao em Engenharia de Computa-

cao). Universidade do Estado do Amazonas, 2011.

Inclui Bibliografia

CDU 004

iv

EDSON SOARES BORGES

CARRO ROBO EM ARDUINO COM COMUNICACAO SEM FIO

Trabalho de Conclusao de Curso apresentado

a banca avaliadora do Curso de Engenharia

de Computacao, da Escola Superior de

Tecnologia, da Universidade do Estado do

Amazonas, como pre-requisito para obtencao

do tıtulo de Engenheiro de Computacao.

Aprovado em: 16/12/2011BANCA EXAMINADORA

Prof. Jucimar Maia da Silva Jr. , M.Sc

UNIVERSIDADE DO ESTADO DO AMAZONAS

Prof. Ricardo da Silva Barbosa, M.Sc

UNIVERSIDADE DO ESTADO DO AMAZONAS

Prof. Raimundo Correa de Oliveira, M.Sc

UNIVERSIDADE DO ESTADO DO AMAZONAS

v

Agradecimentos

Ao finalizar este trabalho, apos um anos ,

tive o prazer de contar com a amizade e o in-

centivo de pessoas que tornaram mais suave

este caminho. A elas, agradeco:

Aos meus pais e meu irmao, que ficaram pri-

vados de minha companhia diversas vezes,

mas sempre me incentivaram e apoioaram.

A minha “famılia”, com quem pude dividir

alegrias e angustias durante o tempo em que

ficamos em na faculade.

Ao orientador sempre disposto a esclarecer as

duvidas e indicar o melhor caminho de pes-

quisa para resolver os problemas que apare-

ciam no projeto.

vi

Resumo

Esta monografia descreve o desenvolvimento de um carro robo utilizando o projeto

de placa open source Arduino. Apresentando uma alternativa para o desenvolvimento de

sistemas embarcados que nao necessitem de muito conhecimento eletrico.

Palavras Chave: Carro robo, Arduino, Sistemas embarcados

vii

Abstract

This monograph describes the development of a robot car project using the open source

Arduino board. Presenting an alternative to the development of embedded systems that

do not require much knowledge of electric.

Key-words: Robot car, Arduino, Embedded systems

viii

Sumario

Lista de Tabelas xi

Lista de Figuras xii

Lista de Codigos xiii

1 Arduino 3

1.1 Definicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.1 Microcontroladores AVR . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3.2 Famılia AVR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.4 ATmega 328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.4.1 Unidade Central de Processamento (CPU) . . . . . . . . . . . . . . 8

1.4.2 Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.4.3 Stack Pointer (SP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4.4 Sistema de Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4.5 Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.4.6 Conversor A/D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.4.7 PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.4.8 Temporizadores e Contadores . . . . . . . . . . . . . . . . . . . . . 14

1.4.9 Descricao dos Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Ambiente de Desenvolvimento 17

2.1 Hardware Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2 Alimentacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.3 Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.4 Entrada e Saıda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

ix

2.5 Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3 Motor Control Shield Arduino 23

3.1 Implementacao do motor DC no Arduino IDE . . . . . . . . . . . . . . . . 24

3.2 Introducao as maquinas eletricas . . . . . . . . . . . . . . . . . . . . . . . 26

3.2.1 Maquina CC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.2.2 Forca contra-eletromotriz . . . . . . . . . . . . . . . . . . . . . . . . 29

3.2.3 Conceito de Torque . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.2.4 Dispositivo de Partida . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.5 Invertendo o Sentido da Rotacao . . . . . . . . . . . . . . . . . . . 33

3.2.6 Ponte H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 Xbee 35

4.1 Hardware Xbee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.2 Padrao IEEE 802.15.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2.1 Protocolo de Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2.2 Tipos de No . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2.3 Topologias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2.4 Confiabilidade e seguranca . . . . . . . . . . . . . . . . . . . . . . . 39

4.3 Padrao ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.3.1 Tipos de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.3.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.3.3 Servicos de seguranca . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.4 Configuracao do Xbee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.4.1 Configurando o Xbee pelo X-CTU . . . . . . . . . . . . . . . . . . . 43

4.4.2 Configurando o Xbee pelo Tera Term . . . . . . . . . . . . . . . . . 45

5 Desenvolvimento 49

5.1 Etapas de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.2 Materiais Utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.3 Arquitetura do Robo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.4 Montando o Carro Robo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.4.1 Software Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.4.2 Software do Motor . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.4.3 Software Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5.4.4 Utilizando o carro robo . . . . . . . . . . . . . . . . . . . . . . . . . 58

x

A Codigos do Projeto 62

A.1 Codigo do Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

A.2 Codigos Da pagina web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Referencias Bibliograficas 67

xi

Lista de Tabelas

2.1 Caracterıstica arduino duemilanove . . . . . . . . . . . . . . . . . . . . . . 18

4.1 Caracterısticas da Serie 1 e 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.2 Configuracoes dos Modulos 1 e 2 . . . . . . . . . . . . . . . . . . . . . . . . 47

xii

Lista de Figuras

1.1 Placa Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 Arquitetura classica de processadores: Von-Neumann x Harvard . . . . . . 5

1.3 Diagrama de blocos de um microcontrolador ATmega 168/ATmega 328 . . 9

1.4 Diagrama em blocos da unidade central de processamento (CPU) . . . . . 10

1.5 Registradores de trabalho da unidade central de processamento (CPU) . . 10

1.6 Organizacao da memoria de programa ATmega 328 . . . . . . . . . . . . . 11

1.7 Sistema de clock do AVR e sua distribuicao . . . . . . . . . . . . . . . . . 12

1.8 Opcao de clock externo para o AVR . . . . . . . . . . . . . . . . . . . . . . 13

1.9 Encapsulamento dos pinos do ATmega 328 . . . . . . . . . . . . . . . . . . 15

2.1 Arduino Duemilanove Board . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2 Pinos do ATmega 328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3 Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.4 Monitoramento de sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.1 Motor Control Shield Adafruit . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2 Motor DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.3 Corte de uma maquina CC . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4 Figura (a) Conexao campo-shunt, Figura (b) Conexao campo-serie . . . . . 29

3.5 Forcas atuantes no fio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.6 Figura (a) Motor elementar, Figura (b) Circuito do motor . . . . . . . . . 30

3.7 Figura (a) Bobina de uma unica espira, Figura (b) Torque desenvolvido . . 32

4.1 X-CTU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.2 Adptadores USB para modulos do Xbee . . . . . . . . . . . . . . . . . . . 44

4.3 Porta que o modulo Xbee esta conectado . . . . . . . . . . . . . . . . . . . 44

4.4 Comunicacao OK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4.5 Programa Tera Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

xiii

4.6 Configuracoes do terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.1 Carro Montado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5.2 Pagina Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.3 Prototipo do robo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.4 Arquitetura do Robo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.5 Pecas do Carro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.6 Ligacao dos motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.7 Motor Control Shield com os componentes nao soldados . . . . . . . . . . . 55

xiv

Lista de Codigos

4.4.1 Pisca LED com Xbee. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.4.1 Pisca LED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.4.2 Codigo que controla os motores do carro robo. . . . . . . . . . . . . . . . . 55

5.4.3 Codigo da pagina web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5.4.4 Comunicacao com o Arduino atraves da serial . . . . . . . . . . . . . . . . 57

5.4.5 Responsavel por verificar qual informacao passar para o robo . . . . . . . . 58

5.4.6 Codigo completo da comunicacao com o Arduino . . . . . . . . . . . . . . . 59

5.4.7 Codigo completo do controle do Carro Robo . . . . . . . . . . . . . . . . . 60

A.1.1Codigo que controla os motores do carro robo. . . . . . . . . . . . . . . . . 63

A.2.1Codigo da pagina web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

A.2.2Codigo completo da comunicacao com o Arduino . . . . . . . . . . . . . . . 65

A.2.3Codigo completo do controle do Carro Robo . . . . . . . . . . . . . . . . . 66

Introducao

Os sistemas embarcados, sao cada vez mais comuns na sociedade, estao ficando complexos

gracas aos avancos da tecnologia. Os avancos possibilitam uma maior capacidade de pro-

cessamento, memoria e adaptacao a diferentes necessidades, podendo ser reconfigurados de

acordo com a aplicacao a qual se destinam.

O trabalho demonstra a criacao de um carro robo em Arduino com comunicacao sem

fio, atraves de uma pagina web implementada em Java com tecnologia Servlet, onde essa

comunicacao sem fio sera mostrada que nao foi necessario implementar um protocolo de

comunicacao sem fio, que o Arduino facilita muito essa parte do projeto.

No projeto primeiro foi necessario aprender o funcionamento do Arduino, como funciona

sua programacao e conhecer seu ambiente de desenvolvimento. Apos isso foi estudado como

fazer funcionar um motor DC pelo Arduino, e a comunicacao sem fio.

A plataforma Arduino foi escolhida para o projeto por diminuir a complexidade no

desenvolvimento de sistemas embarcados assim facilitando a aprendizagem de sistemas

embarcados, no caso do Arduino nao necessario conhecimento muito avancado em eletrica,

com a utilizacao de Shields. Shields sao placas que expandem a funcionalidade da placa

Arduino, o projeto possui varios Shields, tem o ethernet Shield, Shield para LCD, para

motores e muitos outros.

O capıtulos visam apresentar cada parte do projeto. O capıtulo 1 apresenta o projeto

Arduino, explicando o que ele e e os seus componentes. Capıtulo 2 explica como utilizar

o ambiente de desenvolvimento do Arduino. O capıtulo 3 a funcionalidade do Motor

Control Shield e o funcionamento do motor DC utilizado no projeto. Capıtulo 4 responsavel

pela explicacao da comunicacao sem fio utilizada no Arduino, seu funcionamento e como

utilizar o Shield responsavel por essa comunicacao. No quinto e ultimo capıtulo e mostrado

LISTA DE CÓDIGOS 2

como o projeto foi implementado, todo seu caminho, desde o teste da placa Arduino,

o funcionamento do Shield do motor, a utilizacao do Shield de comunicacao sem fio, a

montagem do carro, e da pagina Web.

Capıtulo 1

Arduino

Esse capıtulo ira informar o que e a plataforma Arduino, um pouco sobre microcontrola-

dores, o tipo de microcontrolador utilizado no Arduino e as caracterısticas da famılia do

microcontrolador utilizado no projeto.

1.1 Definicao

Segundo [Igoe2007] o Arduino e uma ferramenta de desenvolvimento de sistema embar-

cado, tendo surgido de um projeto academico. Como ferramenta e usualmente associado a

filosofia de ”Physical Computing”, ou seja, ao conceito que engloba a criacao de sistemas

fısicos atraves do uso de Software e Hardware.

1.2 Arduino

[Arduino2011] ressalta que a escolha do Arduino para o desenvolvimento desse projeto

da-se ao fato de seu baixo custo proporcional as suas funcionalidades, a simplicidade na

utilizacao e a possibilidade de utilizacao em varios sistemas operacionais, como o Windows,

Macintosh OSX e Linux.

[Igoe2007] ressalta que o Arduino e um nome ”fantasia”que representa uma famılia de

placas eletronicas.

Microcontroladores 4

Segundo [Arduino2011] a placa Arduino utiliza o microcontrolador ATmega328. Pode-

mos verificar a placa Arduino na figura 1.1.

Figura 1.1: Placa Arduino

1.3 Microcontroladores

Os microcontroladores estao escondidos em muitos produtos. Todos os automoveis pos-

suem ao menos um microcontrolador, o motor e controlado por um microcontrolador, assim

como os freios antitravamento (freios ABS), computador de bordo entre outros dispositivos

do carro. Basicamente qualquer produto ou dispositivo que interaja com o usuario possui

um microcontrolador interno.

Segundo [Pereira2002] os primeiros MCU’s (Micro Controler Unit, ou Unidade de Mi-

crocontrolador). Os microcontroladores, ao contrario de seus irmaos microprocessadores,

sao dispositivos mais simples, com memorias RAM e ROM internas, oscilador interno de

clock, I/O interno, entre outros, sendo por isso chamados muitas vezes de computadores

em um unico chip. Tais caracterısticas tornam mais simples o projeto de dispositivos in-

teligentes, pois os MCU’s raramente necessitam de CI’s externos para funcionar, o que

Microcontroladores 5

contribui para diminuicao de custos e tamanho.

[Pereira2002] afirma que os primeiros MCU’s tambem eram derivados do 8080, como,

por exemplo, o 8048 e posteriormente o 8051, todos da Intel.

Segundo [Pereira2002] o mercado para MCU’s e cada vez maior, existindo uma grande

variedade de tipos, como os da famılia 8051, PIC, ST, COP, AVR.

[Igoe2007] afirma que existem duas arquiteturas fundamentais para acesso a memoria

que podem ser observadas na figura 1.2.

Figura 1.2: Arquitetura classica de processadores: Von-Neumann x Harvard

Segundo [Igoe2007] a arquitetura de Von-Neuman, possui apenas um barramento que

serve tanto para o transporte de instrucoes quanto de dados. [Igoe2007] afirma que a

arquitetura Harvard possui 2 barramentos um para instrucoes e outro para dados.

[Igoe2007] afirma que em 1945 Von-Neuman estabeleceu os princıpios de operacao de

um computador eletronico digital. E que a arquitetura de Von-Neuman se baseia em tres

componentes principais:

• Memoria.

• Unidade de Controle.

• Unidade de Processamento.

Microcontroladores 6

Sendo que na memoria sao armazenados dados e programas que realizam determinados

calculos ou tarefas. E a unidade de controle e responsavel pelo funcionamento da maquina,

controlando o fluxo de instrucoes. Esse funcionamento realiza-se em ciclos. A unidade de

processamento realiza os calculos de acordo com as instrucoes.

[Igoe2007] aborda que a arquitetura Harvard baseia-se em um conceito mais recente que

a arquitetura de Von-Neuman, e que foi idealizada por Howard Aiken, devido a necessidade

de o microcontrolador trabalhar mais rapido. A principal vantagem dessa arquitetura e a

leitura de memoria de instrucoes ou de alguns tipos de operando poder ser feita ao mesmo

tempo em que a execucao das instrucoes.

1.3.1 Microcontroladores AVR

Segundo [Gadre2001] a arquitetura dos microcontroladores AVR foi desenvolvida por

dois alunos do Instituto de Tecnologia Noruegues (NTH) e refinado e desenvolvido pela

Atmel da Noruega, com processamento eficiente e nucleo compacto. Com uma arquitetura

RISC avancada, voltada para a programacao C. Dado a sua arquitetura, o desempenho do

seu nucleo de 8 bits e equivalente ao de microcontroladores de 16 bits.

Suas principais caracterısticas sao:

• Alta integracao e grande numero de perifericos com efetiva compatibilidade entre

toda a famılia AVR;

• Possui 32 registradores de proposito geral, memoria de instrucoes e de 16 bits;

• Memoria de programacao flash programavel, SRAM e EEPROM, para desenvolvi-

mentos rapidos e flexibilidade de projeto;

• Facilmente programado e com debug in-system via interface simples, ou com interfa-

ces JTAG compatıvel com 6 ou 10 pinos;

• Um conjunto completo e gratuito de softwares;

• Preco acessıvel.

ATmega 328 7

1.3.2 Famılia AVR

Dentre os principais membros da famılia AVR temos:

• AVR UC3

Alta performance e baixo consumo de energia. Conjunto de instrucoes para DSP,

porta dupla de SRAM, multi camada de barramento de dados.

• AVR XMEGA

Microcontroladores com a melhor combinacao possıvel de desempenho em tempo real,

todos os perifericos podem usar DMA para transferencia de dados.

• Mega AVR

Microcontrolador ideal quando se necessita de grandes quantidades de codigos, com

memoria flash de ate 256KB e de 28-100 pinos.

• Tiny AVR

Microcontroladores que necessitam de performance, tem pacote facil de usar. E o

mais compacto da famılia AVR o unico capaz de operar a 0,7V.

1.4 ATmega 328

Para o desenvolvimento desse trabalho sera utilizado o ATmega328 que e o microcon-

trolador que vem no Arduino Duemilanove e satisfaz as necessidades do projeto.

Segundo [Atmel2011] as principais caracterısticas do microcontrolador sao:

• E baseado em uma arquitetura RISC avancada;

• Executa instrucoes em um ciclo de clock;

• 32 KBytes de memoria flash;

• 2 KBytes de SRAM;

• 1 KByte de EEPROM;

ATmega 328 8

• 32 registradores;

• Velocidade de clock de 0 a 20 MHz entre 4,5 e 5,5V;

E os perifericos utilizados sao:

• 23 pinos de entrada e saıda programaveis;

• Watchdog Timer programavel com oscilador interno separado;

• 8 canais A/D de 10 bits;

• 6 canais PWM;

• Interface serial USART;

• 3 Timer;

Na figura 1.3 e apresentado um diagrama de blocos do microcontrolador ATmega328

onde e possıvel identificar todos os seus componentes. Pode-se ter uma nocao de como um

microcontrolador consegue reunir todos esses recurso em um circuito integrado.

1.4.1 Unidade Central de Processamento (CPU)

Segundo [Gadre2001] a Unidade Central de Processamento (CPU) desempenha um

papel crucial no funcionamento do sistema de computacao. E [Igoe2007] afirma que no

caso do ATmega328, temos uma CPU do tipo enhanced core de nucleo aprimorado.

[Igoe2007] afirma que a Unidade Central de Processamento (CPU) e responsavel pela

atividade-fim do sistema, isto e, computar, calcular, processar. A CPU comanda nao

somente as acoes efetuadas internamente, como tambem, em decorrencia da interpretacao

de uma determinada instrucao, ela emite os sinais de controle para os demais componentes

do microcontrolador realizarem alguma tarefa. Como pode ser observado na figura 1.4.

[Igoe2007] ressalta que uma Unidade Central de Processamento (CPU) tem, por propo-

sito, realizar operacoes com dados normalmente numericos. Para realizar essas operacoes a

CPU necessita interpretar que tipo de operacao ele ira executar. Em seguida e necessario

que os dados estejam armazenados no dispositivo que ira executar a operacao.

Os principais blocos da unidade central de processamento (CPU) sao:

ATmega 328 9

Figura 1.3: Diagrama de blocos de um microcontrolador ATmega 168/ATmega 328

• Unidade Logica Aritmetica (ALU):

Segundo [Gadre2001] a unidade logica aritmetica AVR opera conexoes diretas entre

os 32 registradores. Com apenas um ciclo de clock, realiza operacoes aritmeticas

registradores de propositos gerais ou entre registrador e uma constante. A ALU

se divide em tres categorias principais: aritmetica, logica e bit-funcoes. Algumas

implementacoes da arquitetura tambem fornecem um multiplicador que suporta tanto

multiplicacao signed/unsigned e formato fracionario.

• Registradores:

Os registradores sao otimizados pela arquitetura AVR RICS melhorada. Como pode

ser observado na figura 1.5 cada registrador esta associado a um endereco da memoria,

mapeados diretamente para os primeiros 32 espacos da memoria.

Os registradores R26...R31 possuem algumas funcoes adicionais. Esses 6 registradores

podem ser usados como registradores de enderecamento indireto de 16 bits. Esses

ATmega 328 10

Figura 1.4: Diagrama em blocos da unidade central de processamento (CPU)

Figura 1.5: Registradores de trabalho da unidade central de processamento (CPU)

registradores possuem funcoes de auto incremento e decremento entre outras funcoes.

ATmega 328 11

1.4.2 Memoria

[Atmel2011] explica que a arquitetura AVR possui dois tipos principais de memoria,

a memoria de dados (data memory) e a memoria de programa (Program memory). O

ATmega328 possui uma memoria EEPROM. Todas as instrucoes AVR sao de 16 ou 32

bits.

Como pode ser visto na figura 1.6 a memoria de dados (SRAM) possui algumas divisoes

internas, onde os primeiras posicoes da memoria sao para os 32 registradores, os proximos

64 sao para os registradores de entrada e saıda, os outros 160 uma extensao dos registradores

de entrada e saıda, e o restante sao para dados da SRAM.

Figura 1.6: Organizacao da memoria de programa ATmega 328

No ATmega328 a memoria EEPROM possui 1024 bytes e e organizada em um espaco

separado. Cada byte pode ser lido ou escrito individualmente.

ATmega 328 12

1.4.3 Stack Pointer (SP)

[Igoe2007] afirma que o Stack Pointer e usado principalmente para armazenamento

temporario de dados, para armazenamento de variavel local e endereco de retorno apos

chamada de sub-rotinas e interrupcoes. O Stack Pointer sempre aponta para o topo da

pilha.

O Stack Pointer esta na memoria SRAM e deve ser definido por programa antes que

qualquer chamada de sub-rotina seja executada ou alguma interrupcao fique habilitada.

1.4.4 Sistema de Clock

A figura 1.7 mostra o sistema de clock do AVR e sua distribuicao. Em algum momento

nem todos os clocks precisam esta ativos. Afim de reduzir o consumo de energia, alguns

modulos de clock que nao estao sendo usados podem ser parados por diferentes modos de

sleep.

Figura 1.7: Sistema de clock do AVR e sua distribuicao

[Gadre2001] ressalta que o AVR suporta as seguintes opcoes de clock: cristal ou res-

sonador ceramico externo, cristal externo de baixa frequencia, sinal de clock externo como

mostra a figura 1.8. Interessante e utilizar o oscilador interno quando o clock externo nao

e necessario, eliminando a necessidade de componentes externos ao microcontrolador. O

ATmega 328 13

oscilador interno pode ser programado para operar a 1 MHz, 2 MHz, 4 MHz ou 8 MHz.

Figura 1.8: Opcao de clock externo para o AVR

1.4.5 Reset

Segundo [Gadre2001], durante o Reset todos os registradores de entrada e saıda recebem

seus valores iniciais e o programa inicia sua execucao do vector de Reset. As portas de

entrada e saıda sao imediatamente levadas para seu estado inicial assim que a fonte de

Reset e ativada, essa acao nao requer nenhum ciclo de clock.

O ATmega328 possui 4 fontes de Reset que sao:

• Power-on Reset

Ocorre quando a fonte de alimentacao estiver abaixo do limite do Power-on.

• Reset externo

Ocorre quando o pino de Reset e pressionado por um determinado perıodo de tempo.

• Watchdog Reset

Ocorre quando o Watchdog system esta ativado e quando o tempo dele e ”ultrapas-

sado”.

• Brown-out Reset

Ocorre quando seu detector esta ativado e a tensao de alimentacao fica abaixo do

valor definido para o Brown-out.

ATmega 328 14

1.4.6 Conversor A/D

[Igoe2007] afirma que muitos sistemas que utilizam microcontroladores necessitam fazer

medicoes de natureza analogica, como uma temperatura. Neste contexto, para que essas

informacoes possam ser utilizadas pelo microcontrolador, se tem a necessidade de converter

tais sinais para seu correspondente sinal digital.

[Gadre2001] afirma que o ATmega328 possui um conversor A/D com resolucao de 10

bits. Esse conversor esta conectado a um multiplexador analogico de 8 canais, que permite

oito entradas de tensao single-ended construıdas a partir dos pinos da porta A.

1.4.7 PWM

[Atmel2011] afirma que o ATmega328 possui 6 canais de PWM para serem utiliza-

dos. PWM permite obter tensao analogica a partir de um sinal digital. O conceito de

PWM e utilizado para se referir ao sinal que possui uma frequencia constante e uma ”lar-

gura”variavel.

1.4.8 Temporizadores e Contadores

[Atmel2011] afirma que o ATmega328 possui dois temporizadores/contadores de 8 bits

e um de 16 bits. Eles podem ser controlados tanto por uma fonte interna ou externa de

clock.

1.4.9 Descricao dos Pinos

Na figura 1.9 e mostrado a pinagem do ATmega328 tanto para o encapsulamento PDIP

e TQFP. As principais funcionalidades dos pinos e portas podem ser encontradas com mais

detalhe em [Atmel2011].

Segundo [Atmel2011] as descricoes dos pinos e portas sao:

• Pino: VCC

Tensao de alimentacao.

ATmega 328 15

Figura 1.9: Encapsulamento dos pinos do ATmega 328

• Pino: GND

Terra.

• Porta B(PB7:0) XTAL1/XTAL2/TOSC1/TOSC2

A porta B e uma porta bidirecional de I/O de 8 bits com resistores internos de pull-

up. Os buffers de saıda possuem caracterısticas simetricas com alta capacidade de

receber e fornecer corrente. Como entrada, os pinos colocados em zero fornecerao

corrente caso os resistores de pull-up estiverem habilitados. Dependendo da sele-

cao dos fusıveis de ajuste do clock, PB6 pode ser usado como entrada do oscilador

inversor e PB7 como saıda do mesmo. Se o oscilador RC ajustado internamente,

for empregado como fonte de clock, PB7..6 e usado como entrada TOSC2..1 para o

Temporizador/Contador2 assıncrono se o bit AS2 no registrador ASSR estiver ativo.

• Porta C (PC5:0)

Porta C e uma porta bidirecional de I/O de 7 bits com resistores internos de pull-up.

Os buffers de saıda possuem caracterısticas simetricas com alta capacidade de receber

e fornecer corrente. Como entrada, os pinos colocados em zero fornecerao corrente

ATmega 328 16

caso os resistores de pull-up estiverem habilitados.

• PC6/RESET

Se o fusivel RSTDISBL estiver programado, PC6 sera utilizado como um pino de

I/O. Perceba que a caracterıstica eletrica desse pino difere dos restante da porta C.

Caso contrario PC6 sera utilizado como entrada de Reset.

• Porta D (PD7:0)

A porta D e uma porta bidirecional de I/O de 8 bits com resistores internos de pull-

up. Os buffers de saıda possuem caracterısticas simetricas com alta capacidade de

receber e fornecer corrente. Como entrada, os pinos colocados em zero fornecerao

corrente caso os resistores de pull-up estiverem habilitados.

• Pino: AVCC

Pino para a tensao de alimentacao do conversor A/D. Deve ser externamente conec-

tado ao VCC, mesmo se o A/D nao estiver sendo utilizado. Se o A/D for usado deve

ser empregado um filtro passa-baixo entre este pino e o VCC.

• Pino: AREF

E o pino para referencia analogica para o conversor A/D.

• Portas: ADC7..6

Disponıvel nos encapsulamentos TQFP e QFN/MLF. Servem como entradas analo-

gicas para o conversor A/D.

Capıtulo 2

Ambiente de Desenvolvimento

Capıtulo com uma breve explicacao do Hardware do Arduino e do seu ambiente de desen-

volvimento, para familiarizacao com a programacao do Arduino e a utilizacao do mesmo,

sabendo o que cada componente da placa faz.

2.1 Hardware Arduino

Segundo [Arduino2011] o Arduino Duemilanove e baseado nos microcontroladores AVR

da Atmel, em particular nos modelos ATmega168 e ATmega328. Conforme o microcontro-

lador e a placa, o Arduino recebe um codinome em italiano, Duemilanove significa “2009”

o ano do lancamento dessa placa Arduino.

O Arduino Duemilanove possui 14 pinos de entrada e saıda digital (sendo que 6 desses

pinos podem ser utilizados como saıdas PWM), 6 entradas analogicas, um cristal oscilador

de 16MHz, uma conexao USB, uma entrada para alimentacao, um conector ICSP, e um

botao de reset, como mostra a figura 2.1 e a tabela 2.1.

2.2 Alimentacao

[Arduino2011] afirma que o Arduino Duemilanove pode ser alimentado atraves da cone-

xao USB ou de uma fonte externa, a fonte de alimentacao e selecionada automaticamente.

Alimentação 18

Figura 2.1: Arduino Duemilanove Board

Caracterısticas ValoresMicrocontrolador ATmega 328

Tensao de Funcionamento 5VTensao de entrada (recomendado) 7 – 12V

Tensao de entrada(limites) 6 – 20VPinos de E / S digital 14 (sendo que 6 oferecem saıda PWM)

Pinos de entrada analogica 6Corrente DC por pino de E / S 40mA

Corrente DC para pino 3,3V 50mAMemoria Flash 32 KB (2KB usado pelo bootloader)

SRAM 2 KBEEPROM 1 KB

Velocidade de clock 16 MHz

Tabela 2.1: Caracterıstica arduino duemilanove

A alimentacao externa pode ser tanto de uma fonte ou de uma bateria, a fonte pode

ser conectada com um plugue de 2,1mm(centro positivo) no conector de alimentacao. Ca-

bos vindos de uma bateria podem ser inseridos nos pinos GND(terra) e Vin (entrada de

voltagem) do conector de alimentacao.

Segundo [Arduino2011] a placa pode aperar com uma fonte externa de 6 a 20 Volts. Se a

fonte fornecer menos de 7V, o pino de 5V pode fornecer menos do que 5V e o funcionamento

Alimentação 19

da placa instavel. Se utilizar mais de 12V, o regulador de tensao pode superaquecer e

danificar a placa. A faixa recomendada e de 7 a 12 volts. Os pinos de alimentacao sao os

mostrados na figura 2.2.

Figura 2.2: Pinos do ATmega 328

Os pinos de alimentacao sao os seguintes:

• VIN Entrada de alimentacao para a placa Arduino quando e utilizada uma fonte de

alimentacao externa (ao contrario dos 5 volts da conexao USB). Voce pode fornecer

a alimentacao por esse pino, ou alimentar pelo conector de alimentacao.

• 5V A fonte de alimentacao utilizada pelo microcontrolador e pelos outros componen-

tes da placa. Pode ser fornecida pelo VIN atraves de um regulador interno, ou ser

fornecida pela USB ou outra fonte de 5 volts.

• 3V3 Alimentacao de 3,3 volts e gerada pelo chip FTDI. A corrente maxima e de 50

mA.

• GND Pino terra.

Memória 20

2.3 Memoria

[Arduino2011] afirma que o ATmega328 possui 32 KB de memoria flash para o arma-

zenamento de codigo (com 2 KB utilizados pelo bootloader), possui 2 KB de SRAM e 1

KB de EEPROM (que pode ser lida e escrita com a biblioteca EEPROM).

2.4 Entrada e Saıda

[Arduino2011] afirma que cada um dos 14 pinos digitais do Arduino Duemilanove po-

dem ser utilizados como entrada e saıda, utilizando as funcoes pinMode(), digitalWrite()

e digitalRead(). Os pinos operam com 5 volts. Cada pino pode fornecer ou receber no

maximo 40 mA e possui um resistor pull-up interno de 20-50 KOhms (por padrao desabi-

litado). Alguns pinos possuem funcoes especializadas:

• Serial : 0(RX) 1(TX) Usado para receber (RX) e enviar (TX) dados seriais TTL.

Esses pinos estao conectados aos pinos correspondentes do chip serial FTDI USB-to-

TTL.

• Interrupcoes externas : 2 e 3 Esses pinos podem ser configurados para disparar uma

interrupcao por um valor baixo, uma borda de subida, uma borda de caıda, ou uma

alteracao de valor. Para mais detalhes veja a funcao attachInterrupt().

• PWM : 3, 5, 6, 9, 10 e 11 Fornece uma saıda analogica PWM de 8-bit com a funcao

analogWrite().

• SPI : 10(SS), 11(MOSI), 12(MISO), 13(SCK) Esses pinos suportam a comunicacao

SPI utilizando a biblioteca SPI.

• LED : 13 Ha um LED ja montado e conectado ao pino 13 da placa. Quando o pino

tem valor HIGH, o LED acende, quando tem valor LOW o LED apaga.

• I2C : A4(SDA) e A5(SCL) Suportam comunicacao I2C(TWI) usando a biblioteca

Wire.

Arduino IDE 21

2.5 Arduino IDE

Segundo [Schmidt2011] o Arduino Duemilanove pode ser programado atraves do soft-

ware de desenvolvimento chamado de Arduino IDE como mostrado na figura 2.3, ele e um

ambiente simples.

[Schmidt2011] diz que o Arduino IDE e bem simples. Ele consiste em um editor de

texto, um compilador, um carregador, e um monitor de porta serial. Nao possui ferramentas

muito avancadas como um debugger ou um complementador de codigo.

Figura 2.3: Arduino IDE

Os botoes do Arduino IDE mostrados na figura serao descritos a seguir:

• Botao Verify Para compilar o programa, que esta no editor de texto, afim de procurar

erros no mesmo.

• Botao Stop Interrompe o processo do botao Verify e o monitor serial.

• Botao New Inicia um novo documento em branco, mas antes disso pergunta se deseja

salvar as alteracoes dos documentos nao salvos.

• Botao Open Pode abrir um programa ja existente.

Arduino IDE 22

• Botao Save Salva o programa que esta no editor de texto.

• Botao Upload Compila e envia o programa no editor de texto para o microcontrolador

da placa Arduino.

• Monitoramento de sinais O Arduino pode se comunicar com um computador atraves

de uma conexao serial. Ao apertar no botao sera aberto uma janela com os valores

de retorno dessa comunicacao. A janela e a mesma que tem na figura 2.4.

Figura 2.4: Monitoramento de sinais

Para desenvolver um codigo fonte no Arduino IDE e bem simples. Primeiro escreva

o codigo no editor de texto do Arduino IDE, apos isso compile o programa caso ele nao

apresente erro pode carrega-lo no Arduino, atraves do botao Upload, nao e necessario

compilar o programa, quando pressiona o botao Upload o proprio compila o programa e se

nao tiver erro carrega o mesmo para o Arduino. Essa comunicacao com a placa Arduino

ocorre pelo cabo USB.

O Arduino IDE e escrito em Java e baseado no Processing, avr-gcc, e outros softwares

“open source”. Pelo fato de ser escrito em Java o mesmo funciona no Windows, Linus e

Mac OS X.

Capıtulo 3

Motor Control Shield Arduino

Figura 3.1: Motor Control Shield Adafruit

Para o controle dos motores foi verificada a necessidade do uso de uma placa que faca

mais de um motor funcionar ao mesmo tempo, e controle a velocidade dos mesmos, o

utilizado sera o Motor Control Shield da Adafruit como pode ser verificado na figura 3.1.

Segundo [Adafruit2011] motores precisam de muita energia, especialmente motores ba-

ratos de rendimento baixo. Primeiramente o mais importante e a voltagem que o motor

necessita para funcionar. Se voce tiver um pouco de sorte o motor vem com algumas peque-

nas especificacoes. Alguns motores pequenos executam com apenas 5V, mas o mais comum

e de 6 – 12 V. Os controladores de motor desse Shield foram projetados para funcionar

entre 4,5V a 36V (na teoria eles poderiam operar a partir de 2,5V).

Outro quesito importante e saber quanto de corrente seu motor precisa para funcionar.

Implementação do motor DC no Arduino IDE 24

O chip do Motor Control Shield foi projetado para gerar 600 mA por motor, com pico

de 1,2A de corrente. Observe que se voce coloca-lo para gerar mais de 1A, e recomen-

davel coloca um dissipador de calor sobre o controlador do motor, caso contrario muito

provavelmente teremos uma falha termica, possivelmente queimando o chip.

[Adafruit2011] recomenda que voce procure uma fonte de alimentacao para o Arduino e

outra para o Motor Control Shield. Muitos dos problemas com o Shield sao com problemas

de fonte compartilhada ou alimentacao insuficiente para o Shield.

Segundo [Adafruit2011] motores DC sao alimentados com “altas voltagens” e nao com

voltagem regulada de 5V. Nao conecte o seu motor a uma fonte regulada de 5V. Isso nao

e uma boa ideia a nao ser que voce tenha certeza do que esta fazendo.

Existem duas maneiras de seu motor conseguir a “alta voltagem”. Uma delas e atraves

do jack DC da placa do Arduino e pelo bloco de 2 terminais na placa do Shield onde esta

escrito EXT PWR. O jack DC da placa do Arduino possui um diodo de protecao para caso

voce cometa algum erro na ligacao e a placa nao ser comprometida. Ja os terminais do

EXT PWR do Shield nao possuem esse diodo de protecao. Portanto tome bastante cuidado

na hora de alimentar o Shield para nao inverter a polaridade e assim consequentemente

danificar o Arduino e/ou o Motor Control Shield.

Caso queira utilizar apenas uma fonte de alimentacao para o Arduino e o Shield, sim-

plesmente conecte no jack DC uma fonte ou conecte nos terminais EXT PWR do Shield.

E conecte o jumper power no Shield. Note que talvez voce tenha problema com o reset

do Arduino se a forca da bateria nao estiver apta a fornecer uma alimentacao constante, e

isso nao e recomendado para alimentacao do projeto do Shield.

No caso de preferencia por uma alimentacao DC para o Arduino e outra para o Shield.

Conecte uma fonte de alimentacao no jack DC do Arduino, e outra fonte DC ao bloco

EXT PWR. Tenha certeza que o jumper power do Shield esta removido.

3.1 Implementacao do motor DC no Arduino IDE

Segundo [Adafruit2011] motores DC, visto na figura 3.2, sao muito utilizados em pe-

quenos projetos de robotica. O Motor Control Shield pode utilizar ate 4 motores DC

bidirecionais ao mesmo tempo. Isso significa que esses motores podem “girar” para “frente”

Implementação do motor DC no Arduino IDE 25

Figura 3.2: Motor DC

e para “tras”. A velocidade do motor pode ser incrementada em torno de 0,5% implemen-

tada com sinais PWM. Isso significa que a velocidade e boa e nao sofre muita variacao.

Observe que o chip de ponte H nao significa que ele sempre mantera a corrente em 0,6

A com picos de 1,2 A. Verifique o datasheet do motor para obter mais informacao sobre

seu funcionamento.

Para conectar o motor e simples, apenas ligue os conectores do motor aos terminais do

Motor Control Shield, esses terminais podem ser o M1, M2, M3 ou M4, siga os seguintes

passos na programacao do software:

• Declare no inicio do programa <AFMotor.h>

• Crie um objeto de AF DCMotor com AF DCMotor(motor, frequency), para confi-

gurar a ponte H e as travas. O construtor possui 2 argumentos.

Primeiro escolha qual porta quer selecionar no caso o motor 1, 2, 3 ou 4. Frequencia

e a velocidade do sinal de controle. Para os motores 1 e 2, voce pode escolher entre

– MOTOR12 64KHZ, MOTOR12 8KHZ, MOTOR12 2KHZ, MOTOR12 1KHZ –

uma frequenca baixa como 1KHZ gastara menos energia. Os motores 3 e 4 so sao

possıveis de executar a 1KHZ, qualquer outra configuracao sera ignorada.

• A velocidade do motor pode ser modificada com o comando setSpeed(velocidade),

onde o intervalo da velocidade tem que ficar entre 0 e 255. Essa velocidade pode ser

Introdução às máquinas elétricas 26

modificada quando voce quiser.

• Para o motor funcionar utilize o comando run(direcao), onde direcao pode ser

FORWARD, BACKWARD ou RELEASE. O Arduino nao sabe se o motor vai para

frente ou para tras, se voce quiser mudar o que o comando faz, simplesmente troque

as ligacoes no terminal do shield.

3.2 Introducao as maquinas eletricas

Segundo [Hughes2006] uma maquina eletrica e uma maquina capaz de converter energia

mecanica em energia eletrica (gerador) ou energia eletrica em energia mecanica (motor).

Quando se trata de um gerador, a rotacao e suprida por uma fonte de energia mecanica

como, por exemplo, uma queda d’agua, para produzir o movimento relativo entre os con-

dutores eletricos e o campo magnetico e gerar, desse modo, uma tensao entre os terminais

do condutor. No caso de motores, o funcionamento e inverso: energia eletrica e fornecida

aos condutores e ao campo magnetico (no caso de ele ser gerado por eletroımas) para que

surja a forca magnetica nos condutores, causando a rotacao (energia mecanica). Sempre

ha movimento relativo entre condutor e campo magnetico.

[Hughes2006] afirma que exitem varias possibilidades de construcao de maquinas ele-

tricas, que sempre sao compostas por estator (parte estacionaria) e rotor (parte que gira).

Algumas dessas possibilidades sao:

• Maquinas de corrente continua, que tem uma armadura rotativa e um campo estaci-

onario.

• Maquina sıncrona com uma armadura rotativa e um campo estacionario.

• Maquina sıncrona com uma armadura fixa e um campo rotativo.

• Maquina assıncrona que possui enrolamento da armadura estacionario e rotativo.

Introdução às máquinas elétricas 27

Figura 3.3: Corte de uma maquina CC

3.2.1 Maquina CC

A figura 3.3 mostra um corte de uma maquina CC comercial tıpica, simplificada para

dar enfase as partes principais. O rotor consiste de:

• Eixo da armadura

Imprime rotacao ao nucleo da armadura, enrolamentos e comutador.

• Nucleo da armadura

Esta conectado ao eixo e e construıdo de camadas laminadas de aco, provendo uma

faixa de baixa relutancia magnetica entre os polos. As laminas servem para reduzir

as correntes parasitas no nucleo, e o aco usado e de qualidade destinada a produzir

uma baixa perda por histerese. O nucleo contem ranhuras axiais na sua periferia

para colocacao do enrolamento da armadura.

• Enrolamento da armadura

E constituıdo de bobinas isoladas entre si e do nucleo da armadura. E colocado nas

ranhuras e eletricamente ligado ao comutador.

• Comutador

Devido a rotacao do eixo, providencia o necessario chaveamento para o processo de

comutacao. O comutador consiste de segmentos de cobre, individuais isolados entre

si e do eixo, eletricamente conectados as bobinas do enrolamento da armadura.

Introdução às máquinas elétricas 28

Segundo [Hughes2006] o rotor da armadura das maquinas CC tem quatro funcoes prin-

cipais: (1) permite rotacao para acao geradora ou acao motora mecanica; (2) em virtude da

rotacao, produz a acao de chaveamento necessario para a comutacao; (3) contem os condu-

tores que induzem a tensao ou providenciam um torque eletromagnetico; e (4) providencia

uma faixa de baixa relutancia para o fluxo.

O estator da maquina CC consiste de:

• Carcaca

E uma carapaca ou estrutura cilındrica de aco ou ferro fundido ou laminado. Nao ape-

nas a carcaca serve como suporte das partes descritas acima, mas tambem providencia

uma faixa de retorno do fluxo para o circuito magnetico criado pelos enrolamentos

de campo.

• Enrolamento de campo

Consiste de umas poucas espiras de fio grosso para o campo-serie ou muitas espiras

de fio fino para o campo-shunt. Essencialmente, as bobinas de campo sao eletromag-

netos, cujos ampere-espiras (Ae) providenciam uma forca magnetomotriz adequada

a producao no entreferro, do fluxo necessario para gerar uma fem ou uma forca

mecanica. Os enrolamentos de campo sao suportados pelos polos.

• Polos

Sao constituıdos de ferro laminado e parafusados ou soldados na carcaca apos a

insercao dos rolamentos de campo nos mesmos. A sapata polar e curvada, e e mais

larga que o nucleo polar, para espalhar o fluxo mais uniformemente.

• Interpolo

Ele e o seu enrolamento tambem sao montados na carapaca da maquina. Eles estao

localizados na regiao interpolar, entre os polos principais, e sao geralmente de tama-

nho menor. O enrolamento do interpolo e composto de algumas poucas espiras de

fio grosso, pois e ligado em serie com o circuito da armadura, de modo que a fem e

proporcional a corrente da armadura.

• Escovas e Aneis-Suporte de Escovas

Introdução às máquinas elétricas 29

Assim como o interpolo, sao parte do circuito da armadura. As escovas sao de carvao

e grafite, suportadas na estrutura do estator por um suporte tipo anel, e mantidas no

suporte por meio de molas, de forma que as escovas manterao um contato firme com

os segmentos do comutador. As escovas estao sempre instantaneamente conectadas

a um segmento e em contato com uma bobina localizada na zona interpolar.

• Detalhes mecanicos

Mecanicamente conectados a carcaca, estao os suportes contendo mancais nos quais

o eixo da armadura se apoia, bem como os aneis-suporte de escovas de algumas

maquinas.

Figura 3.4: Figura (a) Conexao campo-shunt, Figura (b) Conexao campo-serie

As conexoes eletricas da maquina CC sao mostradas na Figura 3.4a e 3.4b. A primeira

mostra as conexoes de campo-shunt, no qual os enrolamentos do campo estao em paralelo

com o circuito da armadura. A ultima mostra a conexao do campo-serie, na qual o enrola-

mento de poucas espiras com fio grosso de campo-serie esta localizado nos polos principais

e ligado em serie com o circuito da armadura, bem como as escovas.

[Sousa2000] afirma que a maquina CC da figura 3.4b pode ser usada universalmente

como maquina CC ou CA.

3.2.2 Forca contra-eletromotriz

Segundo [Sousa2000] a figura 3.5 mostra a acao motora, para o sentido de campo e

corrente de armadura representados na figura. Segundo [Sousa2000] a forca desenvolvida

no condutor faz com que ele se movimente no campo magnetico, resultando numa variacao

do fluxo magnetico em torno do condutor. Uma Forca Eletromotriz (fem) e induzida no

Introdução às máquinas elétricas 30

Figura 3.5: Forcas atuantes no fio

condutor motor da figura 3.5. O sentido dessa fem induzida e o sentido oposto ao da forca

representada na figura, para os mesmos sentido de movimento e campo. Aplicando esta

fem induzida ao condutor da figura 3.5, observa-se que ela se opoe ou se desenvolve em

sentido contrario ao da circulacao da corrente que criou a forca ou o movimento, assim

e ela chamada de Forca Contra-eletromotriz (fcem). Note que o desenvolvimento de

uma forca contra-eletromotriz e uma aplicacao da Lei de Lenz com respeito ao fato de que

o sentido da tensao induzida opoe-se a fem aplicada que a criou. Assim, quando quer que

ocorra a acao motora, uma acao geradora e simultaneamente desenvolvida.

Figura 3.6: Figura (a) Motor elementar, Figura (b) Circuito do motor

Para [Sousa2000] uma representacao mais grafica, em termos de elementos rotativos, e

apresentada na figura 3.6, que compara motor e gerador elementares para o mesmo sentido

de rotacao e mostra o circuito eletrico de cada um. Dado o sentido da tensao aplicada e

da corrente, a acao motora que resulta produz uma forca, que gira no sentido horario, em

ambos os condutores. O sentido da forca contra-eletromotriz induzida e tambem mostrado

como oposto ao da tensao aplicada. Note que para que a corrente produza uma rotacao

no sentido horario e tenha o sentido mostrado na figura 3.6b, e necessario que a tensao

aplicada aos terminais da armadura, Va, seja maior que a fcem desenvolvida, Ec. Assim,

quando uma maquina e operada como motor, a fcem gerada e sempre menor que a tensao

nos terminais que produzem a acao motora e se opoe a corrente de armadura. Tal discussao

da lugar a equacao basica do circuito da armadura mostrada na figura 3.6 e resumida como

se segue:

Introdução às máquinas elétricas 31

Va = Ec + IaRa (3.1)

• Onde Va e a tensao aplicada (medida nos terminais) de lado a lado da armadura

• Ec e a fcem gerada, desenvolvida na armadura do motor.

• Ia.Ra e a queda de tensao na armadura devido a circulacao da corrente atraves de

uma armadura de resistencia Ra.

3.2.3 Conceito de Torque

Segundo [Sousa2000] para a acao motora, tem-se:

• O torque eletromagnetico desenvolvido produz (mantem) rotacao.

• A tensao gerada nos condutores onde circula corrente (forca contra-eletromotriz) se

opoe a corrente da armadura.

• A forca contra-eletromotriz pode ser expressa pela equacao: Ec = V a − IaRa e e

menor que a tensao aplicada que causa a circulacao da corrente de armadura Ia.

A equacao acima pode ser reescrita em termos da corrente de armadura (Ia), produzida

para uma dada tensao aplicada e uma dada carga:

Ia =V a− Ec

Ra(3.2)

Podemos escrever a forca eletromagnetica em funcao dos tres fatores que determinam

a sua magnitude e que sao requeridos para produzi-la num condutor onde circula uma

corrente eletrica (uma forca ortogonal a B e I):

Introdução às máquinas elétricas 32

F =(BIl)10−7

1.13(3.3)

Figura 3.7: Figura (a) Bobina de uma unica espira, Figura (b) Torque desenvolvido

[Sousa2000] afirma que uma bobina constituıda de uma unica espira (suportada por

uma estrutura capaz de rotacao), supoe-se estar carregando corrente num campo magnetico,

como se ve na figura 3.7a. De acordo com a ultima equacao descrita e a regra da mao

direita, desenvolve-se uma forca ortogonal f1 no lado 1 da bobina e uma forca similar f2

e desenvolvida no lado 2 da bobina, como se ve na figura 3.7b. As forcas f1 e f2 sao

desenvolvidas numa direcao tal que tendem a produzir a rotacao no sentido horario da

estrutura que suporta os condutores ao redor do centro de rotacao C.

Torque e definido como a tendencia do acoplamento mecanico (de uma forca e sua

distancia radial ao eixo de rotacao) para produzir rotacao. E expresso em unidades de

forca e distancia, como N.m.

[Sousa2000] afirma que o torque eletromagnetico se opoe a rotacao num gerador e

auxilia (atua no mesmo sentido) a rotacao num motor. Como o torque e funcao do fluxo

e da corrente da armadura, e independente da velocidade do motor ou do gerador. A

velocidade depende do torque, mas eles nao podem ser usados como sinonimos.

3.2.4 Dispositivo de Partida

[Sousa2000] afirma que no instante em que se aplica a tensao Va nos terminais da

armadura, para iniciar a rotacao do motor, nao existe fcem, ja que a velocidade e nula.

Os fatores que limitam a corrente sao a queda de tensao nos contatos das escovas e a

resistencia no circuito da armadura, Ra, sendo que estes fatores nao alcancam 10 ou 15

da tensao aplicada atraves dos terminais da armadura. Essa sobrecarga e, as vezes, muito

Introdução às máquinas elétricas 33

maior que a corrente nominal. Para evitar danos ao motor, se faz necessario o uso de um

dispositivo de partida, que ira limitar a corrente de partida.

A corrente e excessiva devido a falta da fcem na partida. A medida que se inicia a

rotacao, a fcem cresce proporcionalmente ao aumento da velocidade. Logo, se quer um

dispositivo cuja a resistencia Rs possa ser continuamente reduzida ate que o motor entre

em estado de operacao normal.

Segundo [Sousa2000] para controlar a partida dos motores, o terminal que liga a re-

sistencia ao motor e deslocado continuamente de forma a reduzir a resistencia a medida

que a fcem aumenta. Se o terminal nao for deslocado, a velocidade se estabilizaria num

valor bem abaixo do valor nominal. Logo, o terminal e deslocado ate que a velocidade seja

nominal e o sistema nao precise de uma resistencia em serie na armadura.

[Sousa2000] afirma que a regulacao de velocidade de um motor definida por norma in-

ternacional como: a variacao da velocidade desde a plena carga ate a situacao de carga nula,

expressa em percentagem da velocidade nominal. A equacao que descreve esta equacao e:

regulacao percentual da velocidade =(N0 −N)

N∗ 100% (3.4)

3.2.5 Invertendo o Sentido da Rotacao

Para inverter o sentido de rotacao de qualquer motor CC, e necessario inverter o sentido

da corrente na armadura em relacao ao sentido do campo magnetico.

Segundo [Sousa2000] o mais comum na inversao no sentido de rotacao e obtido atraves

da inversao do circuito de armadura pois:

• Os circuitos de campo sao circuitos altamente indutivos, o que implica em fem in-

duzidas muitos elevadas ao executarmos o chaveamento, o que pode causar desgaste

prematuro dos contatos das chaves.

• As conexoes do circuito da armadura estao naturalmente disponıveis por motivos de

regeneracao e frenagem, de modo que podemos aproveita-las para executar a inversao.

Introdução às máquinas elétricas 34

3.2.6 Ponte H

Segundo [Adafruit2011] a ponte H serve para controlar o sentido de rotacao de um

motor DC, com ela usamos apenas dois pinos digitais para fazer esse controle. Tem esse

nome devido ao formato do circuito ser parecido com a letra H.

O circuito e construıdo com 4 chaves (S1-S4) que sao acionadas de forma alternada (S1

e S4 ou S2 e S3). Para cada configuracao da chave o motor gira em um sentido, as chaves

S1 e S2 assim como as chaves S3 e S4 nao podem ser ligadas ao mesmo tempo pois podem

gerar um curto circuito.

Capıtulo 4

Xbee

Segundo [Messias2011] a comunicacao sem fio (ou wireless) como as Redes WLANs,

WMANs, WWANs, sao voltadas para usuarios finais de empresas, onde o seu objetivo

e a transferencia de grandes volumes de dados e voz em alta velocidade. Sao poucas as

Redes sem fio destinadas exclusivamente ao controle de dispositivos como motores, obten-

cao de dados de sensores, como de luminosidade, distancia etc. Dentre as Redes WPAN

(Wireless Personal Area Network) existente, a mais recente e a que usa o padrao ZigBee

IEEE 802.15.4. A ZigBee Alliance junto ao IEEE (Institute of Electrical and Eletronics

Engineers) que desenvolvem o padrao ZigBee, em associacao com outras empresas.

[Messias2011] afirma que a ZigBee opera na frequencia ISM (Industrial, Scientific and

Medical), sendo na Europa de 866 MHz (1 canal), 915 MHz (10 canais) nos Estados Unidos

e 2,4 Ghz (16 canais) no restante do mundo, e nao requerem licenca para funcionamento.

O protocolo ZigBee e destinado a aplicacoes industriais, portanto, o fator velocidade nao

e crıtico numa implementacao ZigBee.

4.1 Hardware Xbee

[Faludi2010] afirma que existem duas variacoes basicas de Xbee, que sao o Xbee Serie

1 e o Xbee Serie 2. A diferenca dos dois esta na comunicacao (topologia de Rede) que cada

uma suporta. Cada Serie possui o Xbee padrao e o PRO. A versao PRO possui mais pinos

Hardware Xbee 36

de entrada e saıda, maior alcance.

Abaixo uma tabela com a principal diferenca da Serie 1 para a Serie 2 na versao padrao:

Serie 1 Serie 2Alcance em ambiente fechado 30 metros 40 metrosAlcance em ambiente aberto 100 metros 120 metros

Transmissao/Recpcao Corrente 45/50 mA 40/40 mAFirmware (caracterıstico) 802.15.4 ponto-a-ponto ZB ZigBee malha

Pinos de Entrada/Saıda Digital 8 11Pinos de Entrada Analogica 7 4

Pinos de Saıda Analogica (PWM) 2 Nao possuiTopologia estrela, ponto-a-ponto Sim Sim

Topologia malha, arvore Nao SimFirmware unico para todos os modos Sim Nao

Requer no coordenador Nao SimConfiguracao ponto-a-ponto Simples Mais desenvolvida

Tabela 4.1: Caracterısticas da Serie 1 e 2

Segundo [Faludi2010] as comunicacoes com sinais de Radio necessitam de antenas para

a transmissao e recepcao de sinais. Existem mais de uma opcao para a construcao de

um antena, cada uma com suas vantagens e desvantagens. Algumas tipos de antenas

disponıveis nos modulos Xbee sao:

• Antena de Fio metalico

Um simples pedaco de fio metalico esticado no modulo. E simples e oferece sinal em

todas as direcoes, a distancia maxima da transmissao em todas as direcoes ocorre

quando a antena esta perpendicular ao modulo.

• Antena em Chip

E um chip em ceramica que fica no corpo do modulo Xbee. Seus sinais sao atenuados

em muitas direcoes. Caso voce esta trabalhando em algum projeto em que possa

haver a quebra da antena de fio metalico a antena em chip pode ser a sua escolha

para tal projeto.

Padrão IEEE 802.15.4 37

4.2 Padrao IEEE 802.15.4

Segundo [IEEE2011] O IEEE 802.15.4 e um conjunto de especificacoes que define tanto

o protocolo quanto o comportamento da comunicacao entre radios dentro de uma PAN

(Personal Area Network). As especificacoes contidas neste padrao tornam seu emprego

adequado aos dispositivos de monitoracao e/ou controle cujas caracterısticas tais como

links confiaveis, tempo de latencia da mensagem, e possibilidade de implementacao em

dispositivos dotados de poucos recursos computacionais sejam imperativas.

[DesmontaCIA2011] afirma que devido ao fato de trabalhar sobre baixas razoes de

dados, as redes que empregam este padrao sao conhecidas pelo acronimo LR-WPAN (Low

Rate – Wireless Personal Area Network). Os modulos de radio desenvolvidos com base no

padrao IEEE 802.15.4 trabalham com taxas de transmissao ate 250kbps, curto alcance (a

depender do fabricante, a distancia entre radios pode variar ate 1.6 km), baixo consumo

de energia, e possuem custo reduzido. Este padrao trabalha sobre as bandas de frequencia

ISM (Industrial Medical Scientific) de 868khz (Europa), 915khz (Estados Unidos) e 2450khz

(Internacional), permitindo o uso de radios nao-licenciados nestas faixas de frequencia.

Outras caracterısticas que acompanham este padrao sao:

• Suporte a redes em modo estrela ou ponto-a-ponto;

• Radios podem ser enderecados em modo 16 bits ou 64 bits;

• Seu protocolo admite reconhecimento, garantindo a confiabilidade na transmissao da

mensagem;

• Acesso aos canais atraves do mecanismo CSMA-CA (Carrier Sense Multiple Access

with Collision Avoidance).

O padrao IEEE 802.15.4 define o comportamento das Camadas Fısica (PHY), e de

Controle de Acesso ao Meio (MAC).

4.2.1 Protocolo de Arquitetura

Segundo [IEEE2011] dispositivos sao concebidos para interagir uns com os outros atra-

ves de uma rede wireless conceitualmente simples. A definicao das camadas de rede e

Padrão IEEE 802.15.4 38

baseada no modelo OSI.

Camada Fısica

[de Castro2011] afirma que A camada fısica (PHY), em ultima analise fornece o servico

de transmissao de dados, bem como a interface para a entidade da camada fısica de gestao,

que oferece acesso a todas as funcoes de gerenciamento de camada e mantem um banco

de dados de informacoes sobre as redes de area pessoal. Assim, a camada fısica gerencia

o transceptor RF e realiza selecao de canais e funcoes de gerenciamento de energia e de

sinal. Ela opera em uma das tres possıveis bandas de frequencia nao licenciada:

• 868,0-868,6 MHz: Europa, permite que um canal de comunicacao;

• 902-928 MHz: America do Norte, ate dez canais (2003), estendeu a trinta (2006);

• 2.400-2.483,5 MHz: use todo o mundo, ate dezesseis canais (2003, 2006).

Camada MAC

Segundo [DesmontaCIA2011] esta camada MAC (Media Access Control) foi desenvol-

vida para permitir multiplas topologias com baixa complexidade, onde o gerenciamento

de energia, por exemplo, nao requer operacoes complexas. Sem a necessidade de grandes

quantidades de memoria disponıveis, o MAC tambem permite que um dispositivo com

funcionalidade reduzida (RFD) opere, podendo controlar tambem um grande numero de

dispositivos sem a necessidade de coloca-los a espera, como ocorre em algumas tecnologias

sem fio. A camada de rede foi projetada para possibilitar o crescimento da rede sem a

necessidade de equipamentos de transmissao de potencia mais elevada. A camada de rede

tambem pode operar quantidades grandes de pontos de rede com baixas perdas.

Camadas Mais Altas

[IEEE2011] afirma que camadas superiores nao sao definidas no padrao IEEE 802.15.4.

Existem especificacoes que se baseiam no padrao para propor solucoes para essas camadas.

Padrão IEEE 802.15.4 39

4.2.2 Tipos de No

[Messias2011] afirma que o padrao define dois tipos de nos de rede:

• Dispositivos de funcao reduzida (RFD – Reduced Function Device)

Destinado a areas simplificadas de uma aplicacao, as quais nao exigirao funcoes de

descoberta de caminhos, ou nao permitam a juncao de outros nos a rede, por exem-

plo. Estes dispositivos se encontram no papel de dispositivos finais, ligados a borda

da rede e, portanto se comunicam apenas com dispositivos de funcao completa. Con-

sequentemente, estes dispositivos podem ser implementados em microcontroladores

que possuam recursos computacionais reduzidos.

• Dispositivos de funcao completa (FFD – Full Function Device)

Podem operar como coordenador de uma WPAN, coordenador de um cluster, ou

dispositivo final. Podem, portanto, se comunicar com um dispositivo FFD ou RFD.

Eles podem fazer o papel de borda da rede, podendo permitir que dispositivos RFD

se juntem a rede.

4.2.3 Topologias

[IEEE2011] afirma que as redes podem ser construıdas tanto como peer-to-peer ou

redes estrela. No entanto, toda rede precisa de pelo menos um FFD para trabalhar como

coordenador da rede. Redes sao, portanto, formadas por grupos de dispositivos separados

por distancias adequadas. Cada dispositivo tem um identificador exclusivo de 64 bits, e se

algumas condicoes forem satisfeitas identificadores de 16 bits podem ser usados dentro de

um ambiente restrito. Ou seja, dentro de cada domınio PAN, comunicacoes, provavelmente,

usam identificadores curtos.

4.2.4 Confiabilidade e seguranca

Segundo [IEEE2011] o meio fısico e acessado atraves de um protocolo CSMA/CA. Redes

que nao estao usando os mecanismos de beaconing utilizam uma variacao unslotted que e

Padrão ZigBee 40

baseado na escuta do meio. Transmissao de dados comuns utilizam slots de nao alocado

quando beaconing esta em uso, novamente, as confirmacoes nao seguem o mesmo processo.

Mensagens de confirmacao podem ser opcionais em certas circunstancias, caso em que

uma hipotese de sucesso e feita. Seja qual for o caso, se um dispositivo e incapaz de

processar um quadro em um determinado momento, ele simplesmente nao confirmar a sua

recepcao: timeout baseado em retransmissao pode ser realizado varias vezes, seguido de

uma decisao de se abortar ou de continuar tentando.

4.3 Padrao ZigBee

[Gislason2011] afirma que o padrao ZigBee, designa uma tecnologia de redes sem fios

ainda em fase de desenvolvimento que pretende realizar a interligacao de pequenas unidades

de comunicacoes de dados em areas muito limitadas.

A tecnologia utilizada e comparavel as redes Wi-Fi e Bluetooth e diferencia-se destas

por desenvolver menor consumo, por um alcance reduzido (cerca de 10 metros) e as comu-

nicacoes entre duas unidades poder ser repetida sucessivamente pelas unidades existentes

na rede ate atingir o destino final. Funcionando todos os pontos da rede como retransmisso-

res de informacao, uma malha (Mesh) de unidades ZigBee pode realizar-se numa extensao

domestica ou industrial sem necessidade de utilizar ligacoes electricas entre elas.

ZigBee e um padrao que esta sendo definido por um conjunto de 45 empresas de di-

ferentes areas do mercado, esse conjunto e chamado de “ZigBee Alliance”. O protocolo

esta sendo projetado para permitir ao consumidor uma comunicacao sem fio confiavel, com

pouco consumo de energia e baixas taxas de transmissao e obtendo um pequeno alcance,

sendo um padrao global. Ate o momento ainda nao surgiu um padrao que esteja de acordo

com as necessidades unicas da comunicacao sem fio entre dispositivos de controle e sensores,

e e isto que o ZigBee esta procurando concretizar, revigorando o sistema de transmissao

de dados atuais.

Segundo [Gislason2011] as comunicacoes por ZigBee sao feitas na faixa das frequen-

cias que nao precisam de licenca (ISM), assim sendo, tem-se entao as faixas de 2.4Ghz

(mundialmente), 915Mhz (na America) e 868Mhz (na Europa). Nesse contexto a taxa de

transferencia dos dados e de ate 250kbps na frequencia de 2.4Ghz, operando com 16 ca-

Padrão ZigBee 41

nais, 40kbps na frequencia de 915Mhz operando com 10 canais e 20kbps na frequencia de

868Mhz operando com 1 canal.

4.3.1 Tipos de dispositivos

Existem tres tipos diferentes de dispositivos ZigBee:

• ZigBee cordinator (Coordenador)

Ha apenas um coordenador em cada rede. Esse tem o maior numero de funcoes. O

coordenador e capaz de criar uma rede, tornar-se a raiz da rede, e ser o unico disposi-

tivo com autonomia de comutar dados entre redes. Fora isso, ele faz o armazenamento

das informacoes da rede.

• ZigBee router (Roteador)

Sao os dispositivos que fornecem informacoes aos outros dispositivos da rede, ou seja,

faz o roteamento das informacoes como um roteador comum de WIFI.

• ZigBee End Device (Dispositivo final)

Tem apenas a funcao de trocar informacoes com um coordenador ou roteador. Uma

vantagem e sua menor memoria, pois nao precisa rotear informacoes, consequente-

mente o custo e menor.

[DesmontaCIA2011] afirma que em uma rede ZigBee os dispositivos podem permanecer

por longos perıodos sem se comunicar com outro dispositivo, seu tempo de acesso conectado

e de 30 ms. Por essas caracterısticas que a tecnologia do ZigBee e muito economica em

ralacao ao consumo de energia podendo durar muito mais tempo que outros dispositivos

de comunicacao sem fio.

4.3.2 Software

O software e projetado para ser facil de desenvolver em pequenos microprocessadores

de baixo custo.

Con�guração do Xbee 42

Camada de rede

[DesmontaCIA2011] afirma que as principais funcoes da camada de rede sao permitir o

uso correto da camada MAC e fornecer uma interface adequada para uso pela camada supe-

rior, ou seja, a camada de aplicacao. Suas capacidades e estrutura sao aqueles tipicamente

associados as camadas de rede, incluindo roteamento.

Camada de aplicacao

Segundo [DesmontaCIA2011] a camada de aplicacao e a camada de mais alto nıvel

definido pela especificacao, e e a interface eficaz do sistema de ZigBee para seus usuarios

finais. Compreende a maioria dos componentes adicionados pela especificacao ZigBee.

Modelos de comunicacao

[Gislason2011] afirma que uma aplicacao pode consistir de comunicar os dispositivos

que cooperam para realizar as tarefas desejadas. O foco do ZigBee e distribuir o trabalho

entre muitos dispositivos diferentes que residem dentro de nos individuais ZigBee que, por

sua vez formam uma rede.

4.3.3 Servicos de seguranca

[Gislason2011] afirma que como uma de suas caracterısticas definidoras, ZigBee dispoe

de instalacoes para a realizacao de comunicacoes seguras, protegendo estabelecimento e

transporte de chaves criptograficas, cifragem frames e dispositivos de controle. Baseia-se

na estrutura de seguranca basicas definidas no IEEE 802.15.4. Esta parte da arquitetura

depende da correta gestao de chaves simetricas e da correta aplicacao de metodos e polıticas

de seguranca.

4.4 Configuracao do Xbee

[Faludi2010] afirma que o modulo do Xbee possui um microcontrolador interno que

processa um programa, tambem conhecido como firmware, que e responsavel pela comu-

Con�guração do Xbee 43

nicacao, seguranca, funcoes de utilidades. Nesse firmware pode ser configurado o endereco

do modulo, tipo de seguranca, quem manda a mensagem, como deve ser lido os dispositivos

colocados nos seus pinos de entrada/saıda.

As mudancas dessas configuracoes podem ser realizadas de duas maneiras, atraves de

programas de comunicacao serial pelos programas de terminais, ou por um programa que

pode ser feito o download no site da empresa Digi, o programa e o X-CTU.

Figura 4.1: X-CTU

Segundo [Messias2011] o X-CTU atualiza o firmware do modulo Xbee, o programa tem

versao apenas para o sistema operacional Windows. Como pode ser observado na figura

4.1, X-CTU possui um terminal proprio onde pode fazer as configuracoes do Xbee, possui

uma aba para testar a comunicacao com o mesmo, e uma aba onde pode ser feito o update

do Xbee e as modificacoes das suas configuracoes.

4.4.1 Configurando o Xbee pelo X-CTU

Para conectar o modulo Xbee no computador e necessario um adaptador USB do Xbee,

que pode se visto na figura 4.2 alguns modelos desses adaptadores. Apos isso ele verifica a

porta que ele esta conectado, na figura 4.3 o modulo esta na porta COM3.

Con�guração do Xbee 44

Figura 4.2: Adptadores USB para modulos do Xbee

Figura 4.3: Porta que o modulo Xbee esta conectado

Segundo [Faludi2010] primeiramente e necessario atualizar o firmware do Xbee. Com o

X-CTU(que e visto na figura 4.1) aberto e o modulo Xbee conectado no computador, sele-

cione a porta COM que o modulo esta conectado, com isso pressione o botao “Test/Query”,

caso esteja tudo certo aparecera uma tela igual a da figura 4.4. Caso mostre alguma men-

sagem de erro, verifique se o modulo esta corretamente conectado ao adaptador USB e se

o mesmo esta conectado ao computador.

Figura 4.4: Comunicacao OK

Con�guração do Xbee 45

Apos o teste, verifique na aba“Modem Configuration”o botao“Download New Version”,

a funcao desse botao e de verificar se possui uma nova versao do firmware do Xbee, se tiver

ele ira fazer o download da versao.

Agora o modulo Xbee pode ser configurado. Na mesma aba onde foi realizada a atua-

lizacao do firmware, podem ser feitas modificacoes na configuracao do modulo. A seguir o

que deve ser modificado nas configuracoes:

• PAN ID

Essa configuracao que identifica os modulos, no caso esse ID tem que ser o mesmo

para todos os modulos que irao se comunicar no projeto.

• DH (Destination Address High)

E o endereco mais significativo do outro modulo que vai se comunicar com o Xbee

que esta sendo configurado. Normalmente se pega o numero de serie que vem atras

do modulo Xbee, esse DH quase sempre e o mesmo em todos.

• DL (Destination Address Low)

E o endereco menos significativo do outro modulo que vai se comunicar com o Xbee

que esta sendo configurado. Normalmente se pega o numero de serie que vem atras

do modulo Xbee, e o que se modifica do DH.

• BD

O baud rate da comunicacao.

Apos essas modificacoes e necessario apenas que pressione o botao “Write”, caso nao

pressione esse botao o modulo nao ira gravar as modificacoes. Repita o processo para o

outro modulo modificando o DL e ja e possıvel fazer o teste de comunicacao dos Xbee.

4.4.2 Configurando o Xbee pelo Tera Term

Essa configuracao pode ser feita por qualquer programa de comunicacao serial dos

computadores, estilos HyperTerminal que tınhamos no Windows XP. No caso do projeto

foi utilizado o Tera Term.

Con�guração do Xbee 46

Figura 4.5: Programa Tera Term

Apos selecionar a porta que o modulo esta conectado conforme informa a figura 4.5,

selecione “Setup” e depois “Terminal”, ira aparecer uma janela similar a da figura 4.5, apos

isso podem ser feita as alteracoes que estao na tabela 4.6, para que o programa mostre o

que esta sendo escrito e exibir as respostas do modulo Xbee.

Figura 4.6: Configuracoes do terminal

O Xbee trabalha em dois modos:

• Modo Transparente

Onde ocorre a troca de dados normalmente, o que e enviado e recebido pelo outro

modulo.

• Modo Comando

Nesse modo podemos enviar comandos para o Xbee que esta conectado ao computa-

dor, para o Xbee entra nesse modo precisamos mandar para ele o comando “+++”

e recebemos um OK em resposta a esse comando, nesse momento o Xbee entrou no

modo de comando, e caso nao receba nenhum comando em 10 segundos automatica-

mente retorna para o modo transparente.

Con�guração do Xbee 47

Para configura-lo no terminal e necessario que o Xbee fique no modo comando e entao

podemos enviar as informacoes das suas novas configuracoes:

Comandos Modulo 1 Modulo 2ATID 2011 2011ATDH 13A300 13A300ATDL 43023E45 403B9E21

ATWR

Tabela 4.2: Configuracoes dos Modulos 1 e 2

Lembrando que antes desses comando e necessario enviar o comando“+++”para poder

entra no modo de comando do Xbee, e apos cada comando desse deve ter uma resposta de

OK do Xbee. O DH e o DL sao o numero de serie do modulo Xbee utilizado.

Seguindo todos os passos, o proximo e testar para verificar se tudo foi realizado da

maneira correta. Coloque cada modulo em um adaptador USB e ligue no computador,

abra um programa de terminal e escreva qualquer coisa, verifique se no outro terminal

no outro computador recebeu a mensagem enviada. Caso receba a mensagem os modulos

estao se comunicando perfeitamente.

Outro exemplo pode ser utilizando uma placa Arduino, um adaptador USB, dois mo-

dulos Xbee. Faca a mesma configuracao do exemplo anterior. Na placa Arduino grave

codigo mostrado na pagina seguinte.

1 char recepcao;2 int estado =1;3

4 void setup(){5 Serial.begin(9600);6 }7

8 void loop(){9 delay(1000);

10 //ler da serial;11 recepcao = Serial.read();12 if(recepcao==’x’){13 estado = !estado;14 digitalWrite(13, estado);15 }16 }

Codigo 4.4.1: Pisca LED com Xbee.

Com o modulo Xbee no Arduino e o adaptador USB no computador, abra o terminal

do Arduino IDE e envie o comando “x”, verifique se o LED do pino 13 da placa mudou

Con�guração do Xbee 48

seu estado (apagou caso estava ligado ou ligou caso estava apagado). Se caso afirmativo a

comunicacao sem fio utilizando o Xbee esta funcionando.

Agora podemos fazer essa implementacao com outros dispositivos, como sensores, mo-

tores.

Capıtulo 5

Desenvolvimento

No projeto foi implementado um carro robo controlado por uma pagina web como mostrado

na figura 5.1(robo) e 5.2(web).

Figura 5.1: Carro Montado

Quando o usuario selecionar uma das opcoes que tem na pagina web – Frente, Direita,

Esquerda, Re – o carro robo ira obedecer o comando e fara o que lhe foi solicitado.

50

Figura 5.2: Pagina Web

O prototipo utilizado para a implementacao do carro robo mostrado na figura 5.3 funci-

ona da seguinte maneira. Quando e selecionado um comando na pagina web, essa informa-

cao e tratada pela classe java “ControlaCarro” que verifica qual foi o comando selecionado

e envia o mesmo para o Arduino atraves do Xbee, o Arduino trata essa informacao e faz

com que um dos motores ou os dois funcionem em determinado sentido para locomover o

carro, essa interacao com o motor e feita atraves do Motor Control Shield.

Figura 5.3: Prototipo do robo

Etapas de Desenvolvimento 51

5.1 Etapas de Desenvolvimento

Para o desenvolvimento do projeto foi utilizado a seguinte metodologia:

• Primeiramente, foi realizado uma pesquisa sobre os fundamentos e tecnologias da

arquitetura do Arduino;

• Na segunda etapa foi verificado trabalhos relacionados com o projeto;

• Na terceira etapa foi elaborado o pre-projeto;

• Na quarta etapa foi realizada a implementacao do robo, no caso o seu funcionamento

atraves da comunicacao com fio, usando a arquitetura do Arduino e o software de

desenvolvimento da plataforma;

• Na quinta etapa foi implementada a parte web do projeto, o site e sua comunicacao

com o Arduino, ainda na comunicacao com o robo feita atraves de cabo USB;

• Na sexta etapa a implementacao da comunicacao sem fio do robo, utilizando o Xbee;

• Na setima e ultima etapa testes com a pagina web e comunicacao sem fio do Arduino.

5.2 Materiais Utilizados

Os materiais utilizados para o desenvolvimento do projeto foram:

• 1 Arduino Duemilanove;

• 1 Motor Control Shield;

• 1 Xbee Shield;

• 1 adaptador USB Xbee;

• 2 modulos Xbee Serie 1;

• 1 Arduino Robot Platform all-wheel-drive 4 wheel 4WD Chassiss;

Arquitetura do Robô 52

• 2 Baterias recarregaveis 3.7V 3800mAh;

• 1 interruptor bipolar;

• Fios;

• Fita isolante.

5.3 Arquitetura do Robo

Antes de codificar o robo e necessario definir uma arquitetura adequada as funciona-

lidades que estarao presentes no robo. Sua principal utilidade e proporcionar uma visao

universal para que o desenvolvimento prossiga da forma mais clara possıvel, como pode ser

visto na figura 5.4.

Figura 5.4: Arquitetura do Robo

5.4 Montando o Carro Robo

No carro robo temos dois modulos, o carro com Arduino e a pagina web. O robo recebe

informacoes provenientes da pagina web, trata essas informacoes e faz o movimento correto

do carro.

O carro robo possui o Xbee Shield, responsavel pela comunicacao sem fio do compu-

tador onde o servidor do pagina esta localizado, recebendo os dados e passando para o

Arduino que por sua vez faz a comunicacao com o Shield do motor, esse responsavel pelo

gerenciamento dos motores do carro.

Montando o Carro Robô 53

O chassi do carro e montado com os motores, no caso do projeto foi comprado um

chassi com 4 rodas e 4 motores, que pode ser visto na figura 5.5, um motor para cada roda,

so que a programacao do robo esta utilizando apenas dois terminais do Shield do motor o

M3 e M4.

Figura 5.5: Pecas do Carro

Nesse caso tem uma ligacao nos motores do mesmo lado conforme a figura 5.6, assim

o terminal M3 e responsavel pelos motores da direita e o terminal M4 pelos motores da

esquerda.

Figura 5.6: Ligacao dos motores

Montando o Carro Robô 54

5.4.1 Software Arduino

Para se familiarizar com o Arduino podemos fazer um programa teste basico no mesmo,

Ligue a placa Arduino no computador atraves do cabo USB. Apos isso na opcao “Tools”

escolha a opcao board e selecione a placa Arduino do projeto, no projeto e utilizada a placa

Duemilanove.

Coloque na area do editor de texto o codigo 5.4.1:

1 /*2 Blink3 Turns on an LED on for one second, then off for one second, repeatedly.4

5 This example code is in the public domain.6 */7

8 void setup() {9 // initialize the digital pin as an output.

10 // Pin 13 has an LED connected on most Arduino boards:11 pinMode(13, OUTPUT);12 }13

14 void loop() {15 digitalWrite(13, HIGH); // set the LED on16 delay(1000); // wait for a second17 digitalWrite(13, LOW); // set the LED off18 delay(1000); // wait for a second19 }

Codigo 5.4.1: Pisca LED.

Para gravar o codigo na placa Arduino, pode fazer pelo botao “Upload”, atalho Ctrl+U

ou na aba “File” na opcao “Upload to I/O Board”.

Esse codigo ira fazer o LED do pino 13 ficar piscando com intervalos de 1 segundo (1000

milissegundos), com esse codigo podemos verificar o funcionamento do Arduino.

5.4.2 Software do Motor

Para fazer uso dos motores DCs no robo foi comprado o Motor Control Shield na loja

on-line multilogica (umas das revendedoras que consta no site do Arduino), nesse Shield os

componentes nao vem soldados (observe na figura 5.7), voce tera que soldar os componentes

o que nao e muito difıcil, mesmo para quem nao tem muita pratica em soldar componentes.

Apos “montar” o Shield o funcionamento do mesmo pode ser testado atraves do codigo

5.4.2:

Montando o Carro Robô 55

Figura 5.7: Motor Control Shield com os componentes nao soldados

1 /* Vers~ao onde o carro se movimenta conforme o comando dado e2 anda um pouco, aproximandamente 1 segundo.3 */4 #include <AFMotor.h>5

6 int comando; // comando que vem do programa java7 int d; // valor do delay do motor8 AF_DCMotor motor(3, MOTOR12_1KHZ);9 AF_DCMotor motor2(4, MOTOR12_1KHZ);

10

11 void setup(){12 d = 10; // inicia delay em 1013 Serial.begin(9600);14 motor.setSpeed(255); // inicializa a velocidade do motor no maximo15 motor2.setSpeed(255);// inicializa a velocidade do motor2 no maximo16 }17

18 void loop(){19 delay(d);20 if (Serial.available() >= 1) {21 // Verifica o comando passado para ele.22 comando = Serial.read();23

24 if(comando == 49){ // comando para o carro virar para direita.25 motor.run(FORWARD);26 d = 1200;27 }28 if(comando == 50){ // comando para o carro virar para esquerda29 motor2.run(FORWARD);30 d = 1200;31 }32 if(comando == 51){ // comando para o carro ir para frente33 motor2.run(FORWARD);34 motor.run(FORWARD);35 d = 900;36 }else if(comando == 52){ // comando para o carro ir para tras37 motor2.run(BACKWARD);38 motor.run(BACKWARD);39 d = 900;40 }41 }else{42 motor2.run(RELEASE);43 motor.run(RELEASE);44 }45 Serial.println(comando);46 }

Codigo 5.4.2: Codigo que controla os motores do carro robo.

Montando o Carro Robô 56

Antes do setup informamos ao Motor Shield para utilizar os terminais M3 e M4, no

setup e configurada a velocidade de rotacao dos motores no maximo e configuracao da

comunicacao serial para o baud rate de 9600. No loop e verificado se foi passada alguma

informacao valida para a placa.

Apos a gravacao do codigo na placa Arduino o Shield pode ser acoplado ao Arduino.

Deixe um jumper no EXT PWR, para receber a alimentacao do cabo USB do Arduino,

assim nao e necessario uma fonte externa no Motor Shield.

Apos isso podemos fazer um teste ou com o robo montado ou com algum motor DC

separado. Com o Serial Monitor do Arduino IDE aberto pode ser digitada a informacao

para o Arduino, verifique se o motor DC fez alguma rotacao, caso funcione o Motor Shield

esta funcionando perfeitamente. Caso nao funcione verifique a informacao que esta apare-

cendo no monitor, para isso que serve a linha “Serial.println(comando);”, para o Arduino

mandar o que ele esta recebendo, uma forma de debug.

5.4.3 Software Web

Utilizando a IDE eclipse foi criado um projeto Java Web e depois implementada a

pagina web em si utilizando a lingaguem HTML, o codigo 5.4.3 mostra como ficou.

1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">2 <html>3 <head>4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">5 <title>Projeto arduino</title>6 </head>7 <body>8 <form action="controleCarro" method="post">9 <input type="submit" value="Frente" name="frente" />

10 <input type="submit" value="Direita" name="direita"/>11 <input type="submit" value="Esquerda" name="esquerda"/>12 <input type="submit" value="Re" name="re"/>13 </form>14 </body>15 </html>

Codigo 5.4.3: Codigo da pagina web.

Codigo simples que cria os botoes da pagina e informa qual classe controla as acoes

desse botoes.

Apos a criacao da pagina em si foi feita a classe que cuida da comunicacao com o Arduino

atraves da porta serial, o codigo 5.4.4 mostra parte do programa, o codigo completo pode

Montando o Carro Robô 57

ser visto ao final do capitulo no codigo 5.4.6.

1 public class ControlePorta {2 // construtor3 public ControlePorta() {4 listaDePortas = CommPortIdentifier.getPortIdentifiers();5 }6

7 public void initSerial() {8

9 try {10 CommPortIdentifier portId = null;11 try {12 portId = CommPortIdentifier.getPortIdentifier("COM3");13 } catch (NoSuchPortException npe) {14 System.err.println(npe);15 }16 port = (SerialPort) portId.open(17 "Tlo comunica serial", 9600);18 serialOut = port.getOutputStream();19 port.setSerialPortParams(9600, SerialPort.DATABITS_8,20 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);21 } catch (Exception e) {22 e.printStackTrace();23 }24 }25

26 public void enviaDados(int opcao) {27 try {28 serialOut.write(opcao);29 } catch (IOException e) {30 e.printStackTrace();31 }32 }33 }

Codigo 5.4.4: Comunicacao com o Arduino atraves da serial

Onde portId e a porta que tem a comunicacao com os modulos Xbee, serialOut e o

baud rate da comunicacao, o numero de bits na comunicacao, bit de parada e paridade. O

enviaDados e o responsavel por enviar os comandos ao Xbee.

Agora o controle das acoes da pagina web, para receber o botao selecionado e depois

passar esses dados para o Arduino, o codigo 5.4.5 mostra parte da classe que trata os

comandos da paginas web q serao enviados ao Arduino, o codigo completo pode ser visto

no final do capitulo com o codigo 5.4.7.

No codigo os if sao para saber qual botao foi selecionado e assim enviar o comando

correto para o Arduino atraves do Xbee.

Montando o Carro Robô 58

1 public class ControleCarro extends HttpServlet {2

3 private ControlePorta arduino;4

5 public ControleCarro() {6 arduino = new ControlePorta();7 arduino.initSerial();8 }9

10 @Override11 protected void service(HttpServletRequest request,12 HttpServletResponse response) throws ServletException, IOException {13

14 String btnFrente, btnDireita, btnEsquerda, btnRe;15

16 if (btnFrente.equals("Frente")) {17 arduino.enviaDados(51);18 } else if (btnDireita.equals("Direita")) {19 arduino.enviaDados(49);20 } else if (btnEsquerda.equals("Esquerda")) {21 arduino.enviaDados(50);22 } else if (btnRe.equals("Re")) {23 arduino.enviaDados(52);24 } else {25 arduino.close();26 }27

28 RequestDispatcher rd = request.getRequestDispatcher("/index.html");29 rd.forward(request, response);30

31 arduino.close();32 }33 }

Codigo 5.4.5: Responsavel por verificar qual informacao passar para o robo

5.4.4 Utilizando o carro robo

Primeiro e necessario ligar o servidor web no eclipse, apos seu

inicio o usuario pode acessar a pagina web pelo seguinte endereco

http://ipdamaquina:8080/ArduinoWeb/index.html, onde ArduinoWeb e o nome do

projeto web criado no eclipse.

Mas antes de mandar os comandos temos que verificar se o robo esta ligado correta-

mente, pois se ele nao estiver ligado nao tem como haver a comunicacao da pagina web

com o robo e assim nao podemos verificar o seu funcionamento.

Montando o Carro Robô 59

1 package SrCom;2

3 import gnu.io.CommPortIdentifier;4 import gnu.io.NoSuchPortException;5 import gnu.io.SerialPort;6

7 import java.io.IOException;8 import java.io.OutputStream;9 import java.util.Enumeration;

10

11 public class ControlePorta {12

13 private OutputStream serialOut;14 private SerialPort port;15 @SuppressWarnings("rawtypes")16 protected Enumeration listaDePortas;17 protected String[] portas;18

19 // construtor20 public ControlePorta() {21 listaDePortas = CommPortIdentifier.getPortIdentifiers();22 }23

24 // retorna as portas disponiveis25 public String[] ObterPortas() {26 return portas;27 }28

29 public void initSerial() {30

31 try {32 CommPortIdentifier portId = null;33 try {34 portId = CommPortIdentifier.getPortIdentifier("COM3");35 } catch (NoSuchPortException npe) {36 System.err.println(npe);37 }38 port = (SerialPort) portId.open(39 "Tlo comunica serial", 9600);40 serialOut = port.getOutputStream();41 port.setSerialPortParams(9600, SerialPort.DATABITS_8,42 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);43 } catch (Exception e) {44 e.printStackTrace();45 }46 }47

48 public void ListarPortas() {49 int i = 0;50 portas = new String[10];51 while (listaDePortas.hasMoreElements()) {52 CommPortIdentifier ips = (CommPortIdentifier) listaDePortas53 .nextElement();54 portas[i] = ips.getName();55 System.out.println("Portas" + portas[i].toString());56 i++;57

58 }59 }60

61 public void close() {62 try {63 serialOut.close();64 //port.close();65 } catch (Exception e) {66 // TODO Auto-generated catch block67 e.printStackTrace();68 }69 }70

71 public void enviaDados(int opcao) {72 try {73 serialOut.write(opcao);74 } catch (IOException e) {75 e.printStackTrace();76 }77 }78 }

Codigo 5.4.6: Codigo completo da comunicacao com o Arduino

Montando o Carro Robô 60

1 package br.com.caelum.servlet;2

3 import java.io.IOException;4

5 import javax.servlet.RequestDispatcher;6 import javax.servlet.ServletException;7 import javax.servlet.http.HttpServlet;8 import javax.servlet.http.HttpServletRequest;9 import javax.servlet.http.HttpServletResponse;

10

11 import SrCom.ControlePorta;12

13 @SuppressWarnings("serial")14 public class ControleCarro extends HttpServlet {15

16 private ControlePorta arduino;17

18 public ControleCarro() {19 arduino = new ControlePorta();20 arduino.initSerial();21 }22

23 @Override24 protected void service(HttpServletRequest request,25 HttpServletResponse response) throws ServletException, IOException {26

27 String btnFrente, btnDireita, btnEsquerda, btnRe;28

29 if (request.getParameter("frente") != null) {30 btnFrente = request.getParameter("frente");31 } else {32 btnFrente = "";33 }34

35 if (request.getParameter("direita") != null) {36 btnDireita = request.getParameter("direita");37 } else {38 btnDireita = "";39 }40

41 if (request.getParameter("esquerda") != null) {42 btnEsquerda = request.getParameter("esquerda");43 } else {44 btnEsquerda = "";45 }46

47 if (request.getParameter("re") != null) {48 btnRe = request.getParameter("re");49 } else {50 btnRe = "";51 }52

53 if (btnFrente.equals("Frente")) {54 arduino.enviaDados(51);55 } else if (btnDireita.equals("Direita")) {56 arduino.enviaDados(49);57 } else if (btnEsquerda.equals("Esquerda")) {58 arduino.enviaDados(50);59 } else if (btnRe.equals("Re")) {60 arduino.enviaDados(52);61 } else {62 arduino.close();63 }64

65 RequestDispatcher rd = request.getRequestDispatcher("/index.html");66 rd.forward(request, response);67

68 arduino.close();69 }70 }

Codigo 5.4.7: Codigo completo do controle do Carro Robo

Conclusao

Ao longo do estudo e desenvolvimento do robo pode ser comprovado como o Arduino pode

deixar o desenvolvimento com motores e comunicacao sem fio bem mais facil que com

outros projetos de sistemas embarcados.

Por possuir seus Shields a programacao do mesmo ficou simplificada com o uso de

bibliotecas com funcoes intuitivas e de facil compreensao, assim como a comunicacao sem

fio, onde so foi necessario implementar uma comunicacao serial normal como se fosse com

fio e configurar os modulos Xbee de maneira correta.

Sua linguagem de programacao baseada no C tornou ainda mais facil a programacao

do microcontrolador Atmel. Pois e a linguagem mais utilizada nos microcontroladores.

Como foi visto nao se tem a necessidade de conhecimento eletrico avancado, pois os

Shields resolvem boa parte dessas dificuldades.

A decisao de desenvolver esse carro robo em Arduino encoraja o contınuo desenvol-

vimento. Espera-se que este trabalho demonstre a aplicabilidade do projeto Arduino no

desenvolvimento de sistemas embarcados mais desenvolvidos. A placa Arduino torna o

desenvolvimento mais facil e de custo menor que alguns outros, a parte da comunicacao

sem fio e um bom exemplo de facilidade, sem ter que se preocupar com implementacao de

protocolos de comunicacao sem fio, apenas a configuracao dos modulos Xbee para se ter a

comunicacao.

Com o projeto tem a possibilidade de incrementa-lo adicionando sensores no carro para

que ele nao colida com os obstaculos a sua frente e consiga desviar por si so, tambem pode

enviar imagens, atraves da comunicacao sem fio, assim podemos ver o que esta na sua

frente utilizando uma camera de vıdeo e saber onde ele esta ou o que esta no local, assim

como muitas outras possibilidades.

Apendice A

Codigos do Projeto

A.1 Codigo do Arduino

A.2 Codigos Da pagina web

Códigos Da página web 63

1 /* Vers~ao onde o carro se movimenta conforme o comando dado e2 anda um pouco, aproximandamente 1 segundo.3 */4 #include <AFMotor.h>5

6 int comando; // comando que vem do programa java7 int d; // valor do delay do motor8 AF_DCMotor motor(3, MOTOR12_1KHZ);9 AF_DCMotor motor2(4, MOTOR12_1KHZ);

10

11 void setup(){12 d = 10; // inicia delay em 1013 Serial.begin(9600);14 motor.setSpeed(255); // inicializa a velocidade do motor no maximo15 motor2.setSpeed(255);// inicializa a velocidade do motor2 no maximo16 }17

18 void loop(){19 delay(d);20 if (Serial.available() >= 1) {21 // Verifica o comando passado para ele.22 comando = Serial.read();23

24 if(comando == 49){ // comando para o carro virar para direita.25 motor.run(FORWARD);26 d = 1200;27 }28 if(comando == 50){ // comando para o carro virar para esquerda29 motor2.run(FORWARD);30 d = 1200;31 }32 if(comando == 51){ // comando para o carro ir para frente33 motor2.run(FORWARD);34 motor.run(FORWARD);35 d = 900;36 }else if(comando == 52){ // comando para o carro ir para tras37 motor2.run(BACKWARD);38 motor.run(BACKWARD);39 d = 900;40 }41 }else{42 motor2.run(RELEASE);43 motor.run(RELEASE);44 }45 Serial.println(comando);46 }

Codigo A.1.1: Codigo que controla os motores do carro robo.

Códigos Da página web 64

1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">2 <html>3 <head>4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">5 <title>Projeto arduino</title>6 </head>7 <body>8 <form action="controleCarro" method="post">9 <input type="submit" value="Frente" name="frente" />

10 <input type="submit" value="Direita" name="direita"/>11 <input type="submit" value="Esquerda" name="esquerda"/>12 <input type="submit" value="Re" name="re"/>13 </form>14 </body>15 </html>

Codigo A.2.1: Codigo da pagina web.

Códigos Da página web 65

1 package SrCom;2

3 import gnu.io.CommPortIdentifier;4 import gnu.io.NoSuchPortException;5 import gnu.io.SerialPort;6

7 import java.io.IOException;8 import java.io.OutputStream;9 import java.util.Enumeration;

10

11 public class ControlePorta {12

13 private OutputStream serialOut;14 private SerialPort port;15 @SuppressWarnings("rawtypes")16 protected Enumeration listaDePortas;17 protected String[] portas;18

19 // construtor20 public ControlePorta() {21 listaDePortas = CommPortIdentifier.getPortIdentifiers();22 }23

24 // retorna as portas disponiveis25 public String[] ObterPortas() {26 return portas;27 }28

29 public void initSerial() {30

31 try {32 CommPortIdentifier portId = null;33 try {34 portId = CommPortIdentifier.getPortIdentifier("COM3");35 } catch (NoSuchPortException npe) {36 System.err.println(npe);37 }38 port = (SerialPort) portId.open(39 "Tlo comunica serial", 9600);40 serialOut = port.getOutputStream();41 port.setSerialPortParams(9600, SerialPort.DATABITS_8,42 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);43 } catch (Exception e) {44 e.printStackTrace();45 }46 }47

48 public void ListarPortas() {49 int i = 0;50 portas = new String[10];51 while (listaDePortas.hasMoreElements()) {52 CommPortIdentifier ips = (CommPortIdentifier) listaDePortas53 .nextElement();54 portas[i] = ips.getName();55 System.out.println("Portas" + portas[i].toString());56 i++;57

58 }59 }60

61 public void close() {62 try {63 serialOut.close();64 //port.close();65 } catch (Exception e) {66 // TODO Auto-generated catch block67 e.printStackTrace();68 }69 }70

71 public void enviaDados(int opcao) {72 try {73 serialOut.write(opcao);74 } catch (IOException e) {75 e.printStackTrace();76 }77 }78 }

Codigo A.2.2: Codigo completo da comunicacao com o Arduino

Códigos Da página web 66

1 package br.com.caelum.servlet;2

3 import java.io.IOException;4

5 import javax.servlet.RequestDispatcher;6 import javax.servlet.ServletException;7 import javax.servlet.http.HttpServlet;8 import javax.servlet.http.HttpServletRequest;9 import javax.servlet.http.HttpServletResponse;

10

11 import SrCom.ControlePorta;12

13 @SuppressWarnings("serial")14 public class ControleCarro extends HttpServlet {15

16 private ControlePorta arduino;17

18 public ControleCarro() {19 arduino = new ControlePorta();20 arduino.initSerial();21 }22

23 @Override24 protected void service(HttpServletRequest request,25 HttpServletResponse response) throws ServletException, IOException {26

27 String btnFrente, btnDireita, btnEsquerda, btnRe;28

29 if (request.getParameter("frente") != null) {30 btnFrente = request.getParameter("frente");31 } else {32 btnFrente = "";33 }34

35 if (request.getParameter("direita") != null) {36 btnDireita = request.getParameter("direita");37 } else {38 btnDireita = "";39 }40

41 if (request.getParameter("esquerda") != null) {42 btnEsquerda = request.getParameter("esquerda");43 } else {44 btnEsquerda = "";45 }46

47 if (request.getParameter("re") != null) {48 btnRe = request.getParameter("re");49 } else {50 btnRe = "";51 }52

53 if (btnFrente.equals("Frente")) {54 arduino.enviaDados(51);55 } else if (btnDireita.equals("Direita")) {56 arduino.enviaDados(49);57 } else if (btnEsquerda.equals("Esquerda")) {58 arduino.enviaDados(50);59 } else if (btnRe.equals("Re")) {60 arduino.enviaDados(52);61 } else {62 arduino.close();63 }64

65 RequestDispatcher rd = request.getRequestDispatcher("/index.html");66 rd.forward(request, response);67

68 arduino.close();69 }70 }

Codigo A.2.3: Codigo completo do controle do Carro Robo

Referencias Bibliograficas

[Adafruit2011] Adafruit (2011). Motor Shield. Disponıvel em:

<http://www.ladyada.net/make/mshield/use.html > acesso em: 06 setembro.

[Arduino2011] Arduino (2011). Arduino Duemilanove. Disponıvel em:

<http://www.arduino.cc/en/main/arduinoboardduemilanove. > acesso em: 20 se-

tembro.

[Atmel2011] Atmel (2011). Datasheet microcontrolador. Disponıvel em:

<http://www.atmel.com/dyn/resources/prod documents/doc8161 > acesso em:

01 setembro.

[Brain2011] Brain, M. (2011). A Historia dos Microprocessadores e Microcontroladores.

Disponıvel em: <http://eletronicos.hsw.uol.com.br/microcontroladores1.htm. > acesso

em: 03 setembro.

[de Castro2011] de Castro, A. M. (2011). Redes de sensores sem fio (rssf). Disponıvel em:

<http://www.gta.ufrj.br/grad/101/rssf/protocolos.html > acessoem : 30novembro.

[DesmontaCIA2011] DesmontaCIA (2011). Zigbee ou ieee 802.15.4 – conheca a tecnologia

a fundo. Disponıvel em: <http://desmontacia.wordpress.com/2011/02/22/zigbee-ou-ieee-

802-15-4-conhea-a-tecnologia-a-fundo/ > acesso em: 30 novembro.

[Faludi2010] Faludi, R. (2010). Building Wireless Sensor Networks. O’REILLY, first edition.

[Gadre2001] Gadre, D. V. (2001). Programming And Customizing the AVR Microcontroller.

McGraw-Hill, first edition.

REFERÊNCIAS BIBLIOGRÁFICAS 68

[Gislason2011] Gislason, D. (2011). Zigbee wireless networking. Disponıvel

em: <http://www.eetimes.com/design/embedded-internet-design/4201087/zigbee-

applications–part-1-sending-and-receiving-data/ > acesso em: 29 novembro.

[Hughes2006] Hughes, A. (2006). Electric Motors and Drives. Newnes, third edition.

[IEEE2011] IEEE (2011). Ieee 802.15 wpanTM task group 4 (tg4). Disponıvel em:

<http://www.ieee802.org/15/pub/tg4.html > acesso em: 29 novembro.

[Igoe2007] Igoe, T. (2007). Making Things Talk. O’REILLY, first edition.

[Messias2011] Messias, A. R. (2011). Controle remoto e aquisicao de dados via xbee/zigbee

(ieee 802.15.4). Disponıvel em: <http://www.rogercom.com/zigbee/zigbee.htm > acesso

em: 20 outubro.

[Pereira2002] Pereira, F. (2002). Microcontroladores PIC: Tecnicas Avancadas. Erica, pri-

meira edition.

[Schmidt2011] Schmidt, M. (2011). Arduino A Quick-Start Guide. The Pragmatci Bookshelf,

first edition.

[Sousa2000] Sousa, D. M. (2000). Motores Eletricos De Corrente Contınua. Disponıvel em:

<www.eletronica.org/arquivos/motorescc.pdf > acesso em: 10 outubro.