Vous êtes sur la page 1sur 125

UNIVERSIDADE FEDERAL DO MARANHO CENTRO DE CINCIAS EXATAS E TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE ELETRICIDADE

ANTONIO DIEGO SANTOS ABREU

ARDUINO PLATAFORMA ELETRNICA MICROCONTROLADORA

So Lus 2012

ANTONIO DIEGO SANTOS ABREU

ARDUINO PLATAFORMA ELETRNICA MICROCONTROLADORA

Monografia apresentada ao Curso de Engenharia Eltrica da Universidade Federal do Maranho, para obteno do grau de Bacharel em Engenharia Eltrica. Orientadores: Prof. Dr. Areolino de Almeida Neto Prof. MSc. Marcos Tadeu Rezende

So Lus 2012

A Deus pelo dom da vida e sabedoria de todos os dias. minha linda famlia companheira. Aos meus grandes amigos.

AGRADECIMENTOS

Aos meus pais, Dilva Abreu e Raimundo Abreu, por me dar a possibilidade e todo o suporte para conseguir alcanar os meus objetivos ensinandome as diretrizes das disciplinas do meu comportamento para eu poder seguir minha vida. Ao meu querido irmo Antonio Marcos, que alm de um grande irmo um amigo de carter precioso e nico. A minha namorada, Aurydiana Frana, por estar sempre perto de mim nos ltimos anos compreendendo e vivenciando vrios momentos comigo sejam bons ou ruins. Aos meus familiares, principalmente minhas avs, por sempre entenderem minha ausncia quando precisava estudar. Em especial ao meu grande amigo Engenheiro Lucas Angelo por estar sempre dando foras e compartilhando bons momentos e projetos ao longo desses anos. Ao meu grande amigo Erick Santana, amigo que compartilhei algumas horas da madrugada nesse desafio dos estudos e provas. Ao amigo Marcos Ferreira pelo grande corao e o apoio de sempre. Ao amigo Enio Leal por ajudar-me na mudana de engajamento profissional. A todos os meus amigos da Universidade, Anderson Machado, James Pinheiro, Danilo Vale, Felipe Carvalho, Isac Lauda, Hugo Rossa, Gerdson Cunha, Marcos Lima, Renato Carvalho, Joselilson Silva, Diego Aurlio e todos aqueles que de alguma forma participaram da minha formao. Ao grande Professor Marcos Tadeu, do qual sou admirador pela sua capacidade de visualizar o que poucos conseguem ver e pelos seus preciosos ensinamentos e pacincia durante todas as etapas deste e de outros projetos. Ao Professor Areolino Neto por me proporcionar oportunidades e abrir portas para o mundo da Mecatrnica. A todos os professores com quem tive o prazer de compartilhar informaes ao longo destes anos no curso.

A Paulo Henrique e Carlos Csar, da NetCom, pela oportunidade que me ofereceram em sua Escola Tcnica e incentivo para o desenvolvimento de sistemas mecatrnicos. A todos que de forma direta ou indireta, me ajudaram a chegar nessa etapa da vida.

No conheo a chave para o sucesso, mas a chave para o fracasso tentar agradar a todo mundo. Bill Cosby

RESUMO Neste trabalho apresentada uma plataforma eletrnica microcontroladora denominada Arduino, incluindo as suas diversas aplicaes. A plataforma Arduino um sistema embarcado que foi desenvolvido para os projetistas mudarem o foco para a concepo final do projeto e no a montagem dos circuitos integrados em si. Dentre as diversas aplicaes, destacam-se a sua importncia em sistemas robticos, sistemas de conexo com internet, sensoriamento, comunicao remota e sistemas eletrnicos desenvolvidos para uso educacional. Todas essas aplicaes foram desenvolvidas utilizando-se uma estrutura baseada em Microcontrolador. Palavras-chave: Arduino, Sistema Embarcado, Microcontrolador.

ABSTRACT This work presents a microcontroller eletronic project called Arduino, includind its many applications. Arduinos platform is an embarked system that was developed for changing the designers focus from the assembly of the integrated circuits to the final conception of the project. Among several applicabilities of Arduino, some stand out, like applications in robotic systems, systems of connection with internet, sensing, remote communication and electronic systems designed for educational use. All these applications were developed using a microcontroller based structure.

Keywords: Arduino, Embarked Systems, Microcontroller.

LISTA DE FIGURAS

Figura 2.1 Diagrama esquemtico de um microcontrolador tpico .................... ...22 Figura 2.2 Evoluo do projeto Arduino ............................................................ ...24 Figura 2.3 Arduino Interface Serial .................................................................... ...27 Figura 2.4 Arduinos evoluo da comunicao USB....................................... ..28 Figura 2.5 Arduino Duemilanove ........................................................................ ..28 Figura 2.6 Arduino UNO ..................................................................................... ..29 Figura 2.7 Arduino MEGA 2560 ......................................................................... ..30 Figura 2.8 Arduino Mini ...................................................................................... ..30 Figura 2.9 Arduino Nano .................................................................................... ..31 Figura 2.10 Arduino Bluetooth .............................................................................. ..32 Figura 2.11 Arduino Fio e Lily Pad ....................................................................... ..32 Figura 2.12 Arduino sensorshields mdulos Zigbee e Inputshield .................... ..34 Figura 2.13 Arduino Mega GSM, GPRS e GPS ................................................... ..35 Figura 3.1 Software Arduino ............................................................................... ..38 Figura 3.2 Design da placa Arduino UNO .......................................................... ..39 Figura 4.1 Conexo do LED na placa Arduino ................................................... ..43 Figura 4.2 Interruptor na placa Arduino .............................................................. ..45 Figura 4.3 Acionamento sequencial ................................................................... ..48 Figura 4.4 Acionamento de um motor de corrente contnua............................... ..49 Figura 4.5 Transistor MOSFET .......................................................................... ..50 Figura 4.6 Receptor infravermelho ..................................................................... ..51 Figura 4.7 Pulsos NEC ....................................................................................... ..52 Figura 4.8 Endereo $59 comando 16 no NEC .................................................. ..52 Figura 4.9 Repetio de sinal NEC .................................................................... ..53 Figura 4.10 Montagem do Arduino com o display de cristal lquido ..................... ..54 Figura 4.11 Conexo do receptor infravermelho com o Arduino .......................... ..54 Figura 4.12 Controle infravermelho utilizado no projeto ....................................... ..55 Figura 5.1 Modelos ISO/OSI .............................................................................. ..60 Figura 5.2 Arduino Ethernet Shield..................................................................... ..64 Figura 5.3 Hardware de acionamento ................................................................ ..66 Figura 5.4 Configurao do roteador .................................................................. ..67

Figura 5.5 Pgina web Arduino .......................................................................... ..67

LISTA DE TABELAS

Tabela 3.1 Comparativo com as principais caractersticas relativas ao ATMEGA .36 Tabela 5.1 Funes das camadas do protocolo internet ...................................... ..61 Tabela 5.2 Caractersticas da comunicao TCP/IP ............................................ ..63

LISTA DE QUADROS

Quadro 4.1 Cdigo do acionamento dos pinos de sada ...................................... ..43 Quadro 4.2 Cdigo pisca LED .............................................................................. ..44 Quadro 4.3 Cdigo do acionamento de um pino .................................................. ..46 Quadro 4.4 Cdigo do filtro de rudo de uma chave ............................................. ..47 Quadro 4.5 Cdigo do acionamento sequencial................................................... ..48 Quadro 4.6 Cdigo do acionamento..................................................................... ..50 Quadro 4.7 Cdigos e endereos de VCR com NEC ........................................... ..53 Quadro 4.8 Cdigo do acionamento do controle IR ............................................. ..56 Quadro 5.1 Cdigo fonte para o WebServer ........................................................ ..68

LISTA DE SIGLAS

ADSL AGC ATM CI DIP DC DNS EEPROM FDDI FTP FPGA FTDI HTML HTTP I2C IDE IP IR ISO ICSP LAN LCD MOSFET NEC OSI PC PLD PWM SMD SPI SRAM

Asymmetric Digital Subscriber Line Automatic Gain Control Asynnchronous Transfer Mode Circuito Integrado Dual In-line Package Direct Current Domain Name System Electrically Erasable Programmable Read-Only Memory Fiber Distributed Data Interface File Transfer Protocol Field Programmable Gate Array Future Technology Devices International Hyper Text Multi Language Hypertext Transfer Protocol Inter Integrated Circuit Integrated Development Environment Internet Protocol Infrared International Organization for Standardization In Circuit Serial Programming Local Area Network Display de Cristal Lquido Metal Oxide Semiconductor Field Effect Transistor Numerical Eletromagnetics Code Open Systems Interconnect Personal Computer Programmable Logic Device Pulse-Width Modulation Surface Mounting Devices Serial Peripheral Interface Static Random Access Memory

SMTP TCP TTL UART UDP UMR USB VCR

Simple Mail Transfer Protocol Transmission Control Protocol Transistor-Transistor Logic Universal Asynchronous Receiver Transmitter User Datagram Protocol Unidade Mvel Robtica Universal Serial Bus Video Cassette Recorder

SUMRIO

1 1.1 1.2 1.3 2 2.1 2.1.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5 3 3.1 3.1.1 3.2 4 4.1 4.1.1 4.1.2 4.1.3 4.1.4

INTRODUO ............................................................................................. 17 Objetivos ..................................................................................................... 18 Motivao .................................................................................................... 19 Organizao do Trabalho........................................................................... 19 PLATAFORMA ELETRNICA MICROCONTROLADA ARDUINO ............ 21 Microcontroladores e Sistemas Embarcados .......................................... 21 Sistemas Embarcados .................................................................................. 22 Histrico do Projeto Arduino ..................................................................... 23 Conceitos Bsicos...................................................................................... 24 Os Principais Modelos da Plataforma Arduino ........................................ 26 Verso Arduino Interface Serial ................................................................. 27 Arduino evoluo USB............................................................................... 27 Verses Arduino Duemilanove e Diecimila ................................................... 28 Verso Arduino UNO .................................................................................... 29 Verso Arduino MEGA ................................................................................. 29 Verso Arduino Mini ..................................................................................... 30 Verso Arduino Nano ................................................................................... 31 Verso Arduino Bluetooth ............................................................................. 31 Verses Arduino Fio e Lilypad ...................................................................... 32 Arduino SensorShield ................................................................................ 34 CARACTERSTICAS TCNICAS ................................................................ 36 Arduino e a Conexo com o Computador ................................................ 37 Software Arduino IDE ................................................................................... 37 A Placa Arduino UNO ................................................................................. 39 PROJETOS E IMPLEMENTAES COM O ARDUINO ............................. 42 Projetos Elementares ................................................................................. 42 Acionamento de Dispositivos de Sada ........................................................ 42 Acionamento do Arduino via Dispositivo de Entrada .................................... 45 Acionamentos Sequencial ............................................................................ 48 Acionamento de um motor dc via PWM do Arduino ..................................... 49

2.4.10 Principais Diferenas .................................................................................... 33

4.2 4.2.1 4.2.2 4.2.3 5 5.1 5.2 5.2.1 5.2.2 5.2.3 5.3 5.4 6

Projeto do Controle Remoto IR ................................................................. 51 Teoria do Controle Infra Vermelho................................................................ 51 Protocolo NEC Caractersticas Tcnicas ................................................... 52 Projeto com acionamento de display de cristal via controle remoto ............. 53 ARDUINO E A CONEXO COM A INTERNET ........................................... 58 Protocolo TCP/IP e Ethernet ...................................................................... 59 Camadas do Protocolo............................................................................... 60 Modelo ISO/OSI x Internet............................................................................ 60 Funes das Camadas Internet .................................................................... 61 Camada de Transporte TCP/IP .................................................................... 63 Arduino Ethernet Shield............................................................................. 64 Projeto Arduino Ethernet ........................................................................... 65 CONCLUSES ............................................................................................ 72 REFERNCIAS ........................................................................................... 74 ANEXOS ...................................................................................................... 76

17

1 INTRODUO A crescente evoluo da tecnologia aliada ao grande investimento em microprocessadores originou uma nova concepo de desenvolvimento de projetos de sistemas embarcados na rea de eletrnica com novas ferramentas computacionais inclusive aplicadas a rea de mecatrnica. Esse novo conceito permite a uma ampla gama de profissionais (no somente engenheiros) a possibilidade de desenvolver projetos na rea. Rosa 2011 classifica o Arduino como o Lego do futuro, onde uma criana poderia montar o seu rob com esta ferramenta. A crescente oferta de Tablets, Smartphones e Netbooks vem possibilitando o advento de inovaes que afetam o dia-dia de milhes de pessoas em todo o mundo e que esto diretamente relacionados a essa tecnologia. O surgimento dos microcontroladores e a otimizao dos sistemas embarcados aumentaram as possibilidades de desenvolvimento de projetos de automao, dado o baixo custo e a alta velocidade de processamento desses dispositivos. O trabalho com os microcontroladores transformou-se em uma ferramenta fundamental para desenvolvimento de projetos eletrnicos de alto desempenho, pois tornou-se possvel programar uma pastilha de circuito integrado para efetuar controle, monitoramento e acionamento das mais variadas aplicaes dentro da informtica. O aprendizado dos microcontroladores tambm tornou-se um desafio, pois so tantos os modelos, configuraes e fabricantes que confundem os iniciantes nos estudos dessa ferramenta, no somente os estudantes, mas qualquer profissional que deseje implementar os seus projetos com os microcontroladores embarcados. A definio de qual microcontrolador utilizar em um projeto vai muito alm do que saber programar. Muitos fatores esto envolvidos, tais como: linguagem de programao, capacidade de processamento e disponibilidade no mercado local. Assim, existem diversas questes a serem levantadas quando se decide utilizar um microcontrolador. Desta forma, surge a necessidade de criar um novo conceito em aprendizagem de programao em eletrnica, de tal forma que exista uma interao bem definida dos elementos eletrnicos e da utilizao de suas potencialidades sem, contudo precisar conhecer profundamente os mecanismos. Conforme Rosa 2011, o

18

Arduino traz esse conceito de plataforma, pois em uma mesma placa pode-se perceber a existncia de um microcontrolador e facilmente se pode acessar os seus pinos de entrada e sada j pr-definidos. 1.1 Objetivos O presente trabalho visa apresentar uma plataforma eletrnica

microcontroladora tendo por base a tecnologia do Arduino. Este sistema uma ferramenta flexvel e de baixo custo, uma vez que surge como um novo conceito de hardware livre. Tambm uma ferramenta de fcil utilizao, seja por alunos ou profissionais da rea, ou at mesmo usurios com necessidade de desenvolver um projeto eletrnico e que possuem conhecimentos elementares na rea. Margolis 2011 fala sobre o a proposta de criao:
O Arduino usado em muitos programas educacionais em todo o mundo, especialmente por desenvolvedores que querem criar seus prottipos com facilidade, mas no precisam de uma profunda compreenso dos detalhes tcnicos por trs de suas criaes. O Arduino tambm foi projetado para ser usado por pessoas sem formao tcnica, o software inclui uma abundncia de cdigo de exemplo para demonstrar como usar as mais variadas aplicaes da placa Arduino. (MARGOLIS, 2011, p.1)

Neste contexto, nota-se a relevncia do Arduino na aplicao de projetos educacionais em vrios nveis do conhecimento, uma vez que para o seu uso em aplicaes elementares, o projetista no deve necessariamente conhecer profundamente o dispositivo. Como objetivos secundrios, neste trabalho foram projetados, construdos e testados vrios experimentos bsicos e complexos, que podem ser utilizados para o ensino dessa plataforma. Alm disso, foram criadas guias de laboratrio para estes experimentos, que podem ser aplicados em treinamentos e minicursos dentro da prpria Universidade.

19

1.2 Motivao A principal motivao desse trabalho foi apresentar para a comunidade universitria da UFMA a plataforma Arduino, devido esta ser uma ferramenta de boa acessibilidade, possuir baixo preo e no ser do conhecimento geral do corpo discente da Universidade Federal do Maranho, em termos de desenvolvimento de trabalhos acadmicos. Uma segunda motivao consistiu em poder contribuir para disseminar o conhecimento de plataformas microcontroladoras voltadas para o projeto como um todo e no somente para a arquitetura do microcontrolador, dando nfase sua funcionalidade, indo portanto alm do estudo sobre a disposio dos elementos dentro do microcontrolador utilizado. Desta forma, os resultados dos projetos elaborados nesse trabalho podem ser utilizados em vrios nveis do saber tecnolgico, bastando apenas determinar o objetivo do projeto e conhecer o circuito eletrnico no qual a plataforma Arduino estar inserida. 1.3 Organizao do Trabalho Este trabalho est dividido em seis captulos e referncias bibliogrficas: Captulo 2: neste captulo so abordados alguns conceitos sobre Microcontroladores, Sistemas Embarcados e do Projeto Arduino. Neste ltimo ser descrita a evoluo de todas as placas bem como da placa me dos projetos que fazem parte deste trabalho; Captulo 3: neste captulo, so apresentados conceitos sobre alguns especificaes, componentes eletrnicos usados no projeto, suas funes e atualmente; Captulo 4: neste captulo, so mostrados vrios exemplos de experimentos desenvolvidos para o laboratrio, demonstrando a funcionalidade do Arduino, bem como dos seus sensorshields e a descrio dos experimentos que foram construdos para posterior utilizao em treinamentos, tanto em Instituies de Ensino Tcnico e Tecnolgico como em centros de treinamentos de empresas do setor;

