universidade do estado do amazonas - ueatiagodemelo.info/monografias/2011/tcc-edson-borges.pdf ·...
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.
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.