Arduino Plataforma Eletrônica Microcontroladora

March 21, 2018 | Author: William Daher Prado | Category: Arduino, Microcontroller, Embedded System, Software, Electrical Engineering


Comments



Description

UNIVERSIDADE FEDERAL DO MARANHÃO CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE ELETRICIDADEANTONIO DIEGO SANTOS ABREU ARDUINO – PLATAFORMA ELETRÔNICA MICROCONTROLADORA São Luís 2012 ANTONIO DIEGO SANTOS ABREU ARDUINO – PLATAFORMA ELETRÔNICA MICROCONTROLADORA Monografia apresentada ao Curso de Engenharia Elétrica da Universidade Federal do Maranhão, para obtenção do grau de Bacharel em Engenharia Elétrica. Orientadores: Prof. Dr. Areolino de Almeida Neto Prof. MSc. Marcos Tadeu Rezende São Luís 2012 À minha linda família companheira.A Deus pelo dom da vida e sabedoria de todos os dias. Aos meus grandes amigos. . Aurydiana França. Aos meus familiares. James Pinheiro. Hugo Rossa. . por me dar a possibilidade e todo o suporte para conseguir alcançar os meus objetivos ensinandome as diretrizes das disciplinas do meu comportamento para eu poder seguir minha vida. Ao amigo Enio Leal por ajudar-me na mudança de engajamento profissional. Gerdson Cunha. Ao grande Professor Marcos Tadeu. principalmente minhas avós. Danilo Vale. Anderson Machado. Ao Professor Areolino Neto por me proporcionar oportunidades e abrir portas para o mundo da Mecatrônica. Em especial ao meu grande amigo Engenheiro Lucas Angelo por estar sempre dando forças e compartilhando bons momentos e projetos ao longo desses anos. A minha namorada. Joselilson Silva. Felipe Carvalho. que além de um grande irmão é um amigo de caráter precioso e único. Ao meu grande amigo Erick Santana. amigo que compartilhei algumas horas da madrugada nesse desafio dos estudos e provas. A todos os meus amigos da Universidade. do qual sou admirador pela sua capacidade de visualizar o que poucos conseguem ver e pelos seus preciosos ensinamentos e paciência durante todas as etapas deste e de outros projetos. Ao meu querido irmão Antonio Marcos. Dilva Abreu e Raimundo Abreu. Renato Carvalho. A todos os professores com quem tive o prazer de compartilhar informações ao longo destes anos no curso. por estar sempre perto de mim nos últimos anos compreendendo e vivenciando vários momentos comigo sejam bons ou ruins. Isac Lauda. Marcos Lima. por sempre entenderem minha ausência quando precisava estudar. Diego Aurélio e todos aqueles que de alguma forma participaram da minha formação.AGRADECIMENTOS Aos meus pais. Ao amigo Marcos Ferreira pelo grande coração e o apoio de sempre. . pela oportunidade que me ofereceram em sua Escola Técnica e incentivo para o desenvolvimento de sistemas mecatrônicos. da NetCom. me ajudaram a chegar nessa etapa da vida. A todos que de forma direta ou indireta.A Paulo Henrique e Carlos César. mas a chave para o fracasso é tentar agradar a todo mundo.“Não conheço a chave para o sucesso.” Bill Cosby . incluindo as suas diversas aplicações. Palavras-chave: Arduino. destacam-se a sua importância em sistemas robóticos. sensoriamento. sistemas de conexão com internet. comunicação remota e sistemas eletrônicos desenvolvidos para uso educacional. . Dentre as diversas aplicações.RESUMO Neste trabalho é apresentada uma plataforma eletrônica microcontroladora denominada Arduino. A plataforma Arduino é um sistema embarcado que foi desenvolvido para os projetistas mudarem o foco para a concepção final do projeto e não a montagem dos circuitos integrados em si. Todas essas aplicações foram desenvolvidas utilizando-se uma estrutura baseada em Microcontrolador. Sistema Embarcado. Microcontrolador. systems of connection with internet. Keywords: Arduino. includind its many applications. remote communication and electronic systems designed for educational use. Arduino´s platform is an embarked system that was developed for changing the designer´s focus from the assembly of the integrated circuits to the final conception of the project. Microcontroller. like applications in robotic systems.ABSTRACT This work presents a microcontroller eletronic project called Arduino. All these applications were developed using a microcontroller based structure. some stand out. sensing. Embarked Systems. . Among several applicabilities of Arduino. ...................54 Figura 4.............52 Figura 4....9 – Arduino Nano ............. .............. ......................................................1 – Software Arduino ............................ .......2 – Design da placa Arduino UNO ... .................................................28 Figura 2...............3 – Arduino Interface Serial ...... .....................50 Figura 4............................. ........32 Figura 2......................... ................... ........................29 Figura 2..............31 Figura 2...... ........................................43 Figura 4............................................... ....................2 – Evolução do projeto Arduino ................................... ...67 ................................................................... .......................................39 Figura 4......................22 Figura 2..... .24 Figura 2...9 – Repetição de sinal NEC ....................................... .........7 – Arduino MEGA 2560 ................. .. ................30 Figura 2...35 Figura 3................................................11 – Conexão do receptor infravermelho com o Arduino .6 – Arduino UNO ......38 Figura 3.............................................................. ..27 Figura 2.48 Figura 4....1 – Diagrama esquemático de um microcontrolador típico ............................. ............ ......................28 Figura 2................2 – Arduino Ethernet Shield..............................4 – Configuração do roteador ......................................7 – Pulsos NEC .............45 Figura 4..................55 Figura 5......................... ............................................................8 – Endereço $59 comando 16 no NEC ......6 – Receptor infravermelho ....... ........................................ .................4 – Acionamento de um motor de corrente contínua...1 – Conexão do LED na placa Arduino ...........................................3 – Hardware de acionamento ......................54 Figura 4..5 – Arduino Duemilanove ........... ...........................64 Figura 5.12 – Arduino sensorshields – módulos Zigbee e Inputshield .......49 Figura 4........................................1 – Modelos ISO/OSI ..............................................................................LISTA DE FIGURAS Figura 2.......................5 – Transistor MOSFET .................. ...52 Figura 4....................................13 – Arduino Mega GSM....................................60 Figura 5.........................................................32 Figura 2..........30 Figura 2........ .......10 – Arduino Bluetooth ........... .12 – Controle infravermelho utilizado no projeto ..........................51 Figura 4.. GPRS e GPS ......... ........4 – Arduinos – evolução da comunicação USB...8 – Arduino Mini .............53 Figura 4.. ................................................. ..........................................10 – Montagem do Arduino com o display de cristal líquido . .......................................66 Figura 5.2 – Interruptor na placa Arduino ............................34 Figura 2...............................................................11 – Arduino Fio e Lily Pad .....3 – Acionamento sequencial ..................... ............ .......................................................... ...5 – Página web Arduino .....67 .......Figura 5..... .36 Tabela 5....... ......................... ............63 .......LISTA DE TABELAS Tabela 3........1 – Comparativo com as principais características relativas ao ATMEGA ....2 – Características da comunicação TCP/IP .61 Tabela 5...................1 – Funções das camadas do protocolo internet ....... ....................................................47 Quadro 4...............3 – Código do acionamento de um pino .....1 – Código fonte para o WebServer .68 .... .................44 Quadro 4...... ....5 – Código do acionamento sequencial.....4 – Código do filtro de ruído de uma chave ........LISTA DE QUADROS Quadro 4.43 Quadro 4.................................................................50 Quadro 4.46 Quadro 4................................ .... .................6 – Código do acionamento..............................2 – Código pisca LED .... ............... ....................................48 Quadro 4.....................7 – Códigos e endereços de VCR com NEC ..........8 – Código do acionamento do controle IR ........................................1 – Código do acionamento dos pinos de saída ........53 Quadro 4.................... ...... ..................... ..............................................56 Quadro 5......... 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 Líquido 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 Móvel Robótica Universal Serial Bus Video Cassette Recorder . ...2 1...............4..4....1 2.2 2.................................................................1 3........................................................... 42 Projetos Elementares ...................................................................................1..........10 Principais Diferenças .............8 2.......... 34 CARACTERÍSTICAS TÉCNICAS ..............................................3 2....................1 1.......................................1 4............... 27 Versões Arduino Duemilanove e Diecimila .....SUMÁRIO 1 1................... 49 2........... 27 Arduino – evolução USB.......... 37 A Placa Arduino UNO .............................. 42 Acionamento do Arduino via Dispositivo de Entrada .................................................... 31 Versões Arduino Fio e Lilypad ....................... 39 PROJETOS E IMPLEMENTAÇÕES COM O ARDUINO ............... 19 PLATAFORMA ELETRÔNICA MICROCONTROLADA ARDUINO ...........................................................1 2..................................................................................5 3 3............................... 19 Organização do Trabalho.............1................. 21 Microcontroladores e Sistemas Embarcados ...........................4.....................1.......... 26 Versão Arduino – Interface Serial .................................... 36 Arduino e a Conexão com o Computador ...............4........................1.. 37 Software Arduino IDE ... 32 Arduino SensorShield ..................3 2..... 33 ..........................................................................4.............................................4 INTRODUÇÃO ............ 28 Versão Arduino UNO ..4...................................................................................................................................4 2.............. 42 Acionamento de Dispositivos de Saída ........................4.............................................................. 29 Versão Arduino Mini .....9 2..........................................1.............2 2........................................................4..................................7 2.....................3 2 2.......................... 21 Sistemas Embarcados ...........1 2..............2 4.......... 17 Objetivos .... 23 Conceitos Básicos.......... 18 Motivação .......6 2...................................................................................................... 24 Os Principais Modelos da Plataforma Arduino ......................4 2............. 30 Versão Arduino Nano .............................................................................1 3..............................................4.....................................4................................................. 31 Versão Arduino Bluetooth ...............1 4... 29 Versão Arduino MEGA ............................2 4 4...............................................................................................1.............................................3 4..............5 2. 22 Histórico do Projeto Arduino .................................... 45 Acionamentos Sequencial ................................................. 48 Acionamento de um motor dc via PWM do Arduino ............ ......................................3 5...2 4................ 61 Camada de Transporte TCP/IP .......................................2 5...................................................................2............ 64 Projeto Arduino Ethernet ................. 53 ARDUINO E A CONEXÃO COM A INTERNET ...........2................................................................................... 60 Funções das Camadas Internet ........................................ 58 Protocolo TCP/IP e Ethernet ..........1 5...........................................................................................1 5.............................. 60 Modelo ISO/OSI x Internet................ 51 Protocolo NEC – Características Técnicas ....4........................4 6 Projeto do Controle Remoto IR ...........................2 5..................... 59 Camadas do Protocolo...........................................................................................2.. 52 Projeto com acionamento de display de cristal via controle remoto .... 76 ................... 51 Teoria do Controle Infra Vermelho............................................................ 74 ANEXOS .............................................................2 4................................ 63 Arduino Ethernet Shield......2............ 65 CONCLUSÕES ......................1 4..................2... 72 REFERÊNCIAS ...................................................................2.......3 5.........................................................................................3 5 5.......... Muitos fatores estão envolvidos. o . O surgimento dos microcontroladores e a otimização dos sistemas embarcados aumentaram as possibilidades de desenvolvimento de projetos de automação. Conforme Rosa 2011. surge a necessidade de criar um novo conceito em aprendizagem de programação em eletrônica. onde uma criança poderia montar o seu robô com esta ferramenta. de tal forma que exista uma interação bem definida dos elementos eletrônicos e da utilização de suas potencialidades sem. mas qualquer profissional que deseje implementar os seus projetos com os microcontroladores embarcados. 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 eletrônicos de alto desempenho. Assim. Smartphones e Netbooks vem possibilitando o advento de inovações que afetam o dia-dia de milhões de pessoas em todo o mundo e que estão diretamente relacionados a essa tecnologia. monitoramento e acionamento das mais variadas aplicações dentro da informática. pois tornou-se possível programar uma pastilha de circuito integrado para efetuar controle. pois são tantos os modelos. tais como: linguagem de programação. Desta forma. capacidade de processamento e disponibilidade no mercado local.17 1 INTRODUÇÃO A crescente evolução da tecnologia aliada ao grande investimento em microprocessadores originou uma nova concepção de desenvolvimento de projetos de sistemas embarcados na área de eletrônica com novas ferramentas computacionais inclusive aplicadas a área de mecatrônica. A crescente oferta de Tablets. Rosa 2011 classifica o Arduino como o Lego do futuro. Esse novo conceito permite a uma ampla gama de profissionais (não somente engenheiros) a possibilidade de desenvolver projetos na área. A definição de qual microcontrolador utilizar em um projeto vai muito além do que saber programar. contudo precisar conhecer profundamente os mecanismos. não somente os estudantes. O aprendizado dos microcontroladores também tornou-se um desafio. existem diversas questões a serem levantadas quando se decide utilizar um microcontrolador. configurações e fabricantes que confundem os iniciantes nos estudos dessa ferramenta. mas não precisam de uma profunda compreensão dos detalhes técnicos por trás de suas criações. foram criadas guias de laboratório para estes experimentos. Este sistema é uma ferramenta flexível e de baixo custo. seja por alunos ou profissionais da área. que podem ser utilizados para o ensino dessa plataforma. uma vez que surge como um novo conceito de hardware livre.1) Neste contexto. o projetista não deve necessariamente conhecer profundamente o dispositivo. p. que podem ser aplicados em treinamentos e minicursos dentro da própria Universidade. (MARGOLIS. .1 Objetivos O presente trabalho visa apresentar uma plataforma eletrônica microcontroladora tendo por base a tecnologia do Arduino. especialmente por desenvolvedores que querem criar seus protótipos com facilidade. 1. ou até mesmo usuários com necessidade de desenvolver um projeto eletrônico e que possuem conhecimentos elementares na área. Além disso.18 Arduino traz esse conceito de plataforma. Também é uma ferramenta de fácil utilização. construídos e testados vários experimentos básicos e complexos. O Arduino também foi projetado para ser usado por pessoas sem formação técnica. pois em uma mesma placa pode-se perceber a existência de um microcontrolador e facilmente se pode acessar os seus pinos de entrada e saída já pré-definidos. o software inclui uma abundância de código de exemplo para demonstrar como usar as mais variadas aplicações da placa Arduino. neste trabalho foram projetados. Como objetivos secundários. 2011. Margolis 2011 fala sobre o a proposta de criação: O Arduino é usado em muitos programas educacionais em todo o mundo. nota-se a relevância do Arduino na aplicação de projetos educacionais em vários níveis do conhecimento. uma vez que para o seu uso em aplicações elementares. em termos de desenvolvimento de trabalhos acadêmicos. suas funções e atualmente. demonstrando a funcionalidade do Arduino. dando ênfase à sua funcionalidade. bem como dos seus sensorshields e a descrição dos experimentos que foram construídos para posterior utilização em treinamentos. indo portanto além do estudo sobre a disposição dos elementos dentro do microcontrolador utilizado. são mostrados vários exemplos de experimentos desenvolvidos para o laboratório. bem como as mais variadas placas de sensores (sensorshields) utilizadas . Sistemas Embarcados e do Projeto Arduino. • Capítulo 4: neste capítulo. são apresentados conceitos sobre alguns especificações. Desta forma.19 1.2 Motivação A principal motivação desse trabalho foi apresentar para a comunidade universitária da UFMA a plataforma Arduino.3 Organização do Trabalho Este trabalho está dividido em seis capítulos e referências bibliográficas: • Capítulo 2: neste capítulo são abordados alguns conceitos sobre Microcontroladores. Uma segunda motivação consistiu em poder contribuir para disseminar o conhecimento de plataformas microcontroladoras voltadas para o projeto como um todo e não somente para a arquitetura do microcontrolador. Neste último será descrita a evolução de todas as placas bem como da placa mãe dos projetos que fazem parte deste trabalho. os resultados dos projetos elaborados nesse trabalho podem ser utilizados em vários níveis do saber tecnológico. componentes eletrônicos usados no projeto. 1. devido esta ser uma ferramenta de boa acessibilidade. bastando apenas determinar o objetivo do projeto e conhecer o circuito eletrônico no qual a plataforma Arduino estará inserida. possuir baixo preço e não ser do conhecimento geral do corpo discente da Universidade Federal do Maranhão. tanto em Instituições de Ensino Técnico e Tecnológico como em centros de treinamentos de empresas do setor. • Capítulo 3: neste capítulo. 20 • Capítulo 5: neste capítulo. . é apresentado um importante sensorshield da plataforma Arduino que interage na comunicação com a Internet bem como as especificações para projetos futuros. onde são comentadas todas as potencialidades da plataforma Arduino que foram validadas com testes em laboratório. • Capítulo 6: são apresentadas as conclusões. O único componente externo que pode ser necessário é um cristal para determinar a frequência de trabalho (LIMA. Intel. É um componente muito versátil. baixo consumo de energia. Vários conceitos básicos da plataforma foram contemplados e todos os modelos das placas foram descritos durante o capítulo. de dados e RAM. O texto também traz a descrição sobre os sensorshields. entre outras vantagens. 24). Atualmente várias empresas como Atmel. 2010. Microcontroladores são dispositivos capazes de efetuar o controle de equipamentos eletrônicos ou mesmo de máquinas de pequeno e grande porte. Basicamente. com maior capacidade de processamento. temporizadores e circuito de clock embutidos.1 Microcontroladores e Sistemas Embarcados Os microcontroladores destacam-se por possuírem várias funcionalidades em único chip. Texas. robustos. através de programação realizada em diferentes tipos de linguagem.21 2 PLATAFORMA ELETRÔNICA MICROCONTROLADORA. Microchip. . 2. que são elementos importantes para um bom desempenho dos projetos com o Arduino. pois ele é programável e pode ser empregado em diversas aplicações. Lima 2010 mostra que o desenvolvimento dos microcontroladores está associado ao grande numero de funções que ele pode executar a partir de um programa desenvolvido para uma determinada tarefa. entre outros fabricantes possuem microcontroladores cada vez mais velozes. Em seguida é descrita a trajetória do projeto Arduino desde o surgimento até a criação do Arduino UNO. culminando com a análise das principais diferenças entre as placas. Motorola.ARDUINO O presente capítulo descreve a teoria básica dos microcontroladores e dos sistemas embarcados bem como as suas principais funcionalidades. um microcontrolador é um microprocessador com memórias de programa. as quais foram atingidas devido o alto investimento nas áreas de pesquisa e desenvolvimento. Lima 2010 apresenta a seguinte definição: Um microcontrolador é um sistema microprocessado com várias funcionalidades (periféricos) disponíveis em um único chip. p. Sistemas comandados por microcontroladores estão cada vez mais presentes no cotidiano das pessoas. permitindo aplicação nas mais diversas áreas (LIMA.18). som. encontrados em diversos equipamentos dentre os quais destacamos: aparelhos de comunicação móvel. modens.1. câmeras digitais.22 O desenvolvimento dos microcontroladores se deve ao grande número de funcionalidades disponíveis em um único circuito integrado. controle de trajetória de robôs dentre outros. onde suas aplicações vão desde sistemas muitos simples (uma máquina de lavar roupas) até os sistemas mais complexos como processamento digital de sinais. a flexibilidade de projeto e de formas de trabalho com um hardware específico são inúmeras.1. fornos de micro-ondas e outros aparelhos eletrodomésticos inclusive com controle remoto.1 – Diagrama esquemático de um microcontrolador típico Fonte: LIMA. p. em diferentes partes como. brinquedos. Figura 2. Como o seu funcionamento é ditado por um programa. TV digital. 2010.1 Sistemas Embarcados A nossa sociedade está cercada por incontáveis sistemas embarcados. Até mesmo em alguns carros são usados vários deles. Com base nos conceitos acima nota-se que a grande vantagem de se colocar várias funcionalidades em um único circuito integrado é a possibilidade de desenvolvimento rápido de sistemas eletrônicos com o emprego de um número pequeno de componentes externos como mostrado no diagrama esquemático da Figura 2. . 2010 2. em vez de um disco rígido. Sistemas embarcados são geralmente desenvolvidos para uma tarefa específica.2 Histórico do Projeto Arduino O projeto Arduino foi iniciado na cidade de Ivrea.000 placas do projeto. 2. os sistemas embarcados são dispositivos "invisíveis". 1 http://www. freio ABS.2. O software desenvolvido para sistemas embarcados é muitas vezes chamado firmware e é armazenado em uma memória ROM ou memória flash. Até julho de 2011 foram vendidas mais de 120. A Figura 2. que pode executar os mais diversos programas simultaneamente e com diferentes funções. ou até controlar o tráfego aéreo. Todos estes fatores também podem ser traduzidos em custo reduzido. que estão cada vez mais presentes em nosso cotidiano. tendo por objetivo tornar os projetos de sistemas microcontrolados mais simples. de acordo com o site oficial do Arduino1. desde uma pequena placa de algum brinquedo moderno. airbag. etc.cc . ao contrário de um PC. Processadores utilizados em alguns sistemas embarcados geralmente têm preços bem menores que processadores convencionais. na Itália em 2005. até uma máquina com centenas de processadores. Por vezes o sistema também é executado com recursos computacionais limitados: sem teclado. no sistema de injeção eletrônica.23 por exemplo. Um sistema embarcado pode ser. Também alcançou a marca de 50. destinada a criar desde previsões sobre mercados de capitais. Em Morimoto 2007 afirma-se que. pela Prix ArsEletronics.arduino. Em 2006 o projeto recebeu menção honrosa na categoria Comunidades Digitais em 2006. Por questões de segurança e aplicabilidade alguns ainda possuem restrições para computação em tempo real. de forma que muitas vezes sequer percebemos que eles estão lá. sem tela e com pouca memória. Ele foi desenvolvido numa escola de engenharia e com orçamento menor em relação aos custos na época. computador de bordo. mostra os principais marcos históricos do Arduino desde a criação.000 placas vendidas até outubro de 2008. A plataforma ainda era elementar e contava apenas com a comunicação tipo serial RS232. tendo em vista que essa placa conta com mais memória do microcontrolador e com mais velocidade no envio e recebimento de dados. Embora o Arduino seja uma plataforma que pode ser desenvolvida com base em qualquer microcontrolador. utiliza os microcontroladores ATMEGA 328. No presente trabalho. Em 2010 foi lançado o Arduino UNO. o Arduino Diecimilia ganhou a comunicação USB o que tornou o projeto mais flexível e alavancou as vendas. utilizamos duas placas que. A placa foi adaptada para conectar-se facilmente com outros dispositivos. No Brasil. existem . um grupo acadêmico com a proposta de reduzir os custos com projetos microcontrolados ganhou notória evolução e reconhecimento a nível mundial em um curto intervalo de tempo.2 – Evolução do projeto Arduino Em 2005. assim como no restante do mundo. que é a placa base mais moderna atualmente e que segue com o mesmo sucesso. 2. Em 2007. com o lançamento do Arduino Duemilanove foi corrigido uma série de erros de operação da placa anterior.3 Conceitos Básicos O Arduino não é um microcontrolador e sim uma plataforma eletrônica que possui uma série de dispositivos eletrônicos agregados a um microcontrolador em uma placa de circuito integrado. Em 2009.24 Figura 2. pois possui a descrição bem detalhada de suas portas de entrada e saída bem como o acesso facilitado para sua comunicação com outros dispositivos e até mesmo a placas de expansão que também são confeccionadas para adaptar-se à placa principal. o modelo mais utilizado nas versões comerciais é o ATMEL. mas que também pode ter o seu projeto adaptado para qualquer outro microcontrolador que suporte a linguagem.abril. Outras empresas podem vender kits para a montagem de dispositivos compatíveis com Arduino. 2009. como era uma plataforma nova e de código aberto deu confiança às pessoas.com. Um exemplo de produto derivado das placas Arduino que atende a um uso específico é a ArduPilot. Os desenvolvedores do projeto disponibilizam todos os códigos e diagramas de montagem para qualquer usuário interessado em confeccionar o seu próprio protótipo. seja por alunos 2 http://info. Trata-se de uma linguagem C++ que foi adaptada à disposição dos pinos das diversas placas do projeto. de fácil utilização. Além disso. 30) O Arduino é uma plataforma open-source projetada com um microcontrolador simples de 8 bits da família AVR da fabricante ATMEL e que utiliza uma linguagem baseada em C/C++. p. Em reportagem à revista INFO2. (ROSA. David Mellis. Elas sabiam que poderiam continuar expandindo a plataforma mesmo que o desenvolvedor original desistisse dela.3) O projeto Arduino tem como uma de suas vantagens. Segundo David Mellis 2009 “o código aberto traz algumas vantagens ao hardware que é a possibilidade de adaptar o modelo de negócios e o fornecimento a diferentes situações.br/professional/tendencias/hardware-livre-leve-e-solto. p. flexível e. da mesma forma que vendem as placas montadas para todo o mundo. da Arduino. 2011.shtml . O Arduino também possui uma linguagem própria.25 diversas cópias modificadas que foram desenvolvidas e adaptadas. principalmente. ser uma ferramenta de baixo custo. elas deveriam ter acesso ao código-fonte do software e ao projeto do hardware. tais como o Freeduino. Tatuino dentre outras versões. Mellis falou que a empresa queria que outras pessoas estendessem a plataforma para adequá-la às suas necessidades. por exemplo. Também podem redesenhar os produtos para trabalhar com componentes que são mais baratos e fáceis de conseguir em seus países. placa de código aberto para navegação autônoma em aeronaves. Para isso. em março de 2009.” (Revista INFO. os desenvolvedores a nomearam de linguagem Arduino. contou como um hardware de código aberto (livre) pode se espalhar pelo mundo. tais como comunicação ethernet e sem fio.26 profissionais da área. ou até mesmo usuários que tem necessidade de desenvolver um projeto eletrônico. As placas Arduino contam com um sistema de boot incorporado ao microcontrolador. botões. As placas Arduino podem ser encontradas para venda em sites de representantes comerciais ou montadas pelo próprio usuário. ou outros microcontroladores e ferramentas mais sofisticadas.TransistorTransistor Logic (5 V). Através dos diversos recursos apresentados pela plataforma. os requisitos mínimos para utilização de uma das placas da plataforma Arduino é um computador com entrada USB e o software de compilação encontrado na página dos desenvolvedores do projeto3.arduino. que são característicos do microcontrolador utilizado na placa. FPGAs. as placas Arduino contavam com um microcontrolador ATMEGA. como em projetos mais simples que dispõe de LED. As placas Arduino possuem algumas portas de entrada e saída. 2. CIs. e porta de comunicação serial. Além disso. Além disto. LCD.4 Os Principais Modelos da Plataforma Arduino Desde o princípio. ou outros dispositivos controláveis como PLDs. que tem por objetivo interpretar a linguagem Arduino e traduzi-la para linguagem de instrução do microcontrolador. analógicas e digitais à nível TTL . analógicas e digitais. além de uma ou mais portas de comunicação serial. entre outros. o Arduino pode interagir em diversos níveis de projetos. portas de entrada e saída. 3 http://www. A seguir são apresentadas as placas disponíveis desde o primeiro modelo até o mais atual e ainda outros modelos mais específicos.cc/ . Hoje existem placas cada vez mais sofisticadas com configurações que atendem cada vez mais as necessidades do público. já que os desenvolvedores disponibilizam em seu site os arquivos do esquemático e do layout da placa. os componentes utilizados para fabricação das placas são de fácil acesso e encontradas em qualquer loja de componentes eletrônicos. comunicando com um PC através de porta USB. É a placa mais simples de montar. 2011.USB. Figura 2.1 Versão Arduino – Interface Serial A plataforma Arduino Interface Serial foi a primeira placa desenvolvida em 2005.3 – Arduino Interface Serial Fonte: Arduino. possuía um ATMEGA8 e uma FTDI para conversão RS232 . A terceira geração de Arduino com porta USB foi Arduino NG (Nuova Generazione). por causa de sua porta de comunicação estar caindo em desuso. É considerada hoje uma placa obsoleta. que contava com componentes SMD em substituição aos convencionais. que continha um novo FTDI para conversão RS232 – USB e um novo . conforme Figura 2. Esta primeira placa tinha um problema de layout nas ligações com conector USB e teve uma segunda versão lançada. os componentes são de encapsulamento tipo DIP e não conta com componentes do tipo SMD. 2. que possui 8 KB de memória de programa do tipo flash. pois os componentes utilizados são do tipo convencional. sendo vendida principalmente como um kit que deveria ser montado pelo usuário.27 2.4. considerados ideais pelo mercado. Possui um microcontrolador ATMEGA8. foi lançada a placa Arduino Extreme. componentes discretos e uma porta serial do tipo RS232. sendo lançada a seguir uma segunda versão em que o layout possuía plano de terra.4.3. Seguida desta. Além disso.2 Arduino – evolução USB O Arduino USB foi a primeira placa fabricada com conexão USB. alimentação via USB ou externa através de fonte de alimentação. I2C. Figura 2. 2011. . conversor A/D de 10 bits. O modelo do Duemilanove é apresentado na Figura 2. enquanto o modelo 2009 contava com um ATMEGA 328 com 32 KB (Flash). 2.28 microcontrolador ATMEGA 168.5. Figura 2.4. comunicação via USB.4. Além disso o modelo 2007 contava com um microcontrolador ATMEGA 168 com 16 KB.5 – Arduino Duemilanove Fonte: Arduino. SPI. Conta com 12 portas de I/O digitais. 2011. 6 portas de I/O analógicas. O Arduino Extreme e o NG são apresentados na Figura 2.4 – Arduinos – evolução da comunicação USB Fonte: Arduino.3 Versões Arduino Duemilanove e Diecimila O Arduino Duemilanove e Diecimilia são os modelos 2009 e 2007 das placas padrão da plataforma. Canais PWM. entre outras características. 4. 2011. O UNO foi utilizado para marcar o lançamento do Arduino 1.29 2. como apresentado na Figura 2.4 Versão Arduino UNO O Arduino UNO é a última versão das placas Arduino.0 e junto a este serão obtidas as versões de referência. Figura 2.6. entre outros recursos conforme mostrado na Figura 2. que possui 256 KB de memória flash e assim como o UNO possui um ATMEGA 8 como conversor RS232 – USB. Com isto o arquivo de carregamento do sistema diminuiu de tamanho. . outros recursos como portas seriais extras.4. Essa placa foi desenvolvida originalmente com o ATMEGA 1280. 2.5 Versão Arduino MEGA O Arduino MEGA é uma placa que possui como características principais um microcontrolador que possibilita principalmente uma quantidade maior de portas de I/O. o que economizou na memória flash do ATMEGA328 e acelerou o processo. Lançada no final de 2010 possui um microcontrolador ATMEGA328 e a novidade está no conversor RS232 – USB que conta com um ATMEGA8 substituindo o FTDI. PWMs. um microcontrolador com 128 KB de memória flash e um FTDI. que foram substituídos posteriormente por um ATMEGA 2560.6 – Arduino UNO Fonte: Arduino.7. 4.6 Versão Arduino Mini O Arduino Mini é a menor placa de todas as placas. 2011.8 – Arduino Mini Fonte: Arduino.8. . pois neste caso é necessário apenas um adaptador no qual pode gravar quantas placas mini se desejar. Figura 2. mas não possui conexão USB. pode ser considerada a miniaturização da Diecimila por possuir grande parte dos recursos desta. 2. Esta placa é ideal quando se deseja otimizar espaço e projetar mais de um protótipo. 2011.7 – Arduino MEGA 2560 Fonte: Arduino. Pode-se utilizá-la diretamente em um protoboard ou então soldá-la ao hardware do protótipo em desenvolvimento. como mostra a Figura 2. Ela é baseada em um ATMEGA168.30 Figura 2. Como o próprio nome sugere.8 Versão Arduino Bluetooth O Arduino Bluetooth é uma placa que se difere em vários aspectos as Arduinos tradicionais. porém um pouco mais alongada.9 – Arduino Nano Fonte: Arduino.31 2. esta é a placa Arduino com o orçamento mais alto e também a mais sensível.4. 2011. o módulo de Bluetooth. Sua alimentação é de no máximo 5. Possui algumas outras peculiaridades.10. pois possui praticamente todos os recursos que o Duemilanove dispõe inclusive conexão USB. conforme Figura 2. Figura 2. conforme a Figura 2.7 Versão Arduino Nano Esta placa pode então ser considerada a miniaturização da Arduino Duemilanove completo. como por exemplo. mas em relação ao tamanho. é necessário que a alimentação ocorra diretamente nos pinos de alimentação disponíveis.5 V que serve para carregar a bateria presente no módulo.9.4. esta placa é semelhante à Mini. . diferente do que ocorre no Duemilanove. o Arduino Bluetooth possui conexão sem fio via Bluetooth incorporado na placa. Devido a sua complexidade. Para alimentá-lo por uma fonte externa. 2. que deve ser configurado conforme exige o fabricante. 32 Figura 2.10 – Arduino Bluetooth Fonte: Arduino, 2011. 2.4.9 Versões Arduino Fio e Lilypad Estas duas placas Arduino são de uso mais específico. O Arduino Lilypad foi desenvolvido em um formato circular o que viabiliza a sua aplicação, que é ser incorporado a roupas e tecidos dentre outras aplicações. Já o Arduino Fio é uma placa desenvolvida para com o Funnel, que é uma linguagem de programação 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 Diferenças Cada Arduino tem sua particularidade, sendo que o melhor é buscar o custo/benefício mais interessante. O mercado proporciona opções de alto e baixo custo, que fazem toda a diferença na montagem final do projeto, dependendo do propósito do mesmo. Projetos mais simples que não exigem otimização de espaços, podem utilizar um Arduino UNO ou Duemilanove, dependendo se é necessário uma boa velocidade do microcontrolador ou não. Aplicações em que velocidade não é extremamente essencial, o Arduino Duemilanove é suficiente. Caso contrário, um Arduino UNO é mais interessante, já que o carregamento do arquivo de inicialização para a memória de programa do microcontrolador principal é executado por um microcontrolador a parte. De acordo com a publicação científica 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 inicialização (bootloader) permite um canal direto de carregamento da placa com o computador, o que dá uma velocidade muito grande na execução do projeto, pois a própria placa funciona como gravadora do microcontrolador. Quando são necessárias muitas portas de I/O, digitais ou analógicas, o Arduino Mega é a melhor opção. 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 otimização de espaços, os Arduinos Mini e Nano são as opções 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 opção bastante onerosa, mas que dependendo da situação é mais simples de aplicar do que adquirir um sistema sem fio e acoplar externamente a outro tipo de Arduino. No mercado é possível adquirir placas baseadas no Arduino, como o Freeduino, o Chinduino, Seeduino, Iluminato e até mesmo a versão brasileira com uma estampa da bandeira do Brasil na parte de baixo da placa. Todas estas placas são os chamados clones e podem apresentar peculiaridades em relação ao original, inclusive melhorias como uso de um microcontrolador mais eficiente, maior número de portas, entre outros. 34 A escolha da placa fica por conta da relação custo benefício do projeto, que deve fazê-lo da melhor forma possível e pensando em todas as possibilidades futuras, mas se necessário mudar o tipo de placa Arduino depois de iniciado o projeto, não há problema algum, já que todas as placas tem a linguagem compatível entre si. 2.5 Placas Arduino SensorShield O Arduino possui uma séria de adaptadores, que otimizam as suas funcionalidades, conforme as Figuras 2.12 e 2.13, denominados Arduinos sensorshields. Os sensorshields são placas plug and play que garantem ao Arduino uma peculiaridade no desenvolvimento de projetos. Possuem funções pré-definidas, tais como zigbee (comunicação sem fio), controle remoto, adaptador ethernet, interface com motores e adaptação para vários tipos de sensores. São facilmente adaptáveis ao Arduino e servem para aplicações específicas. Figura 2.12 – Arduino Sensorshields – Módulos Zigbee e InputShield Fonte: Arduino,2011 2011 .35 Figura 2.13 – Arduino Mega GSM GPRS GPS Fonte: Arduino. 1 – Comparativo com as principais características 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.36 3 CARACTERÍSTICAS TÉCNICAS Os microcontroladores ATMEGA são bastante flexíveis e os programas desenvolvidos para um microcontrolador desta família necessitam de poucos ajustes. Tabela 3. é apresentado na Tabela 3. Cada qual possui peculiaridades. No Arduino ainda é utilizado um cristal ressonador de 16 MHz como gerador do sinal de "clock" externo dos microcontroladores. 2011 SRAM(Kb) 1 1 2 8 8 CanaisA/D 6 8 8 16 16 UART 1 1 1 4 4 Alguns conceitos básicos sobre as características destes microcontroladores são: • Portas de I/O são as portas de entrada e saída de dados.5 1 4 4 Fonte: Rosa.1 um comparativo com as principais características relativas ao ATMEGA. diferentemente de outros modelos. às vezes até nenhum. ATMEGA168. para serem utilizados em outros microcontroladores do mesmo gênero. • A memória flash delimita o tamanho máximo do programa que será executado pelo Arduino. como disposição dos pinos. e que servem para comunicar externamente o microcontrolador e hardware. Os microchips utilizados nas placas Arduino são: ATMEGA8. Em relação aos recursos de cada um dos microcontroladores.5 0. analógicos ou digitais. ATMEGA1280 e ATMEGA2560. . mas a programação é a mesma e vale para qualquer um deles. O bootloader do Arduino ainda utiliza uma pequena parcela desta memória. Isto possibilita que o microcontrolador execute cerca de 16 milhões de instruções por segundo. ATMEGA328. editar e compilar os programas e carregá-los na placa Arduino.1. utilizado para criar. Nesta seção são apresentados alguns aspectos desse software bem como da conexão da placa com o computador e algumas inconsistências que podem interferir na comunicação. No UART é um periférico responsável pela comunicação serial entre o quais só serão excluídos quando o programa sobrescrevê-los. Em seguida é descrita a placa Arduino UNO por completo. além de apresentar outros recursos como gravação do bootloader em um microcontrolador ATMEGA e um monitor serial simples. . todos os pinos externos e componentes que fazem parte do projeto da placa explicitando as suas funções e os recursos disponíveis. os resultados obtidos podem ser adaptados para quaisquer outros modelos. pode ser utilizado em qualquer uma das placas da família Arduino.37 • A memória EEPROM é uma memória utilizada para armazenar dados. No presente trabalho foi adotada como placa padrão o Arduino UNO e o Duemilanove para execução dos projetos desenvolvidos e demonstração dos exemplos de programação. • ATMEGA a conversão A/D tem precisão de 10 bits. os A memória SRAM é uma memória utilizada para armazenar dados Canais A/D são canais que convertem dados analógicos em digitais. 3. Entretanto. • temporários. 3.1 Software Arduino IDE O Arduino IDE é um programa multitarefa desenvolvido em JAVA. como por exemplo a comunicação serial entre Arduino e PC.1 Arduino e a Conexão com o Computador O software utilizado para desenvolver os projetos da plataforma Arduino denominado Arduino IDE (Integrated Development Environment ou Ambiente de Desenvolvimento Integrado). salvar. • microcontrolador e o mundo externo. . Figura 3. entres outros. uma ferramenta que auxilia o programador a aprender a linguagem Arduino ou relembrar códigos necessários durante o projeto que está sendo desenvolvido. referências. 2011 Na página oficial do Arduino é realizado o download de um arquivo compactado. No Anexo I desse trabalho é apresentado todo o passo a passo da utilização do programa com todos os módulos e características da linguagem. no qual está uma pasta que contém uma quantidade razoável de arquivos. exemplos.1 mostra a tela do software Arduino em execução.1 – Software Arduino Fonte: Arduino. O programa ainda possui uma série códigos-fonte exemplos. drivers para instalação do CI FTDI.38 O programa possui uma interface simples e rápida. A Figura 3. bibliotecas. que inclui um editor de códigos-fonte com recursos de realce e identificação automática de determinados códigos digitados no programa. Ela é derivada da placa Arduino Duemilanove que possui um CI de conversão RS232 – USB. A Figura 3. No caso de necessitar de porta serial para comunicar durante o programa.2 – Design da placa Arduino UNO Fonte: Arduino. Figura 3. 6. 9. Nas portas 11. a partir do primeiro pino no canto superior direito da placa. A grande novidade desta placa está na redução do bootloader do sistema que foi incorporado a um ATMEGA8. apenas para comunicação (são os pinos Tx e Rx).2 mostra em detalhes.2 A Placa Arduino UNO A placa Arduino UNO é a mais recente e pode-se considerá-la atualmente como referencia dessa plataforma. o pino digital 0 e seguindo no sentido anti-horário. observa-se na Figura 3. • Pinos 2 à 13: São as portas de I/O digitais. Ainda nestes pinos tem-se . os diversos componentes da Arduino UNO. 5 e 3 estão disponíveis os 6 canais PWMs da placa. temos os seguintes componentes e funções: • Pinos 0 e 1: São portas de I/O digitais quando o modo serial não for utilizado no código fonte. conforme o código fonte executar. estas duas portas não serviram de I/O digitais.39 3. 10.2. 2011 Para detalhar a funcionalidade dos pinos. São portas onde o sinal de saída será 0 V ou 5 V. São 2 níveis de tensão para alimentação externa (5 V e 3. responsável por receber um sinal de referência do hardware externo. ou seja. como as ligações SPI e 2 externas (pinos 2 e 3). Se este pino ficar flutuando. o Arduino considerará como referência 0 V. • externa para o conversor A/D do Arduino.5 V e 10 V. Utilizado como terra referencial Pino AREF: Porta de entrada. MOSI e SCK estão conectados nestes pinos. • Pinos ICSP: Estão disponíveis para o caso de se desejar gravar algum programa ou o bootloader da placa Arduino e significa In-System Programmer. pois trata-se do gerador de clock com precisão do microcontrolador. entrada de energia no pino Vin e um pino de reset externo.3 V) e GND. está disponível a comunicação I2 C. sendo que o ideal é a utilização de fonte de alimentação com tensão entre 7. • outro microcontrolador (ATMEGA 8). É possível se utilizar uma bateria de 9 V com um adaptador para este tipo de entrada. • interrupções Pino GND: Porta referente a um terra digital. Se observado corretamente. São eles: Botão de Reset: Este botão é 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. • alimentação externa do tipo fonte CA/CC com tensão máxima de 15 V. • Pinos Analog in: São as 6 portas analógicas da placa e possuem conversão A/D com 10 bits de precisão. • Pinos de alimentação (Power): Podem ser utilizados como fonte de tensão para o hardware externo. O Arduino também possui uma série de outros elementos que são integrantes básicos das estruturas das placas. é possível obter 1024 níveis de tensão diferentes com estes 10 bits (2ଵ଴ bits). . pode-se utilizar esses pinos para comunicação SPI da placa. este componente é um Adaptador de entrada para fonte: É a entrada jack para uma fonte de • microcontrolador e tem por função facilitar ao usuário a reinicialização da placa.40 algumas outras funções especiais. pois os pinos MISO. Estes pinos podem ser utilizados como portas de entrada e saída e ainda nestes. • Arduino. funções e que no caso da placa UNO. É ligado ao pino 13 de I/O digital e pode ser utilizado como teste de verificação de defeito da placa. • Esta entrada pode ser utilizada como fonte de alimentação. já que a USB do PC fornece uma alimentação de 5 V estável. o LED Serial Tx e Rx: Sinalizam que está ocorrendo transmissão de dados e recepção de dados de e para a placa. estabilizar em 5 V uma alimentação de uma fonte de tensão externa. • sendo: . • Microcontrolador ATMEGA328: Responsável por praticamente todas as LED de sinalização: São quatro os LED de sinalização presentes na placa. o Pino 13 LED: É o único LED presente na placa para utilização via código.41 • Regulador de tensão: Regulador de tensão do tipo 7805M para regular e Entrada USB: Utilizada para comunicação e programação da placa Arduino. trata-se de um ATMEGA328. o LED de Potência: Indica que a placa está alimentada. 2. Os shields são acompanhados de códigos para servir como interface com o código principal de tal forma que devemos incluir as bibliotecas referentes à sua função para o devido reconhecimento da placa principal do projeto.1.1 Acionamento de Dispositivos de Saída O projeto em questão é desenvolvido com o intuito de descrever as ferramentas necessárias para implementar um acionamento de dispositivos de saída pelos pinos da placa Arduino. As novas placas já são fabricadas com o LED instalado e também placas existe um resistor de 1 kΩ no . TCP/IP sem fio. 4. 4. Os projetos também podem ser implementados com os shields. como apresentado na Figura 3.1 Projetos Elementares Os projetos. que são placas adicionais que podem ser agregadas ao Arduino original para aumentar as suas capacidades de processamento. expansão de pinos e funcionalidades.42 4 PROJETOS E IMPLEMENTAÇÕES COM O ARDUINO Neste capítulo são abordadas várias potencialidades e funcionalidades da placa Arduino bem como a descrição completa de alguns projetos que utilizam essa placa como principal elemento de controle. Dentre essas funcionalidades podemos destacar os shields de ethernet. conforme mostrado na Figura 4. As placas Arduino são projetadas de forma a facilitar o piscar de um LED com o uso do pino digital 13. acionamento sequencial e o acionamento de um motor via PWM do Arduino. com implementações práticas apresentados nesta seção envolveram acionamentos de dispositivos de saída. No presente experimento foi demonstrado o simples acionamento de um LED (Light Emitter Diode). motorshield etc. leitura das entradas do Arduino.1. Os shields seguem a mesma filosofia que o conjunto de ferramentas originais: são fáceis de montar e baratos de produzir e foram desenvolvidos tendo como o principal foco a funcionalidade do projeto e não na arquitetura do microcontrolador que está sendo utilizado. 1. verificar se passou o tempo .43 pino 13. o que lhe permite conectar o LED diretamente a ele. pois demonstra o acionamento dos pinos de saída da placa em nível alto e baixo para respectivamente ligar e desligar. } void loop( ) { digitalWrite(13. // aguarda 1 segundo digitalWrite(13. OUTPUT).1 – Conexão do LED na placa Arduino No Quadro 4. // liga o LED delay(1000). O que o programa faz é observar quando foi a última vez que o LED foi ligado ou desligado e assim.1 – Código de acionamento dos pinos de saída /*LED pisca-pisca: liga e desliga um LED conectado a um pino digital em intervalos de 2 segundos. a cada ciclo de loop ( ). deve-se usar um resistor externo. senão todo o restante do programa fica paralisado enquanto o LED pisca. Quadro 4. Para conexão a outro pino digital. Para tanto não se deve usar a função delay ( ). Figura 4. Para demonstrar esse exemplo segue um código que demonstra como é possível acionar um dispositivo periodicamente (nesse caso um LED) sem o uso da função delay ( ). // desliga o LED delay(1000). O código de exemplo é muito simples. temos o código para ser compilado e executado na placa Arduino. HIGH). LOW). */ void setup( ) { pinMode(13. // aguarda mais um segundo } Existem situações em que é necessário que o dispositivo seja acionado em intervalos periódicos ao mesmo tempo em que outra função é executada (tal como observar o estado de um interruptor). o LED é ligado caso esteja desligado e vice-versa. if(currentMillis . um estado de inércia que nem sempre é interessante para o projeto.2 deve ser o padrão frente à função delay ( ). void setup() { pinMode(LEDPin. se esse tempo tiver passado. // se o LED está apagado acenda-o ou vice-versa: if (LEDtate == LOW) LEDtate = HIGH. digitalWrite(LEDPin. LEDtate). longpreviousMillis = 0. } // configura o pino digital como saída // ultimo valor do LED // ultimo momento que LED foi atualizado // tempo de transição entre estados (milisegundos) void loop() { // verifica se é o melhor momento para atualizar o LED. longinterval = 1000.2 – Código pisca LED constintLEDPin = 13. ou seja.44 determinado. OUTPUT). //LED conectado ao pino digital 13 intLEDtate = LOW. Quadro 4. O código do Quadro 4. else LEDtate = LOW. } } . pois o delay significa que o microcontrolador irá aguardar um determinado intervalo de tempo não executando nenhuma outra atividade. se a diferença entre o tempo atual e o último tempo que piscamos o LED é maior que o tempo de transição entre estados? unsigned long currentMillis = millis().previousMillis> interval) { // ultimo tempo em que o LED piscou previousMillis = currentMillis. O segundo vai do outro terminal do interruptor até o pino digital 2 do Arduino. O primeiro vai de um dos terminais do interruptor ao GND. observa-se que o pino ainda se mantém conectado aos 5 V. Quando o interruptor está livre (não pressionado). O circuito também pode ser ligado na lógica reversa com o resistor de pull-up mantendo o pino 2 em nível baixo. obtém-se um nível alto.2. verifica-se que foram conectados dois fios à placa Arduino. de forma que o pino do Arduino é ligado ao terra do circuito e obtém-se um nível baixo.45 4. Por isso se utiliza um resistor de pull-up ou pull-down no circuito. porque no pino o nível de tensão está flutuando com valores aleatórios. liga um LED quando é pressionado um interruptor.2 – Interruptor na placa Arduino Fonte: Arduino. de forma que o pino do Arduino está conectado aos 5 V (via o resistor pull-up) e ao ler o pino. O exemplo a seguir. O código referente à aplicação prática está presente no Quadro 4. o outro vai ao pino de fornecimento de 5 V do Arduino). ocorre à conexão entre seus terminais. Quando o interruptor é fechado (pressionado). 2011 . Se por acaso o pino digital for desconectado da montagem.1. não há conexão entre seus dois terminais. Nesse caso. Foi ligado um resistor pull-up de 10 kΩ nesse último terminal (um terminal do resistor vai ao terminal do interruptor. o LED poderá piscar de forma irregular. mas o resistor de pulldown com que o pino esteja mais próximo ao terra. Figura 4.2 Acionamento do Arduino via Dispositivo de Entrada O interruptor instantâneo é um componente que conecta dois pontos de um circuito ao pressioná-lo. entre níveis alto e baixo. Conforme mostrado na Figura 4.3. LOW). Esta função também permite o ajuste do tempo de filtragem.4 realiza esse filtro através da função milis ( ) para acompanhar o momento em que o interruptor é pressionado. // desligar LED }else { digitalWrite(LEDPin. INPUT). necessita-se de um filtro para evitar ruídos do interruptor toda vez que ele é acionado. em diversos projetos esse tipo de função é interessante. . // ligar LED } } Em situações mais críticas. OUTPUT). HIGH). // ler o valor de entrada if (val == HIGH) { // verificar se a entrada é HIGH (interruptor livre) digitalWrite(LEDPin.46 Quadro 4. pois trepidações causam reconhecimento semelhante a múltiplos toques. // escolha o pino de entrada (para o interruptor) intval = 0. // declara-se o LED como saída pinMode(inPin. // variável para ler o estado do interruptor void setup() { pinMode(LEDPin. por parametrizar o ajuste de tempo em que função atuará no sistema a fim de evitar a trepidação.3 – Código do acionamento de um pino intLEDPin = 13. O código apresentado no Quadro 4. // escolha o pino para o LED intinPin = 2. // declara-se o interruptor como entrada } void loop(){ val = digitalRead(inPin). // transformar-se-á logo em um valor grande demais para um ''int'' long time = 0. // medido em milissegundos. } digitalWrite(outPin.47 Quadro 4. se a entrada // foi de LOW para HIGH). OUTPUT). // estado atual do pino de entrada intprevious = LOW. state). aumente se ocorrer irregularidades void setup() { pinMode(inPin.. pinMode(outPin.time >debounce) { // inverta a saída if (state == HIGH) state = LOW. // último momento em que o pino de saída foi atualizado longdebounce = 200.e lembre-se do momento do último toque time = millis(). // tempo do filtro. e esperamos o bastante desde o // último toque de forma a ignorar o ruído. // se acabamos de pressionar o interruptor (isto é.. } . previous = reading.. else state = HIGH. intoutPin = 13. // estado anterior do pino de entrada // as seguintes variáveis são do tipo ''long'' porque o tempo. INPUT). // .4 – Código do filtro de ruído de uma chave intinPin = 7. } void loop() { reading = digitalRead(inPin). // estado atual do pino de saída intreading. // o número do pino de entrada // número do pino de saída intstate = HIGH.. if (reading == HIGH &&previous == LOW &&millis() . 6. digitalWrite(pins[i]. OUTPUT).3. i <num_pins. int pins[] = { 2. 4. 7 }. digitalWrite(pins[i].48 4. LOW).1. for (i = 0. 3. mais devagar.1 pinMode(pins[i]. // pausando-o. utilizando para tal duas funções: uma para acionar a saída e outra para gerar um retardo. i >= 0. Figura 4. com o uso de resistores de 330 Ω.5 – Código acionamento sequencial int timer = 100. LOW). Os LED estão conectados do pino 2 ao 7 da placa. // ligando-o. // quantidade de LED (tamanho do vetor) void setup(){ int i. conforme mostrado na Figura 4. digitalWrite(pins[i].}} . um por um. i++) // elementos do vetor vão de 0 a num_pins .. // Quanto maior.1. i++) { // varrer cada pino. HIGH).. // e desligando-o. i--) { digitalWrite(pins[i]. O código de acionamento sequencial é apresentado no Quadro 4. // vetor com o número dos pinos intnum_pins = 6. 5. // configurar cada pino como saída } void loop(){ int i. i <num_pins.3 – Acionamento sequencial Quadro 4. for (i = 0. HIGH).3 Acionamentos Sequenciais Neste experimento são utilizados seis LED para apresentar um modo sequencial de acionamento dos dispositivos de saída do Arduino. } for (i = num_pins .5 e através dele é produzido piscar dos LED em sequência. delay(timer). delay(timer). Para o desenvolvimento do experimento.1. conforme mostrado na Figura 4. cujo valor de tensão é usado como referência para o ajuste do ciclo de trabalho do PWM. Com base no valor de tensão do potenciômetro.4. 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 código utilizado no acionamento do motor dc é apresentado no Quadro 4.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.49 4. O controle do motor é feito a partir da leitura de um potenciômetro. Figura 4. de modo a controlar o motor dc.6.4 – Acionamento de um motor de corrente contínua . o Arduino ajusta o tempo dos níveis alto e baixo do PWM. 5 – Transistor MOSFET Quadro 4. que é um tipo de acionamento muito comum em automação e controle. . Serial. delay(10). 6.} void loop() { sensorValue = analogRead(sensorPin). 9.50 Figura 4. Para o experimento em questão. que são as portas 3. 5.6 – Código do acionamento intsensorPin = A0.sensorValue/4).println(sensorValue/4). OUTPUT). foi utilizado o pino 9 para gatilhar o MOSFET que comuta para o funcionamento do motor dc. O Arduino UNO possui no total 12 pinos de I/O digitais. Serial. cujos valores de tensão são 0 V ou 5 V. 10 e 11.} O experimento desenvolvido demonstrou a potencialidade do Arduino ao controlar um motor de corrente contínua via modulação PWM. intsensorValue = 0. As portas PWM estão disponíveis em seis canais. analogWrite(9.begin(9600). void setup() { pinMode(9. apresentado na Figura 4. 4. Quase todos os equipamentos de áudio e vídeo podem ser controlados dessa maneira.6 – Receptor infravermelho dispositivos cada vez mais acessível ao desenvolvedor. O uso dos componentes que são utilizados para implementar sistemas de controle infra-vermelho ficou generalizado. que viabiliza a comunicação desses dispositivos. de modo que o preço desses A seguir é apresentado o modelo de comunicação infravermelha bem como exposição do protocolo de comunicação que foi utilizado para estabelecer as regras de comunicação do controle IR com o Arduino. Figura 4. sendo hoje a forma mais barata para controlar remotamente um dispositivo.6. Não é objeto desse trabalho discutir sobre os protocolos de comunicação via sinal infra-vermelho. A ideia básica do projeto é enviar comandos de um controle remoto para o Arduino através do receptor IR com os valores dos acionamentos sendo apresentados em um display de LCD 16 x 2.2.2 Projeto do Controle Remoto IR O projeto do controle remoto IR precisou de um sensor receptor infravermelho. mas a próxima subseção destina-se exclusivamente ao tratamento do protocolo NEC. O receptor utilizado foi o IRM3638. que foi conectado à placa Arduino como forma de receber o sinal infravermelho.51 4.1 Teoria do Controle Infra Vermelho A comunicação por um sinal infra-vermelho foi desenvolvida ao longo dos anos. . Tem como característica um sinal de 16 bits. existe diferenciação de tempo para a interpretação dos níveis lógicos positivo e negativo.8 – Endereço $59 comando 16 no NEC Fonte: SB-PROJECTS. 2006 Como exemplo de uma mensagem gerada por esse protocolo tem-se a Figura 4. é sempre com o envio de um trem de pulsos de duração de 560 µs como mostrados na Figura 4. espaçado por 2. são transmitidos duas vezes na mensagem.2 Protocolo NEC – Características Técnicas O protocolo NEC é um formato de protocolo japonês utilizado em produtos como os da Sanyo mais antigos.25 ms e novo nível de tensão por 560 µs e repetido a cada 110 ms.52 4. sendo 1. Figura 4. como mostrado na Figura 4.9: . Para diminuição de erros.2.5 ms.25 ms para o nível “1”. 2006 O grande diferencial desse protocolo é a utilização de um bit específico para repetições de 9 ms AGC. Além disso.7: Figura 4. 0 ou 1.12 ms para o nível “0” e 2.7 – Pulsos NEC Fonte: SB-PROJECTS.8 com o endereço $59 e comando $16 iniciando por um bit de 9 ms AGC (Controle de Ganho Automático). A indicação de um bit. com uma portadora de 38 kHz. seguido por um espaço de 4. sendo 8 bits de endereço e 8 bits de comando. 2. são apresentados os códigos de VCR Fisher 530.9 – Repetição de sinal NEC Fonte: SB-PROJECTS. Quadro 4. foi concebido com a itenção de demonstrar a chegada dos dados ao arduino via controle remoto e o receptor IRM3638. 2006 4.53 Figura 4. 2006 No Quadro 4.7. 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Ω .7 – Códigos e endereços 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.3 Projeto com acionamento de display de cristal via controle remoto O projeto desenvolvido com a placa Arduino para receber sinais IR. .11 – Conexão do receptor infravermelho com o Arduino.54 Figura 4.10 – Montagem do Arduino com o display de cristal líquido Figura 4. 12 – Controle infravermelho utilizado no projeto Fonte: SB-PROJECTS. bastando apenas adaptar o código à realidade do projeto a ser desenvolvido. O código para acionamento do controle IR é apresentado no Quadro 4. 4.55 Figura 4.11 e 4. O que é percebido com esse projeto é a relativa facilidade para implementação de envio de dados via infravermelho. Os valores numéricos são apresentados na tela do display de LCD.12.8. . conforme mostrado nas Figuras 4. pois pode-se enviar e receber comandos para fazer qualquer tipo de acionamento e que possibilita uma gama muito grande de possibilidades para a mecatrônica.10. com o acionamento a distancia de diversos equipamentos. 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. 56 Quadro 4. delay(1).h> #define IR_IN 8 LiquidCrystallcd(12. TCNT1 = 0X00. lcd. intir_code=0x00.clear(). if(Pulse_Width>=7&&Pulse_Width<=10)// 560us return 0. ir_code=0x00. i++) {if(logic_value() == 1) ir_code |= (1<<i). } voidpulse_deal() { int i.print(adrL_code. } voidremote_deal(void) { lcd.1). if(Pulse_Width>=7&&Pulse_Width<=10)//560us { while(digitalRead(8)). void timer1_init(void) { TCCR1A = 0X00. TCCR1C = 0X00. i < 16. TIMSK1 = 0X00. TCNT1=0. lcd. adrL_code=0x00. Pulse_Width=TCNT1. i < 8. intPulse_Width=0. } charlogic_value() { TCNT1 = 0X00. TCNT1=0.8 – Código de acionamento do controle IR #include <LiquidCrystal. . } for(i = 0 . TCCR1B = 0X05. while(!(digitalRead(8))). 11. 3. i++) {if(logic_value() == 1) adrL_code |= (1<<i).0). 2). for(i = 0 .setCursor(0. lcd.HEX). 5. int j.print(ir_code. charadrH_code=0x00. else if(Pulse_Width>=25&&Pulse_Width<=27) // 1. Pulse_Width=TCNT1. 4.7ms return 1.HEX). charadrL_code=0x00. lcd. } return -1.setCursor(0. adrH_code=0x00. TCNT1=0. lcd. } } }} void setup() { unsigned char i. while(digitalRead(8)) { if(TCNT1>=1563) { ir_code=0x00ff. } else if(Pulse_Width>=34&&Pulse_Width<=36)//2.INPUT). if(Pulse_Width>=68&&Pulse_Width<=72)//4. return. j++) {if(logic_value() == 1) adrH_code |= (1<<j). while(1) { . if(Pulse_Width>=7&&Pulse_Width<=10)//560us { return.57 } for(j = 0 . }} voidremote_decode(void) { TCNT1=0X00. } void loop() { timer1_init(). Pulse_Width=TCNT1. Pulse_Width=TCNT1. adrL_code=0x00.25ms { while(!(digitalRead(8))) Pulse_Width=TCNT1. return. while(!(digitalRead(8))). adrH_code=0x00. pinMode(IR_IN.5ms { pulse_deal(). } } TCNT1=0X00. 2). TCNT1=0.begin(16. j < 8. TCNT1=0. if(Pulse_Width>=140&&Pulse_Width<=141)//9ms { while(digitalRead(8)). Esse sistema é e ainda será por muitos anos o carro-chefe das aplicações da grande rede. uma nova geração de telefonia IP de baixo custo e equipamentos interativos monitorados pelo celular.11) Essa nova tecnologia possibilita a construção de hardware clientes e servidores de Internet a um custo muito baixo. a utilização da internet difundiu-se nos meios residenciais. são as aplicações embedded (embarcadas) para a Internet. É possível imaginar uma gama de produtos que pode ser criada ou aprimorada com o emprego dessa nova ferramenta. (MOKARZEL. aumentando significativamente a eficiência daqueles que utilizam seus recursos. O Arduino oferece uma grande facilidade de colocar os dispositivos nessa rede de comunicação uma vez que existe um sensorshield que funciona unica e exclusivamente para conectar a plataforma Arduino com a Internet. Desde brinquedos e aplicações domésticas até o monitoramento e controle de equipamentos na indústria. celulares. uma nova geração de aplicações está se formando. vem se tornando um meio cada vez mais essencial para o homem moderno. Porém. O futuro dos eletrodomésticos está na evolução e integração de todos esses sistemas na rede. hoje a própria impressora é uma parte da rede com uma interface e um endereço de IP próprio. Além do mais. Hoje não só computadores. Se antes um computador compartilhava uma impressora na rede local. p. industriais e consequentemente no meio empresarial. como outros dispositivos baseados em microprocessadores podem compartilhar uma rede local. . netbooks e várias outras criações embarcadas com tecnologia baseada em microcontroladores de uso geral compartilhando informações na rede. em especial a Internet. Atualmente a Internet tem seu emprego em larga escala nos computadores pessoais que dispõem de sistemas operacionais com todo o protocolo embutido em seu kernel. temos PDAs (computadores de mão).58 5 ARDUINO E A CONEXÃO COM A INTERNET Os sistemas de comunicação digital de dados. com a evolução dos microcontroladores. cabendo aos usuários e programadores apenas utilizar esses recursos. 2004. Com acessos dedicados e com a possibilidade de distribuição desse recurso em grande escala por um baixo custo. a Ethernet continuou a se desenvolver e crescer e conservou a sua posição dominante no mercado. pois várias especificações estão envolvidas. ela enfrentou muitos desafios de outras tecnologias LAN. Algumas dessas outras tecnologias conseguiram conquistar uma parte do mercado de LANs durante alguns anos. Seu esboço Arduino define um valor de endereço MAC. ele é tratado como uma pilha de protocolos de comunicação. Mas. ela tem predominado como tecnologia de LAN com fio e é provável que continue assim no futuro próximo. A Ethernet é a camada de sinalização de baixo nível básico que fornece a capacidade de transmissão de mensagens físicas.1 Protocolo de rede TCP/IP e Ethernet O TCP/IP é um conjunto de protocolos usado em redes na Internet. em meados da década de 1970. Endereços de origem e de destino para estas mensagens são identificadas por um Media Access Control (MAC). a Ethernet praticamente tomou conta do mercado de redes com fio. FDDI e ATM. Tecnicamente.59 5. é possível colocar sistemas embarcados funcionando como webserver robustos que podem trabalhar em tempo real em aplicações que exigem um nível de criticidade elevado. Fala-se em conjunto de protocolos para o TCP/IP. p. que deve ser exclusivo em sua rede. . 451) Com base nessa potencialidade da Ethernet. incluindo tokeng ring. (MARGOLIS. 2011. Kurose 2006 compara a Ethernet que está sendo usada para a rede local com o que a Internet tem sido para a rede global. Hoje. Um protocolo é um conjunto de normas que dois ou mais computadores devem usar para estabelecerem uma comunicação entre si. desde sua invenção. Na década de 80 e início da década de 90. De acordo com Kurose 2006. no qual as camadas de aplicação.2. Cada camada é um grupo de funções similares que fornece serviços à camada superior e recebe serviços da camada inferior.2 Camadas do Protocolo Nesta seção serão descritos os modelos de referências de camadas ISO/OSI. Cada camada depende da . 5.1 Modelo ISO/OSI x Internet O Modelo OSI é uma referência de camadas para o funcionamento da rede. Seção. conforme apresentado na Figura 5. cada uma com sua função própria. para facilitar o desenvolvimento da rede. tradução e seção são agrupadas apenas em aplicação e as camadas link dados e física agrupadas na camada de rede. as funções das camadas internet e as camadas de transporte TCP/IP. Rede.1. Figura 5. Link de Dados e Física. Apresentação. 2004 É comum descrever a pilha de um protocolo como um conjunto de camadas. Transporte. onde cada uma possui sua própria função. Existe uma simplificação para o Modelo de camadas Internet. Nele a rede é dividida em sete camadas bem definidas.1 – Modelos ISO/OSI Fonte: MOKARZEL. As sete camadas desse modelo são: Camada de Aplicação.60 5. relacionadas na Tabela 5.DNS). Roteia e entrega os datagramas entre os nós da rede.1: Tabela 5. o SMTP (que provê transferência de mensagens de correio eletrônico) e o FTP (que provê a transferência de arquivos entre dois sistemas finais). FTP e Email (SMTP/POP) TCP e UDP IP. Fonte: MOKARZEL. também são executadas com a ajuda de um protocolo de camada de aplicação.3). e qualquer um deles pode levar . ufma. Ela inclui muitos protocolos. PPP e X-25 A camada de aplicação é onde residem aplicações de rede e seus protocolos. o sistema de nomes de domínio (domainname system .2 Funções das Camadas Internet As camadas do protocolo Internet possuem as seguintes funções. A camada de transporte da Internet transporta mensagens da camada de aplicação entre os lados do cliente e servidor de uma aplicação. Há dois protocolos de transporte na Internet: TCP e UDP. A Internet é baseada em uma simplificação de quatro camadas da arquitetura ISO/OSI de sete camadas. Por exemplo.61 camada inferior e é fornecedora para a camada superior. Mokarzel 2004 aponta como vantagem desse sistema a possibilidade de redesenhar uma das camadas mantendo-se as demais intactas. Verifica-se que certas funções de rede. Implementa a transmissão de pacotes.2. ao trocar uma placa de rede que utiliza cabo UTP por um sistema sem fio.br) para um endereço de rede de 32 bits. Possibilita a comunicação entre os pontos da rede.1. como a tradução de nomes fáceis de entender dados a sistemas finais da Internet (por exemplo. 2004 Exemplo HTTP. não é necessário nenhuma adaptação no navegador de página web. tais como o protocolo HTTP (que provê requisição e transferência de documentos pela Web). no caso. 5. ICMP e ARP Ethernet (802.1 – Funções das camadas do protocolo internet Camada Camada de Aplicação Camada Transporte Camada Internet Camada Rede Função Contém um conjunto de protocolos distintos que provêem os diversos serviços da Internet. conforme a Figura 5. O TCP provê serviços orientados para conexão para suas aplicações. p. como cabos (de cobre ou fibras ópticas) ou ondas de rádio. O protocolo de roteamento determina as rotas que os datagramas seguem da origem ao destino. A Internet tem muitos protocolos de roteamento. o administrador pode executar qualquer protocolo de roteamento que queira. de uma máquina para outra. (KUROSE. A camada de rede da Internet tem dois componentes principais: IP (Internet Protocol – Protocolo Internet) e protocolo de roteamento. . 2006. A camada de Internet é responsável pela movimentação. A camada de rede então provê o serviço de entrega do segmento à camada de transporte na máquina destinatária. enfim. compatibilização das velocidades remetente/receptor). de pacotes de camada de rede conhecidos como datagramas. exatamente como você passaria ao serviço de correios uma carta como um endereço de destinatário. essa camada trata diretamente das características elétricas e mecânicas. O protocolo UDP provê serviço não orientado para conexão a suas aplicações. interfaces e switches. O IP define os campos no datagrama e o modo como os sistemas finais e os roteadores agem nesses campos. dentro de uma delas.62 mensagens de camada de aplicação. refletindo o fato de que ela é o elemento fundamental que mantém a integridade da Internet. Embora a camada de rede contenha o protocolo IP e também numerosos protocolos de roteamento. de modo que uma origem regula sua velocidade de transmissão quando a rede está congestionada. A Internet é uma rede de redes e. trata do meio por onde os dados passam. O TCP também fragmenta mensagens longas em segmentos mais curtos e provê mecanismo de controle de congestionamento.37) A camada de Interface de rede é a responsável por lidar diretamente com o meio físico de envio dos dados. Desse modo. Existe um único protocolo IP e todos os componentes da Internet que têm uma camada de rede devem executar esse protocolo. O protocolo de camada de transporte da Internet (TCP ou UDP) em uma máquina de origem passa um segmento de camada de transporte e um endereço de destino à camada de rede. Alguns desses serviços são a entrega garantida de mensagens da camada de aplicação ao destino e controle de fluxo (isto é. ela quase sempre é denominada simplesmente camada IP. indicando o número de octetos que ainda podem receber além do último aceito. existindo vários: pode ser por sinais elétricos (em redes que utilizam cabos do tipo par trançado). duplicados ou recebidos fora de ordem. a mais usada e conhecida são as redes Ethernet. se deve separar em blocos ou retransmitir algum pacote. Tabela 5. Esse controle é feito através do retorno de uma janela em cada mensagem de ACK.3 Camada de Transporte TCP/IP A principal função da camada de transporte TCP é dar robustez ao sistema.2.2 – Características da comunicação TCP/IP Características Descrição Para a camada de aplicação.63 Ela é responsável por receber os datagramas que vêm da camada de Internet e prepará-los para serem enviados para o meio de transmissão. a interface de rede é responsável por receber os dados pela rede (ou seja. sinais luminosos (no caso de redes que utilizam fibras ópticas) ou até ondas de rádio (redes wireless). Transferência básica de dados Robustez Controle de Fluxo . só para citar como exemplos. conferindo robustez ao meio de comunicação. Isso é conseguido pelo sequenciamento dos pacotes e envio de confirmação de recebimento (ACK). 5. garantindo que mensagens enviadas sejam recebidas. perdidos. empacotando esses octetos em grupos que são transportados pela camada internet. No momento. O TCP cuida de recuperar dados que foram danificados. Além disso.2. O TCP provê os meios para que o receptor possa controlar o fluxo de envio. É interessante constatar que o meio de transmissão é diverso. o TCP é capaz de transferir um fluxo contínuo de octetos de uma estação a outra. Para isso o TCP possui as características descritas na Tabela 5. Os tipos de protocolos usados para garantir o envio dos dados no meio de transmissão dependem da tecnologia de interconexão utilizada na rede. O TCP decide quando e como enviar. enviados pelo meio de transmissão) e garantir que eles cheguem via Internet. 64 Para permitir que uma única estação use diversas comunicações TCP simultâneas, o protocolo fornece uma numeração de porta, que combinada com a rede e com o endereço IP, forma um socket. Cada socket é único, desta forma múltiplas conexões simultâneas podem ser geradas. Os mecanismos de robustez e controle de fluxo descritos anteriormente obrigam o TCP a inicializar e manter certas informações sobre cada fluxo de dados. A combinação dessas informações, que inclui o socket, o número da sequência e o tamanho da janela, chama-se conexão lógica. O usuário do TCP deve indicar a segurança e a precedência da sua comunicação. Fonte: Mokarzel, 2004 Multiplexação Conexão Lógica Segurança 5.3 Arduino Ethernet Shield Trata-se de um módulo capaz de abrir ligações com outros servidores da Internet ou então, funcionar ele próprio como um mini servidor destinado a páginas web, não 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 simultâneo. 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 vários aplicativos que demonstram como construir e utilizar clientes e servidores web bem como a interação de protocolos de comunicação mais comuns da Internet com o Arduino. A Internet permite que um cliente (navegador web, por exemplo) solicite informações de um servidor (um servidor web ou outro prestador de serviço Internet). Dentre as diversas possibilidades, o Arduino pode funcionar como servidor que fornece informações aos clientes utilizando protocolos de Internet podendo agir como um webserver criando páginas para exibição em navegadores web. O Arduino Ethernet suporta uma grande variedade de métodos (protocolos) que permitem a sua adaptação para funcionar como um cliente ou servidor de Internet. A biblioteca Ethernet usa o conjunto de protocolos padrão da Internet onde a maior parte da linguagem de baixo nível 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 através de uma página HTML (uma página internet simples) é enviado o comando, para os LED serem ligados ou desligados e assim enviar diretamente para o servidor as informações 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 estão 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 botões 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 peça 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 preferência 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 modificações. O código HTML é armazenado na memória do programa, de modo a se obter RAM suficiente para armazenar outros dados. Para colocar o Arduino em rede, foi atribuído o endereço de IP local 192.168.1.134. Dessa forma, os testes para obtenção de respostas via ethernet ficou mais canalizado. Esta configuração foi feita no próprio roteador conforme mostrado na Figura 5.4. mostra no navegador web os comandos que devem ser enviados para o Arduino conforme ordem de acionamento dos mesmos dentro da respectiva sequência sugerida.5 – Página Web Arduino . O script apresentado no Quadro 5. pois na mesma é encontrado o navegador com o script HTML que está na memória de programa do microcontrolador utilizado no Arduino. pode ser percebida a proposta do trabalho de forma mais compreensiva.5. quando é executado. Figura 5.67 Figura 5.4 – Configuração do roteador Observando a Figura 5.1. st2=9. LEDLED2 = LED(6).st3=9. byteip[] = { 192. string_1. int tam=0. 1. prog_char string_3[] PROGMEM = "<br><input type=submit name=b3 value=LED3>". string_9. String msg="". string_6. string_4. String inString = String(35). LEDLED4 = LED(4). string_8.st4=9. prog_char string_1[] PROGMEM = "<br><input type=submit name=b1 value=LED1>". .h> #include <avr/pgmspace. 255. 255. LEDLED1 = LED(7).begin(9600). string_2. 0xFE. int st1=9. string_5. 0xAD. 0xEF. 1. prog_char string_10[] PROGMEM = "<meta http-equiv=refresh content=30 > ". 1 }. 168.68 Quadro 5. 168. 0xED }.h> prog_char string_0[] PROGMEM = "<html><body><h2>Controle de LED pela Internet</h2><font size= 4><form method=GET>". string_7. string_10 }. byte gateway[] = { 192. void setup() { Serial. char buffer[85].h> #include <SPI. byte subnet[] = { 255.h> #include <Ethernet. 0 }. LEDLED3 = LED(5). //for auto refresh PROGMEM const char *string_table[] = { string_0. prog_char string_6[] PROGMEM = "<input name=msg value=no_name MAXLENGTH=20>".1 – Código fonte para o WebServer #include <LED. Server server(8246). string_3. prog_char string_7[] PROGMEM = "</form></body></html>". prog_char string_9[] PROGMEM = "Desligada (OFF)". 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_8[] PROGMEM = "Ligada (ON)". 0xBE. 134 }. // change "string_table" name to suit // make sure this is large enough for the largest string it must hold byte mac[] = { 0xDE. prog_char string_2[] PROGMEM = "<br><input type=submit name=b2 value=LED2>". else st4=9.available(). LED=1. pinMode(7.read(). Serial.concat(c).toggle(). pinMode(8.length() < 35) { inString.toggle().toggle().println("Server READY").getState()) st3=8. else st1=9. intLED=0. Serial. LED=2.OUTPUT).subnet). } if(inString.indexOf("b4")>0){ LED4. LED=3. if (client) { booleancurrent_line_is_blank = true.OUTPUT).gateway. } if(inString. pinMode(9.getState()) st4=8.available()) { char c = client.println("Ethernet READY").indexOf("b2")>0){ LED2.toggle(). if(LED3. else st2=9.connected()) { if (client.begin(mac.println("Serial READY"). pinMode(5. server. .OUTPUT). ip. else st3=9. } void loop() { Client client = server.getState()) st1=8.INPUT).indexOf("b3")>0){ LED3.indexOf("b1")>0){ LED1.begin(). if(LED2. if(LED4. while (client.69 Ethernet. } if (c == '\n' &&current_line_is_blank) { if(inString.OUTPUT). if (inString. Serial. pinMode(6.getState()) st2=8. } if(inString.INPUT). if(LED1. pinMode(4. }else{ client. client. (char*)pgm_read_word(&(string_table[0]))). i++) { strcpy_P(buffer. just copy.println("<br>Botao 1. } client.println( buffer ). strcpy_P(buffer.println( buffer ).println("<br>Botao 2. } } . break. just copy. } if (c == '\n') { // we're starting a new line current_line_is_blank = true.println( buffer ). case 2: strcpy_P(buffer. (char*)pgm_read_word(&(string_table[st2]))). client. (char*)pgm_read_word(&(string_table[st3]))). client. OFF"). } if(digitalRead(9)==HIGH){ client. } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false.println("Content-Type: text/html"). client.println(). // Necessary casts and dereferencing. inString = "". switch(i){ case 1: strcpy_P(buffer.println( buffer ). client. case 3: strcpy_P(buffer.1 200 OK"). break.println( buffer ). (char*)pgm_read_word(&(string_table[st1]))).println("<br>Botao 2. client.println("<br>Botao 1. } delay(30). client.70 LED=4. client. } if(digitalRead(8)==HIGH){ client. case 4: strcpy_P(buffer. ON").stop(). i < 8. (char*)pgm_read_word(&(string_table[i]))). break. OFF"). ON"). break. break. for (int i = 1.println( buffer ). // Necessary casts and dereferencing.println("HTTP/1. client. client. }else{ client. (char*)pgm_read_word(&(string_table[10]))). (char*)pgm_read_word(&(string_table[st4]))). } //strcpy_P(buffer. } } } // give the web browser time to receive the data delay(1).println( buffer ). println( buffer ). percebemos a potencialidade de aplicação do Arduino. } if (c == '\n') { // we're starting a new line current_line_is_blank = true. Para a utilização da aplicação. A partir desse método. Este acesso é realizado através do navegador de internet que logo retornará as mensagens da página web conforme a Figura 5. é necessário o acesso à placa via IP de rede que foi atribuído ao dispositivo.71 //strcpy_P(buffer. } 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). podendo expandir para projetos mais complexos bem como monitoramento de sensores a distância e acionamento de dispositivos via web. break.5. client. inString = "". . (char*)pgm_read_word(&(string_table[10]))).stop(). client. } } Este experimento funciona com o envio de dados para o webserver Arduino. este trabalho apresentou uma proposta de servir como material didático de suporte a projetistas entre o que atualmente tem-se de bibliografia sobre o Arduino e o que pode-se fazer em termos práticos para otimizar as potencialidades deste sistema. Dentre os diversos experimentos realizados no laboratório o trabalho apresentou o acionamento de portas.72 6 CONCLUSÕES A motivação deste trabalho foi provocada pela grande aplicabilidade da placa Arduino e pela pouca literatura existente dentro do âmbito acadêmico sobre esse tema. Por isso. foi destacado ao longo do trabalho alguns exemplos que foram implementados utilizando-se pouco hardware. fato que consolida essa tecnologia como objetiva e prática. Os experimentos desenvolvidos nesse trabalho foram testados e validados no laboratório. que mostrou como é feita a configuração das portas do Arduino bem como o seu ajuste para recebimento e envio de dados. O primeiro mostrou como acionar dispositivos sem fio e o segundo apresentou como colocar o Arduino na Internet. Dentre as diversas possibilidades de projeto com o Arduino. foi demonstrado o funcionamento do sistema de temporização. despendiam muita energia e tempo dos projetistas. Os experimentos mais complexos foram os acionamentos via controle infravermelho e o webserver. tais como acionamento infravermelho e envio de dados pela ethernet utilizando a placa como um webserver. Trata-se de um novo conceito de hardware aberto possibilitando aos usuários de todo mundo aumentarem as funcionalidades e potencialidades da plataforma bem como agregar inúmeras possibilidades de funcionamento de maneira bem rápida. com os microcontroladores e placas convencionais. . etc. Em seguida. 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. mas que trazem resultados voltados para aplicações do dia a dia na área de automação de sistemas. A tecnologia é relativamente nova e desde o seu lançamento está em franco desenvolvimento e a cada dia ganha mais adeptos tendo em vista a facilidade e o grande apelo mercadológico que traz. Vários experimentos foram realizados em laboratório com o intuito de testar e/ou adaptar as funcionalidades das placas e otimizar processos que antes. Nesse trabalho sugerimos o envio de dados pelo Twitter. . Também foram confeccionados vários guias de experimentos que servem para orientar futuros trabalhos acadêmicos e treinamentos sobre a tecnologia Arduino. dentre as quais merecem destaque os acionamentos a distância e a comunicação via Internet. Para trabalhos futuros fica a sugestão de desenvolvimento de monitoramento e controles de processos através da web com o uso de placas Arduino. Outra importante corrente de trabalho está no desenvolvimento de aplicações que coloquem o Arduino nas redes sociais. uma vez que o Arduino oferece rapidez e versatilidade na construção de inúmeras aplicações. destacam-se a partir dos resultados obtidos nesse trabalho.73 O estudo da tecnologia Arduino é muito abrangente e também possui inúmeras possibilidades de projetos técnico e científicos. Tendo em vista a grande quantidade de possibilidades que o Arduino traz para o mundo da eletrônica. a gama de aplicações na área da mecatrônica e da automação. Este trabalho mostrou várias oportunidades de utilizar as funcionalidades do Arduino da maneira mais prática possível. mostrando também o que existe de tecnologia já desenvolvida e implementada para o Arduino. de tal forma que pode-se destacar necessidades de controle e monitoramento de variáveis importantes de um sistema. 345 p. Data Sheet: Power MOSFET IRF540. Wellesley. PROGRAMAR: A Revista Portuguesa de Programação. Brian W. ed. K. n. O sucesso do arduino.. Acesso em: 10/11/2011. São Paulo: Pearson Addison Wesley.cc>./2008 JONES.com. Data Sheet PIC16F977A. 2011 ATMEL Technology. USA. ed.br/novo_umr. n. 2001. New York. 2004. Associação Brasileira de Normas Técnicas (ABNT) – NBR14724. 1993. Florianópolis 2002. USA. 2011. Redes de computadores e a internet: uma abordagem top-down. Abril.pdf>.. ed. ed. 2010. Curso de Robótica Móvel. MARGOLIS. Data Sheet ATMEL328. Introdução ao Arduino. Érica. 1 ed. 2010. 2008. James F. San Francisco: EUA. 350 MELLIS. ed. W. Michael. Florianópolis. 40 dez. Microcontrolador PIC18 Detalhado: Hardware e Software. Fábio. 217. EDSON Roberto de Pieri. 2010. Flynn. São Paulo: Érica. Lisboa. LTO – DMS. MORIMOTO. Charles Borges de. / KEITH. MOKARZEL. Massachusetts: A.robotic. 2007. p.74 REFERÊNCIAS ARDUINO. Disponível em: <http://www. Arduino cookbook. Disponível em: <http://www. 3. David./2009 MICROCHIP Technology. EVANS. Técnicas de projetos eletrônicos microcontroladores AVR. 17. Joseph L. São Paulo: Ed. 2006. 3. Marcos Perez / CARNEIRO. 2004. ANITA M. Rio de Janeiro.. 1. Arduino Program Notebook. Internet Embedded: TCP/IP para microcontroladores. REVISTA INFO. 2008. KUROSE. McGraw-Hill. ROBÓTICA EDUCACIONAL: INICIANDO EM MICROCRONTROLADORES. PEREIRA. United States of America: O’Relly. Ed. o guia definitivo. Peters Ltd. p. com os . 1.21 mar. Hardware.arduino. Carlos E. 2011. 2003. USA. MCCOMB. Karina Perez Mokarzel. ed. Acesso em: 12/10/2011. Gordon. LIMA. São Paulo: GDH Press. 1 ed. Santa Catarina. 1. Rio de Janeiro: ABNT. p. Ross. Constructing Robot Bases. do Autor. Mobile Robots – Inspiration to Implementation. 2011. Acesso em: 12/10/2011. 1. 2001. projetos e aplicação. Plataforma de protótipos eletrônicos arduino: teoria. Felipe dos Santos.75 ROSA. SB-PROJECTS.sbprojects.php>. Florianópolis: Clube de Autores. Disponível <http://www. Franz A. SANDI. Sistema de Navegação e Guiagem de Robôs Móveis Autônomos. em: . Holanda.com/knowLEDge/ir/nec. 1998. ed. SBA Controle e Automação. 76 ANEXOS . dispositivos discretos (LED. permitindo o desenvolvimento de outros sistemas que percebam a realidade e respondam com ações físicas. baseada em uma simples placa de Entrada/Saída microcontrolada e desenvolvida sobre uma biblioteca que simplifica a escrita da programação em C/C++. 2. É um microprocessador que pode ser programado para funções específicas. deve-se usar um resistor externo. memória e periféricos de entrada/saída. Em outras placas existe um resistor de 1 kΩ no pino 13. etc) e um protoboard. conforme mostrado na Figura A. . As placas atuais são fabricadas com o LED já instalado. As placas Arduino são projetadas de forma a facilitar o piscar de um LED com o uso do pino digital 13. Ele pode ser embarcado no interior de algum outro dispositivo.1. displays. o que lhe permite conectar o LED diretamente a ela. Objetivos: O experimento em questão tem como objetivo descrever as ferramentas necessárias para implementar um projeto básico de acionamento de dispositivos de saída pelos pinos da placa Arduino. em nosso caso a placa Arduino. 3. Para conexão a outro pino digital. Programação em Arduino Um microcontrolador (também denominado MCU) é um computador em um chip. para que possam controlar suas funções ou ações. em contraste com outros microprocessadores de propósito geral.77 ANEXO A – Experimento 1: ACIONAMENTO DE LED DE FORMA SEQUENCIAL 1. que contém processador. Introdução: A placa Arduino é uma plataforma de computação física composta por sistemas digitais ligados a sensores e atuadores. Os experimentos apresentados são desenvolvidos a partir do Arduino Duemilanove. no presente experimento será demonstrado o simples acionamento de um LED (Light Emitter Diode – Diodo Emissor de Luz). 1 Atividades Práticas Experimento Sequencial de LED Este experimento apresenta a utilização de seis LED para representar de modo sequencial o acionamento dos dispositivos de saída do Arduino.1 – Diagrama básico 4. editar e compilar os programas e carregá-los na placa Arduino.2 – Arduino software 5. Os LED estão conectados aos pinos de 2 à 11 da placa.3. conforme mostrado na Figura A. Figura A.2. além de apresentar outros recursos como gravação do bootloader (arquivo de inicialização rápida) em um microcontrolador ATMEGA. . cujo código básico é apresentado na tela da Figura A. salvar. um monitor simples. entre outros.78 Figura A. 5. Software Arduino O Arduino IDE (Ambiente Integrado de Desenvolvimento) é um programa multitarefa desenvolvido em JAVA. utilizado para criar. com o uso de resistores de 150 Ω. Com comentários ao longo do algoritmo.3 – Experimento sequencial 6. Desenvolvimento do Projeto com as devidas inferências a respeito dos códigos criados. um por um. Relatório O relatório deve conter: • • Introdução Teórica da placa Arduino. Referências. Figura A. utilizando para tanto duas funções: uma para acionar a saída e outra para gerar um retardo.79 O objetivo do código desenvolvido é o piscar dos LED em sequência. . • • Conclusões sobre o experimento realizado. O programa deve ser entregue ao professor. todos desligam-se um de cada vez. com cada número sendo exibido durante 1 segundo e reiniciando a contagem até que seja gerada uma interrupção externa.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. teste antes cada segmento. a. Neste caso. Não devemos usar valores de resistência muito baixa. Programa para testar o display 7 segmentos. demonstrar o acionamento do display de 7 segmentos. O código do Quadro B. conforme a Figura B.80 ANEXO B – Experimento 2: ACIONAMENTO DE UM DISPLAY DE 7 SEGMENTOS 1. o que equivale a uma corrente entre 9 mA e 20 mA. depende do brilho que queremos do display. para ter a certeza que não está a usar um display com algum segmento queimado. Se for usar um display. Introdução: 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. . Como os segmentos são LED. então precisamos limitar a corrente. podendo queimar o segmento.1. pois estaremos reduzindo a vida útil do display. Objetivos: O experimento em questão tem como objetivo descrever as ferramentas necessárias para implementar um projeto básico de acionamento de dispositivos de saída pelos pinos da placa Arduino. para isso devemos usar uma resistência em cada segmento. displays. normalmente utilizam-se resistências entre 220 e 560 Ω para uma fonte de 5 V. A corrente utilizada. dispositivos discretos (LED. O experimento apresentado pode ser desenvolvido a partir do Arduino Duemilanove. 2. todos os segmentos são ligados e após um segundo. etc) e um protoboard. g=8. i <8 7. c. delay(250). delay(250). e=12. LOW). i <8 7. } } Figura B. for (int i = 0. HIGH). e}. dp. OUTPUT). f.begin(9600). d=11. for(int i = 0. dp=9. a=6. } } void loop() { for(int i = 0.1 – Testando o display via Arduino int b=5. a. i++) { digitalWrite(pins[i]. Materiais 1 Display 7 segmentos 8 Resistores de 330Ω . c=10. d. i++) { digitalWrite(pins[i]. f=7. void setup() { Serial. i++) { pinMode(pins[i]. } delay(1000).81 Quadro B. int pins[8] = {b.1 – Montagem com o display de 7 segmentos 3. g. i == 7. • . o mesmo precisará de comentários ao longo do algoritmo. Relatório O relatório deverá conter: Desenvolvimento do Projeto com as devidas inferências a respeito dos códigos criados.82 1 Display LCD 16x2 1 Arduino Duemilanove 1 LED 4. O programa deverá ser entregue ao professor. • • Conclusão do Trabalho. Referências. Introdução Esse projeto precisou de um simples sensor receptor infravermelho. etc) e um protoboard. Materiais 1 Controle IR 1 Receptor IR 1 Display LCD 16x2 1 Arduino Duemilanove 1 LED 1 Resistor de 10kΩ 4. Relatório O relatório deverá conter: • Desenvolvimento do Projeto com as devidas inferências a respeito dos códigos criados. Objetivos: O projeto tem objetivo de validar o acionamento de um display LCD 16 x 2 via controle remoto enviando dados de comandos alfanuméricos a serem apresentados no display. Referências. displays. 2. Os experimentos apresentados podem ser desenvolvidos a partir do Arduino Duemilanove.83 ANEXO C – Experimento 3: ACIONAMENTO DE UM DISPLAY LCD 16 X 2 VIA CONTROLE REMOTO 1. dispositivos discretos (LED. • • Conclusão do Trabalho. 3. . o receptor utilizado foi o IRM3638 que foi conectado à placa Arduino como forma de receber o sinal infravermelho. 84 O programa deverá ser entregue ao professor. . o mesmo precisará de comentários ao longo do algoritmo. Introdução A UMR (Unidade Móvel Robótica) foi um projeto desenvolvido para otimizar o estudo da robótica móvel educacional. Dentre as suas funcionalidades destacamos o uso de sensores para versatilizar o ambiente de aprendizado em sala de aula com sensores ultrassônicos e infra vermelhos com os quais podemos fazer o robô desviar obstáculos. Sensor Infravermelho. seguir trilha e obedecer comandos via controle remoto. • 2. O objetivo dessa prática é de: • • • Integrar os diversos sistemas da UMR. . A UMR (Unidade Móvel Robótica) possui: • • • • Sensor Ultrassônica. Projetar diversas possibilidades de trilhas para otimização de rotas. Placa de interface para acionamento de motores.85 ANEXO D – Experimento 4: UNIDADE MÓVEL ROBÓTICA 1. 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. Controlar a UMR com o controle infravermelho. Sensor de Trilha. Objetivos Esse projeto tem o objetivo de integrar sistemas de comunicação e acionamento através da robótica móvel. Montar diversos cenários para a UMR poder desviar de obstáculos com o sensor ultrassônico. o mesmo precisará de comentários ao longo do algoritmo.86 Figura D. Relatório O relatório deverá conter: • Desenvolvimento do Projeto com as devidas inferências a respeito dos códigos criados. Materiais 1 UMR 1 Controle Remoto SONY ou similar 1 Fonte 9V/1A 1 Cabo de dados USB 4. 2011 3.1 – Unidade Móvel Robótica Fonte:Robotic. Referências. O programa deverá ser entregue ao professor. • • Conclusão do Trabalho. . 1.87 ANEXO E – Experimento 5: PWM DO ARDUINO Experimento 5: PWM DO ARDUINO 1. Figura E. Objetivos: Nesse experimento será testada a saída PWM do Arduino para controlar a velocidade de um motor dc de 12 V.1 – Diagrama de Montagem do Projeto 2. O código desse experimento está descrito no Quadro E. 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. delay(10).} void loop() { sensorValue = analogRead(sensorPin).} O Arduino UNO possui dos pinos 13 ao 2.1 – Código do acionamento do motor dc intsensorPin = A0. 3. ao todo 12 pinos de I/O digitais. intsensorValue = 0. são portas cujo sinal de saída é de 0 V ou 5 V.println(sensorValue/4). As portas PWM estão disponíveis em 6 canais. analogWrite(9.sensorValue/4). Relatório O relatório deverá conter: • Desenvolvimento do Projeto com as devidas inferências a respeito dos códigos criados. Serial. . 6. OUTPUT). void setup() { pinMode(9. Serial.begin(9600). foi utilizado o pino 9 para gatilhar o MOSFET que comuta para o funcionamento do motor DC. Para o experimento em questão. 9. 5 e 3. O programa deverá ser entregue ao professor. o mesmo precisará de comentários ao longo do algoritmo. correspondentes às portas 11. • • Conclusão do Trabalho. Referências. 10. ou seja. a porta está instalada na COM16. Mas com as novas placas Arduino UNO e MEGA2560. ao conectar placa no computador via USB. é aberto o gerenciador de dispositivos do Windows e verificado se está disponível uma porta COM nomeada como Porta COM: ESB Serial Port (COM xx). É por causa deste conversor FTDI que as placas são do tipo plug and play. Figura F. um conversor RS 232 – USB que usando a UART do microcontrolador possibilita a comunicação entre Arduino e computador.1 – Verificando instalação .89 ANEXO F – Software Arduino Conectando o Arduino ao computador As placas Arduino foram desenvolvidas inicialmente com o CI FTDI (FT232-RL).1. a instalação deve ser manual. dispõe de um ATMEGA8 desempenhando o papel deste conversor. o sistema operacional instala automaticamente os drivers para comunicação com a placa. é possível visualizar que a placa foi reconhecida no gerenciador de dispositivos do Windows. No caso da Figura F. Os novos modelos UNO e Mega2560. Quando devidamente instalada. Para tal. não é possível escolher qual a porta que o Arduino será instalado. É possível ainda haver problemas de hardware que acarretam o não reconhecimento da placa.ftdichip. Isto ocorre principalmente quando o sistema operacional é de 64 bits. permitindo instalar os drivers das placas mais recentes.90 É possível que o sistema operacional não reconheça a placa Arduino automaticamente. Cabo USB defeituoso ou placa com defeito de fabricação também promovem este tipo de problema. Na pasta do programa Arduino IDE existe uma pasta específica de drivers.com/Drivers/VCP. se o sistema operacional for 64 bits e a placa Arduino for anterior à Arduino UNO e MEGA25860 é necessário fazer o download do driver da FTDI para sistemas 64 bits. podendo-se observar no gerenciador de dispositivos que o hardware FT232R ou placa Arduino UNO/MEGA2560 não está instalado. Nesse momento. Ela será instalada na primeira porta COM virtual disponível no sistema. mais precisamente. . Também recomenda-se que o usuário utilize sempre a mesma porta USB. Desta forma. 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. atualizando o driver substituindo-o pelo novo que foi descarregado do site. é utilizado principalmente para desenvolver o código fonte e carregá-lo na placa do usuário. Nestes casos a solução é fazer a instalação manual. Nestes casos a placa não é reconhecida. quando o método de instalação for o plug and play.htm Nestes dois casos é executada a instalação manual clicando-se no ícone do FT232R ou placa UNO no gerenciador de dispositivos. devido à possibilidade de alguns conflitos ocorrerem futuramente. Contudo. são destacados os pontos mais relevantes quando se conecta a placa e deseja-se que a mesma realize suas funções corretamente. Software e a Placa Arduino O aplicativo Arduino IDE. o driver do FTDI ou o ATMEGA8. Este drive encontra-se: http://www. esta seleção deve ser realizada com frequência. utilizando alguns dos tipos de gravadores mais comuns de microcontroladores ATMEGA. irá se abrir uma janela do tipo hyper terminal. 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. Porém.91 Na primeira utilização.2 – Selecionando a placa do projeto A última opção a seguir nem sempre é necessária a modificação manual. • Serial Monitor: Selecionando esta opção. . como mostrado na Figura F. via teclado. No menu Tools. quando se utiliza mais de uma placa Arduino ou alguma outra placa serial virtual. é importante configurar alguns parâmetros do software. responsável por receber e enviar caracteres ASCII ao Arduino.2: Figura F. existem algumas outras ferramentas de auxílio: • Burn Bootloader: Permite o usuário gravar o bootloader de uma placa Arduino que possua um microcontrolador que não o possua. 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). Em Tools. onde são mostradas mensagens do compilador ao usuário. respectivamente auto formatação. o menu Help é exclusivamente em relação à busca de soluções para problemas de todos os tipos. desde software e linguagem. importar uma biblioteca do Arduino e adicionar um arquivo. colar. É uma boa referência rápida em caso de problemas simples. sem muita relevância. Na visão geral do programa. abrir um código existente. tamanho de fonte.92 • Outras opções: Há mais 3 opções no menu tools. salvar carregar na placa. endentar e dessedentar o código. utilização de editor externo. No menu File é possível criar um novo código fonte. entre outras. buscar exemplos prontos de código fonte. A tela principal do Arduino IDE é apresentada na Figura F. à problemas com o hardware das placas Arduino. imprimir e ajustar algumas preferências referentes a diretório do Arduino. . é possível observar alguns atalhos e uma janela de mensagens de compilação em formato semelhante ao DOS. Por fim. como copiar. O menu Sketch possui as opções verificar e compilar. O menu Edit possui exclusivamente opções de edição do arquivo fonte.3. por exemplo. configurar página. e consertar código e recarregar. arquivar. pois ele facilita muito no diagnóstico de bugs no código fonte.93 Figura F. um terminal que recebe e envia dados ao Arduino via porta serial. neste caso. A tela correspondente ao serial monitor é apresentado na Figura F.4. Este terminal é um item muito utilizado para estes quando não se dispõe de um display LCD ou alguma outra ferramenta visual.3 – Tela principal do Arduino IDE Uma das ferramentas mais interessantes presentes no Arduino IDE é o serial monitor. via USB. . . Nesse caso.4 – Monitor Serial Arduino IDE É possível utilizar outros tipos de terminal serial em conjunto com o Arduino.94 Figura F. é necessário apenas ajustar o parâmetro de taxa de símbolos em sincronia com o código do Arduino. Ver a descrição dos pinos digitais para obter mais detalhes.95 ANEXO G – Instruções do Arduino FUNÇÕES: CONCEITOS E PROPRIEDADES Abordagem das funções. DIGITAL I/O: pinMode( ) Configura o pino especificado para se comportar como uma entrada ou uma saída. // pino 13 comosaída .. definidos como pinos 14 (porta analógica 0) a 19 (porta analógica 5). OUTPUT). } void loop ( ) { . seus conceitos e propriedades. void setup ( ) { pinMode (LEDPin.. Sintaxe pinMode (pino.. Retorno Nenhum Exemplo intLEDPin = 13. modo) Parâmetros Pino: o número do pino cujo modo que deseja ajustar.. modo: entrada (INPUT)ou saída (OUTPUT). } *Os pinos de I/O analógicos podem ser utilizados como pinos digitais.. principalmente as funções exclusivas da linguagem Arduino. HIGH). void setup( ) { pinMode (LEDPin. então se os LED parecem funcionar. esta é uma causa provável. delay (1000) digitalWrite (LEDPin. OUTPUT). O resistor de pull-up é o suficiente para limitar a corrente e mal acender um LED. valor) Parâmetros pino: o número de pinos valor: HIGH ou LOW Retorno nenhum Exemplo intLEDPin = 13. 0 V (GND) para baixo. 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. Se o pino foi configurado como entrada.96 digitalWrite( ) Utilizado para definir o estado de um pino digital em estado alto (HIGH) ou baixo (LOW). Sintaxe digitalWrite(pino. LOW). Se o pino foi configurado como uma saída com pinMode( ). a sua tensão será ajustada para o valor correspondente: 5 V para alto. saida } void loop ( ) { digitalWrite (LEDPin. mas muito fracos. A solução é colocar o pino de uma saída com o pinMode( ). delay (1000). } //liga LED //atraso de 1000ms //desliga LED // pino 13 definidocomo . que possuem várias configurações analógicas como descrito a seguir. digitalRead( ) pode retornar alto ou baixo (e isso pode alternar de forma aleatória). //LED com o valor do botão. OUTPUT). //lendo o pino de entrada. Sintaxe digitalRead(pino) Parâmetros pino: o número do pino digital que você quer ler (int) Retorno HIGH ou LOW Exemplo intLEDPin = 13. INPUT). val). } void loop ( ) { val = digitalRead (inPin). //pino 13 como saída. HIGH (alto) ou LOW (baixo). intLEDPin = 7. //variavel para salvar o valor lido. //pino 7 como entrada. digitalWrite (LEDPin. Se o pino não é conectado a nada. . //pushbutton connectado no pino digital 7. intval = 0. pinMode (inPin. ANALOG I/O São os pinos de entrada e saída analógicos. void setup ( ) { pinMode (LEDPin.97 DigitalRead() Lê o valor de um determinado pino digital. Parâmetros tipo: o tipo de referência ao uso (default. A placa Arduino UNO possui 6 pinos analógicos com conversão A/D de 10 bits. interna. 0. deve-se definir a referência analógica para externa antes de chamar analogRead( ). Demora cerca de 100 microssegundos (0. Isso produz uma resolução entre as leituras de: 5 V / 1024 unidades. Observe que o resistor irá alterar a tensão que é usada como referência. O intervalo de entrada e resolução podem ser alteradas utilizando analogReference( ). Retorno Nenhum.0001s) para ler uma entrada analógica. portanto. ou seja.9 mV) por unidade.1 V no ATMEGA168 ou ATMEGA328 e 2. pode-se conectar um resistor de uns 5 kΩ entre a tensão de referência externa e o pino AREF o que lhe permite alternar entre as tensões de referência externa e interna. Alternativamente. a taxa máxima de leitura é cerca de 10. analogRead( ) Lê um valor de tensão analógico no pino analógico especificado. podendo danificar o microcontrolador na placa Arduino. Se estiver utilizando uma tensão de referência externa (aplicando ao pino AREF). pode ocorrer um curto-circuito entre a tensão de referência ativa (gerada internamente) e o pino AREF. o valor usado como fundo de escala de entrada). Caso contrário.56 V no ATMEGA8. .3 V (depende da placa). Isso significa que ele irá mapear tensões de entrada entre 0 e 5 V em valores inteiros entre 0 e 1023. Interna: uma referência interna igual a 1.0049 volts (4.98 analogReference( ) Configura a tensão de referência utilizada para a entrada analógica (ou seja. As opções são: • • Default: o padrão analógico de referência é 5 V ou 3. • Externa: a tensão aplicada ao pino AREF é usado como referência. ou externa).000Hz. porque há uma resistência interna de 32 kΩ no pino AREF. 99 Sintaxe analogRead(pino) Parâmetros Pino: o número de pinos de entrada analógica para ler (0-5 na maioria das placas. //Imprime via monitor serial o valor lido } . //Porta serial com leitura de 9600bauds/s } void loop( ) { val = analogRead(analogPin) //Leo valor analógico e converte Serial. Exemplo intanalogPin = 3.begin(9600). int Val = 0. void setup( ) { Serial. //potenciômetro conectado ao pino 3. //variável inicializada para armazenar o valor lido. o valor retornado pelo analogRead ( ) irá variar com base em uma série de fatores (por exemplo. 5V e GND. 0-15 no Mega) Retorno int (0-1023) Se o pino de entrada analógica não está conectado a nada.println(val). 07 sobre o Mini e Nano. os valores das entradas analógicas de outros pinos). OUTPUT). o pino irá gerar uma onda quadrada constante no ciclo especificado até a próxima chamada para analogWrite( ) (ou uma chamada para digitalRead( ) ou digitalWrite( ) no mesmo pino). intval = 0. Sintaxe analogWrite(pino. intLEDPin = 9. val / 4). // LED conectado ao pino 9 //potenciômetro conectado ao pino 3 void setup( { ) pinMode (LEDPin. Retorno Nenhum Exemplo Define a saída para um diodo emissor de luz proporcional ao valor lido do potenciômetro. Pode ser usada para acender um LED de brilhos diferentes ou uma unidade de motor em velocidades diferentes. //analogRead valores entre 0 à 1023. com pinMode( ). analogWrite valores ) . valor) Parâmetros pino: o pino para gravar. Após uma chamada do analogWrite( ). o pino como uma saída antes de chamar analogWrite( ). valor: ciclo de trabalho (entre 0 (sempre desligado) e 255 (sempre ligado)). intanalodPin = 3. A frequência do sinal PWM e de aproximadamente 490 Hz.100 analogWrite Escreve um valor analógico (utilizando os canais PWM). Não é necessário definir. A função analogWrite não tem nenhuma ligação com os pinos analógicos ou função analogRead. analogWrite(LEDPin. } void loop ( { val = analogRead (analogPin). 101 entre 0 à 255 } MODOS DE I/O AVANÇADOS tone( ) Gera uma onda quadrada de freqüência especificada (e 50% de dutycicle) em um pino. A duração pode ser especificada, caso contrário, 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( ) não terá nenhum efeito. Se o tom está enviando ao mesmo pino, a chamada irá definir a sua freqüência. O uso do tone( ) irá interferir com PWM de saída nos pinos 3 e 11. Observação: se desejar colocar valores em pinos múltiplos, é necessário chamar no Tone( ) em um pino antes de chamar o tone( ) no pino seguinte. Sintaxe tone (pino, frequência) tone(pino, frequência, duração) Parâmetros pinos: o pino sobre o qual gera o tom. frequência: a frequência do tom hertz. Duração: a duração do tom em milissegundos (opcional). Retorno Nenhum noTone( ) Para a geração de uma onda quadrada desencadeada por tone( ). Não tem nenhum efeito se não houver nenhum tom sendo gerado. Sintaxe noTone(pino) 102 Parâmetros pino: o pino que se deseja parar de gerar o tom Retorno nenhum shiftOut( ) Desloca os bits dos bytes de dados um por vez. Começa a partir do mais significado (ou seja, o mais à esquerda) ou pelo bit menos significativo. Cada bit é enviado para o pino de saída, após a mudança de clock. Isso é conhecido como protocolo serial síncrono 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 máximas, já que ambos compartilham do mesmo clock. Isto é frequentemente referido na documentação de hardware como chip Serial Peripheral Interface (SPI). Sintaxe SHIFTOUT (dataPin, clockPin, bitOrder, valor) Parâmetros 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 mudança. (byte) Retorno Nenhum O dataPin e o clock já devem ser configurados como saída por uma chamada de pinMode ( ). SHIFTOUT está definido para a saída de 1 byte (8 bits), por isso requer uma operação de dois passos para uma saída 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; shiftOut (dataPin. Cancela e retorna 0 se nenhum pulso começar dentro de um limite de tempo especificado. padrão é um segundo. aguarda o pino ir para nível baixo e pára a cronometragem. } void loop ( ) { for (int j = 0. pulseIn( ) espera o pino assumir valor alto. LOW) . inicia a contagem. OUTPUT) . tempo de espera) Parâmetros pino: o número do pino no qual se quer ler o pulso. Retorna . Por exemplo. digitalWrite (latchPin. clockPin. valor. valor) pulseLn (pino. LSBFIRST. Sintaxe pulseIn (pino. j < 256. pinMode (dataPin. delay (1000) . OUTPUT) . pinMode (clockPin. valor: tipo de pulso para ler: alto ou baixo. Retorna o comprimento do pulso em microssegundos. A temporização dessa função foi produzida empiricamente e provavelmente mostrará erros em pulsos mais longos. j) . se o valor for elevado. j++) { digitalWrite (latchPin. OUTPUT) . HIGH) . Funciona em pulsos de 10 microssegundos à 3 minutos de duração. timeout (opcional): o número de microssegundos para aguardar o impulso para iniciar.104 void setup( ) { //setar os pinos como saída pinMode (latchPin. } } pulseIn( ) Lê um pulso (alto ou baixo) em um pino. void setup ( ) { pinMode (pin. time = millis ( ).print (“Time: “). INPUT). Exemplo unsigned long time.begin (9600). } FUNÇÕES DE TEMPO millis() Retorna o número de milissegundos desde que a placa Arduino começou a executar o programa atual. Parâmetros Nenhum Retorno Número de milissegundos desde o início do programa. após aproximadamente 50 dias executando. } void loop ( ) { Serial. unsigned long duration. Esse número vai estourar (voltar para zero). //imprime o tempo desde o inicio do programa .105 A duração do pulso (em microssegundos) ou 0 se nenhum pulso começar antes do tempo limite. } void loop( ) { Duration = pulseIn (pin. Exemplo int pin = 7. HIGH). void setup ( ) { Serial. } micros( ) Retorna o número de microssegundos desde que a placa Arduino começou a executar o programa atual.println (time). após aproximadamente 70 minutos. delay (1000). o valor retornado é sempre um múltiplo de quatro). Exemplo unsigned long time. Time = micros ( ).begian (9600). } delay( ) Interrompe o programa por um período de tempo (em milissegundos) especificado como parâmetro.106 Serial.println (time). Em 16 MHz as placas Arduino têm uma resolução de quatro microssegundos (ou seja. Serial. delay (1000). } void loop ( ) { Serial. void setup ( ) { Serial. Retorno Nenhum . Esse número vai estourar (voltar para zero).print (“Time: “). Sintaxe delay(ms) Parâmetros ms: o número de milissegundos para fazer uma pausa. Parâmetros Nenhum Retorno Número de microssegundos desde o início do programa. void setup( ) { pinMode (outPin. Sintaxe delayMicroseconds (valor) Parâmetros valor: o número de microsegundos para fazer uma pausa Retorna Nenhum Exemplo intoutPin = 8. delayMicroseconds() Interrompe o programa para o período de tempo (em microsegundos) especificado como parâmetro. assim sendo o uso de delay( ) em um projeto tem desvantagens significativas. Há milhares de microsegundos em um milisegundo. HIGH). atrasos limitam o uso das tarefas como mudança de estados. cálculos matemáticos. OUTPUT). manipulação dos pinos. etc. Nenhuma outra leitura de sensores. podem continuar durante a função de atraso. LOW). digitalWrite (outPin. delayMicroseconds (50). 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 (50).107 Embora seja fácil criar um LED piscando com a função delay( ). } void loop ( ) { digitalWrite (outPin. } FUNÇÕES MATEMÁTICAS . e um milhão de microsegundos em um segundo. São citadas abaixo as funções mais utilizadas e sugerida a utilização de material complementar referente a linguagem C.y): retorna o valor máximo entre x e y. Função abs(x): retorna o valor absoluto de x. use randomSeed( ) para inicializar o gerador de números aleatórios com uma entrada bastante aleatória. embora muito longa e aleatória é sempre a mesma. Em execuções subsequentes de um projeto. Se é importante uma sequência de valores aleatórios utilize a função random( ). Função max(x. como analogRead( ) em um pino desconectado. a. Funções trigonométricas: retornam o valor do seno. b):restringe valor de x entre a e b. afim de utilizar estas funções. Isso pode ser feito chamando randomSeed( ) com um número fixo. fazendo com que ela comece em um ponto arbitrário na sua sequência aleatória. O menu Help de qualquer compilador C possui todo conceito e propriedades de cada uma das funções a seguir. ou em material disponível em sites na internet. Esta sequência. antes de iniciar a sequência aleatória. A seguir são descritas as funções random( ) e randomSeed( ). Função pow (base.108 As funções matemáticas utilizadas na linguagem Arduino IDE são as mesmas utilizadas na linguagem C. Função constrain (x. cosseno ou tangente de determinado ângulo em radianos através das funções sin(x). cós(x) e tan(x). NÚMEROS ALEATÓRIOS A função randomSeed( ) inicializa o gerador de números pseudoaleatórios. • • • • • • • Função min(x. Função sqrt(x): retorna o valor da raiz quadrada de x. expoente): eleva base ao expoente. y): retorna qual o valor mínimo entre x e y. com seus respectivos exemplos: . Por outro lado. pode ser ocasionalmente útil utilizar números pseudoaleatórios que se repetem exatamente. respectivamente. Retorno Nenhum. Exemplo longrandNumber. . Serial. } randomSeed( ): Parâmetros seed. void setup( ) { Serial. max) Parâmetros min – limite inferior do valor aleatório (opcional). } void loop ( ) { // print a random number from 0 to 299 randNumber = random (300).println (randNumber). // print a random number from 10 to 19 randNumber = random (10.109 random( ) Sintaxe random(max) random(min. Retorno O valor aleatório entre min e Max. tipo int – número que gera o valor aleatório. Serial.println (randNumber). delay (50).begin (9600). Exemplo longrandNumber. max – limite superior do valor aleatório. 20). println (randNumber).110 void setup ( ) { Serial. . Sintaxe Lowbyte (x) Parâmetros x: um valor de qualquer tipo Retorno byte bitRead() Lê um bit de um número. Sintaxe highByte (x) Parâmetros x: um valor de qualquer tipo Retorno byte lowByte() Extrai o byte de menor ordem (à direita) de uma variável. Sintaxe bitRead (x. } Void loop ( ) [ randNumber = random (300). } FUNÇÕES 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).begin (9600). Serial. n) Parâmetros x: o número a partir do qual se faz a leitura. delay (50). randomSeed (analogRead (0)). a partir de 0 para o bit menos significativo (mais à direita) Retorno nenhum bitClear() Limpa (escreve 0) em um bit de uma variável numérica. b) Parâmetros x: variável numérica na qual se escreve. n. Sintaxe bitset (x. b: o valor a se gravar (bit com valor 0 ou 1) Retorno nenhum bitSet() Seta 1 em um bit de uma variável numérica. Sintaxe bitClear (x. Retorno O valor do bit (0 ou 1) bitWrite() Grava um bit de uma variável numérica. começando em 0 para o bit menos significativo.111 n: o número de bits a ser lido. n: qual o bit a ser zerado. n: o número de bits a ser escrito. começando em 0 para o bit menos significativo. n) Parâmetros x: variável numérica cujo bit se quer zerado. n: o bit a se definir.n) Parâmetros x: variável numérica cujo valor quer se definir. a partir de 0 para o bit menos significativo (mais à direita). Retorno Nenhum . Sintaxe bitWrite (x. 112 bit() Calcula o valor do bit especificado (bit 0 é 1. etc. o bit 2 é 4.) Sintaxe bit (n) Parâmetros n: o bit. cujo valor se deseja calcular Retorno o valor do bit . o bit 1 é 2. o uso de bibliotecas mais específicas. • computador. Tem-se as seguintes bibliotecas de referencia: EEPROM: leitura e escrita de “armazenamento” permanente. • . Lembrando sempre que. • digitais. • protocolo Firmata. O que é de extrema importância quando se faz uso do Arduino com um enfoque em uma determinada área. como por exemplo: Comunicação (redes e protocolos) Messenger: Para o processamento de mensagens de texto a partir do New Soft Serial: Uma versão melhorada da biblioteca Software Serial. valores e funções. 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 líquido (LCD). SPI: para se comunicar com dispositivos que utilizam barramento Serial Software Serial: Para a comunicação serial em qualquer um dos pinos Stepper: para controlar motores de passo. • • uma rede de dispositivos ou sensores. Wire: Dois Wire Interface (TWI/I2C) para enviar e receber dados através de Tem-se como referência também.113 Bibliotecas O uso de bibliotecas proporciona um horizonte de programação mais amplo e diverso quando comparado a utilização apenas de estruturas. • • Shield. para se fazer uso de uma biblioteca está já deve estar instalada e disponível na sua máquina. Isso é perceptível quando são analisados os assuntos que são abordados por cada biblioteca em específico. Servo: para controlar servo motores. • • • Peripheral Interface(SPI). Simple Message System: Enviar mensagens entre Arduino e o computador. • Ethernet Shield). • • • Sensoriamento Capacitive Sensing: Transformar dois ou mais pinos em sensores capacitivos. Streaming: Um método para simplificar as declarações de impressão. celular. XBee: Para se comunicar via protocolo XBee. Utilidades • • • Text String (String): Manipular strings PString: uma classe leve para imprimir em buffers. • • ação a cada N milissegundos. Serial Control: Controle remoto através de uma conexão serial. • • Geração de Frequência e de áudio Tone: Gerar ondas quadradas de frequência de áudio em qualquer pino do • microcontrolador.114 • • • • OneWire: Dispositivos de controle que usam o protocolo OneWire. Temporização DateTime: Uma biblioteca para se manter informado da data e hora atuais do Metro: Ajuda ao programador a acionar o tempo em intervalos regulares. Debounce: Leitura de ruídos na entrada digital. MsTimer2: Utiliza o temporizador de 2 de interrupção para desencadear uma • software. . PS2Keyboard: Ler caracteres de um teclado PS2. 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. tais como sensor infravermelho. Shield Arduino Navigation. Também pode ser agregado outros shields e expandir as funções com Xbee. GPS. detecção de obstáculos através do infravermelho ou do ultrassom. etc. bussola e demais outras funções incorporadas. Ethernet. 2011 A UMR (Unidade Móvel Robótica) é uma estrutura de robô móvel desenvolvida com o Arduino Duemilanove Atmega 328 como placa central de processamento.1: Unidade Móvel Robótica Fonte: Robotic. sensor ultrassônico. além de agregar sensores digitais de trilha. O robô possui diversas funcionalidades agregadas.115 ANEXO H– ROBO MÓVEL EDUCACIONAL Figura H. labirinto. . WiFi. comunicação remota. medição de distancias. 116 Figura H.2: Arduino Shield Navigation Fonte: Robotic. 2011 . 3: Controle Remoto com a UMR Fonte: Robotic. SD => Sensor direito SC => Sensor Central SE => Sensor Esquerdo Figura H. Ligue cabos Jumpers do SD ao P7 do Arduino. Figura H.3 apresenta-se o controle remoto e a UMR utilizada no experimento. 2011 Robô Seguidor de Trilha Conecte o sensor de trilha. Na Figura H.4: Arduino Sensor Shield Fonte: Robotic. O código do seguidor de trilha está no Quadro H. no conector do shieldNavigation. com 20mm de largura em uma superfície branca. SC ao P6 e SE ao P5. 2011 Faça uma trilha usando fita isolante ou pintada na cor preta.2.1.117 Controlando a UMR por um controle remoto O código do controle por IR está no Quadro H. . //SENSOR DE INFRARED NO PIN 2 IRrecvirrecv(RECV_PIN). delay(15). } void loop() { if (irrecv. decode_results results. irrecv.begin(9600).write(0) .write(70) .h> #include <MegaServo.value == 144){ //Chave CH+ frente Servos[1].enableIRIn().value == 1168){ //Chave VOL+ direita Servos[1]. //SERVO ESQUERDO NO PIN 9 Servos[1].118 Figura H. Servos[2]. Maximo de 48 arduino MEGA.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. delay(15). delay(15).decode(&results)) { Serial.volta Servos[1]. 12 para outros arduinos #define FIRST_SERVO_PIN8 MegaServo Servos[NBR_SERVOS] . } irrecv.write(180) . //SERVO DIREITO NO PIN 8 Servos[2].println(results. delay(15).880.value). Servos[2].blink13(true).write(70) . constint RECV_PIN = 2.write(0) .write(70) . } if (results. if (results. Servos[2]. void setup() { Serial. } if (results.5: Trilha para a UMR Quadro H. // Start the receiver irrecv.resume(). Servos[2].2400) .attach(8.attach(9. }}/ Recebe proximo valor Fonte: Robotic.write(0) . Servos[2]. delay(15).1: Código do Arduino Controle IR #include <IRremote. delay(15). Servos[2].write(180) .2400) .write(0) .880.write(180) . Servos[1].write(180) .} if (results. } if (results.value == 2192){ //Chave CH.value == 3216){ //Chave VOL+ esquerda Servos[1]. 2011 .write(70) .value>= 3536){ //Chave JUMP PÁRA Servos[1]. intir_c = 6.} if (st_e == LOW and st_c==HIGH and st_d==HIGH){esquerda().write(180). Servos[2]. //verifica cada sensor e guarda seu status st_c =digitalRead(ir_c).2: Código do Arduino Seguidor de Trilha #include <MegaServo.write(70) . intmotor_e = 10.write(0).2400) . Maximo de 48 arduino MEGA.write(180).INPUT).} void esquerda() { Servos[1].} if (st_e == HIGH and st_c==HIGH and st_d==HIGH){para().attach(motor_e. st_e = digitalRead(ir_e). intmotor_d = 9. Servos[2]. if (st_e == HIGH and st_c==LOW and st_d==HIGH){frente(). Servos[2]. para(). pinMode(ir_e. 12 para outros arduinos #define FIRST_SERVO_PIN8 MegaServo Servos[NBR_SERVOS] . } void loop() { st_d = digitalRead(ir_d).write(70) . delay(300).} if (st_e == LOW and st_c==LOW and st_d==HIGH){esquerda().INPUT).880. intir_e = 5.attach(motor_d. intir_d = 7. delay(30).write(0). } voidpara() { Servos[1].880.INPUT).write(180) . 2011 .h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. void setup(){ Servos[1]. delay(30). Servos[2]. Servos[2].write(0) . } Fonte:Robotic.} if (st_d == LOW and st_c==LOW and st_e==HIGH){direita(). pinMode(ir_d. pinMode(ir_c.119 Quadro H. intst_e. } voiddireita() { Servos[1].2400) . intst_d. // variavel para quardar o valor no ir receptor direito intst_c.} if (st_d == LOW and st_c==HIGH and st_e==HIGH){direita().} } voidfrente() { Servos[1]. delay(15). default is 100 doubleGetKp(). double*. it should be // calLED every time loop() cycles. // * sets the frequency. double. // Setpoint.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). with which // the PID calculation is performed. // .0. doubleGetKd(). REVERSE // means the opposite.1: Biblioteca PID_v1. // * constructor. and double. // where it's important to know what is actually // inside the PID. // These functions query the pid for interal values. it's very unlikely that this will be needed // once it is set in the constructor. this function gives the user the option // of changing tunings during runtime for Adaptive control voidSetControllerDirection(int). void Compute(). ON/OFF and // calculation frequency can be set using SetMode // SetSampleTime respectively voidSetOutputLimits(double. 0-255 by default. or "Action" of the controller. links the PID to the Input. // * Sets the Direction. but //it's likely the user will want to change this depending on //the application voidSetTunings(double. in Milliseconds. // constructor.120 ANEXO I – CONTROLE PID COM ARDUINO Quadro I. intGetMode(). intGetDirection(). DIRECT // means the output will increase when error is positive.h #ifndef PID_v1_h #define PID_v1_h #define LIBRARY_VERSION 1. // they were created mainly for the pid front-end. Output. Initial tuning parameters are also set here voidSetMode(int Mode). double*. //clamps the output to a specific range. // * sets PID to either Manual (0) or Auto (non-0) // * performs the PID calculation. double. doubleGetKi(). voidSetSampleTime(int). double. private: void Initialize(). int). // * While most users will set the tunings once in the double). double *myInput. doubleoutMin.5. // * Pointers to the Input. 2011. O exemplo do Quadro I. doublekp.h> //Define Variables we'll be connecting to doubleSetpoint. myPID. unsigned long lastTime.} Fonte: Arduino. &Output. doubleITerm. Setpoint = 100. Output.2.1.2: Controle PID – Exemplo Básico #include <PID_v1.SetMode(AUTOMATIC). Input.Compute().1 tem-se a biblioteca do PID para desenvolvimento de sistemas de controle baseados nessa tecnologia. boolinAuto.2 apresenta um controle PID para leitura da entrada analógica A0 e controle da saída PWM através do pino 3. No Quadro I. double *mySetpoint. double *myOutput. . Quadro I.Output). outMax. void setup() { //initialize the variables we're linked to Input = analogRead(0). and Setpoint variables // This creates a hard link between the variables and the // PID. } void loop() { Input = analogRead(0). doubleki. Output. }. DIRECT). doubLEDispKd. lastInput. with pointers we'll just know. doubLEDispKi. //Specify the links and initial tuning parameters PID myPID(&Input. doublekd. 2011. analogWrite(3. #endif Fonte: Arduino. intSampleTime. // * 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.121 doubLEDispKp. freeing the user from having to constantly tell us // what these values are. //turn the PID on myPID. &Setpoint. O site do twitter já possui um aplicativo para realizar a interface com o Arduino.122 ANEXO J .1 – Arduino Twitter .ARDUINO TWITTER O Arduino possui uma biblioteca Twitter que se comunica através do EthernetShield. A biblioteca não irá twittar diretamente do Arduino. o dispositivo irá enviar os tweets para um site que em seguida enviará para o site do twitter através de um mecanismo que envia o tweet sem necessidade do usuário/senha.1. Figura J. conforme a Figura J. Serial. Ethernet.h> //#include <EthernetDNS. 0xAD. Serial. } } else { Serial. } else { Serial. 0. void setup() { delay(1000).wait(). 0xBE.println("OK.1 – Código da Aplicação #if defined(ARDUINO) && ARDUINO > 18 // Arduino 0019 or later #include <SPI."). Twitter twitter("<<< your token here >>>"). char msg[] = "Hello.println("connection faiLED.print("faiLED : code "). 177 }.h> byte mac[] = { 0xDE. 0xFE.begin(9600).. 0xED }. } } void loop() { } A biblioteca utiliza este site como um servidor proxy para o material OAuth.h> Only needed in Arduino 0022 or earlier #include <Twitter. if (status == 200) { Serial. .. Seu tweet não podem ser aplicadas durante a manutenção deste site. 0xEF.").").println(status).println("connecting .begin(mac. 0. if (twitter. byte ip[] = { 10. Serial.h> #endif #include <Ethernet. World! I'm Arduino!". ip).123 Quadro J.post(msg)) { int status = twitter. Curso de Engenharia de Eletricidade. Impresso por computador (Fotocópia). 2011. Orientadores: Areolino de Almeida Neto. Antonio Diego Santos Arduino – plataforma eletrônica microcontrolada / Antonio Diego Santos Abreu. 2. 4. – 2011.5 .124 Abreu. Monografia (Graduação) – Universidade Federal do Maranhão. 123 f. I Título CDU 681. Sistema embarcado. 3. Microcontrolador. Arduino. 1.Controle automático – Engenharia. Marcos Tadeu Rezende.
Copyright © 2024 DOKUMEN.SITE Inc.