bem como as mais variadas placas de sensores (sensorshields) utilizadas

20

Captulo 5: neste captulo, apresentado um importante sensorshield da

plataforma Arduino que interage na comunicao com a Internet bem como as especificaes para projetos futuros; Captulo 6: so apresentadas as concluses, onde so comentadas todas as potencialidades da plataforma Arduino que foram validadas com testes em laboratrio.

21

2 PLATAFORMA ELETRNICA MICROCONTROLADORA- ARDUINO O presente captulo descreve a teoria bsica dos microcontroladores e dos sistemas embarcados bem como as suas principais funcionalidades. Em seguida descrita a trajetria do projeto Arduino desde o surgimento at a criao do Arduino UNO. Vrios conceitos bsicos da plataforma foram contemplados e todos os modelos das placas foram descritos durante o captulo, culminando com a anlise das principais diferenas entre as placas. O texto tambm traz a descrio sobre os sensorshields, que so elementos importantes para um bom desempenho dos projetos com o Arduino. 2.1 Microcontroladores e Sistemas Embarcados Os microcontroladores destacam-se por possurem vrias funcionalidades em nico chip. Lima 2010 apresenta a seguinte definio:
Um microcontrolador um sistema microprocessado com vrias funcionalidades (perifricos) disponveis em um nico chip. Basicamente, um microcontrolador um microprocessador com memrias de programa, de dados e RAM, temporizadores e circuito de clock embutidos. O nico componente externo que pode ser necessrio um cristal para determinar a frequncia de trabalho (LIMA, 2010, p. 24).

Microcontroladores so dispositivos capazes de efetuar o controle de equipamentos eletrnicos ou mesmo de mquinas de pequeno e grande porte, atravs de programao realizada em diferentes tipos de linguagem. um componente muito verstil, pois ele programvel e pode ser empregado em diversas aplicaes. Atualmente vrias empresas como Atmel, Microchip, Intel, Motorola, Texas, entre outros fabricantes possuem microcontroladores cada vez mais velozes, robustos, com maior capacidade de processamento, baixo consumo de energia, entre outras vantagens, as quais foram atingidas devido o alto investimento nas reas de pesquisa e desenvolvimento. Lima 2010 mostra que o desenvolvimento dos microcontroladores est associado ao grande numero de funes que ele pode executar a partir de um programa desenvolvido para uma determinada tarefa.

22 O desenvolvimento dos microcontroladores se deve ao grande nmero de funcionalidades disponveis em um nico circuito integrado. Como o seu funcionamento ditado por um programa, a flexibilidade de projeto e de formas de trabalho com um hardware especfico so inmeras, permitindo aplicao nas mais diversas reas (LIMA, 2010, p.18).

Sistemas comandados por microcontroladores esto cada vez mais presentes no cotidiano das pessoas, onde suas aplicaes vo desde sistemas muitos simples (uma mquina de lavar roupas) at os sistemas mais complexos como processamento digital de sinais, controle de trajetria de robs dentre outros. Com base nos conceitos acima nota-se que a grande vantagem de se colocar vrias funcionalidades em um nico circuito integrado a possibilidade de desenvolvimento rpido de sistemas eletrnicos com o emprego de um nmero pequeno de componentes externos como mostrado no diagrama esquemtico da Figura 2.1.
Figura 2.1 Diagrama esquemtico de um microcontrolador tpico

Fonte: LIMA, 2010

2.1.1 Sistemas Embarcados A nossa sociedade est cercada por incontveis sistemas embarcados, encontrados em diversos equipamentos dentre os quais destacamos: aparelhos de comunicao mvel, TV digital, som, modens, brinquedos, cmeras digitais, fornos de micro-ondas e outros aparelhos eletrodomsticos inclusive com controle remoto. At mesmo em alguns carros so usados vrios deles, em diferentes partes como,

23

por exemplo, no sistema de injeo eletrnica, freio ABS, airbag, computador de bordo, etc. Em Morimoto 2007 afirma-se que, ao contrrio de um PC, que pode executar os mais diversos programas simultaneamente e com diferentes funes, os sistemas embarcados so dispositivos "invisveis", que esto cada vez mais presentes em nosso cotidiano, de forma que muitas vezes sequer percebemos que eles esto l. Um sistema embarcado pode ser, desde uma pequena placa de algum brinquedo moderno, at uma mquina com centenas de processadores, destinada a criar desde previses sobre mercados de capitais, ou at controlar o trfego areo. Sistemas embarcados so geralmente desenvolvidos para uma tarefa especfica. Por questes de segurana e aplicabilidade alguns ainda possuem restries para computao em tempo real. O software desenvolvido para sistemas embarcados muitas vezes chamado firmware e armazenado em uma memria ROM ou memria flash, em vez de um disco rgido. Por vezes o sistema tambm executado com recursos computacionais limitados: sem teclado, sem tela e com pouca memria. Todos estes fatores tambm podem ser traduzidos em custo reduzido. Processadores utilizados em alguns sistemas embarcados geralmente tm preos bem menores que processadores convencionais. 2.2 Histrico do Projeto Arduino O projeto Arduino foi iniciado na cidade de Ivrea, na Itlia em 2005, tendo por objetivo tornar os projetos de sistemas microcontrolados mais simples. Ele foi desenvolvido numa escola de engenharia e com oramento menor em relao aos custos na poca. Em 2006 o projeto recebeu meno honrosa na categoria Comunidades Digitais em 2006, pela Prix ArsEletronics. Tambm alcanou a marca de 50.000 placas vendidas at outubro de 2008. At julho de 2011 foram vendidas mais de 120.000 placas do projeto, de acordo com o site oficial do Arduino1. A Figura 2.2, mostra os principais marcos histricos do Arduino desde a criao.

http://www.arduino.cc

24 Figura 2.2 Evoluo do projeto Arduino

Em 2005, um grupo acadmico com a proposta de reduzir os custos com projetos microcontrolados ganhou notria evoluo e reconhecimento a nvel mundial em um curto intervalo de tempo. A plataforma ainda era elementar e contava apenas com a comunicao tipo serial RS232. Em 2007, o Arduino Diecimilia ganhou a comunicao USB o que tornou o projeto mais flexvel e alavancou as vendas. Em 2009, com o lanamento do Arduino Duemilanove foi corrigido uma srie de erros de operao da placa anterior. Em 2010 foi lanado o Arduino UNO, que a placa base mais moderna atualmente e que segue com o mesmo sucesso, tendo em vista que essa placa conta com mais memria do microcontrolador e com mais velocidade no envio e recebimento de dados. 2.3 Conceitos Bsicos O Arduino no um microcontrolador e sim uma plataforma eletrnica que possui uma srie de dispositivos eletrnicos agregados a um microcontrolador em uma placa de circuito integrado. A placa foi adaptada para conectar-se facilmente com outros dispositivos, pois possui a descrio bem detalhada de suas portas de entrada e sada bem como o acesso facilitado para sua comunicao com outros dispositivos e at mesmo a placas de expanso que tambm so confeccionadas para adaptar-se placa principal. Embora o Arduino seja uma plataforma que pode ser desenvolvida com base em qualquer microcontrolador, o modelo mais utilizado nas verses comerciais o ATMEL. No presente trabalho, utilizamos duas placas que, assim como no restante do mundo, utiliza os microcontroladores ATMEGA 328. No Brasil, existem

25

diversas cpias modificadas que foram desenvolvidas e adaptadas, tais como o Freeduino, Tatuino dentre outras verses. O Arduino tambm possui uma linguagem prpria, os desenvolvedores a nomearam de linguagem Arduino. Trata-se de uma linguagem C++ que foi adaptada disposio dos pinos das diversas placas do projeto. Os desenvolvedores do projeto disponibilizam todos os cdigos e diagramas de montagem para qualquer usurio interessado em confeccionar o seu prprio prottipo, da mesma forma que vendem as placas montadas para todo o mundo. Em reportagem revista INFO2, em maro de 2009, David Mellis, da Arduino, contou como um hardware de cdigo aberto (livre) pode se espalhar pelo mundo, Mellis falou que a empresa queria que outras pessoas estendessem a plataforma para adequ-la s suas necessidades. Para isso, elas deveriam ter acesso ao cdigo-fonte do software e ao projeto do hardware. Alm disso, como era uma plataforma nova e de cdigo aberto deu confiana s pessoas. Elas sabiam que poderiam continuar expandindo a plataforma mesmo que o desenvolvedor original desistisse dela. Segundo David Mellis 2009 o cdigo aberto traz algumas vantagens ao hardware que a possibilidade de adaptar o modelo de negcios e o fornecimento a diferentes situaes. Outras empresas podem vender kits para a montagem de dispositivos compatveis com Arduino, por exemplo. Tambm podem redesenhar os produtos para trabalhar com componentes que so mais baratos e fceis de conseguir em seus pases. Um exemplo de produto derivado das placas Arduino que atende a um uso especfico a ArduPilot, placa de cdigo aberto para navegao autnoma em aeronaves. (Revista INFO, 2009, p. 30)
O Arduino uma plataforma open-source projetada com um microcontrolador simples de 8 bits da famlia AVR da fabricante ATMEL e que utiliza uma linguagem baseada em C/C++, mas que tambm pode ter o seu projeto adaptado para qualquer outro microcontrolador que suporte a linguagem. (ROSA, 2011, p.3)

O projeto Arduino tem como uma de suas vantagens, ser uma ferramenta de baixo custo, flexvel e, principalmente, de fcil utilizao, seja por alunos

http://info.abril.com.br/professional/tendencias/hardware-livre-leve-e-solto.shtml

26

profissionais da rea, ou at mesmo usurios que tem necessidade de desenvolver um projeto eletrnico. Alm disso, os requisitos mnimos para utilizao de uma das placas da plataforma Arduino um computador com entrada USB e o software de compilao encontrado na pgina dos desenvolvedores do projeto3. As placas Arduino possuem algumas portas de entrada e sada, analgicas e digitais, alm de uma ou mais portas de comunicao serial, que so caractersticos do microcontrolador utilizado na placa. As placas Arduino contam com um sistema de boot incorporado ao microcontrolador, que tem por objetivo interpretar a linguagem Arduino e traduzi-la para linguagem de instruo do microcontrolador. Atravs dos diversos recursos apresentados pela plataforma, o Arduino pode interagir em diversos nveis de projetos, como em projetos mais simples que dispe de LED, botes, CIs, LCD, entre outros, comunicando com um PC atravs de porta USB, ou outros dispositivos controlveis como PLDs, FPGAs, ou outros microcontroladores e ferramentas mais sofisticadas, tais como comunicao ethernet e sem fio. 2.4 Os Principais Modelos da Plataforma Arduino Desde o princpio, as placas Arduino contavam com um microcontrolador ATMEGA, portas de entrada e sada, analgicas e digitais nvel TTL - TransistorTransistor Logic (5 V), e porta de comunicao serial. Hoje existem placas cada vez mais sofisticadas com configuraes que atendem cada vez mais as necessidades do pblico. As placas Arduino podem ser encontradas para venda em sites de representantes comerciais ou montadas pelo prprio usurio, j que os desenvolvedores disponibilizam em seu site os arquivos do esquemtico e do layout da placa. Alm disto, os componentes utilizados para fabricao das placas so de fcil acesso e encontradas em qualquer loja de componentes eletrnicos. A seguir so apresentadas as placas disponveis desde o primeiro modelo at o mais atual e ainda outros modelos mais especficos.

http://www.arduino.cc/

27

2.4.1 Verso Arduino Interface Serial A plataforma Arduino Interface Serial foi a primeira placa desenvolvida em 2005. Possui um microcontrolador ATMEGA8, que possui 8 KB de memria de programa do tipo flash, componentes discretos e uma porta serial do tipo RS232, conforme Figura 2.3. a placa mais simples de montar, pois os componentes utilizados so do tipo convencional. considerada hoje uma placa obsoleta, por causa de sua porta de comunicao estar caindo em desuso, os componentes so de encapsulamento tipo DIP e no conta com componentes do tipo SMD, considerados ideais pelo mercado.
Figura 2.3 Arduino Interface Serial

Fonte: Arduino, 2011.

2.4.2 Arduino evoluo USB O Arduino USB foi a primeira placa fabricada com conexo USB, sendo vendida principalmente como um kit que deveria ser montado pelo usurio. Esta primeira placa tinha um problema de layout nas ligaes com conector USB e teve uma segunda verso lanada. Seguida desta, foi lanada a placa Arduino Extreme, que contava com componentes SMD em substituio aos convencionais, sendo lanada a seguir uma segunda verso em que o layout possua plano de terra. Alm disso, possua um ATMEGA8 e uma FTDI para converso RS232 - USB. A terceira gerao de Arduino com porta USB foi Arduino NG (Nuova Generazione), que continha um novo FTDI para converso RS232 USB e um novo

28

microcontrolador ATMEGA 168. O Arduino Extreme e o NG so apresentados na Figura 2.4.


Figura 2.4 Arduinos evoluo da comunicao USB

Fonte: Arduino, 2011.

2.4.3 Verses Arduino Duemilanove e Diecimila O Arduino Duemilanove e Diecimilia so os modelos 2009 e 2007 das placas padro da plataforma. Conta com 12 portas de I/O digitais, 6 portas de I/O analgicas, conversor A/D de 10 bits, comunicao via USB, SPI, I2C, Canais PWM, alimentao via USB ou externa atravs de fonte de alimentao, entre outras caractersticas. Alm disso o modelo 2007 contava com um microcontrolador ATMEGA 168 com 16 KB, enquanto o modelo 2009 contava com um ATMEGA 328 com 32 KB (Flash). O modelo do Duemilanove apresentado na Figura 2.5.
Figura 2.5 Arduino Duemilanove

Fonte: Arduino, 2011.

29

2.4.4 Verso Arduino UNO O Arduino UNO a ltima verso das placas Arduino, como apresentado na Figura 2.6. Lanada no final de 2010 possui um microcontrolador ATMEGA328 e a novidade est no conversor RS232 USB que conta com um ATMEGA8 substituindo o FTDI. Com isto o arquivo de carregamento do sistema diminuiu de tamanho, o que economizou na memria flash do ATMEGA328 e acelerou o processo. O UNO foi utilizado para marcar o lanamento do Arduino 1.0 e junto a este sero obtidas as verses de referncia.
Figura 2.6 Arduino UNO

Fonte: Arduino, 2011.

2.4.5 Verso Arduino MEGA O Arduino MEGA uma placa que possui como caractersticas principais um microcontrolador que possibilita principalmente uma quantidade maior de portas de I/O, outros recursos como portas seriais extras, PWMs, entre outros recursos conforme mostrado na Figura 2.7. Essa placa foi desenvolvida originalmente com o ATMEGA 1280, um microcontrolador com 128 KB de memria flash e um FTDI, que foram substitudos posteriormente por um ATMEGA 2560, que possui 256 KB de memria flash e assim como o UNO possui um ATMEGA 8 como conversor RS232 USB.

30 Figura 2.7 Arduino MEGA 2560

Fonte: Arduino, 2011.

2.4.6 Verso Arduino Mini O Arduino Mini a menor placa de todas as placas, como mostra a Figura 2.8. Ela baseada em um ATMEGA168, pode ser considerada a miniaturizao da Diecimila por possuir grande parte dos recursos desta, mas no possui conexo USB. Esta placa ideal quando se deseja otimizar espao e projetar mais de um prottipo, pois neste caso necessrio apenas um adaptador no qual pode gravar quantas placas mini se desejar. Pode-se utiliz-la diretamente em um protoboard ou ento sold-la ao hardware do prottipo em desenvolvimento.
Figura 2.8 Arduino Mini

Fonte: Arduino, 2011.

31

2.4.7 Verso Arduino Nano Esta placa pode ento ser considerada a miniaturizao da Arduino Duemilanove completo, pois possui praticamente todos os recursos que o Duemilanove dispe inclusive conexo USB, conforme a Figura 2.9. Para aliment-lo por uma fonte externa, necessrio que a alimentao ocorra diretamente nos pinos de alimentao disponveis, diferente do que ocorre no Duemilanove, mas em relao ao tamanho, esta placa semelhante Mini, porm um pouco mais alongada.
Figura 2.9 Arduino Nano

Fonte: Arduino, 2011.

2.4.8 Verso Arduino Bluetooth O Arduino Bluetooth uma placa que se difere em vrios aspectos as Arduinos tradicionais. Como o prprio nome sugere, o Arduino Bluetooth possui conexo sem fio via Bluetooth incorporado na placa, conforme Figura 2.10. Devido a sua complexidade, esta a placa Arduino com o oramento mais alto e tambm a mais sensvel. Sua alimentao de no mximo 5,5 V que serve para carregar a bateria presente no mdulo. Possui algumas outras peculiaridades, como por exemplo, o mdulo de Bluetooth, que deve ser configurado conforme exige o fabricante.

32 Figura 2.10 Arduino Bluetooth

Fonte: Arduino, 2011.

2.4.9 Verses Arduino Fio e Lilypad Estas duas placas Arduino so de uso mais especfico. O Arduino Lilypad foi desenvolvido em um formato circular o que viabiliza a sua aplicao, que ser incorporado a roupas e tecidos dentre outras aplicaes. J o Arduino Fio uma placa desenvolvida para com o Funnel, que uma linguagem de programao baseada em redes funcionais. Possui um ponto de Wireless contendo inclusive um conector para ser acoplado um dispositivo sem fio. A Figura 2.11 mostra o formato dessas placas.
Figura 2.11 Arduino Fio e Lilypad

Fonte: Arduino, 2011.

33

2.4.10 Principais Diferenas Cada Arduino tem sua particularidade, sendo que o melhor buscar o custo/benefcio mais interessante. O mercado proporciona opes de alto e baixo custo, que fazem toda a diferena na montagem final do projeto, dependendo do propsito do mesmo. Projetos mais simples que no exigem otimizao de espaos, podem utilizar um Arduino UNO ou Duemilanove, dependendo se necessrio uma boa velocidade do microcontrolador ou no. Aplicaes em que velocidade no extremamente essencial, o Arduino Duemilanove suficiente. Caso contrrio, um Arduino UNO mais interessante, j que o carregamento do arquivo de inicializao para a memria de programa do microcontrolador principal executado por um microcontrolador a parte. De acordo com a publicao cientfica Programar 2008, o bootloader uma ferramenta que quando ligada possibilita que o Arduino receba os comandos diretamente da porta USB. Em outras palavras, o carregador do arquivo de inicializao (bootloader) permite um canal direto de carregamento da placa com o computador, o que d uma velocidade muito grande na execuo do projeto, pois a prpria placa funciona como gravadora do microcontrolador. Quando so necessrias muitas portas de I/O, digitais ou analgicas, o Arduino Mega a melhor opo. Projetar um hardware e ainda ter de multiplexar as portas I/O para aumentar a variabilidade do Arduino UNO ou Duemilanove muitas vezes se torna mais dispendioso do que adquirir um Arduino Mega. Quando se fala em otimizao de espaos, os Arduinos Mini e Nano so as opes mais adequadas, j que se assemelham praticamente a CIs de 40 pinos DIP. O layout dessas placas foi feito pensando nesta premissa. O Arduino Bluetooth uma opo bastante onerosa, mas que dependendo da situao mais simples de aplicar do que adquirir um sistema sem fio e acoplar externamente a outro tipo de Arduino. No mercado possvel adquirir placas baseadas no Arduino, como o Freeduino, o Chinduino, Seeduino, Iluminato e at mesmo a verso brasileira com uma estampa da bandeira do Brasil na parte de baixo da placa. Todas estas placas so os chamados clones e podem apresentar peculiaridades em relao ao original, inclusive melhorias como uso de um microcontrolador mais eficiente, maior nmero de portas, entre outros.

34

A escolha da placa fica por conta da relao custo benefcio do projeto, que deve faz-lo da melhor forma possvel e pensando em todas as possibilidades futuras, mas se necessrio mudar o tipo de placa Arduino depois de iniciado o projeto, no h problema algum, j que todas as placas tem a linguagem compatvel entre si. 2.5 Placas Arduino SensorShield O Arduino possui uma sria de adaptadores, que otimizam as suas funcionalidades, conforme as Figuras 2.12 e 2.13, denominados Arduinos sensorshields. Os sensorshields so placas plug and play que garantem ao Arduino uma peculiaridade no desenvolvimento de projetos. Possuem funes pr-definidas, tais como zigbee (comunicao sem fio), controle remoto, adaptador ethernet, interface com motores e adaptao para vrios tipos de sensores. So facilmente adaptveis ao Arduino e servem para aplicaes especficas.
Figura 2.12 Arduino Sensorshields Mdulos Zigbee e InputShield

Fonte: Arduino,2011

35 Figura 2.13 Arduino Mega GSM GPRS GPS

Fonte: Arduino, 2011

36

3 CARACTERSTICAS TCNICAS Os microcontroladores ATMEGA so bastante flexveis e os programas desenvolvidos para um microcontrolador desta famlia necessitam de poucos ajustes, s vezes at nenhum, para serem utilizados em outros microcontroladores do mesmo gnero, diferentemente de outros modelos. Os microchips utilizados nas placas Arduino so: ATMEGA8, ATMEGA168, ATMEGA328, ATMEGA1280 e ATMEGA2560. Cada qual possui peculiaridades, como disposio dos pinos, mas a programao a mesma e vale para qualquer um deles. No Arduino ainda utilizado um cristal ressonador de 16 MHz como gerador do sinal de "clock" externo dos microcontroladores. Isto possibilita que o microcontrolador execute cerca de 16 milhes de instrues por segundo. Em relao aos recursos de cada um dos microcontroladores, apresentado na Tabela 3.1 um comparativo com as principais caractersticas relativas ao ATMEGA.
Tabela 3.1 Comparativo com as principais caractersticas relativas ao ATMEGA ATMEGA 8 168 328 1280 2560 PortasI/O 23 23 23 86 86 Flash(Kb) 8 16 32 128 256 EEPROM(Kb) 0,5 0,5 1 4 4 Fonte: Rosa, 2011 SRAM(Kb) 1 1 2 8 8 CanaisA/D 6 8 8 16 16 UART 1 1 1 4 4

Alguns

conceitos

bsicos

sobre

as

caractersticas

destes

microcontroladores so: Portas de I/O so as portas de entrada e sada de dados, analgicos ou digitais, e que servem para comunicar externamente o microcontrolador e hardware. A memria flash delimita o tamanho mximo do programa que ser executado pelo Arduino. O bootloader do Arduino ainda utiliza uma pequena parcela desta memria.

37

A memria EEPROM uma memria utilizada para armazenar dados, os A memria SRAM uma memria utilizada para armazenar dados Canais A/D so canais que convertem dados analgicos em digitais. No UART um perifrico responsvel pela comunicao serial entre o

quais s sero excludos quando o programa sobrescrev-los. temporrios. ATMEGA a converso A/D tem preciso de 10 bits. microcontrolador e o mundo externo, como por exemplo a comunicao serial entre Arduino e PC. No presente trabalho foi adotada como placa padro o Arduino UNO e o Duemilanove para execuo dos projetos desenvolvidos e demonstrao dos exemplos de programao. Entretanto, os resultados obtidos podem ser adaptados para quaisquer outros modelos. 3.1 Arduino e a Conexo com o Computador O software utilizado para desenvolver os projetos da plataforma Arduino denominado Arduino IDE (Integrated Development Environment ou Ambiente de Desenvolvimento Integrado), pode ser utilizado em qualquer uma das placas da famlia Arduino. Nesta seo so apresentados alguns aspectos desse software bem como da conexo da placa com o computador e algumas inconsistncias que podem interferir na comunicao. Em seguida descrita a placa Arduino UNO por completo, todos os pinos externos e componentes que fazem parte do projeto da placa explicitando as suas funes e os recursos disponveis. 3.1.1 Software Arduino IDE O Arduino IDE um programa multitarefa desenvolvido em JAVA, utilizado para criar, salvar, editar e compilar os programas e carreg-los na placa Arduino, alm de apresentar outros recursos como gravao do bootloader em um microcontrolador ATMEGA e um monitor serial simples.

38

O programa possui uma interface simples e rpida, que inclui um editor de cdigos-fonte com recursos de realce e identificao automtica de determinados cdigos digitados no programa. O programa ainda possui uma srie cdigos-fonte exemplos, uma ferramenta que auxilia o programador a aprender a linguagem Arduino ou relembrar cdigos necessrios durante o projeto que est sendo desenvolvido. A Figura 3.1 mostra a tela do software Arduino em execuo.
Figura 3.1 Software Arduino

Fonte: Arduino, 2011

Na pgina oficial do Arduino realizado o download de um arquivo compactado, no qual est uma pasta que contm uma quantidade razovel de arquivos, drivers para instalao do CI FTDI, exemplos, bibliotecas, referncias, entres outros. No Anexo I desse trabalho apresentado todo o passo a passo da utilizao do programa com todos os mdulos e caractersticas da linguagem.

39

3.2 A Placa Arduino UNO A placa Arduino UNO a mais recente e pode-se consider-la atualmente como referencia dessa plataforma. Ela derivada da placa Arduino Duemilanove que possui um CI de converso RS232 USB. A grande novidade desta placa est na reduo do bootloader do sistema que foi incorporado a um ATMEGA8. A Figura 3.2 mostra em detalhes, os diversos componentes da Arduino UNO.
Figura 3.2 Design da placa Arduino UNO

Fonte: Arduino, 2011

Para detalhar a funcionalidade dos pinos, observa-se na Figura 3.2, a partir do primeiro pino no canto superior direito da placa, o pino digital 0 e seguindo no sentido anti-horrio, temos os seguintes componentes e funes: Pinos 0 e 1: So portas de I/O digitais quando o modo serial no for utilizado no cdigo fonte. No caso de necessitar de porta serial para comunicar durante o programa, estas duas portas no serviram de I/O digitais, apenas para comunicao (so os pinos Tx e Rx). Pinos 2 13: So as portas de I/O digitais. So portas onde o sinal de sada ser 0 V ou 5 V, conforme o cdigo fonte executar. Nas portas 11, 10, 9, 6, 5 e 3 esto disponveis os 6 canais PWMs da placa. Ainda nestes pinos tem-se

40

algumas outras funes especiais, como as ligaes SPI e 2 externas (pinos 2 e 3).

interrupes

Pino GND: Porta referente a um terra digital. Utilizado como terra referencial Pino AREF: Porta de entrada, responsvel por receber um sinal de referncia

do hardware externo. externa para o conversor A/D do Arduino. Se este pino ficar flutuando, o Arduino considerar como referncia 0 V. Pinos Analog in: So as 6 portas analgicas da placa e possuem converso A/D com 10 bits de preciso, ou seja, possvel obter 1024 nveis de tenso diferentes com estes 10 bits (2 bits). Estes pinos podem ser utilizados como portas de entrada e sada e ainda nestes, est disponvel a comunicao I2 C. Pinos de alimentao (Power): Podem ser utilizados como fonte de tenso para o hardware externo, entrada de energia no pino Vin e um pino de reset externo. So 2 nveis de tenso para alimentao externa (5 V e 3,3 V) e GND. Pinos ICSP: Esto disponveis para o caso de se desejar gravar algum programa ou o bootloader da placa Arduino e significa In-System Programmer. Se observado corretamente, pode-se utilizar esses pinos para comunicao SPI da placa, pois os pinos MISO, MOSI e SCK esto conectados nestes pinos. O Arduino tambm possui uma srie de outros elementos que so integrantes bsicos das estruturas das placas. So eles: Boto de Reset: Este boto o reset e est ligado diretamente ao reset do Cristal Oscilador: um componente extremamente importante na placa Conversor RS232 USB: No caso do Arduino UNO, este componente um Adaptador de entrada para fonte: a entrada jack para uma fonte de

microcontrolador e tem por funo facilitar ao usurio a reinicializao da placa. Arduino, pois trata-se do gerador de clock com preciso do microcontrolador. outro microcontrolador (ATMEGA 8). alimentao externa do tipo fonte CA/CC com tenso mxima de 15 V, sendo que o ideal a utilizao de fonte de alimentao com tenso entre 7,5 V e 10 V. possvel se utilizar uma bateria de 9 V com um adaptador para este tipo de entrada.

41

Regulador de tenso: Regulador de tenso do tipo 7805M para regular e Entrada USB: Utilizada para comunicao e programao da placa Arduino.

estabilizar em 5 V uma alimentao de uma fonte de tenso externa. Esta entrada pode ser utilizada como fonte de alimentao, j que a USB do PC fornece uma alimentao de 5 V estvel. Microcontrolador ATMEGA328: Responsvel por praticamente todas as LED de sinalizao: So quatro os LED de sinalizao presentes na placa, o LED de Potncia: Indica que a placa est alimentada; o LED Serial Tx e Rx: Sinalizam que est ocorrendo transmisso de dados e recepo de dados de e para a placa. o Pino 13 LED: o nico LED presente na placa para utilizao via cdigo. ligado ao pino 13 de I/O digital e pode ser utilizado como teste de verificao de defeito da placa. funes e que no caso da placa UNO, trata-se de um ATMEGA328. sendo:

42

4 PROJETOS E IMPLEMENTAES COM O ARDUINO Neste captulo so abordadas vrias potencialidades e funcionalidades da placa Arduino bem como a descrio completa de alguns projetos que utilizam essa placa como principal elemento de controle. Os projetos tambm podem ser implementados com os shields, que so placas adicionais que podem ser agregadas ao Arduino original para aumentar as suas capacidades de processamento, expanso de pinos e funcionalidades. Dentre essas funcionalidades podemos destacar os shields de ethernet, TCP/IP sem fio, motorshield etc. Os shields seguem a mesma filosofia que o conjunto de ferramentas originais: so fceis de montar e baratos de produzir e foram desenvolvidos tendo como o principal foco a funcionalidade do projeto e no na arquitetura do microcontrolador que est sendo utilizado. Os shields so acompanhados de cdigos para servir como interface com o cdigo principal de tal forma que devemos incluir as bibliotecas referentes sua funo para o devido reconhecimento da placa principal do projeto. 4.1 Projetos Elementares Os projetos, com implementaes prticas apresentados nesta seo envolveram acionamentos de dispositivos de sada, leitura das entradas do Arduino, acionamento sequencial e o acionamento de um motor via PWM do Arduino. 4.1.1 Acionamento de Dispositivos de Sada O projeto em questo desenvolvido com o intuito de descrever as ferramentas necessrias para implementar um acionamento de dispositivos de sada pelos pinos da placa Arduino. No presente experimento foi demonstrado o simples acionamento de um LED (Light Emitter Diode), conforme mostrado na Figura 4.1. As placas Arduino so projetadas de forma a facilitar o piscar de um LED com o uso do pino digital 13, como apresentado na Figura 3.2. As novas placas j so fabricadas com o LED instalado e tambm placas existe um resistor de 1 k no

43

pino 13, o que lhe permite conectar o LED diretamente a ele. Para conexo a outro pino digital, deve-se usar um resistor externo.
Figura 4.1 Conexo do LED na placa Arduino

No Quadro 4.1, temos o cdigo para ser compilado e executado na placa Arduino. O cdigo de exemplo muito simples, pois demonstra o acionamento dos pinos de sada da placa em nvel alto e baixo para respectivamente ligar e desligar.
Quadro 4.1 Cdigo de acionamento dos pinos de sada /*LED pisca-pisca: liga e desliga um LED conectado a um pino digital em intervalos de 2 segundos. */ void setup( ) { pinMode(13, OUTPUT); } void loop( ) { digitalWrite(13, HIGH); // liga o LED delay(1000); // aguarda 1 segundo digitalWrite(13, LOW); // desliga o LED delay(1000); // aguarda mais um segundo }

Existem situaes em que necessrio que o dispositivo seja acionado em intervalos peridicos ao mesmo tempo em que outra funo executada (tal como observar o estado de um interruptor). Para tanto no se deve usar a funo delay ( ), seno todo o restante do programa fica paralisado enquanto o LED pisca. Para demonstrar esse exemplo segue um cdigo que demonstra como possvel acionar um dispositivo periodicamente (nesse caso um LED) sem o uso da funo delay ( ). O que o programa faz observar quando foi a ltima vez que o LED foi ligado ou desligado e assim, a cada ciclo de loop ( ), verificar se passou o tempo

44

determinado, se esse tempo tiver passado, o LED ligado caso esteja desligado e vice-versa. O cdigo do Quadro 4.2 deve ser o padro frente funo delay ( ), pois o delay significa que o microcontrolador ir aguardar um determinado intervalo de tempo no executando nenhuma outra atividade, um estado de inrcia que nem sempre interessante para o projeto.
Quadro 4.2 Cdigo pisca LED constintLEDPin = 13; //LED conectado ao pino digital 13 intLEDtate = LOW; longpreviousMillis = 0; longinterval = 1000; void setup() { pinMode(LEDPin, OUTPUT); } // configura o pino digital como sada // ultimo valor do LED // ultimo momento que LED foi atualizado // tempo de transio entre estados (milisegundos)

void loop() { // verifica se o melhor momento para atualizar o LED, ou seja, se a diferena entre o tempo atual e o ltimo tempo que piscamos o LED maior que o tempo de transio entre estados? unsigned long currentMillis = millis(); if(currentMillis - previousMillis> interval) { // ultimo tempo em que o LED piscou previousMillis = currentMillis; // se o LED est apagado acenda-o ou vice-versa: if (LEDtate == LOW) LEDtate = HIGH; else LEDtate = LOW; digitalWrite(LEDPin, LEDtate); } }

45

4.1.2 Acionamento do Arduino via Dispositivo de Entrada O interruptor instantneo um componente que conecta dois pontos de um circuito ao pression-lo. O exemplo a seguir, liga um LED quando pressionado um interruptor. Conforme mostrado na Figura 4.2, verifica-se que foram conectados dois fios placa Arduino. O primeiro vai de um dos terminais do interruptor ao GND. O segundo vai do outro terminal do interruptor at o pino digital 2 do Arduino. Foi ligado um resistor pull-up de 10 k nesse ltimo terminal (um terminal do resistor vai ao terminal do interruptor; o outro vai ao pino de fornecimento de 5 V do Arduino). Quando o interruptor est livre (no pressionado), no h conexo entre seus dois terminais, de forma que o pino do Arduino est conectado aos 5 V (via o resistor pull-up) e ao ler o pino, obtm-se um nvel alto. Quando o interruptor fechado (pressionado), ocorre conexo entre seus terminais, de forma que o pino do Arduino ligado ao terra do circuito e obtm-se um nvel baixo. Nesse caso, observa-se que o pino ainda se mantm conectado aos 5 V, mas o resistor de pulldown com que o pino esteja mais prximo ao terra. O circuito tambm pode ser ligado na lgica reversa com o resistor de pull-up mantendo o pino 2 em nvel baixo. Se por acaso o pino digital for desconectado da montagem, o LED poder piscar de forma irregular, porque no pino o nvel de tenso est flutuando com valores aleatrios, entre nveis alto e baixo. Por isso se utiliza um resistor de pull-up ou pull-down no circuito. O cdigo referente aplicao prtica est presente no Quadro 4.3.
Figura 4.2 Interruptor na placa Arduino

Fonte: Arduino, 2011

46 Quadro 4.3 Cdigo do acionamento de um pino intLEDPin = 13; // escolha o pino para o LED intinPin = 2; // escolha o pino de entrada (para o interruptor) intval = 0; // varivel para ler o estado do interruptor void setup() { pinMode(LEDPin, OUTPUT); // declara-se o LED como sada pinMode(inPin, INPUT); // declara-se o interruptor como entrada } void loop(){ val = digitalRead(inPin); // ler o valor de entrada if (val == HIGH) { // verificar se a entrada HIGH (interruptor livre) digitalWrite(LEDPin, LOW); // desligar LED }else { digitalWrite(LEDPin, HIGH); // ligar LED } }

Em situaes mais crticas, necessita-se de um filtro para evitar rudos do interruptor toda vez que ele acionado, pois trepidaes causam reconhecimento semelhante a mltiplos toques. O cdigo apresentado no Quadro 4.4 realiza esse filtro atravs da funo milis ( ) para acompanhar o momento em que o interruptor pressionado. Esta funo tambm permite o ajuste do tempo de filtragem, em diversos projetos esse tipo de funo interessante, por parametrizar o ajuste de tempo em que funo atuar no sistema a fim de evitar a trepidao.

47 Quadro 4.4 Cdigo do filtro de rudo de uma chave intinPin = 7; intoutPin = 13; // o nmero do pino de entrada // nmero do pino de sada

intstate = HIGH; // estado atual do pino de sada intreading; // estado atual do pino de entrada intprevious = LOW; // estado anterior do pino de entrada // as seguintes variveis so do tipo ''long'' porque o tempo, // medido em milissegundos, // transformar-se- logo em um valor grande demais para um ''int'' long time = 0; // ltimo momento em que o pino de sada foi atualizado longdebounce = 200; // tempo do filtro, aumente se ocorrer irregularidades void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); } void loop() { reading = digitalRead(inPin); // se acabamos de pressionar o interruptor (isto , se a entrada // foi de LOW para HIGH), e esperamos o bastante desde o // ltimo toque de forma a ignorar o rudo... if (reading == HIGH &&previous == LOW &&millis() - time >debounce) { // inverta a sada if (state == HIGH) state = LOW; else state = HIGH; // ...e lembre-se do momento do ltimo toque time = millis(); } digitalWrite(outPin, state); previous = reading; }

48

4.1.3 Acionamentos Sequenciais Neste experimento so utilizados seis LED para apresentar um modo sequencial de acionamento dos dispositivos de sada do Arduino, conforme mostrado na Figura 4.3. Os LED esto conectados do pino 2 ao 7 da placa, com o uso de resistores de 330 . O cdigo de acionamento sequencial apresentado no Quadro 4.5 e atravs dele produzido piscar dos LED em sequncia, um por um, utilizando para tal duas funes: uma para acionar a sada e outra para gerar um retardo.
Figura 4.3 Acionamento sequencial

Quadro 4.5 Cdigo acionamento sequencial int timer = 100; // Quanto maior, mais devagar. int pins[] = { 2, 3, 4, 5, 6, 7 }; // vetor com o nmero dos pinos intnum_pins = 6; // quantidade de LED (tamanho do vetor) void setup(){ int i; for (i = 0; i <num_pins; i++) // elementos do vetor vo de 0 a num_pins - 1 pinMode(pins[i], OUTPUT); // configurar cada pino como sada } void loop(){ int i; for (i = 0; i <num_pins; i++) { // varrer cada pino... digitalWrite(pins[i], HIGH); // ligando-o, delay(timer); // pausando-o, digitalWrite(pins[i], LOW); // e desligando-o. } for (i = num_pins - 1; i >= 0; i--) { digitalWrite(pins[i], HIGH); delay(timer); digitalWrite(pins[i], LOW);}}

49

4.1.4 Acionamento de um motor dc via PWM do Arduino Neste experimento desenvolvido o acionamento de um motor dc de 12 V via PWM de uma placa Arduino, conforme mostrado na Figura 4.4. O controle do motor feito a partir da leitura de um potencimetro, cujo valor de tenso usado como referncia para o ajuste do ciclo de trabalho do PWM. Com base no valor de tenso do potencimetro, o Arduino ajusta o tempo dos nveis alto e baixo do PWM, de modo a controlar o motor dc. Para o desenvolvimento do experimento, foram utilizados os seguintes componentes: 1 placa Arduino Duemilanove 1 MOSFET IRF540 2 Resistores: 1 de 1 k e outro de 10 k 1 Motor DC de 12 V O cdigo utilizado no acionamento do motor dc apresentado no Quadro 4.6.
Figura 4.4 Acionamento de um motor de corrente contnua

50 Figura 4.5 Transistor MOSFET

Quadro 4.6 Cdigo do acionamento

intsensorPin = A0; intsensorValue = 0; void setup() { pinMode(9, OUTPUT); Serial.begin(9600);} void loop() { sensorValue = analogRead(sensorPin); analogWrite(9,sensorValue/4); Serial.println(sensorValue/4); delay(10);}

O experimento desenvolvido demonstrou a potencialidade do Arduino ao controlar um motor de corrente contnua via modulao PWM, que um tipo de acionamento muito comum em automao e controle. O Arduino UNO possui no total 12 pinos de I/O digitais, cujos valores de tenso so 0 V ou 5 V. As portas PWM esto disponveis em seis canais, que so as portas 3, 5, 6, 9, 10 e 11. Para o experimento em questo, foi utilizado o pino 9 para gatilhar o MOSFET que comuta para o funcionamento do motor dc.

51

4.2 Projeto do Controle Remoto IR O projeto do controle remoto IR precisou de um sensor receptor infravermelho. O receptor utilizado foi o IRM3638, apresentado na Figura 4.6, que foi conectado placa Arduino como forma de receber o sinal infravermelho. A ideia bsica do projeto enviar comandos de um controle remoto para o Arduino atravs do receptor IR com os valores dos acionamentos sendo apresentados em um display de LCD 16 x 2. 4.2.1 Teoria do Controle Infra Vermelho A comunicao por um sinal infra-vermelho foi desenvolvida ao longo dos anos, sendo hoje a forma mais barata para controlar remotamente um dispositivo. Quase todos os equipamentos de udio e vdeo podem ser controlados dessa maneira. O uso dos componentes que so utilizados para implementar sistemas de controle infra-vermelho ficou generalizado, de modo que o preo desses A seguir apresentado o modelo de comunicao infravermelha bem como exposio do protocolo de comunicao que foi utilizado para estabelecer as regras de comunicao do controle IR com o Arduino. No objeto desse trabalho discutir sobre os protocolos de comunicao via sinal infra-vermelho, mas a prxima subseo destina-se exclusivamente ao tratamento do protocolo NEC, que viabiliza a comunicao desses dispositivos.
Figura 4.6 Receptor infravermelho

dispositivos cada vez mais acessvel ao desenvolvedor.

52

4.2.2 Protocolo NEC Caractersticas Tcnicas O protocolo NEC um formato de protocolo japons utilizado em produtos como os da Sanyo mais antigos. Tem como caracterstica um sinal de 16 bits, sendo 8 bits de endereo e 8 bits de comando. Para diminuio de erros, so transmitidos duas vezes na mensagem, com uma portadora de 38 kHz. Alm disso, existe diferenciao de tempo para a interpretao dos nveis lgicos positivo e negativo, sendo 1,12 ms para o nvel 0 e 2,25 ms para o nvel 1. A indicao de um bit, 0 ou 1, sempre com o envio de um trem de pulsos de durao de 560 s como mostrados na Figura 4.7:
Figura 4.7 Pulsos NEC

Fonte: SB-PROJECTS, 2006

Como exemplo de uma mensagem gerada por esse protocolo tem-se a Figura 4.8 com o endereo $59 e comando $16 iniciando por um bit de 9 ms AGC (Controle de Ganho Automtico), seguido por um espao de 4,5 ms.
Figura 4.8 Endereo $59 comando 16 no NEC

Fonte: SB-PROJECTS, 2006

O grande diferencial desse protocolo a utilizao de um bit especfico para repeties de 9 ms AGC, espaado por 2,25 ms e novo nvel de tenso por 560 s e repetido a cada 110 ms, como mostrado na Figura 4.9:

53 Figura 4.9 Repetio de sinal NEC

Fonte: SB-PROJECTS, 2006

No Quadro 4.7, so apresentados os cdigos de VCR Fisher 530.


Quadro 4.7 Cdigos e endereos de VCR com NEC

NEC Message $68-$00 $68-$01 $68-$02 $68-$03 $68-$04 $68-$05 $68-$06 $68-$07 $68-$08 $68-$09 $68-$0A $68-$0B $68-$0C $68-$0E

Key Function Play Rec AudioDub Frame Slow Quick Cue Review FF Rew Stop Pause/Still Upkey Down key

Fonte: SB-PROJECTS, 2006

4.2.3 Projeto com acionamento de display de cristal via controle remoto O projeto desenvolvido com a placa Arduino para receber sinais IR, foi concebido com a iteno de demonstrar a chegada dos dados ao arduino via controle remoto e o receptor IRM3638. Para tanto foi utilizado: 1 Controle IR 1 Receptor IR 1 Display LCD 16 x 2 1 Arduino Duemilanove 1 LED 1 Resistor de 10 k

54 Figura 4.10 Montagem do Arduino com o display de cristal lquido

Figura 4.11 Conexo do receptor infravermelho com o Arduino.

55 Figura 4.12 Controle infravermelho utilizado no projeto

Fonte: SB-PROJECTS, 2006

O presente projeto tem a finalidade de apresentar como acontece o envio de dados do controle IR para a placa Arduino passando pelo receptor IR. Os valores numricos so apresentados na tela do display de LCD, conforme mostrado nas Figuras 4.10, 4.11 e 4.12. O que percebido com esse projeto a relativa facilidade para implementao de envio de dados via infravermelho, pois pode-se enviar e receber comandos para fazer qualquer tipo de acionamento e que possibilita uma gama muito grande de possibilidades para a mecatrnica, com o acionamento a distancia de diversos equipamentos, bastando apenas adaptar o cdigo realidade do projeto a ser desenvolvido. O cdigo para acionamento do controle IR apresentado no Quadro 4.8.

56 Quadro 4.8 Cdigo de acionamento do controle IR #include <LiquidCrystal.h> #define IR_IN 8 LiquidCrystallcd(12, 11, 5, 4, 3, 2); intPulse_Width=0; intir_code=0x00; charadrL_code=0x00; charadrH_code=0x00; void timer1_init(void) { TCCR1A = 0X00; TCCR1B = 0X05; TCCR1C = 0X00; TCNT1 = 0X00; TIMSK1 = 0X00; } voidremote_deal(void) { lcd.clear(); delay(1); lcd.setCursor(0,0); lcd.print(ir_code,HEX); lcd.setCursor(0,1); lcd.print(adrL_code,HEX); } charlogic_value() { TCNT1 = 0X00; while(!(digitalRead(8))); Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=7&&Pulse_Width<=10)//560us { while(digitalRead(8)); Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=7&&Pulse_Width<=10)// 560us return 0; else if(Pulse_Width>=25&&Pulse_Width<=27) // 1.7ms return 1; } return -1; } voidpulse_deal() { int i; int j; ir_code=0x00; adrL_code=0x00; adrH_code=0x00; for(i = 0 ; i < 16; i++) {if(logic_value() == 1) ir_code |= (1<<i); } for(i = 0 ; i < 8; i++) {if(logic_value() == 1) adrL_code |= (1<<i);

57

} for(j = 0 ; j < 8; j++) {if(logic_value() == 1) adrH_code |= (1<<j); }} voidremote_decode(void) { TCNT1=0X00; while(digitalRead(8)) { if(TCNT1>=1563) { ir_code=0x00ff; adrL_code=0x00; adrH_code=0x00; return; } } TCNT1=0X00; while(!(digitalRead(8))); Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=140&&Pulse_Width<=141)//9ms { while(digitalRead(8)); Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=68&&Pulse_Width<=72)//4.5ms { pulse_deal(); return; } else if(Pulse_Width>=34&&Pulse_Width<=36)//2.25ms { while(!(digitalRead(8))) Pulse_Width=TCNT1; TCNT1=0; if(Pulse_Width>=7&&Pulse_Width<=10)//560us { return; } } }} void setup() { unsigned char i; pinMode(IR_IN,INPUT); lcd.begin(16, 2); } void loop() { timer1_init(); while(1) {

58

5 ARDUINO E A CONEXO COM A INTERNET Os sistemas de comunicao digital de dados, em especial a Internet, vem se tornando um meio cada vez mais essencial para o homem moderno, aumentando significativamente a eficincia daqueles que utilizam seus recursos. Com acessos dedicados e com a possibilidade de distribuio desse recurso em grande escala por um baixo custo, a utilizao da internet difundiu-se nos meios residenciais, industriais e consequentemente no meio empresarial.
Atualmente a Internet tem seu emprego em larga escala nos computadores pessoais que dispem de sistemas operacionais com todo o protocolo embutido em seu kernel, cabendo aos usurios e programadores apenas utilizar esses recursos. Esse sistema e ainda ser por muitos anos o carro-chefe das aplicaes da grande rede. Porm, com a evoluo dos microcontroladores, uma nova gerao de aplicaes est se formando, so as aplicaes embedded (embarcadas) para a Internet. (MOKARZEL, 2004, p.11)

Essa nova tecnologia possibilita a construo de hardware clientes e servidores de Internet a um custo muito baixo. possvel imaginar uma gama de produtos que pode ser criada ou aprimorada com o emprego dessa nova ferramenta. Desde brinquedos e aplicaes domsticas at o monitoramento e controle de equipamentos na indstria, uma nova gerao de telefonia IP de baixo custo e equipamentos interativos monitorados pelo celular. Hoje no s computadores, como outros dispositivos baseados em microprocessadores podem compartilhar uma rede local. Se antes um computador compartilhava uma impressora na rede local, hoje a prpria impressora uma parte da rede com uma interface e um endereo de IP prprio. Alm do mais, temos PDAs (computadores de mo), celulares, netbooks e vrias outras criaes embarcadas com tecnologia baseada em microcontroladores de uso geral compartilhando informaes na rede. O futuro dos eletrodomsticos est na evoluo e integrao de todos esses sistemas na rede. O Arduino oferece uma grande facilidade de colocar os dispositivos nessa rede de comunicao uma vez que existe um sensorshield que funciona unica e exclusivamente para conectar a plataforma Arduino com a Internet.

59

5.1 Protocolo de rede TCP/IP e Ethernet O TCP/IP um conjunto de protocolos usado em redes na Internet. Um protocolo um conjunto de normas que dois ou mais computadores devem usar para estabelecerem uma comunicao entre si. Fala-se em conjunto de protocolos para o TCP/IP, pois vrias especificaes esto envolvidas. Tecnicamente, ele tratado como uma pilha de protocolos de comunicao. De acordo com Kurose 2006, a Ethernet praticamente tomou conta do mercado de redes com fio. Na dcada de 80 e incio da dcada de 90, ela enfrentou muitos desafios de outras tecnologias LAN, incluindo tokeng ring, FDDI e ATM. Algumas dessas outras tecnologias conseguiram conquistar uma parte do mercado de LANs durante alguns anos. Mas, desde sua inveno, em meados da dcada de 1970, a Ethernet continuou a se desenvolver e crescer e conservou a sua posio dominante no mercado. Hoje, ela tem predominado como tecnologia de LAN com fio e provvel que continue assim no futuro prximo. Kurose 2006 compara a Ethernet que est sendo usada para a rede local com o que a Internet tem sido para a rede global.
A Ethernet a camada de sinalizao de baixo nvel bsico que fornece a capacidade de transmisso de mensagens fsicas. Endereos de origem e de destino para estas mensagens so identificadas por um Media Access Control (MAC). Seu esboo Arduino define um valor de endereo MAC, que deve ser exclusivo em sua rede. (MARGOLIS, 2011, p. 451)

Com base nessa potencialidade da Ethernet, possvel colocar sistemas embarcados funcionando como webserver robustos que podem trabalhar em tempo real em aplicaes que exigem um nvel de criticidade elevado.

60

5.2 Camadas do Protocolo Nesta seo sero descritos os modelos de referncias de camadas ISO/OSI, as funes das camadas internet e as camadas de transporte TCP/IP. 5.2.1 Modelo ISO/OSI x Internet O Modelo OSI uma referncia de camadas para o funcionamento da rede. Nele a rede dividida em sete camadas bem definidas, cada uma com sua funo prpria, para facilitar o desenvolvimento da rede, conforme apresentado na Figura 5.1. Cada camada um grupo de funes similares que fornece servios camada superior e recebe servios da camada inferior. As sete camadas desse modelo so: Camada de Aplicao, Apresentao, Seo, Transporte, Rede, Link de Dados e Fsica. Existe uma simplificao para o Modelo de camadas Internet, no qual as camadas de aplicao, traduo e seo so agrupadas apenas em aplicao e as camadas link dados e fsica agrupadas na camada de rede.
Figura 5.1 Modelos ISO/OSI

Fonte: MOKARZEL, 2004

comum descrever a pilha de um protocolo como um conjunto de camadas, onde cada uma possui sua prpria funo. Cada camada depende da

61

camada inferior e fornecedora para a camada superior, conforme a Figura 5.1. Mokarzel 2004 aponta como vantagem desse sistema a possibilidade de redesenhar uma das camadas mantendo-se as demais intactas. Por exemplo, ao trocar uma placa de rede que utiliza cabo UTP por um sistema sem fio, no necessrio nenhuma adaptao no navegador de pgina web. A Internet baseada em uma simplificao de quatro camadas da arquitetura ISO/OSI de sete camadas. 5.2.2 Funes das Camadas Internet As camadas do protocolo Internet possuem as seguintes funes, relacionadas na Tabela 5.1:
Tabela 5.1 Funes das camadas do protocolo internet Camada Camada de Aplicao Camada Transporte Camada Internet Camada Rede Funo Contm um conjunto de protocolos distintos que provem os diversos servios da Internet. Possibilita a comunicao entre os pontos da rede. Roteia e entrega os datagramas entre os ns da rede. Implementa a transmisso de pacotes. Fonte: MOKARZEL, 2004 Exemplo HTTP, FTP e Email (SMTP/POP) TCP e UDP IP, ICMP e ARP Ethernet (802.3), PPP e X-25

A camada de aplicao onde residem aplicaes de rede e seus protocolos. Ela inclui muitos protocolos, tais como o protocolo HTTP (que prov requisio e transferncia de documentos pela Web), o SMTP (que prov transferncia de mensagens de correio eletrnico) e o FTP (que prov a transferncia de arquivos entre dois sistemas finais). Verifica-se que certas funes de rede, como a traduo de nomes fceis de entender dados a sistemas finais da Internet (por exemplo, ufma.br) para um endereo de rede de 32 bits, tambm so executadas com a ajuda de um protocolo de camada de aplicao, no caso, o sistema de nomes de domnio (domainname system - DNS). A camada de transporte da Internet transporta mensagens da camada de aplicao entre os lados do cliente e servidor de uma aplicao. H dois protocolos de transporte na Internet: TCP e UDP, e qualquer um deles pode levar

62

mensagens de camada de aplicao. O TCP prov servios orientados para conexo para suas aplicaes. Alguns desses servios so a entrega garantida de mensagens da camada de aplicao ao destino e controle de fluxo (isto , compatibilizao das velocidades remetente/receptor). O TCP tambm fragmenta mensagens longas em segmentos mais curtos e prov mecanismo de controle de congestionamento, de modo que uma origem regula sua velocidade de transmisso quando a rede est congestionada. O protocolo UDP prov servio no orientado para conexo a suas aplicaes. A camada de Internet responsvel pela movimentao, de uma mquina para outra, de pacotes de camada de rede conhecidos como datagramas. O protocolo de camada de transporte da Internet (TCP ou UDP) em uma mquina de origem passa um segmento de camada de transporte e um endereo de destino camada de rede, exatamente como voc passaria ao servio de correios uma carta como um endereo de destinatrio. A camada de rede ento prov o servio de entrega do segmento camada de transporte na mquina destinatria. A camada de rede da Internet tem dois componentes principais: IP (Internet Protocol Protocolo Internet) e protocolo de roteamento. O IP define os campos no datagrama e o modo como os sistemas finais e os roteadores agem nesses campos. Existe um nico protocolo IP e todos os componentes da Internet que tm uma camada de rede devem executar esse protocolo. O protocolo de roteamento determina as rotas que os datagramas seguem da origem ao destino. A Internet tem muitos protocolos de roteamento.
A Internet uma rede de redes e, dentro de uma delas, o administrador pode executar qualquer protocolo de roteamento que queira. Embora a camada de rede contenha o protocolo IP e tambm numerosos protocolos de roteamento, ela quase sempre denominada simplesmente camada IP, refletindo o fato de que ela o elemento fundamental que mantm a integridade da Internet. (KUROSE, 2006, p.37)

A camada de Interface de rede a responsvel por lidar diretamente com o meio fsico de envio dos dados, como cabos (de cobre ou fibras pticas) ou ondas de rdio. Desse modo, essa camada trata diretamente das caractersticas eltricas e mecnicas, interfaces e switches, enfim, trata do meio por onde os dados passam.

63

Ela responsvel por receber os datagramas que vm da camada de Internet e prepar-los para serem enviados para o meio de transmisso. interessante constatar que o meio de transmisso diverso, existindo vrios: pode ser por sinais eltricos (em redes que utilizam cabos do tipo par tranado), sinais luminosos (no caso de redes que utilizam fibras pticas) ou at ondas de rdio (redes wireless), s para citar como exemplos. Alm disso, a interface de rede responsvel por receber os dados pela rede (ou seja, enviados pelo meio de transmisso) e garantir que eles cheguem via Internet. Os tipos de protocolos usados para garantir o envio dos dados no meio de transmisso dependem da tecnologia de interconexo utilizada na rede. No momento, a mais usada e conhecida so as redes Ethernet. 5.2.3 Camada de Transporte TCP/IP A principal funo da camada de transporte TCP dar robustez ao sistema, garantindo que mensagens enviadas sejam recebidas. Para isso o TCP possui as caractersticas descritas na Tabela 5.2.
Tabela 5.2 Caractersticas da comunicao TCP/IP

Caractersticas

Descrio
Para a camada de aplicao, o TCP capaz de transferir um fluxo contnuo de octetos de uma estao a outra, empacotando esses octetos em grupos que so transportados pela camada internet. O TCP decide quando e como enviar, se deve separar em blocos ou retransmitir algum pacote. O TCP cuida de recuperar dados que foram danificados, perdidos, duplicados ou recebidos fora de ordem, conferindo robustez ao meio de comunicao. Isso conseguido pelo sequenciamento dos pacotes e envio de confirmao de recebimento (ACK). O TCP prov os meios para que o receptor possa controlar o fluxo de envio. Esse controle feito atravs do retorno de uma janela em cada mensagem de ACK, indicando o nmero de octetos que ainda podem receber alm do ltimo aceito.

Transferncia bsica de dados

Robustez

Controle de Fluxo

64 Para permitir que uma nica estao use diversas comunicaes TCP simultneas, o protocolo fornece uma numerao de porta, que combinada com a rede e com o endereo IP, forma um socket. Cada socket nico, desta forma mltiplas conexes simultneas podem ser geradas. Os mecanismos de robustez e controle de fluxo descritos anteriormente obrigam o TCP a inicializar e manter certas informaes sobre cada fluxo de dados. A combinao dessas informaes, que inclui o socket, o nmero da sequncia e o tamanho da janela, chama-se conexo lgica. O usurio do TCP deve indicar a segurana e a precedncia da sua comunicao. Fonte: Mokarzel, 2004

Multiplexao

Conexo Lgica

Segurana

5.3 Arduino Ethernet Shield Trata-se de um mdulo capaz de abrir ligaes com outros servidores da Internet ou ento, funcionar ele prprio como um mini servidor destinado a pginas web, no exigindo mais nenhum equipamento para fazer este tipo de atividade. O Arduino Ethernet Shield, baseia-se num chip w 5100 que capaz de fornecer 4 sockets independentes e simultneo.
Figura 5.2 Arduino Ethernet Shield

Fonte: Arduino, 2011

Neste momento do trabalho, ser apresentado a maneira como o Arduino conecta-se com os dados a serem compartilhados em rede, seja ela local ou mesmo a internet.

65

Existe a possibilidade de desenvolvimento de vrios aplicativos que demonstram como construir e utilizar clientes e servidores web bem como a interao de protocolos de comunicao mais comuns da Internet com o Arduino. A Internet permite que um cliente (navegador web, por exemplo) solicite informaes de um servidor (um servidor web ou outro prestador de servio Internet). Dentre as diversas possibilidades, o Arduino pode funcionar como servidor que fornece informaes aos clientes utilizando protocolos de Internet podendo agir como um webserver criando pginas para exibio em navegadores web. O Arduino Ethernet suporta uma grande variedade de mtodos (protocolos) que permitem a sua adaptao para funcionar como um cliente ou servidor de Internet. A biblioteca Ethernet usa o conjunto de protocolos padro da Internet onde a maior parte da linguagem de baixo nvel est oculta. 5.4 Projeto Arduino Ethernet O Ethernet Shield tem uma entrada para o cabo RJ 45 (cabo de rede), possibilitando ao Arduino interagir em uma rede pessoal ou at mesmo com a internet, dessa forma cria-se uma vasta gama de atividades, tais como interagir com o Arduino remotamente. A proposta de trabalho de desenvolver um projeto onde o Arduino emula um servidor web, onde atravs de uma pgina HTML (uma pgina internet simples) enviado o comando, para os LED serem ligados ou desligados e assim enviar diretamente para o servidor as informaes de quando ligado ou desligado. Os materiais utilizados para o projeto foram: 1 placa Arduino 1 Ethernet Shield 1 protoboard 1 roteador Linksys WRT545 No presente experimento, o Arduino vai emular um servidor web e depois receber algum comando para ligar ou desligar os LED que esto conectados na placa.

66

O Ethernet Shield foi conectado placa Arduino e para conectar os LED no Arduino foram utilizados os pinos 4, 5, 6 e7. Os botes foram conectados aos pinos 8 e 9, conforme a Figura 5.3.
Figura 5.3 Hardware de acionamento

Em seguida foi conectado o cabo RJ45 do Ethernet Shield no roteador. Outra pea importante no funcionamento do projeto o roteador, neste trabalho um Linksys WRT54G, um roteador wireless com 4 portas LAN. Precisou-se para esse caso utilizarmos a porta 8246 e IP local. A preferncia por usar essa porta, d-se pelo fato de a porta 80 ou 8080 bloquear com facilidade. O programa Arduino baseado no exemplo webserver.pde com algumas modificaes. O cdigo HTML armazenado na memria do programa, de modo a se obter RAM suficiente para armazenar outros dados. Para colocar o Arduino em rede, foi atribudo o endereo de IP local 192.168.1.134. Dessa forma, os testes para obteno de respostas via ethernet ficou mais canalizado. Esta configurao foi feita no prprio roteador conforme mostrado na Figura 5.4.

67 Figura 5.4 Configurao do roteador

Observando a Figura 5.5, pode ser percebida a proposta do trabalho de forma mais compreensiva, pois na mesma encontrado o navegador com o script HTML que est na memria de programa do microcontrolador utilizado no Arduino. O script apresentado no Quadro 5.1, quando executado, mostra no navegador web os comandos que devem ser enviados para o Arduino conforme ordem de acionamento dos mesmos dentro da respectiva sequncia sugerida.
Figura 5.5 Pgina Web Arduino

68 Quadro 5.1 Cdigo fonte para o WebServer #include <LED.h> #include <Ethernet.h> #include <SPI.h> #include <avr/pgmspace.h> prog_char string_0[] PROGMEM = "<html><body><h2>Controle de LED pela Internet</h2><font size= 4><form method=GET>"; prog_char string_1[] PROGMEM = "<br><input type=submit name=b1 value=LED1>"; prog_char string_2[] PROGMEM = "<br><input type=submit name=b2 value=LED2>"; prog_char string_3[] PROGMEM = "<br><input type=submit name=b3 value=LED3>"; prog_char string_4[] PROGMEM = "<br><input type=submit name=b4 value=LED4>"; prog_char string_5[] PROGMEM = "<br>Insert your name here:"; prog_char string_6[] PROGMEM = "<input name=msg value=no_name MAXLENGTH=20>"; prog_char string_7[] PROGMEM = "</form></body></html>"; prog_char string_8[] PROGMEM = "Ligada (ON)"; prog_char string_9[] PROGMEM = "Desligada (OFF)"; prog_char string_10[] PROGMEM = "<meta http-equiv=refresh content=30 > "; //for auto refresh PROGMEM const char *string_table[] = { string_0, string_1, string_2, string_3, string_4, string_5, string_6, string_7, string_8, string_9, string_10 }; char buffer[85]; // change "string_table" name to suit

// make sure this is large enough for the largest string it must hold

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byteip[] = { 192, 168, 1, 134 }; byte gateway[] = { 192, 168, 1, 1 }; byte subnet[] = { 255, 255, 255, 0 }; String inString = String(35); Server server(8246); LEDLED1 = LED(7); LEDLED2 = LED(6); LEDLED3 = LED(5); LEDLED4 = LED(4); String msg=""; int tam=0; int st1=9,st2=9,st3=9,st4=9; void setup() { Serial.begin(9600);

69

Ethernet.begin(mac, ip,gateway,subnet); server.begin(); Serial.println("Serial READY"); Serial.println("Ethernet READY"); Serial.println("Server READY"); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,INPUT); pinMode(9,INPUT); } void loop() { Client client = server.available(); intLED=0; if (client) { booleancurrent_line_is_blank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (inString.length() < 35) { inString.concat(c); } if (c == '\n' &&current_line_is_blank) { if(inString.indexOf("b1")>0){ LED1.toggle(); if(LED1.getState()) st1=8; else st1=9; LED=1; } if(inString.indexOf("b2")>0){ LED2.toggle(); if(LED2.getState()) st2=8; else st2=9; LED=2; } if(inString.indexOf("b3")>0){ LED3.toggle(); if(LED3.getState()) st3=8; else st3=9; LED=3; } if(inString.indexOf("b4")>0){ LED4.toggle(); if(LED4.getState()) st4=8; else st4=9;

70

LED=4; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); strcpy_P(buffer, (char*)pgm_read_word(&(string_table[0]))); // Necessary casts and dereferencing, just copy. client.println( buffer ); for (int i = 1; i < 8; i++) { strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy. client.println( buffer ); switch(i){ case 1: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[st1]))); client.println( buffer ); break; case 2: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[st2]))); client.println( buffer ); break; case 3: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[st3]))); client.println( buffer ); break; case 4: strcpy_P(buffer, (char*)pgm_read_word(&(string_table[st4]))); client.println( buffer ); break; } delay(30); } if(digitalRead(8)==HIGH){ client.println("<br>Botao 1, ON"); }else{ client.println("<br>Botao 1, OFF"); } if(digitalRead(9)==HIGH){ client.println("<br>Botao 2, ON"); }else{ client.println("<br>Botao 2, OFF"); } //strcpy_P(buffer, (char*)pgm_read_word(&(string_table[10]))); client.println( buffer ); break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line

current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); inString = ""; client.stop(); } }

71

//strcpy_P(buffer, (char*)pgm_read_word(&(string_table[10]))); client.println( buffer ); break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); inString = ""; client.stop(); } }

Este experimento funciona com o envio de dados para o webserver Arduino. Para a utilizao da aplicao, necessrio o acesso placa via IP de rede que foi atribudo ao dispositivo. Este acesso realizado atravs do navegador de internet que logo retornar as mensagens da pgina web conforme a Figura 5.5. A partir desse mtodo, percebemos a potencialidade de aplicao do Arduino, podendo expandir para projetos mais complexos bem como monitoramento de sensores a distncia e acionamento de dispositivos via web.

72

6 CONCLUSES A motivao deste trabalho foi provocada pela grande aplicabilidade da placa Arduino e pela pouca literatura existente dentro do mbito acadmico sobre esse tema. A tecnologia relativamente nova e desde o seu lanamento est em franco desenvolvimento e a cada dia ganha mais adeptos tendo em vista a facilidade e o grande apelo mercadolgico que traz. Trata-se de um novo conceito de hardware aberto possibilitando aos usurios de todo mundo aumentarem as funcionalidades e potencialidades da plataforma bem como agregar inmeras possibilidades de funcionamento de maneira bem rpida. Por isso, este trabalho apresentou uma proposta de servir como material didtico de suporte a projetistas entre o que atualmente tem-se de bibliografia sobre o Arduino e o que pode-se fazer em termos prticos para otimizar as potencialidades deste sistema. Vrios experimentos foram realizados em laboratrio com o intuito de testar e/ou adaptar as funcionalidades das placas e otimizar processos que antes, com os microcontroladores e placas convencionais, despendiam muita energia e tempo dos projetistas. Os experimentos desenvolvidos nesse trabalho foram testados e validados no laboratrio. Dentre as diversas possibilidades de projeto com o Arduino, foi destacado ao longo do trabalho alguns exemplos que foram implementados utilizando-se pouco hardware, mas que trazem resultados voltados para aplicaes do dia a dia na rea de automao de sistemas, tais como acionamento infravermelho e envio de dados pela ethernet utilizando a placa como um webserver, etc. Dentre os diversos experimentos realizados no laboratrio o trabalho apresentou o acionamento de portas, que mostrou como feita a configurao das portas do Arduino bem como o seu ajuste para recebimento e envio de dados. Em seguida, foi demonstrado o funcionamento do sistema de temporizao. Os experimentos mais complexos foram os acionamentos via controle infravermelho e o webserver. O primeiro mostrou como acionar dispositivos sem fio e o segundo apresentou como colocar o Arduino na Internet, fato que consolida essa tecnologia como objetiva e prtica, tendo em vista que precisar de apenas uma placa adicional para servir de interface com a placa principal para o Arduino comunicar-se com a rede mundial de computadores.

73

O estudo da tecnologia Arduino muito abrangente e tambm possui inmeras possibilidades de projetos tcnico e cientficos. Este trabalho mostrou vrias oportunidades de utilizar as funcionalidades do Arduino da maneira mais prtica possvel, mostrando tambm o que existe de tecnologia j desenvolvida e implementada para o Arduino. Para trabalhos futuros fica a sugesto de desenvolvimento de monitoramento e controles de processos atravs da web com o uso de placas Arduino, de tal forma que pode-se destacar necessidades de controle e monitoramento de variveis importantes de um sistema. Outra importante corrente de trabalho est no desenvolvimento de aplicaes que coloquem o Arduino nas redes sociais. Nesse trabalho sugerimos o envio de dados pelo Twitter. Tambm foram confeccionados vrios guias de experimentos que servem para orientar futuros trabalhos acadmicos e treinamentos sobre a tecnologia Arduino. Tendo em vista a grande quantidade de possibilidades que o Arduino traz para o mundo da eletrnica, destacam-se a partir dos resultados obtidos nesse trabalho, a gama de aplicaes na rea da mecatrnica e da automao, uma vez que o Arduino oferece rapidez e versatilidade na construo de inmeras aplicaes, dentre as quais merecem destaque os acionamentos a distncia e a comunicao via Internet.

74

REFERNCIAS ARDUINO. Disponvel em: <http://www.arduino.cc>. Acesso em: 12/10/2011. Associao Brasileira de Normas Tcnicas (ABNT) NBR14724. 3. ed. Rio de Janeiro: ABNT, 2011 ATMEL Technology. Data Sheet ATMEL328. USA, 2010. EDSON Roberto de Pieri. Curso de Robtica Mvel, Santa Catarina, Florianpolis 2002. EVANS, Brian W. Arduino Program Notebook. 1 ed. San Francisco: EUA, 2008. Introduo ao Arduino. PROGRAMAR: A Revista Portuguesa de Programao, Lisboa, 2008, n. 17, p. 40 dez./2008 JONES, Joseph L.; Flynn, ANITA M. Mobile Robots Inspiration to Implementation. Wellesley, Massachusetts: A. K. Peters Ltd., 1993, 345 p. KUROSE, James F. / KEITH, W. Ross. Redes de computadores e a internet: uma abordagem top-down. 3. ed. So Paulo: Pearson Addison Wesley, 2006. LIMA, Charles Borges de. Tcnicas de projetos eletrnicos microcontroladores AVR. 1. ed. Florianpolis, Ed. do Autor, 2010. LTO DMS, Data Sheet: Power MOSFET IRF540. USA, 2003. MARGOLIS, Michael. Arduino cookbook. United States of America: ORelly, 2011. MCCOMB, Gordon. Constructing Robot Bases. New York. McGraw-Hill. 2004. p. 350 MELLIS, David. REVISTA INFO. O sucesso do arduino. Rio de Janeiro, ed. Abril, n. 217, p.21 mar./2009 MICROCHIP Technology. Data Sheet PIC16F977A. USA, 2001. MOKARZEL, Marcos Perez / CARNEIRO, Karina Perez Mokarzel. Internet Embedded: TCP/IP para microcontroladores. 1. ed. So Paulo: rica, 2004. MORIMOTO, Carlos E. Hardware, o guia definitivo. 1 ed. So Paulo: GDH Press, 2007. PEREIRA, Fbio. Microcontrolador PIC18 Detalhado: Hardware e Software. 1. ed. So Paulo: Ed. rica, 2010. ROBTICA EDUCACIONAL: INICIANDO EM MICROCRONTROLADORES, 2011. Disponvel em: <http://www..robotic.com.br/novo_umr.pdf>. Acesso em: 10/11/2011. com os

75

ROSA, Felipe dos Santos. Plataforma de prottipos eletrnicos arduino: teoria, projetos e aplicao. 1. ed. Florianpolis: Clube de Autores, 2011. SANDI, Franz A. Sistema de Navegao e Guiagem de Robs Mveis Autnomos. SBA Controle e Automao, 1998. SB-PROJECTS. Holanda. 2001. Disponvel <http://www.sbprojects.com/knowLEDge/ir/nec.php>. Acesso em: 12/10/2011. em:

76

ANEXOS

77

ANEXO A Experimento 1: ACIONAMENTO DE LED DE FORMA SEQUENCIAL

1.

Objetivos: O experimento em questo tem como objetivo descrever as ferramentas

necessrias para implementar um projeto bsico de acionamento de dispositivos de sada pelos pinos da placa Arduino, no presente experimento ser demonstrado o simples acionamento de um LED (Light Emitter Diode Diodo Emissor de Luz). As placas Arduino so projetadas de forma a facilitar o piscar de um LED com o uso do pino digital 13. As placas atuais so fabricadas com o LED j instalado. Em outras placas existe um resistor de 1 k no pino 13, o que lhe permite conectar o LED diretamente a ela. Para conexo a outro pino digital, deve-se usar um resistor externo. Os experimentos apresentados so desenvolvidos a partir do Arduino Duemilanove, dispositivos discretos (LED, displays, etc) e um protoboard. 2. Introduo: A placa Arduino uma plataforma de computao fsica composta por sistemas digitais ligados a sensores e atuadores, permitindo o desenvolvimento de outros sistemas que percebam a realidade e respondam com aes fsicas, baseada em uma simples placa de Entrada/Sada microcontrolada e desenvolvida sobre uma biblioteca que simplifica a escrita da programao em C/C++. 3. Programao em Arduino Um microcontrolador (tambm denominado MCU) um computador em um chip, que contm processador, memria e perifricos de entrada/sada. um microprocessador que pode ser programado para funes especficas, em contraste com outros microprocessadores de propsito geral. Ele pode ser embarcado no interior de algum outro dispositivo, em nosso caso a placa Arduino, para que possam controlar suas funes ou aes, conforme mostrado na Figura A.1.

78 Figura A.1 Diagrama bsico

4. Software Arduino O Arduino IDE (Ambiente Integrado de Desenvolvimento) um programa multitarefa desenvolvido em JAVA, utilizado para criar, salvar, editar e compilar os programas e carreg-los na placa Arduino, alm de apresentar outros recursos como gravao do bootloader (arquivo de inicializao rpida) em um microcontrolador ATMEGA, um monitor simples, entre outros, cujo cdigo bsico apresentado na tela da Figura A.2.
Figura A.2 Arduino software

5. 5.1

Atividades Prticas Experimento Sequencial de LED Este experimento apresenta a utilizao de seis LED para representar de

modo sequencial o acionamento dos dispositivos de sada do Arduino. Os LED esto conectados aos pinos de 2 11 da placa, com o uso de resistores de 150 , conforme mostrado na Figura A.3.

79

O objetivo do cdigo desenvolvido o piscar dos LED em sequncia, um por um, utilizando para tanto duas funes: uma para acionar a sada e outra para gerar um retardo.
Figura A.3 Experimento sequencial

6.

Relatrio O relatrio deve conter: Introduo Terica da placa Arduino; Desenvolvimento do Projeto com as devidas inferncias a respeito dos cdigos criados; Concluses sobre o experimento realizado; Referncias. O programa deve ser entregue ao professor. Com comentrios ao longo

do algoritmo.

80

ANEXO B Experimento 2: ACIONAMENTO DE UM DISPLAY DE 7 SEGMENTOS

1.

Objetivos: O experimento em questo tem como objetivo descrever as ferramentas

necessrias para implementar um projeto bsico de acionamento de dispositivos de sada pelos pinos da placa Arduino, demonstrar o acionamento do display de 7 segmentos. O experimento apresentado pode ser desenvolvido a partir do Arduino Duemilanove, dispositivos discretos (LED, displays, etc) e um protoboard. 2. a. Introduo: Contagem com Display 7 Segmentos O programa do display de 7 (sete) segmentos tem por objetivo utilizar o display ligado do pino 5 ao 12 para fazer uma contagem de 0 a 9, com cada nmero sendo exibido durante 1 segundo e reiniciando a contagem at que seja gerada uma interrupo externa. O cdigo do Quadro B.1 tem por objetivo realizar um teste de um display de 7 segmentos com um ponto decimal ligado ao Arduino desde o pino 5 ao 12, conforme a Figura B.1. Neste caso, todos os segmentos so ligados e aps um segundo, todos desligam-se um de cada vez. Como os segmentos so LED, ento precisamos limitar a corrente, para isso devemos usar uma resistncia em cada segmento. A corrente utilizada, depende do brilho que queremos do display, normalmente utilizam-se resistncias entre 220 e 560 para uma fonte de 5 V, o que equivale a uma corrente entre 9 mA e 20 mA. No devemos usar valores de resistncia muito baixa, pois estaremos reduzindo a vida til do display, podendo queimar o segmento. Se for usar um display, teste antes cada segmento, para ter a certeza que no est a usar um display com algum segmento queimado. Programa para testar o display 7 segmentos.

81 Quadro B.1 Testando o display via Arduino int b=5, a=6, f=7, g=8, dp=9, c=10, d=11, e=12; int pins[8] = {b, a, f, g, dp, c, d, e}; void setup() { Serial.begin(9600); for (int i = 0; i == 7; i++) { pinMode(pins[i], OUTPUT); } } void loop() { for(int i = 0; i <8 7; i++) { digitalWrite(pins[i], HIGH); delay(250); } delay(1000); for(int i = 0; i <8 7; i++) { digitalWrite(pins[i], LOW); delay(250); } }

Figura B.1 Montagem com o display de 7 segmentos

3.

Materiais 1 Display 7 segmentos 8 Resistores de 330

82

1 Display LCD 16x2 1 Arduino Duemilanove 1 LED 4. Relatrio O relatrio dever conter: Desenvolvimento do Projeto com as devidas inferncias a respeito dos cdigos criados; Concluso do Trabalho; Referncias. O programa dever ser entregue ao professor, o mesmo precisar de comentrios ao longo do algoritmo.

83

ANEXO C Experimento 3: ACIONAMENTO DE UM DISPLAY LCD 16 X 2 VIA CONTROLE REMOTO

1.

Objetivos: O projeto tem objetivo de validar o acionamento de um display LCD 16 x 2

via controle remoto enviando dados de comandos alfanumricos a serem apresentados no display. Os experimentos apresentados podem ser desenvolvidos a partir do Arduino Duemilanove, dispositivos discretos (LED, displays, etc) e um protoboard. 2. Introduo Esse projeto precisou de um simples sensor receptor infravermelho, o receptor utilizado foi o IRM3638 que foi conectado placa Arduino como forma de receber o sinal infravermelho. 3. Materiais 1 Controle IR 1 Receptor IR 1 Display LCD 16x2 1 Arduino Duemilanove 1 LED 1 Resistor de 10k 4. Relatrio O relatrio dever conter: Desenvolvimento do Projeto com as devidas inferncias a respeito dos cdigos criados; Concluso do Trabalho; Referncias.

84

O programa dever ser entregue ao professor, o mesmo precisar de comentrios ao longo do algoritmo.

85

ANEXO D Experimento 4: UNIDADE MVEL ROBTICA

1.

Objetivos Esse projeto tem o objetivo de integrar sistemas de comunicao e

acionamento atravs da robtica mvel. A UMR (Unidade Mvel Robtica) possui: Sensor Ultrassnica; Sensor Infravermelho; Sensor de Trilha; Placa de interface para acionamento de motores.

O objetivo dessa prtica de: Integrar os diversos sistemas da UMR; Projetar diversas possibilidades de trilhas para otimizao de rotas; Montar diversos cenrios para a UMR poder desviar de obstculos com o sensor ultrassnico; 2. Controlar a UMR com o controle infravermelho. Introduo A UMR (Unidade Mvel Robtica) foi um projeto desenvolvido para otimizar o estudo da robtica mvel educacional. Dentre as suas funcionalidades destacamos o uso de sensores para versatilizar o ambiente de aprendizado em sala de aula com sensores ultrassnicos e infra vermelhos com os quais podemos fazer o rob desviar obstculos, seguir trilha e obedecer comandos via controle remoto. A UMR foi desenvolvida com o Arduino Duemilanove juntamente com o Arduino SensorShield para acoplar os sensores utilizados bem como os servo motores utilizados nas rodas e no ultrassom.

86 Figura D.1 Unidade Mvel Robtica

Fonte:Robotic, 2011

3. Materiais 1 UMR 1 Controle Remoto SONY ou similar 1 Fonte 9V/1A 1 Cabo de dados USB 4. Relatrio O relatrio dever conter: Desenvolvimento do Projeto com as devidas inferncias a respeito dos cdigos criados; Concluso do Trabalho; Referncias. O programa dever ser entregue ao professor, o mesmo precisar de comentrios ao longo do algoritmo.

87

ANEXO E Experimento 5: PWM DO ARDUINO

Experimento 5: PWM DO ARDUINO 1. Objetivos: Nesse experimento ser testada a sada PWM do Arduino para controlar a velocidade de um motor dc de 12 V. O cdigo desse experimento est descrito no Quadro E.1.
Figura E.1 Diagrama de Montagem do Projeto

2.

Lista de Materiais 1 Arduino Duemilanove 1 MOSFET IRF540 2 Resistores: 1 de 1 k e outro de 10 k 1 Motor DC de 12 V

88

Quadro E.1 Cdigo do acionamento do motor dc intsensorPin = A0; intsensorValue = 0; void setup() { pinMode(9, OUTPUT); Serial.begin(9600);} void loop() { sensorValue = analogRead(sensorPin); analogWrite(9,sensorValue/4); Serial.println(sensorValue/4); delay(10);}

O Arduino UNO possui dos pinos 13 ao 2, ao todo 12 pinos de I/O digitais, so portas cujo sinal de sada de 0 V ou 5 V. As portas PWM esto disponveis em 6 canais, correspondentes s portas 11, 10, 9, 6, 5 e 3. Para o experimento em questo, foi utilizado o pino 9 para gatilhar o MOSFET que comuta para o funcionamento do motor DC. 3. Relatrio O relatrio dever conter: Desenvolvimento do Projeto com as devidas inferncias a respeito dos cdigos criados; Concluso do Trabalho; Referncias. O programa dever ser entregue ao professor, o mesmo precisar de comentrios ao longo do algoritmo.

89

ANEXO F Software Arduino

Conectando o Arduino ao computador As placas Arduino foram desenvolvidas inicialmente com o CI FTDI (FT232-RL), um conversor RS 232 USB que usando a UART do microcontrolador possibilita a comunicao entre Arduino e computador. Os novos modelos UNO e Mega2560, dispe de um ATMEGA8 desempenhando o papel deste conversor. por causa deste conversor FTDI que as placas so do tipo plug and play, ou seja, ao conectar placa no computador via USB, o sistema operacional instala automaticamente os drivers para comunicao com a placa. Mas com as novas placas Arduino UNO e MEGA2560, a instalao deve ser manual. Quando devidamente instalada, possvel visualizar que a placa foi reconhecida no gerenciador de dispositivos do Windows. Para tal, aberto o gerenciador de dispositivos do Windows e verificado se est disponvel uma porta COM nomeada como Porta COM: ESB Serial Port (COM xx). No caso da Figura F.1, a porta est instalada na COM16.
Figura F.1 Verificando instalao

90

possvel que o sistema operacional no reconhea a placa Arduino automaticamente, mais precisamente, o driver do FTDI ou o ATMEGA8. Isto ocorre principalmente quando o sistema operacional de 64 bits. Nestes casos a placa no reconhecida, podendo-se observar no gerenciador de dispositivos que o hardware FT232R ou placa Arduino UNO/MEGA2560 no est instalado. Nestes casos a soluo fazer a instalao manual. Na pasta do programa Arduino IDE existe uma pasta especfica de drivers, permitindo instalar os drivers das placas mais recentes. Contudo, se o sistema operacional for 64 bits e a placa Arduino for anterior Arduino UNO e MEGA25860 necessrio fazer o download do driver da FTDI para sistemas 64 bits. Este drive encontra-se: http://www.ftdichip.com/Drivers/VCP.htm Nestes dois casos executada a instalao manual clicando-se no cone do FT232R ou placa UNO no gerenciador de dispositivos, atualizando o driver substituindo-o pelo novo que foi descarregado do site. possvel ainda haver problemas de hardware que acarretam o no reconhecimento da placa. Cabo USB defeituoso ou placa com defeito de fabricao tambm promovem este tipo de problema. Software e a Placa Arduino O aplicativo Arduino IDE, utilizado principalmente para desenvolver o cdigo fonte e carreg-lo na placa do usurio. Nesse momento, so destacados os pontos mais relevantes quando se conecta a placa e deseja-se que a mesma realize suas funes corretamente. Caso o trabalho seja realizado com mais de uma placa Arduino, importante observar em que porta serial a placa foi instalada no computador na primeira vez em que foi utilizada. Tambm recomenda-se que o usurio utilize sempre a mesma porta USB, devido possibilidade de alguns conflitos ocorrerem futuramente. Desta forma, no possvel escolher qual a porta que o Arduino ser instalado, quando o mtodo de instalao for o plug and play. Ela ser instalada na primeira porta COM virtual disponvel no sistema.

91

Na primeira utilizao, importante configurar alguns parmetros do software. Em Tools, deve-se conferir e selecionar a placa utilizada (em Board) e conferir se a placa est habilitada na porta COM onde foi instalada (em Serial Port), como mostrado na Figura F.2:
Figura F.2 Selecionando a placa do projeto

A ltima opo a seguir nem sempre necessria a modificao manual, j que ao plugar a placa o software reconhece automaticamente a porta a qual a placa pertence e j aparecer selecionada a porta serial correta. Porm, quando se utiliza mais de uma placa Arduino ou alguma outra placa serial virtual, esta seleo deve ser realizada com frequncia. No menu Tools, existem algumas outras ferramentas de auxlio: Burn Bootloader: Permite o usurio gravar o bootloader de uma placa Arduino que possua um microcontrolador que no o possua, utilizando alguns dos tipos de gravadores mais comuns de microcontroladores ATMEGA. Serial Monitor: Selecionando esta opo, ir se abrir uma janela do tipo hyper terminal, responsvel por receber e enviar caracteres ASCII ao Arduino, via teclado.

92

Outras opes: H mais 3 opes no menu tools, respectivamente auto

formatao, arquivar, e consertar cdigo e recarregar, sem muita relevncia. No menu File possvel criar um novo cdigo fonte, abrir um cdigo existente, buscar exemplos prontos de cdigo fonte, salvar carregar na placa, configurar pgina, imprimir e ajustar algumas preferncias referentes a diretrio do Arduino, tamanho de fonte, utilizao de editor externo, entre outras. O menu Edit possui exclusivamente opes de edio do arquivo fonte, como copiar, colar, endentar e dessedentar o cdigo, por exemplo. O menu Sketch possui as opes verificar e compilar, importar uma biblioteca do Arduino e adicionar um arquivo. Por fim, o menu Help exclusivamente em relao busca de solues para problemas de todos os tipos, desde software e linguagem, problemas com o hardware das placas Arduino. uma boa referncia rpida em caso de problemas simples. Na viso geral do programa, possvel observar alguns atalhos e uma janela de mensagens de compilao em formato semelhante ao DOS, onde so mostradas mensagens do compilador ao usurio. A tela principal do Arduino IDE apresentada na Figura F.3.

93 Figura F.3 Tela principal do Arduino IDE

Uma das ferramentas mais interessantes presentes no Arduino IDE o serial monitor, um terminal que recebe e envia dados ao Arduino via porta serial, neste caso, via USB. Este terminal um item muito utilizado para estes quando no se dispe de um display LCD ou alguma outra ferramenta visual, pois ele facilita muito no diagnstico de bugs no cdigo fonte. A tela correspondente ao serial monitor apresentado na Figura F.4.

94 Figura F.4 Monitor Serial Arduino IDE

possvel utilizar outros tipos de terminal serial em conjunto com o Arduino. Nesse caso, necessrio apenas ajustar o parmetro de taxa de smbolos em sincronia com o cdigo do Arduino.

95

ANEXO G Instrues do Arduino FUNES: CONCEITOS E PROPRIEDADES

Abordagem das funes, seus conceitos e propriedades, principalmente as funes exclusivas da linguagem Arduino. DIGITAL I/O: pinMode( ) Configura o pino especificado para se comportar como uma entrada ou uma sada. Ver a descrio dos pinos digitais para obter mais detalhes. Sintaxe pinMode (pino, modo) Parmetros Pino: o nmero do pino cujo modo que deseja ajustar; modo: entrada (INPUT)ou sada (OUTPUT). Retorno Nenhum Exemplo intLEDPin = 13; void setup ( ) { pinMode (LEDPin, OUTPUT); } void loop ( ) { ...... } *Os pinos de I/O analgicos podem ser utilizados como pinos digitais, definidos como pinos 14 (porta analgica 0) a 19 (porta analgica 5). // pino 13 comosada

96

digitalWrite( ) Utilizado para definir o estado de um pino digital em estado alto (HIGH) ou baixo (LOW). Se o pino foi configurado como uma sada com pinMode( ), a sua tenso ser ajustada para o valor correspondente: 5 V para alto, 0 V (GND) para baixo. Se o pino foi configurado como entrada, ao defini-lo como alto (com digitalWrite( ) ir habilitar o resistor de pull-up interno 20 k. Ao defini-lo como baixo ir desativar o pull-up. O resistor de pull-up o suficiente para limitar a corrente e mal acender um LED, ento se os LED parecem funcionar, mas muito fracos, esta uma causa provvel. A soluo colocar o pino de uma sada com o pinMode( ). Sintaxe digitalWrite(pino, valor) Parmetros pino: o nmero de pinos valor: HIGH ou LOW Retorno nenhum Exemplo intLEDPin = 13; void setup( ) { pinMode (LEDPin, OUTPUT); saida } void loop ( ) { digitalWrite (LEDPin, HIGH); delay (1000) digitalWrite (LEDPin, LOW); delay (1000); } //liga LED //atraso de 1000ms //desliga LED // pino 13 definidocomo

97

DigitalRead() L o valor de um determinado pino digital, HIGH (alto) ou LOW (baixo). Sintaxe digitalRead(pino) Parmetros pino: o nmero do pino digital que voc quer ler (int) Retorno HIGH ou LOW Exemplo intLEDPin = 13; intLEDPin = 7; //pushbutton connectado no pino digital 7. intval = 0; //variavel para salvar o valor lido.

void setup ( ) { pinMode (LEDPin, OUTPUT); pinMode (inPin, INPUT); } void loop ( ) { val = digitalRead (inPin); //lendo o pino de entrada. digitalWrite (LEDPin, val); //LED com o valor do boto. Se o pino no conectado a nada, digitalRead( ) pode retornar alto ou baixo (e isso pode alternar de forma aleatria). ANALOG I/O So os pinos de entrada e sada analgicos, que possuem vrias configuraes analgicas como descrito a seguir. //pino 13 como sada. //pino 7 como entrada.

98

analogReference( ) Configura a tenso de referncia utilizada para a entrada analgica (ou seja, o valor usado como fundo de escala de entrada). As opes so: Default: o padro analgico de referncia 5 V ou 3,3 V (depende da placa). Interna: uma referncia interna igual a 1,1 V no ATMEGA168 ou ATMEGA328 e 2,56 V no ATMEGA8. Externa: a tenso aplicada ao pino AREF usado como referncia.

Parmetros tipo: o tipo de referncia ao uso (default, interna, ou externa). Retorno Nenhum. Se estiver utilizando uma tenso de referncia externa (aplicando ao pino AREF), deve-se definir a referncia analgica para externa antes de chamar analogRead( ). Caso contrrio, pode ocorrer um curto-circuito entre a tenso de referncia ativa (gerada internamente) e o pino AREF, podendo danificar o microcontrolador na placa Arduino. Alternativamente, pode-se conectar um resistor de uns 5 k entre a tenso de referncia externa e o pino AREF o que lhe permite alternar entre as tenses de referncia externa e interna. Observe que o resistor ir alterar a tenso que usada como referncia, porque h uma resistncia interna de 32 k no pino AREF. analogRead( ) L um valor de tenso analgico no pino analgico especificado. A placa Arduino UNO possui 6 pinos analgicos com converso A/D de 10 bits. Isso significa que ele ir mapear tenses de entrada entre 0 e 5 V em valores inteiros entre 0 e 1023. Isso produz uma resoluo entre as leituras de: 5 V / 1024 unidades, ou seja, 0,0049 volts (4,9 mV) por unidade. O intervalo de entrada e resoluo podem ser alteradas utilizando analogReference( ). Demora cerca de 100 microssegundos (0,0001s) para ler uma entrada analgica, portanto, a taxa mxima de leitura cerca de 10.000Hz.

99

Sintaxe analogRead(pino) Parmetros Pino: o nmero de pinos de entrada analgica para ler (0-5 na maioria das placas, 07 sobre o Mini e Nano, 0-15 no Mega) Retorno int (0-1023) Se o pino de entrada analgica no est conectado a nada, o valor retornado pelo analogRead ( ) ir variar com base em uma srie de fatores (por exemplo, os valores das entradas analgicas de outros pinos). Exemplo intanalogPin = 3; //potencimetro conectado ao pino 3, 5V e GND. int Val = 0; //varivel inicializada para armazenar o valor lido.

void setup( ) { Serial.begin(9600); //Porta serial com leitura de 9600bauds/s } void loop( ) { val = analogRead(analogPin) //Leo valor analgico e converte Serial.println(val); //Imprime via monitor serial o valor lido }

100

analogWrite Escreve um valor analgico (utilizando os canais PWM). Pode ser usada para acender um LED de brilhos diferentes ou uma unidade de motor em velocidades diferentes. Aps uma chamada do analogWrite( ), o pino ir gerar uma onda quadrada constante no ciclo especificado at a prxima chamada para analogWrite( ) (ou uma chamada para digitalRead( ) ou digitalWrite( ) no mesmo pino). A frequncia do sinal PWM e de aproximadamente 490 Hz. No necessrio definir, com pinMode( ), o pino como uma sada antes de chamar analogWrite( ). A funo analogWrite no tem nenhuma ligao com os pinos analgicos ou funo analogRead. Sintaxe analogWrite(pino, valor) Parmetros pino: o pino para gravar. valor: ciclo de trabalho (entre 0 (sempre desligado) e 255 (sempre ligado)). Retorno Nenhum Exemplo Define a sada para um diodo emissor de luz proporcional ao valor lido do potencimetro. intLEDPin = 9; intanalodPin = 3; intval = 0; // LED conectado ao pino 9 //potencimetro conectado ao pino 3

void setup( {

pinMode (LEDPin, OUTPUT); } void loop ( { val = analogRead (analogPin); analogWrite(LEDPin, val / 4); //analogRead valores entre 0 1023, analogWrite valores )

101

entre 0 255 }

MODOS DE I/O AVANADOS tone( ) Gera uma onda quadrada de freqncia especificada (e 50% de dutycicle) em um pino. A durao pode ser especificada, caso contrrio, a onda continuar at que uma chamada para noTone( ). O pino pode ser ligado a uma campainha piezo ou outro falante para reproduzir sons. Apenas um tom pode ser gerado de cada vez. Se o tom j est tocando em um pino diferente, a chamada para o tone( ) no ter nenhum efeito. Se o tom est enviando ao mesmo pino, a chamada ir definir a sua freqncia. O uso do tone( ) ir interferir com PWM de sada nos pinos 3 e 11. Observao: se desejar colocar valores em pinos mltiplos, necessrio chamar no Tone( ) em um pino antes de chamar o tone( ) no pino seguinte. Sintaxe tone (pino, frequncia) tone(pino, frequncia, durao) Parmetros pinos: o pino sobre o qual gera o tom. frequncia: a frequncia do tom hertz. Durao: a durao do tom em milissegundos (opcional). Retorno Nenhum noTone( ) Para a gerao de uma onda quadrada desencadeada por tone( ). No tem nenhum efeito se no houver nenhum tom sendo gerado. Sintaxe noTone(pino)

102

Parmetros pino: o pino que se deseja parar de gerar o tom Retorno nenhum

shiftOut( ) Desloca os bits dos bytes de dados um por vez. Comea a partir do mais significado (ou seja, o mais esquerda) ou pelo bit menos significativo. Cada bit enviado para o pino de sada, aps a mudana de clock. Isso conhecido como protocolo serial sncrono e uma forma comum de microcontroladores se comunicarem com os sensores e com outros microncontroladores. Isto ocorre devido aos dois dispositivos ficarem sincronizados e comunicarem-se perto de velocidades mximas, j que ambos compartilham do mesmo clock. Isto frequentemente referido na documentao de hardware como chip Serial Peripheral Interface (SPI). Sintaxe SHIFTOUT (dataPin, clockPin, bitOrder, valor) Parmetros dataPin: o pino de dados clockPin: o clock bitOrder: Define a ordem dos bits, ou seja mais significativo primeiro ou menos significativo primeiro. valor: valor dos dados para a mudana. (byte) Retorno Nenhum O dataPin e o clock j devem ser configurados como sada por uma chamada de pinMode ( ). SHIFTOUT est definido para a sada de 1 byte (8 bits), por isso requer uma operao de dois passos para uma sada de valores maiores do que 255. Exemplo 1: //Ordem: Mais significativo primeiro int data = 500; // shift out highbyte shiftOut (dataPin, clock, MSBFIRST, (data >> 8));

103

// shift out lowbyte shiftOut (data, clock, MSBFIRST, data);

// Ordem menos significativo primeiro data = 500; //shift out lowbyte shiftOut (dataPin, clock, LSBFIRST, data); // shift out highbyte shiftOut (dataPin, clock, LSBFIRST, (data >> 8));

Exemplo 2 //************************************************************ ********// // Name :shiftOutCode, Hello World // // Author :Carlyn Maw, Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //************************************************************ ********//

//Pino conectado ao ST_CP of 74HC595 intlatchPin = 8; //Pino concetado ao SH_CP of 74HC595 int clock = 12; ////Pino conectado ao DS of 74HC595 int data Pin = 11;

104

void setup( )

//setar os pinos como sada pinMode (latchPin, OUTPUT) ; pinMode (clockPin, OUTPUT) ; pinMode (dataPin, OUTPUT) ; } void loop ( ) {

for (int j = 0; j < 256; j++) { digitalWrite (latchPin, LOW) ; shiftOut (dataPin, clockPin, LSBFIRST, j) ; digitalWrite (latchPin, HIGH) ; delay (1000) ; } } pulseIn( ) L um pulso (alto ou baixo) em um pino. Por exemplo, se o valor for elevado, pulseIn( ) espera o pino assumir valor alto, inicia a contagem, aguarda o pino ir para nvel baixo e pra a cronometragem. Retorna o comprimento do pulso em microssegundos. Cancela e retorna 0 se nenhum pulso comear dentro de um limite de tempo especificado. A temporizao dessa funo foi produzida empiricamente e provavelmente mostrar erros em pulsos mais longos. Funciona em pulsos de 10 microssegundos 3 minutos de durao. Sintaxe pulseIn (pino, valor) pulseLn (pino, valor, tempo de espera) Parmetros pino: o nmero do pino no qual se quer ler o pulso. valor: tipo de pulso para ler: alto ou baixo. timeout (opcional): o nmero de microssegundos para aguardar o impulso para iniciar; padro um segundo. Retorna

105

A durao do pulso (em microssegundos) ou 0 se nenhum pulso comear antes do tempo limite. Exemplo int pin = 7; unsigned long duration;

void setup ( ) { pinMode (pin, INPUT); } void loop( ) { Duration = pulseIn (pin, HIGH); } FUNES DE TEMPO millis() Retorna o nmero de milissegundos desde que a placa Arduino comeou a executar o programa atual. Esse nmero vai estourar (voltar para zero), aps aproximadamente 50 dias executando. Parmetros Nenhum Retorno Nmero de milissegundos desde o incio do programa. Exemplo unsigned long time; void setup ( ) { Serial.begin (9600); } void loop ( ) { Serial.print (Time: ); time = millis ( ); //imprime o tempo desde o inicio do programa

106

Serial.println (time); delay (1000); } micros( ) Retorna o nmero de microssegundos desde que a placa Arduino comeou a executar o programa atual. Esse nmero vai estourar (voltar para zero), aps aproximadamente 70 minutos. Em 16 MHz as placas Arduino tm uma resoluo de quatro microssegundos (ou seja, o valor retornado sempre um mltiplo de quatro). Parmetros Nenhum Retorno Nmero de microssegundos desde o incio do programa. Exemplo unsigned long time; void setup ( ) { Serial.begian (9600); } void loop ( ) { Serial.print (Time: ); Time = micros ( ); Serial.println (time); delay (1000); } delay( ) Interrompe o programa por um perodo de tempo (em milissegundos) especificado como parmetro. Sintaxe delay(ms) Parmetros ms: o nmero de milissegundos para fazer uma pausa. Retorno Nenhum

107

Embora seja fcil criar um LED piscando com a funo delay( ), atrasos limitam o uso das tarefas como mudana de estados, assim sendo o uso de delay( ) em um projeto tem desvantagens significativas. Nenhuma outra leitura de sensores, clculos matemticos, manipulao dos pinos, etc, podem continuar durante a funo de atraso. Os mais experientes programadores geralmente evitam o uso de delay( ) para o sincronismo dos eventos com mais de 10 de milissegundos a menos que o projeto seja muito simples. delayMicroseconds() Interrompe o programa para o perodo de tempo (em microsegundos) especificado como parmetro. H milhares de microsegundos em um milisegundo, e um milho de microsegundos em um segundo. Sintaxe delayMicroseconds (valor) Parmetros valor: o nmero de microsegundos para fazer uma pausa Retorna Nenhum Exemplo intoutPin = 8; void setup( ) { pinMode (outPin, OUTPUT); } void loop ( ) { digitalWrite (outPin, HIGH); delayMicroseconds (50); digitalWrite (outPin, LOW); delayMicroseconds (50); } FUNES MATEMTICAS

108

As funes matemticas utilizadas na linguagem Arduino IDE so as mesmas utilizadas na linguagem C. So citadas abaixo as funes mais utilizadas e sugerida a utilizao de material complementar referente a linguagem C, afim de utilizar estas funes. O menu Help de qualquer compilador C possui todo conceito e propriedades de cada uma das funes a seguir, ou em material disponvel em sites na internet. Funo min(x, y): retorna qual o valor mnimo entre x e y. Funo max(x,y): retorna o valor mximo entre x e y. Funo abs(x): retorna o valor absoluto de x. Funo constrain (x, a, b):restringe valor de x entre a e b. Funo pow (base, expoente): eleva base ao expoente. Funo sqrt(x): retorna o valor da raiz quadrada de x. Funes trigonomtricas: retornam o valor do seno, cosseno ou tangente de determinado ngulo em radianos atravs das funes sin(x), cs(x) e tan(x), respectivamente.

NMEROS ALEATRIOS A funo randomSeed( ) inicializa o gerador de nmeros

pseudoaleatrios, fazendo com que ela comece em um ponto arbitrrio na sua sequncia aleatria. Esta sequncia, embora muito longa e aleatria sempre a mesma. Se importante uma sequncia de valores aleatrios utilize a funo random( ). Em execues subsequentes de um projeto, use randomSeed( ) para inicializar o gerador de nmeros aleatrios com uma entrada bastante aleatria, como analogRead( ) em um pino desconectado. Por outro lado, pode ser ocasionalmente til utilizar nmeros pseudoaleatrios que se repetem exatamente. Isso pode ser feito chamando randomSeed( ) com um nmero fixo, antes de iniciar a sequncia aleatria. A seguir so descritas as funes random( ) e randomSeed( ), com seus respectivos exemplos:

109

random( ) Sintaxe random(max) random(min, max) Parmetros min limite inferior do valor aleatrio (opcional); max limite superior do valor aleatrio. Retorno O valor aleatrio entre min e Max. Exemplo longrandNumber; void setup( ) { Serial.begin (9600); } void loop ( ) { // print a random number from 0 to 299 randNumber = random (300); Serial.println (randNumber);

// print a random number from 10 to 19 randNumber = random (10, 20); Serial.println (randNumber);

delay (50); } randomSeed( ): Parmetros seed, tipo int nmero que gera o valor aleatrio. Retorno Nenhum. Exemplo longrandNumber;

110

void setup ( ) { Serial.begin (9600); randomSeed (analogRead (0)); } Void loop ( ) [ randNumber = random (300); Serial.println (randNumber); delay (50); } FUNES PARA TRATAR BITS E BYTES highByte( ) Extrai o byte de maior ordem ( esquerda) de uma palavra (ou o byte de menor ordem de um segundo tipo de dados maior). Sintaxe highByte (x) Parmetros x: um valor de qualquer tipo Retorno byte lowByte() Extrai o byte de menor ordem ( direita) de uma varivel. Sintaxe Lowbyte (x) Parmetros x: um valor de qualquer tipo Retorno byte bitRead() L um bit de um nmero. Sintaxe bitRead (x, n) Parmetros x: o nmero a partir do qual se faz a leitura.

111

n: o nmero de bits a ser lido, comeando em 0 para o bit menos significativo. Retorno O valor do bit (0 ou 1) bitWrite() Grava um bit de uma varivel numrica. Sintaxe bitWrite (x, n, b) Parmetros x: varivel numrica na qual se escreve. n: o nmero de bits a ser escrito, comeando em 0 para o bit menos significativo. b: o valor a se gravar (bit com valor 0 ou 1) Retorno nenhum bitSet() Seta 1 em um bit de uma varivel numrica. Sintaxe bitset (x,n) Parmetros x: varivel numrica cujo valor quer se definir. n: o bit a se definir, a partir de 0 para o bit menos significativo (mais direita) Retorno nenhum bitClear() Limpa (escreve 0) em um bit de uma varivel numrica. Sintaxe bitClear (x, n) Parmetros x: varivel numrica cujo bit se quer zerado. n: qual o bit a ser zerado, a partir de 0 para o bit menos significativo (mais direita). Retorno Nenhum

112

bit() Calcula o valor do bit especificado (bit 0 1, o bit 1 2, o bit 2 4, etc.) Sintaxe bit (n) Parmetros n: o bit, cujo valor se deseja calcular Retorno o valor do bit

113

Bibliotecas O uso de bibliotecas proporciona um horizonte de programao mais amplo e diverso quando comparado a utilizao apenas de estruturas, valores e funes. Isso perceptvel quando so analisados os assuntos que so abordados por cada biblioteca em especfico. Lembrando sempre que, para se fazer uso de uma biblioteca est j deve estar instalada e disponvel na sua mquina. Tem-se as seguintes bibliotecas de referencia: EEPROM: leitura e escrita de armazenamento permanente. Ethernet: para se conectar a uma rede Ethernet usando o Arduino Ethernet Firmata: para se comunicar com os aplicativos no computador usando o Liquid Crystal: para controlar telas de cristal lquido (LCD). Servo: para controlar servo motores. SPI: para se comunicar com dispositivos que utilizam barramento Serial Software Serial: Para a comunicao serial em qualquer um dos pinos Stepper: para controlar motores de passo. Wire: Dois Wire Interface (TWI/I2C) para enviar e receber dados atravs de Tem-se como referncia tambm, o uso de bibliotecas mais especficas. O que de extrema importncia quando se faz uso do Arduino com um enfoque em uma determinada rea, como por exemplo: Comunicao (redes e protocolos) Messenger: Para o processamento de mensagens de texto a partir do New Soft Serial: Uma verso melhorada da biblioteca Software Serial.

Shield. protocolo Firmata.

Peripheral Interface(SPI). digitais.

uma rede de dispositivos ou sensores.

computador.

114

OneWire: Dispositivos de controle que usam o protocolo OneWire. PS2Keyboard: Ler caracteres de um teclado PS2. Simple Message System: Enviar mensagens entre Arduino e o computador. SSerial2Mobile: Enviar mensagens de texto ou e-mails usando um telefone Webduino: Biblioteca que cria um servidor Web (para uso com o Arduino X10: Envio de sinais nas linhas de energia AC. XBee: Para se comunicar via protocolo XBee. Serial Control: Controle remoto atravs de uma conexo serial.

celular. Ethernet Shield).

Sensoriamento Capacitive Sensing: Transformar dois ou mais pinos em sensores capacitivos. Debounce: Leitura de rudos na entrada digital.

Gerao de Frequncia e de udio Tone: Gerar ondas quadradas de frequncia de udio em qualquer pino do

microcontrolador. Temporizao DateTime: Uma biblioteca para se manter informado da data e hora atuais do Metro: Ajuda ao programador a acionar o tempo em intervalos regulares. MsTimer2: Utiliza o temporizador de 2 de interrupo para desencadear uma

software.

ao a cada N milissegundos. Utilidades Text String (String): Manipular strings PString: uma classe leve para imprimir em buffers. Streaming: Um mtodo para simplificar as declaraes de impresso.

115

ANEXO H ROBO MVEL EDUCACIONAL

Figura H.1: Unidade Mvel Robtica

Fonte: Robotic, 2011

A UMR (Unidade Mvel Robtica) uma estrutura de rob mvel desenvolvida com o Arduino Duemilanove Atmega 328 como placa central de processamento. O rob possui diversas funcionalidades agregadas, tais como sensor infravermelho, sensor ultrassnico, Shield Arduino Navigation, alm de agregar sensores digitais de trilha, comunicao remota, deteco de obstculos atravs do infravermelho ou do ultrassom, medio de distancias, labirinto, etc. Tambm pode ser agregado outros shields e expandir as funes com Xbee, WiFi, Ethernet, GPS, bussola e demais outras funes incorporadas.

116 Figura H.2: Arduino Shield Navigation

Fonte: Robotic, 2011

117

Controlando a UMR por um controle remoto O cdigo do controle por IR est no Quadro H.1. Na Figura H.3 apresenta-se o controle remoto e a UMR utilizada no experimento.
Figura H.3: Controle Remoto com a UMR

Fonte: Robotic, 2011

Rob Seguidor de Trilha Conecte o sensor de trilha, no conector do shieldNavigation. Ligue cabos Jumpers do SD ao P7 do Arduino, SC ao P6 e SE ao P5. SD => Sensor direito SC => Sensor Central SE => Sensor Esquerdo
Figura H.4: Arduino Sensor Shield

Fonte: Robotic, 2011

Faa uma trilha usando fita isolante ou pintada na cor preta, com 20mm de largura em uma superfcie branca. O cdigo do seguidor de trilha est no Quadro H.2.

118 Figura H.5: Trilha para a UMR

Quadro H.1: Cdigo do Arduino Controle IR #include <IRremote.h> #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros arduinos #define FIRST_SERVO_PIN8 MegaServo Servos[NBR_SERVOS] ; constint RECV_PIN = 2; //SENSOR DE INFRARED NO PIN 2 IRrecvirrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); Servos[1].attach(8,880,2400) ; //SERVO DIREITO NO PIN 8 Servos[2].attach(9,880,2400) ; //SERVO ESQUERDO NO PIN 9 Servos[1].write(70) ; Servos[2].write(70) ; irrecv.enableIRIn(); // Start the receiver irrecv.blink13(true); delay(15); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 144){ //Chave CH+ frente Servos[1].write(180) ; Servos[2].write(0) ; delay(15);} if (results.value == 2192){ //Chave CH- volta Servos[1].write(0) ; Servos[2].write(180) ; delay(15); } if (results.value == 1168){ //Chave VOL+ direita Servos[1].write(0) ; Servos[2].write(0) ; delay(15); } if (results.value == 3216){ //Chave VOL+ esquerda Servos[1].write(180) ; Servos[2].write(180) ; delay(15); } if (results.value>= 3536){ //Chave JUMP PRA Servos[1].write(70) ; Servos[2].write(70) ; delay(15); } irrecv.resume(); }}/ Recebe proximo valor Fonte: Robotic, 2011

119 Quadro H.2: Cdigo do Arduino Seguidor de Trilha #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros arduinos #define FIRST_SERVO_PIN8 MegaServo Servos[NBR_SERVOS] ; intmotor_d = 9; intmotor_e = 10; intir_d = 7; intir_c = 6; intir_e = 5; intst_d; // variavel para quardar o valor no ir receptor direito intst_c; intst_e; void setup(){ Servos[1].attach(motor_d,880,2400) ; Servos[2].attach(motor_e,880,2400) ; pinMode(ir_d,INPUT); pinMode(ir_c,INPUT); pinMode(ir_e,INPUT); para(); } void loop() { st_d = digitalRead(ir_d); //verifica cada sensor e guarda seu status st_c =digitalRead(ir_c); st_e = digitalRead(ir_e); if (st_e == HIGH and st_c==LOW and st_d==HIGH){frente();} if (st_e == HIGH and st_c==HIGH and st_d==HIGH){para();} if (st_e == LOW and st_c==HIGH and st_d==HIGH){esquerda();} if (st_e == LOW and st_c==LOW and st_d==HIGH){esquerda();} if (st_d == LOW and st_c==HIGH and st_e==HIGH){direita();} if (st_d == LOW and st_c==LOW and st_e==HIGH){direita();} } voidfrente() { Servos[1].write(180) ; Servos[2].write(0) ; delay(15); } voidpara() { Servos[1].write(70) ; Servos[2].write(70) ; delay(300); } voiddireita() { Servos[1].write(0); Servos[2].write(0); delay(30);} void esquerda() { Servos[1].write(180); Servos[2].write(180); delay(30); } Fonte:Robotic, 2011

120

ANEXO I CONTROLE PID COM ARDUINO

Quadro I.1: Biblioteca PID_v1.h #ifndef PID_v1_h #define PID_v1_h #define LIBRARY_VERSION 1.0.0 class PID { public: //Constants used in some of the functions below #define AUTOMATIC 1 #define MANUAL 0 #define DIRECT 0 #define REVERSE 1 PID(double*, double*, double*, // * constructor. links the PID to the Input, Output, and double, double, double, int); // Setpoint. Initial tuning parameters are also set here voidSetMode(int Mode); void Compute(); // * sets PID to either Manual (0) or Auto (non-0)

// * performs the PID calculation. it should be // calLED every time loop() cycles. ON/OFF and // calculation frequency can be set using SetMode // SetSampleTime respectively voidSetOutputLimits(double, double); //clamps the output to a specific range. 0-255 by default, but //it's likely the user will want to change this depending on //the application voidSetTunings(double, double, // * While most users will set the tunings once in the double); // constructor, this function gives the user the option // of changing tunings during runtime for Adaptive control voidSetControllerDirection(int); // * Sets the Direction, or "Action" of the controller. DIRECT // means the output will increase when error is positive. REVERSE // means the opposite. it's very unlikely that this will be needed // once it is set in the constructor. voidSetSampleTime(int); // * sets the frequency, in Milliseconds, with which // the PID calculation is performed. default is 100 doubleGetKp(); doubleGetKi(); doubleGetKd(); intGetMode(); intGetDirection(); private: void Initialize(); // These functions query the pid for interal values. // they were created mainly for the pid front-end, // where it's important to know what is actually // inside the PID. //

121

doubLEDispKp; doubLEDispKi; doubLEDispKd; doublekp; doubleki; doublekd;

// * we'll hold on to the tuning parameters in user-entered // format for display purposes // // * (P)roportional Tuning Parameter // * (I)ntegral Tuning Parameter // * (D)erivative Tuning Parameter

intcontrollerDirection; double *myInput; double *myOutput; double *mySetpoint; // * Pointers to the Input, Output, and Setpoint variables // This creates a hard link between the variables and the // PID, freeing the user from having to constantly tell us // what these values are. with pointers we'll just know.

unsigned long lastTime; doubleITerm, lastInput; intSampleTime; doubleoutMin, outMax; boolinAuto; }; #endif Fonte: Arduino, 2011.

Quadro I.2: Controle PID Exemplo Bsico #include <PID_v1.h> //Define Variables we'll be connecting to doubleSetpoint, Input, Output; //Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT); void setup() { //initialize the variables we're linked to Input = analogRead(0); Setpoint = 100; //turn the PID on myPID.SetMode(AUTOMATIC); } void loop() { Input = analogRead(0); myPID.Compute(); analogWrite(3,Output);} Fonte: Arduino, 2011.

No Quadro I.1 tem-se a biblioteca do PID para desenvolvimento de sistemas de controle baseados nessa tecnologia. O exemplo do Quadro I.2 apresenta um controle PID para leitura da entrada analgica A0 e controle da sada PWM atravs do pino 3.

122

ANEXO J - ARDUINO TWITTER

O Arduino possui uma biblioteca Twitter que se comunica atravs do EthernetShield. A biblioteca no ir twittar diretamente do Arduino, o dispositivo ir enviar os tweets para um site que em seguida enviar para o site do twitter atravs de um mecanismo que envia o tweet sem necessidade do usurio/senha. O site do twitter j possui um aplicativo para realizar a interface com o Arduino, conforme a Figura J.1.
Figura J.1 Arduino Twitter

123 Quadro J.1 Cdigo da Aplicao #if defined(ARDUINO) && ARDUINO > 18 // Arduino 0019 or later #include <SPI.h> #endif #include <Ethernet.h> //#include <EthernetDNS.h> Only needed in Arduino 0022 or earlier #include <Twitter.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; Twitter twitter("<<< your token here >>>"); char msg[] = "Hello, World! I'm Arduino!"; void setup() { delay(1000); Ethernet.begin(mac, ip); Serial.begin(9600); Serial.println("connecting ..."); if (twitter.post(msg)) { int status = twitter.wait(); if (status == 200) { Serial.println("OK."); } else { Serial.print("faiLED : code "); Serial.println(status); } } else { Serial.println("connection faiLED."); } } void loop() { }

A biblioteca utiliza este site como um servidor proxy para o material OAuth. Seu tweet no podem ser aplicadas durante a manuteno deste site.

124

Abreu, Antonio Diego Santos Arduino plataforma eletrnica microcontrolada / Antonio Diego Santos Abreu. 2011. 123 f. Impresso por computador (Fotocpia). Orientadores: Areolino de Almeida Neto, Marcos Tadeu Rezende. Monografia (Graduao) Universidade Federal do Maranho, Curso de Engenharia de Eletricidade, 2011. 1.Controle automtico Engenharia. 2. Arduino. 3. Sistema embarcado. 4. Microcontrolador. I Ttulo CDU 681.5

Vous aimerez peut-être aussi