Apostila - Robótica
Apostila - Robótica
Apostila - Robótica
1. Introduo Robtica
A disciplina de Introduo Robtica ministrada no quinto mdulo do curso de Tcnico em Mecatrnica. A disciplina contempla experimentos em forma de simulao de componentes robticos, laboratrios experimentais para aprender a trabalhar com os principais sensores em robtica e finalmente o aprendizado referente construo do rob mvel que utilizado em sala de aula. A UMR (Unidade Mvel Robtica) uma estrutura de robtica Mvel, pronta para praticas educacionais baseadas no Arduino.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
O projeto Arduino foi iniciado na cidade de Ivrea, na Itlia em 2005, tendo por objetivo tornar os projetos acadmicos mais simples e com oramento menor em relao aos custos na poca. Logo em 2006 o projeto foi smbolo de sucesso e recebeu meno honrosa na categoria Comunidades Digitais em 2006, pela Prix ArsEletronica, alm de alcanar a marca de 50.000 placas vendidas at outubro de 2008.At hoje o projeto j vendeu mais de 100.000 placas. Qualquer microcontrolador pode ser adaptado para a realidade do Arduino, os projetos so feitos com base em um microcontrolador Atmel AVR, mas podem ser atualizados para qualquer outro microcontrolador que em conjunto com o seu projeto suportem a linguagem Arduino. Com base nessa possibilidade, existem muitas outras verses, que so cpias modificadas que so desenvolvidas e adaptadas para a realidade regional, no exemplo do Brasil, temos o Freeduino, Tatuino dentre outras variaes. Os desenvolvedores do projeto disponibilizam todos os cdigos e diagramas de montagem para qualquer usurio interessado em confeccionar o seu prprio prottipo, da mesma forma que vendem as placas montadas para todo o mundo. Em reportagem revista INFO 1, em maro de 2009, David Mellis, da Arduino, contou como um hardware de cdigo aberto pode se espalhar pelo mundo,Mellis falou que a empresa queria que outras pessoas estendessem a plataforma para adequ-la s suas necessidades. Para isso, elas deveriam ter acesso ao cdigo-fonte do software e ao projeto do hardware. Alm disso, como era uma plataforma nova, ser de cdigo aberto deu confiana s pessoas. Elas sabiam que poderiam continuar expandindo a plataforma mesmo que o desenvolvedor original desistisse dela. Segundo David Mellis (2009) o cdigo aberto traz algumas vantagens ao hardware que a possibilidade de adaptar o modelo de negcios e o fornecimento a diferentes situaes. Outras empresas podem vender kits para a montagem de
1
http://info.abril.com.br/professional/tendencias/hardware-livre-leve-e-solto.shtml
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
dispositivos compatveis com Arduino, por exemplo. Tambm podem redesenhar os produtos para trabalhar com componentes que so mais baratos e fceis de conseguir em seus pases. Um exemplo de produto derivado das placas Arduino que atende a um uso especfico a ArduPilot, placa de cdigo aberto para navegao autnoma em aeronaves. (Revista INFO, 2009, p. 30) O Arduino uma plataforma open-source projetada com um microcontrolador simples de 8 bits da famlia AVR da fabricante ATMEL e que utiliza uma linguagem baseada em C/C++, mas que tambm pode ter o seu projeto adaptado para qualquer outro microcontrolador que suporte a linguagem. O projeto Arduino tem por objetivo ser uma ferramenta de baixo custo, flexvel e, principalmente, de fcil utilizao, seja por alunos profissionais da rea, ou at mesmo usurios que tem necessidade de desenvolver um projeto eletrnico. Alm disso, os requisitos mnimos para utilizao de uma das placas da plataforma Arduino um computador com entrada USB e o software de compilao encontrado na pgina dos desenvolvedores do projeto 2. As placas Arduino possuem algumas portas de entrada e sada, analgicas e digitais, alm de uma ou mais portas de comunicao serial, que so caractersticos do microcontrolador utilizado na placa. As placas Arduino contam com um sistema de boot incorporado ao microcontrolador, que tem por objetivo interpretar a linguagem Arduino e traduzi-la para linguagem de instruo do microcontrolador. Atravs dos diversos recursos apresentados pela plataforma, o Arduino pode interagir em diversos nveis de projetos, como em projetos mais simples que dispe de Leds, botes, CIs, LCD, entre outros, comunicando com um PC atravs de porta USB, ou outros dispositivos controlveis como PLDs, FPGAs, ou outros microcontroladores e ferramentas mais sofisticadas, tais como comunicao ethernet e wi-fire. Neste primeiro momento iremos discutir sobre todos os modelos de plataformas Arduino, bem como os microcontroladores e programas utilizados.
http://www.arduino.cc/
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
2.1
Desde o princpio, as placas Arduino contavam com um microcontrolador ATMEGA, portas de entrada e sada, analgicas e digitais nvel TTL - TransistorTransistor Logic(5V), e porta de comunicao serial. Hoje contamos com placas cada vez mais sofisticadas com configuraes que atendem cada vez mais as necessidades do pblico. As placas Arduino podem ser encontradas para venda em sites representantes ou montadas pelo prprio usurio, j que os desenvolvedores disponibilizam em seu site os arquivos do esquemtico e do layout da placa. Alm disto, os componentes utilizados para fabricao das placas so de fcil acesso e encontradas em qualquer loja de componentes eletrnicos. A seguir, mostramos as placas disponveis desde o primeiro modelo at o mais atual e ainda outros modelos mais especficos.
Foi a primeira placa desenvolvida em 2005. Possui um microcontrolador ATMEGA8, que possui 8 KB de memria de programa (flash), componentes discretos e uma porta serial do tipo RS232. a placa mais simples de montar, pois os componentes utilizados so do tipo convencional (ThruHole). considerada uma placa obsoleta, por causa de sua porta de comunicao estar caindo em desuso, alm de no contar com componentes do tipo SMD, considerados ideais pelo mercado.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
O Arduino USB foi a primeira placa fabricada com conexo USB, sendo vendida principalmente como um kit que deveria ser montado pelo usurio. Esta primeira placa tinha um problema de layout nas ligaes com conector USB e teve uma segunda verso lanada. Seguida desta, foi lanada a placa Arduino Extreme, que contava com componentes SMD em substituio aos convencionais, sendo lanada a seguir uma segunda verso em que o layout possua plano de terra. Possua um ATMEGA8 e uma FTDI para converso RS232 - USB. A terceira gerao de Arduino com porta USB foi Arduino NG (NuovaGenerazione), que continha um novo FTDI para converso RS232 USB e um novo microcontrolador ATMEGA 168.
So os modelos 2009 e 2007 das placas Standart(padro) da plataforma. Conta com uma dzia de portas de I/O digitais, meia dzia de portas de I/O analgicas, conversor A/D de 10 bits, comunicao via USB, SPI, I2C, Canais PWM, alimentao via USB ou externa atravs de fonte de alimentao, entre outras caractersticas. O modelo 2007 contava com um microcontrolador ATMEGA 168 com 16 KB, enquanto o modelo 2009contava com um ATMEGA 328 com 32KB (Flash).
O Arduino UNO a ltima verso das placas Arduino. Lanada no final de 2010 possui um microcontrolador ATMEGA328 e a novidade est no conversor RS232 USB que conta com um ATMEGA8 substituindo o FTDI. Com isto o bootloader do sistema diminuiu de tamanho, o que economizou na flash do ATMEGA328 e acelerou o processo.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
O Uno foi utilizado para marcar o lanamento do Arduino 1.0 e junto a este sero as verses de referncia.
O Arduino MEGA uma placa que possui como caractersticas principais um microcontrolador que possibilita principalmente uma quantidade maior de portas de I/O, outros recursos como portas seriais extras, PWMs, entre outros recursos. Foi desenvolvida originalmente com o ATMEGA 1280, um microcontrolador com 128 KB de memria flash e um FTDI, que foram substitudos posteriormente por um ATMEGA 2560, que possui 256 KB de memria flash e assim como o Uno possui um ATMEGA 8 como conversor RS232 USB.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
10
O Arduino Mini a menor placa de todas as placas. Baseada em um ATMEGA168, pode ser considerada a miniaturizao da Diecimilia por possuir grande parte dos recursos desta, mas no possui conexo USB. Para program-la Esta placa ideal quando se deseja otimizar espao e projetar mais de um prottipo, pois neste caso necessrio apenas um adaptador no qual pode gravar quantas placas mini se desejar. Pode-se utiliz-la diretamente em uma protoboard ou ento sold-la ao hardware do prottipo em desenvolvimento.
11
Esta placa pode ento ser considerada a miniaturizao da Arduino Duemilanove completo, pois possui praticamente todos os recursos que o Duemilanovedispe, inclusive conexo USB. Para aliment-lo por uma fonte externa, necessrio que a alimentao ocorra diretamente nos pinos de alimentao disponveis, diferente do que ocorre no Duemilanove, mas em relao ao tamanho, esta placa semelhante ao Mini, mas um pouco mais alongada.
O Arduno Bluetooth umaplaca que se difere em vrios aspectos aos Arduinos tradicionais. Como o prprio nome sugere, o Arduino Bluetooth possui conexo sem fio via Bluetooth incorporado na placa. Devido a sua complexidade, esta a placa Arduino com o oramento mais alto e tambm a mais sensvel. Sua alimentao de no mximo 5,5V que serve para carregar a bateria presente no mdulo. Possui algumas outras peculiaridades, como por exemplo, o mdulo de Bluetooth, que deve ser configurado conforme exige o fabricante.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
12
2.3.9 Arduino fio e lilypad Estas duas placas Arduino so de uso mais especfico. O Arduino Lilypad foi desenvolvido em um formato circular o que viabiliza a sua aplicao, que ser incorporado a roupas e tecidos de outras aplicaes. J o Arduino Fio uma placa desenvolvida para com o Funnel, que uma linguagem de programao baseada em redes funcionais. destinado a com um ponto de Wireless contendo inclusive um conector para ser acoplado um dispositivo XBee.
2.3.10Principais diferenas Cada Arduino tem sua particularidade, sendo que o melhor buscar o custo/benefcio mais interessante. O mercado proporciona opes de alto e baixo custo, que fazem toda a diferena na montagem final do projeto, dependendo do seu propsito. Projetos mais simples que no exigem otimizao de espaos, podem utilizar um Arduino Uno ou Duemilanove, dependendo se necessrio uma boa velocidade do
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
13
microcontrolador ou no. Aplicaes em que velocidade no extremamente essencial, o Arduino Duemilanove suficiente. Caso contrrio, um Arduino Uno mais interessante, j que o bootloader executado por um microcontrolador a parte. De acordo com a publicao cientfica PROGRAMAR, 2008, oBootloader uma ferramenta que quando ligada possibilita que o Arduino receba os comandos diretamente da porta USB. Quando so necessrias muitas portas de I/O, digitais ou analgicas, o Arduino Mega melhor a opo. Projetar um hardware e ainda ter de multiplexar as portas I/O para aumentar a variabilidade do Arduino Uno ou Duemilanove muitas vezes se torna mais dispendioso do que adquirir um Arduino Mega. Quando se fala em otimizao de espaos, os Arduinos Mini e Nano so as opes procuradas, j que se assemelham praticamente a CIs de 40 pinos DIP. O layout dessas placas j foi feito pensando nesta premissa. O Arduino Bluetooth uma opo bastante onerosa, mas que dependendo da situao mais simples de aplicar do que adquirir um sistema Xbee e acoplar externamente a outro tipo de Arduino. E os ArduinosLilypad e Fio j so bem especficos. No mercado possvel adquirir placas baseadas no Arduino, como o Freeduino, o Chinduino, Seeduino, Iluminato e at mesmo a verso brasileira com uma estampa da bandeira do Brasil na parte de baixo da placa. Todas estas placas so os chamados clones e podem apresentar peculiaridades em relao ao original, inclusive melhorias como uso de um microcontrolador mais potente, maior nmero de portas, entre outros. A escolha fica por conta do usurio, que deve faz-lo da melhor forma possvel e pensando em todas as possibilidades futuras do projeto, mas se necessrio mudar o tipo de placa Arduino depois de iniciado o projeto, no h problema algum, j que todas as placas tem a linguagem compatvel entre si.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
14
e os programas desenvolvidos para um microcontrolador desta famlia necessitam de poucos ajustes, s vezes at nenhum, para serem utilizados em outros microcontroladores ATMEGA, diferentemente de outros modelos de microcontroladores. Os microchips utilizados nas placas Arduino so: ATMEGA8, ATMEGA168, ATMEGA328, ATMEGA1280 e ATMEGA2560. Cada qual possui peculiaridades, como disposio dos pinos, mas a programao a mesma e vale para qualquer um deles. No Arduino ainda utilizado um cristal ressonador de 16MHz como fonte clock externo dos microcontroladores. Isto possibilita que o microcontrolador faa cerca de 16 milhes de instrues por segundo. Em relao aos recursos de cada um dos microcontroladores, apresentado na tabela 3.1 um comparativo com as principais caractersticas relativas ao ATMEGA. Alguns conceitos bsicos sobre as caractersticas destes microcontroladores so: Portas de I/O so as portas de entrada e sada de dados, analgicos ou digitais, e que servem para comunicar externamente o microcontrolador e hardware. A memria flash delimita o tamanho mximo do programa que ser executado pelo Arduino. O bootloader do Arduino ainda utiliza uma pequena parcela desta memria. A memria EEPROM uma memria utilizada para armazenar dados, os quais s sero excludos quando o programa sobrescrev-los. A memria SRAM uma memria utilizada para armazenar dados temporrios. Canais A/D so canais que convertem dados analgicos em digitais. No ATMEGA a converso A/D tem preciso de 10 bits. UART um perifrico responsvel pela comunicao serial entre o microcontrolador e o mundo externo, como por exemplo a comunicao serial entre Arduino e PC.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
15
Portas I/O 23 23 23 86 86
SRAM (Kb) 1 1 2 8 8
Canais A/D 6 8 8 16 16
UART 1 1 1 4 4
No trabalho foi adotada a placa padro, o Arduino Uno e Duemilanoeve, para executar os projetos e demonstrar os exemplos de programao. Mas os resultados obtidos podem ser comprovados utilizando qualquer outro modelo. 3.1 Arduino e a conexo com o computador
O software utilizado para desenvolver os projetos da plataforma Arduino denominado Arduino. Nessa parte do trabalho ser apresentado alguns aspectos desse software bem como da conexo da placa com ocomputador e algumas inconsistncias que podem interferir na comunicao. Em seguida iremos descrever a placa Arduino Uno por completo, todos os pinos externos e componentes que fazem parte do projeto da placa explicitando as suas funes e os recursos disponveis. Arduino IDE (IntegratedDevelopmentEnvironment ou Ambiente de Desenvolvimento Integrado), pode ser utilizado em qualquer uma das placas da famlia
O Arduino IDE um programa multitarefa desenvolvido em JAVA, utilizado para criar, salvar, editar e compilar os programas e carreg-los na placa Arduino, alm de apresentar outros recursos como gravao do Bootloader em um microcontrolador ATMEGA, um monitor serial simples, entre outros.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
16
O programa possui uma interface simples e rpida, que inclui um editor de cdigos-fonte com recursos de realce e identificao automtica de determinados cdigos digitados no programa. O programa ainda possui uma srie cdigos-fonte exemplos, uma ferramenta que auxilia o programador a aprender a linguagem Arduino ou relembrar cdigos necessrios durante o projeto que est sendo desenvolvido. Abaixo observa-se o software Arduino em execuo, utilizando um dos exemplos para demonstrar os realces no cdigo-fonte.
Na pgina oficial do Arduino realizado o download de um arquivo compactado, no qual est uma pasta que contm uma quantidade razovel de arquivos. Drivers para instalao do CI FTDI, exemplos, bibliotecas, referncias, entres outros.
3.2
17
O Arduino Uno a placa mais recente e pode-se consider-la como padro, pois todos os modelos derivam desta placa possuem apenas detalhes que a diferenciam desta, como por exemplo o Duemilanove possui os mesmos componentes, diferenciando-se no CI da converso RS232 USB.
Olhando a partir do primeiro pino no canto superior esquerdo da placa ao lado da entrada USB, pino AREF, e seguindo no sentido horrio, temos os seguintes componentes e funes: Pino AREF: Porta de entrada, responsvel por receber um sinal de referncia externa para o conversor A/D do Arduino. Se este pino ficar flutuando, o Arduino considerar como referncia 0V. Pino GND: Porta referente a um terra digital. Utilizado como terra referencial do hardware externo. Pinos 13 02: So as portas de I/O digitais. So portas onde o sinal de sada ser 0V ou 5V, conforme o cdigo fonte executar. Nas portas 11, 10, 9, 6, 5 e 3 esto disponveis os 6 canais PWMs da placa, conforme veremos nos prximos captulos.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
18
Ainda nestes pinos temos algumas outras funes especiais, como as ligaes SPI e 2 interrupes externas (pinos 2 e 3). Pinos 1 e 0: So portas de I/O digitais quando o modo serial no for utilizado no cdigo fonte. No caso de necessitar de porta serial para comunicar durante o programa, estas duas portas no serviram de I/O digitais, apenas para comunicao (so os pinos Tx e Rxo os pinos Tx e Rx). Pinos ICSP: Esto disponveis para o caso de se desejar gravar algum programa ou o bootloader da placa Arduino e significa In-SystemProgrammer. Se observado corretamente, pode-se utilizar esses pinos para comunicao SPI da placa, pois os pinos MISO, MOSI e SCK esto conectados nestes pinos, conforme veremos nos prximos captulos. Boto S1: Este boto o reset e est ligado diretamente ao reset do microcontrolador e tem por funo de facilitar ao usurio a reinicializao da placa. Cristal ressonador (Q1): um componente extremamente importante na placa Arduino, pois trata-se do gerador de clock com preciso do microcontrolador. Conversor RS232 USB (IC 2): No caso do Arduino Uno, este componente um outro microcontrolador (ATMEGA 8). Pinos Analog in: So as 6 portas analgicas da placa e possuem converso A/D com 10 bits de preciso, ou seja, possvel obter 1024 nveis de tenso diferentes com estes 10 bits ( bits). Estes pinos podem ser utilizados como portas I/O e ainda
nestes, est disponvel a comunicao I2C (pinos 4 (SDA) e 5 (SCL)). Pinos de alimentao (Power): Podem ser utilizados como fonte de tenso para o hardware externo, entrada de energia no pino Vin e um pino de reset externo. So 2 nveis de tenso para alimentao externa (5V e 3,3V) e GND. Entrada X1: a entrada Jack para uma fonte de alimentao externa do tipo fonte CA/CC com tenso mxima de 15V, sendo que o ideal a utilizao de fonte de alimentao com tenso entre 7,5V e 10V. possvel se utilizar uma bateria de 9V com um adaptador para este tipo de entrada. Regulador de tenso externa (IC 3): Regulado de tenso do tipo 7805M para regular e estabilizar em 5V uma alimentao de uma fonte de tenso externa.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
19
Entrada USB: Utilizada para comunicao e programao da placa Arduino. Esta entrada pode ser utilizada como fonte de alimentao, j que a USB do PC fornece uma alimentao de 5V estvel. Microcontrolador (IC 1): Responsvel por praticamente todas as funes e que no caso da placa Uno, trata-se de um ATMEGA328. Diodo de proteo (D1): Responsvel por proteger a placa contra ligaes externas incorretas. LEDs de sinalizao: So 4 os LEDs de sinalizao presentes na placa, sendo: o PWR: Indica que a placa est alimentada; o Tx e Rx: Sinalizam que est ocorrendo transmisso de dados e recepo de dados de e para a placa. o L: o nico LED presente na placa para utilizao via cdigo. ligado ao pino 13 de I/O digital e pode ser utilizado como teste de verificao de defeito da placa.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
20
Nesse momento do trabalho, sero abordadas vrias potencialidades e funcionalidades do Arduino bem como a descrio completa de alguns projetos que utilizam essa placa como principal elemento de controle. Trata-se de descrio de projetos de comunicao e controle que podem ser facilmente trabalhados com essa plataforma. Os projetos tambm podem ser implementados com os Shields, que so placas adicionais que podem ser agregadas ao Arduino original para aumentar as suas capacidades de processamento, expanso de pinos e funcionalidades. Dentre essas funcionalidades podemos destacar os Shields de ethernet, wifi, motorshield etc. Os Shields seguem a mesma filosofia que o conjunto de ferramentas originais: so fceis de montar e baratos de produzir.
4.1
Projetos Elementares
O projeto em questo trabalha com o intuito de descrever as ferramentas necessrias para implementar um projeto bsico de acionamento de dispositivos de sada pelos pinos da placa Arduino, no presente experimento foi demontrado o simples acionamento de um LED (Light Emissor Diode). As placas Arduino so projetadas de forma a facilitar o piscar de um LED com o uso do pino digital 13. As novas placas j so fabricadas com o LED instalado, nas outras existe um resistor de 1000 ohms no pino 13, o que lhe permite conectar o LED diretamente a ele, para conexo a outro pino digital, deve-se usar um resistor externo.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
21
Cdigo O cdigo de exemplo muito simples, pois demonstra o acionamento dos pinos de sada da placa em nvel alto e baixo para respectivamente acionar e desligar.
/*LED pisca-pisca: liga e desliga um LED conectado a um pino digital em intervalos de 2 segundos. */ void setup( ) { pinMode(13, OUTPUT); } void loop( ) { digitalWrite(13, HIGH); // liga o LED delay(1000); // aguarda 1 segundo digitalWrite(13, LOW); // desliga o LED delay(1000); // aguarda mais um segundo }
Existem situaes em que necessrio que o dispositivo seja acionado em intervalos peridicos ao mesmo tempo em que outra coisa acontece (tal como observar o estado de um interruptor). Para tanto no se deve usar a funo delay( ), seno todo o restante do programa fica paralisado enquanto o LED pisca.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
22
Para demonstrar esse exemplo segue um cdigo que demonstra como possvel acionar um dispositivo periodicamente (nesse caso um LED) sem o uso da funo delay( ). O que o programa faz observar quando foi a ltima vez que o LED foi ligado ou desligado e assim, a cada ciclo de loop ( ), verificar se passou o tempo determinado, se esse tempo tiver passado, o LED ligado caso esteja desligado e viceversa.
//LED conectado ao pino digital 13 // ultimo valor do LED // ultimo momento que LED foi atualizado // tempo de transio entre estados (milisegundos)
pinMode(ledPin, OUTPUT); }
void loop() { // verifica se o melhor momento para atualizar o LED, ou seja, se a diferena entre o tempo atual e o ltimo tempo que piscamos o LED maior que o tempo de transio entre estados? unsigned long currentMillis = millis(); if(currentMillis - previousMillis> interval) { // ultimo tempo em que o LED piscou previousMillis = currentMillis; // se o LED est apagado acenda-o ou vice-versa: if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); } } O cdigo apresentado acima deve ser o padro frente a funo delay(), pois o delay significa que o microcontrolado ir aguardar um determinado intervalo de tempo no executando nenhuma outra atividade, um estado de inrcia que nem sempre interessante para o projeto.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
23
O interruptor instantneo um componente que conecta dois pontos de um circuito ao pression-lo. O exemplo a seguir, liga um LED quando pressionamos um interruptor. Foram conectados dois fios placa Arduino. O primeiro vai de um dos terminais do interruptor ao GND. O segundo vai do outro terminal do interruptor at o pino digital 2 do Arduino. Foi ligado um resistor pull-up de 10K ohms nesse ltimo terminal (um terminal do resistor vai ao terminal do interruptor; o outro vai ao pino de fornecimento de 5V do Arduino). Quando o interruptor est livre (no pressionado), no h conexo entre seus dois terminais, de forma que o pino do Arduino est conectado aos 5V (via o resistor pull-up) e ao ler o pino, obtemos um nvel alto. Quando o interruptor fechado (pressionado), ocorre a conexo entre seus terminais, de forma que o pino do Arduino ligado ao terra do circuito e obtemos um nvel baixo. Nesse caso, observa-se que o pino ainda se mantm conectado aos 5 volts, mas o resistor de pull-downcom que o pino esteja mais prximo ao terra. O circuito tambm pode ser ligado na lgica reversa com o resistor de pull-up mantendo o pino 2 em nvel baixo. Se por acaso o pino digital for desconectado da montagem, o LED poder piscar de forma irregular, isto porque dizemos que o pino est flutuando com valores de tenso eltrica aleatrios, entre nvel alto e baixo, por isso a utilizao de um resistor de pull-up ou pull-down no circuito.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
24
Cdigo
intledPin = 13; // escolha o pino para o LED intinPin = 2; // escolha o pino de entrada (para o interruptor) intval = 0; // varivel para ler o estado do interruptor void setup() { pinMode(ledPin, OUTPUT); // declara-se o LED como sada pinMode(inPin, INPUT); // declara-se o interruptor como entrada } void loop(){ val = digitalRead(inPin); // ler o valor de entrada if (val == HIGH) { // verificar se a entrada HIGH (interruptor livre) digitalWrite(ledPin, LOW); // desligar LED }else { digitalWrite(ledPin, HIGH); // ligar LED } }
Em situaes mais crticas, necessita-se de um filtro para evitar rudos do interruptor toda vez que ele acionado, pois percebe-se que existem situaes que so diagnosticados mltiplos toques. O cdigo abaixo realiza esse filtro atravs da funo milis( ) para acompanhar o momento em que o interruptor pressionado. Em diversos
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
25
projetos esse tipo de situao se faz presente, por parametrizar a faixa de tempo em que o dispositivo atuar no sistema de controle sem trepidao para o sistema. Cdigo
intinPin = 7; intoutPin = 13; // o nmero do pino de entrada // nmero do pino de sada
intstate = HIGH; // estado atual do pino de sada intreading; // estado atual do pino de entrada intprevious = LOW; // estado anterior do pino de entrada // as seguintes variveis so do tipo ''long'' porque o tempo, // medido em milissegundos, // transformar-se- logo em um valor grande demais para um ''int'' long time = 0; // ltimo momento em que o pino de sada foi atualizado longdebounce = 200; // tempo do filtro, aumente se ocorrer irregularidades void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); } void loop() { reading = digitalRead(inPin); // se acabamos de pressionar o interruptor (isto , se a entrada // foi de LOW para HIGH), e esperamos o bastante desde o // ltimo toque de forma a ignorar o rudo... if (reading == HIGH &&previous == LOW &&millis() - time >debounce) { // ...inverta a sada if (state == HIGH) state = LOW; else state = HIGH; // ...e lembre-se do momento do ltimo toque time = millis(); } digitalWrite(outPin, state); previous = reading; } Tabela 4.4
4.1.3 Acionamentos Sequencial Esse experimento apresenta a utilizao de seis LEDs para apresenta um modo sequencial de acionamento dos dispositivos de sada do Arduino.Os LEDs esto conectados aos pinos de 2 7 da placa, com o uso de resistores de 330 ohms.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
26
O objetivo do cgido o piscar dos LEDs em sequencia, um por um, utilizando para tanto duas funes: uma para acionar a sada e outra para gerar um retardo.
Cdigo Cdigo int timer = 100; // Quanto maior, mais devagar. int pins[] = { 2, 3, 4, 5, 6, 7 }; // vetor com o nmero dos pinos intnum_pins = 6; // quantidade de LEDs (tamanho do vetor) void setup() { int i; for (i = 0; i <num_pins; i++) // elementos do vetor vo de 0 a num_pins - 1 pinMode(pins[i], OUTPUT); // configurar cada pino como sada } void loop() { int i; for (i = 0; i <num_pins; i++) { // varrer cada pino... digitalWrite(pins[i], HIGH); // ligando-o, delay(timer); // pausando-o, digitalWrite(pins[i], LOW); // e desligando-o. } for (i = num_pins - 1; i >= 0; i--) { digitalWrite(pins[i], HIGH); delay(timer); digitalWrite(pins[i], LOW); Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA }}
98 3245 3737 - www.netcom-ma.com.br
27
ANEXO II INSTRUES DO ARDUINO FUNES: CONCEITOS E PROPRIEDADES Abordagemdas funes, seus conceitos e propriedades, principalmente as funes exclusivas da linguagem Arduino. DIGITAL I/O: pinMode( ) Configura o pino especificado para se comportar como uma entrada ou uma sada. Veja a descrio dos pinos digitais para obter mais detalhes. Sintaxe pinMode (pino, modo) Parmetros Pino: o nmero do pino cujo modo que deseja ajustar; modo: entrada (INPUT)ou sada (OUTPUT). Retorno Nenhum Exemplo intledPin = 13; void setup ( ) { pinMode (ledPin, OUTPUT); } void loop ( ) { ......
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
// pino 13 comosada
28
} *Os pinos de I/O analgicos podem ser utilizados como pinos digitais, definidos como pinos 14 (porta analgica 0) a 19 (porta analgica 5). digitalWrite( ) Utilizado para definir o estado de um pino digital em estado alto (HIGH) ou baixo (LOW). Se o pino foi configurado como uma sada com pinMode( ), a sua tenso ser ajustada para o valor correspondente: 5V para alto, 0V (GND) para baixo. Se o pino foi configurado como entrada, ao defini-lo como alto (com digitalWrite( )) ir habilitar o resistor de pull-up interno 20K. Ao defini-lo como baixo ir desativar o pullup. O resistor de pull-up o suficiente para limitar a corrente e mal acender um LED, ento se os LEDs parecem funcionar, mas muito fracos, esta uma causa provvel. A soluo colocar o pino de uma sada com o pinMode( ). Sintaxe digitalWrite(pino, valor) Parmetros pino: o nmero de pinos valor: HIGH ou LOW Retorno nenhum Exemplo intledPin = 13; void setup( ) { pinMode (ledPin, OUTPUT); saida
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
29
} void loop ( ) { digitalWrite (ledPin, HIGH); delay (1000) digitalWrite (ledPin, LOW); delay (1000); } DigitalRead() L o valor de um determinado pino digital, HIGH (alto) ou LOW (baixo). Sintaxe digitalRead(pino) Parmetros pino: o nmero do pino digital que voc quer ler (int) Retorno HIGH ou LOW Exemplo intledPin = 13; intledPin = 7; //pushbutton connectado no pino digital 7. intval = 0; void setup ( ) { pinMode (ledPin, OUTPUT); pinMode (inPin, INPUT); }
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
30
void loop ( ) { val = digitalRead (inPin); //lendo o pino de entrada. digitalWrite (ledPin, val); //LED com o valor do boto. Se o pino no conectado a nada, digitalRead( ) pode retornar alto ou baixo (e isso pode alternar de forma aleatria). ANALOG I/O So os pinos de entrada e sada analgicos, que possuem vrias configuraes analgicas como veremos a seguir. analogReference( ) Configura a tenso de referncia utilizada para a entrada analgica (ou seja, o valor usado como fundo de escala de entrada). As opes so: Default: o padro analgico de referncia 5 volts (5V) ou 3,3V (depende da placa). Interna: uma referncia interna igual a 1,1V no ATMEGA168 ou ATMEGA328 e 2,56V no ATMEGA8. Externa: a tenso aplicada ao pino AREF usado como referncia.
Parmetros tipo: o tipo de referncia ao uso (default, interna, ou externa). Retorno Nenhum. Se estiver utilizando uma tenso de referncia externa (aplicando ao pino AREF), deve-se definir a referncia analgica para externa antes de chamar analogRead( ). Caso contrrio, pode ocorrer um curto-circuito entre a tenso de referncia ativa (gerada internamente) e o pino AREF, podendo danificar o microcontrolador na placa Arduino. Alternativamente, pode-se conectar um resistor de uns 5K entre a tenso de referncia externa e o pino AREF o que lhe permite alternar entre as tenses de
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
31
referncia externa e interna. Observe que o resistor iralterar a tenso que usado como referncia, porque h uma resistncia interna 32K no pino AREF.
analogRead( ) L um valor de tenso analgico no pino analgico especificado. A placa Arduino Uno possui 6 pinos analgicos com converso A/D de 10 bits. Isso significa que ele ir mapear tenses de entrada entre 0 e 5 volts em valores inteiros entre 0 e 1023. Isso produz uma resoluo entre as leituras de: 5 volts / 1024 unidades, ou seja, 0,0049 volts (4,9 mV) por unidade. O intervalo de entrada e resoluo podem ser alteradas utilizando analogReference( ). Demora cerca de 100 microssegundos (0,0001s) para ler uma entrada analgica, portanto, a taxa mxima de leitura cerca de 10.000Hz. Sintaxe analogRead(pino) Parmetros pino: o nmero de pinos de entrada analgica para ler (0-5 na maioria das placas, 0-7 sobre o Mini e Namo, 0-15 no Mega) Retorno int (0-1023) Se o pino de entrada analgica no est conectado a nada, o valor retornado pelo analogRead ( ) ir variar com base em uma srie de fatores (por exemplo, os valores das entradas analgicas de outros pinos). Exemplo intanalogPin = 3; //potencimetro conectado ao pino 3, 5V e GND. int Val = 0; //varivel inicializada para armazenar o valor lido.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
32
void setup( ) { Serial.begin(9600); //Porta serial com leitura de 9600bauds/s } void loop( ) { val = analogRead(analogPin) //Leo valor analgico e converte Serial.println(val); //Imprime via monitor serial o valor lido } analogWrite Escreve um valor analgico (utilizando os canais PWM). Pode ser usada para acender um LED de brilhos diferentes ou uma unidade de motor em velocidades diferentes. Aps uma chamada do analogWrite( ), o pino ir gerar uma onda quadrada constante no ciclo especificado at a prxima chamada para analogWrite( ) (ou uma chamada para digitalRead( ) ou digitalWrite( ) no mesmo pino). A frequncia do sinal PWM e de aproximadamente 490 Hz. No necessrio definir, com pinMode( ), o pino como uma sada antes de chamar analogWrite( ). A funo analogWrite no tem nenhuma ligao com os pinos analgicos ou funo analogRead. Sintaxe analogWrite(pino, valor) Parmetros pino: o pino para gravar. valor: ciclo de trabalho (entre 0 (sempre desligado) e 255 (sempre ligado)). Retorno
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
33
Nenhum Exemplo Define a sada para um diodo emissor de luz proporcional ao valor lido do potencimetro. intledPin = 9; intanalodPin = 3; intval = 0; void setup( { pinMode (ledPin, OUTPUT); } void loop ( { val = analogRead (analogPin); analogWrite(ledPin, val / 4); //analogRead valores entre 0 1023, analogWrite valores entre 0 255 } MODOS DE I/O AVANADOS tone( ) Gera uma onda quadrada de freqncia especificada (e 50% de duty-cicle) em um pino. A durao pode ser especificada, caso contrrio, a onda continuar at que uma chamada para noTone( ). O pino pode ser ligado a uma campainha piezo ou outro falante para reproduzir sons. Apenas um tom pode ser gerado de cada vez. Se o tom j est tocando em um pino diferente, a chamada para o tone( ) no ter nenhum efeito. Se o tom est enviando ao mesmo pino, a chamada ir definir a sua freqncia. O uso do tone( ) ir interferir com PWM de sada nos pinos 3 e 11.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
34
Observao: se desejar colocar valores em pinos mltiplos, necessrio chamar no Tone( ) em um pino antes de chamr o tone( ) no pino seguinte.
Sintaxe tone (pino, frequncia) tone(pino, freqncia, durao) Parmetros pinos: o pino sobre o qual gera o tom. frequncia: a freqncia do tom hertz. Durao: a durao do tom em milissegundos (opcional). Retorno Nenhum noTone( ) Pra a gerao de uma onda quadrada desencadeada por tone( ). No tem nenhum efeito se no houver nenhum tom sendo gerado. Sintaxe noTone(pino) Parmetros pino: o pino que se deseja parar de gerar o tom Retorno nenhum shiftOut( ) Desloca os bits dos bytes de dados um por vez. Comea a partir do mais significado (ou seja, o mais esquerda) ou pelo bit menos significativo. Cada bit enviado para o pino de sada, aps a mudana de clock.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
35
Isso conhecido como protocolo serial sncrono e uma forma comum de microcontroladores se comunicarem com os sensores e com outros microncontroladores. Isto ocorre devido aos dois dispositivos ficarem sincronizados e comunicarem-se perto de velocidades mximas, j que ambos compartilham do mesmo clock. Isto frequentemente referido na documentao de hardware como chip Serial Peripheral Interface (SPI). Sintaxe SHIFTOUT (dataPin, clockPin, bitOrder, valor) Parmetros dataPin: o pino de dados clockPin: o clock bitOrder: Define a ordem dos bits, ou seja mais significativo primeiro ou menos significativo primeiro. valor: valor dos dados para a mudana. (byte) Retorno Nenhum O dataPin e o clock j devem ser configurados como sada por uma chamada de pinMode ( ). SHIFTOUT est definido para a sada de 1 byte (8 bits), por isso requer uma operao de dois passos para uma sada de valores maiores do que 255. Exemplo //Ordem: Mais significativo primeiro int data = 500; // shift out highbyte shiftOut (dataPin, clock, MSBFIRST, (data >> 8)); // shift out lowbyte shiftOut (data, clock, MSBFIRST, data); // Ordem menos significativo primeiro data = 500; //shift out lowbyte
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
36
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 // // // //*************************************************************** *****// //Pinoconectadoao ST_CP of 74HC595 intlatchPin = 8; //Pinoconcetadoao SH_CP of 74HC595 int clock = 12; ////Pino conectado ao DS of 74HC595 int data Pin = 11; void setup( ) { : to count from 0 to 255
//setar os pinos como sada pinMode (latchPin, OUTPUT) ; pinMode (clockPin, OUTPUT) ;
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
37
for (int j = 0; j < 256; j++) { digitalWrite (latchPin, LOW) ; shiftOut (dataPin, clockPin, LSBFIRST, j) ; digitalWrite (latchPin, HIGH) ; delay (1000) ; } } pulseIn( ) L um pulso (alto ou baixo) em um pino. Por exemplo, se o valor for elevado, pulseIn( ) espera o pino assumir valor alto, inicia a contagem, aguarda o pino ir para nvel baixo e pra a cronometragem. Retorna o comprimento do pulso em microssegundos. Cancela e retorna 0 se nenhum pulso comear dentro de um limite de tempo especificado. A temporizao dessa funo foi produzida empiricamente e provavelmente mostrar erros em pulsos mais longos. Funciona em pulsos de 10 microssegundos 3 minutos de durao. Sintaxe pulseIn (pino, valor) pulseLn (pino, valor, tempo de espera) Parmetros pino: o nmero do pino no qual se quer ler o pulso. valor: tipo de pulso para ler: alto ou baixo. timeout (opcional): o nmero de microssegundos para aguardar o impulso para iniciar; padro um segundo. Retorna
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
38
A durao do pulso (em microssegundos) ou 0 se nenhum pulso comear antes do tempo limite. Exemplo int pin = 7; unsigned long duration; void setup ( ) { pinMode (pin, INPUT); } void loop( ) { Duration = pulseIn (pin, HIGH); } FUNES DE TEMPO millis() Retorna o nmero de milissegundos desde que a placa Arduino comeou a executar o programa atual. Esse nmero vai estourar (voltar para zero), aps aproximadamente 50 dias executando. Parmetros Nenhum Retorno Nmero de milissegundos desde o incio do programa. Exemplo unsigned long time; void setup ( ) { Serial.begin (9600);
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
39
} void loop ( ) { Serial.print (Time: ); time = millis ( ); //imprime o tempo desde o inicio do programa Serial.println (time); delay (1000); } micros( ) Retorna o nmero de microssegundos desde que a placa Arduino comeou a executar o programa atual. Esse nmero vai estourar (voltar para zero), aps aproximadamente 70 minutos. Em 16 MHz as placas Arduino tm uma resoluo de quatro microssegundos (ou seja, o valor retornado sempre um mltiplo de quatro). Parmetros Nenhum Retorno Nmero de microssegundos desde o incio do programa. Exemplo unsigned long time; void setup ( ) { Serial.begian (9600); } void loop ( ) { Serial.print (Time: ); Time = micros ( ); Serial.println (time); delay (1000); }
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
40
delay( ) Interrompe o programa por um perodo de tempo (em milissegundos) especificado como parmetro. Sintaxe delay(ms) Parmetros ms: o nmero de milissegundos para fazer uma pausa. Retorno Nenhum Embora seja fcil criar um LED piscando com a funo delay( ), atrasos limitam o uso das tarefas como mudana de estados, assim sendo o uso de delay( ) em um projeto tem desvantagens significativas. Nenhuma outra leitura de sensores, clculos matemticos, manipulao dos pinos, etc, podem continuar durante a funo de atraso. Os mais experientes programadores geralmente evitam o uso de delay( muito simples. delayMicroseconds() Interrompe o programa para o perodo de tempo (em microsegundos) especificado como parmetro. H milhares de microsegundos em um milisegundo, e um milho de microsegundos em um segundo. Atualmente, o maior valor que ir produzir um atraso exato 16.383. Isso pode mudar em futuras verses do Arduino. Para atrasos maiores do que alguns milhares de microssegundos, voc deve usar o delay( ). Sintaxe delayMicroseconds (valor) Parmetros
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
) para o
sincronismo dos eventos com mais de 10 de milissegundos a menos que o projeto seja
41
valor: o nmero de microsegundos para fazer uma pausa Retorna Nenhum Exemplo intoutPin = 8; void setup( ) { pinMode (outPin, OUTPUT); } void loop ( ) { digitalWrite (outPin, HIGH); delayMicroseconds (50); digitalWrite (outPin, LOW); delayMicroseconds (50); } FUNES MATEMTICAS As funes matemticas utilizadas na linguagem Arduino IDE so as mesmas utilizadas na linguagem C. Citamos abaixo as funes mais utilizadas e sugerimo a utilizao de material complementar referente a linguagem C, afim de utilizar estas funes. O menu Help de qualquer compilador C possui todo conceito e propriedades de cada uma das funes a seguir, ou em material disponvel em sites na internet. Funo min(x, y): retorna qual o valor mnimo entre x e y. Funo max(x,y): retorna o valor mximo entre x e y. Funo abs(x): retorna o valor absoluto de x. Funo constrain (x, a, b):restrigivalor de x entre a e b. Funo pow (base, expoente): eleva base ao expoente. Funo sqrt(x): retorna o valor da raiz quadrada de x.
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
42
Funes trigonomtricas: retornam o valor do seno, cosseno ou tangente de determinado ngulo em radisnos atravs das funes sin(x), cs(x) e tan(x), respectivamente.
NMEROS ALEATRIOS A funo randomSeed( ) inicializa o gerador de nmeros pseudo-aleatrios, fazendo com que ela comece em um ponto arbitrrio na sua sequncia aleatria. Esta sequncia, embora muito longa, e aleatria, sempre a mesma. Se importante uma sequncia de valores aleatrios utilize a funo random( ). Em execues subsequentes de um projeto, use randomSeed( ) para inicializar o gerador de nmeros aleatrios com uma entrada bastante aleatria, como analogRead( ) em um pino desconectado. Por outro lado, pode ser ocasionalmente til utilizar nmeros pseudoaleatrios que se repetem exatamente. Issopode ser feito chamando randomSeed( ) com um nmero fixo, antes de iniciar a sequncia aleatria. A seguir descreveremos as funes random( ) e randomSeed( ), com seus respectivos exemplos: random( ) Sintaxe random(max) random(min, max) Parmetros min limite inferior do valor aleatrio (opcional); max limite superior do valor aleatrio. Retorno O valor aleatrio entre min e Max. Exemplo
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
43
longrandNumber; void setup( ) { Serial.begin (9600); } void loop ( ) { // print a random number from 0 to 299 randNumber = random (300); Serial.println (randNumber); // print a random number from 10 to 19 randNumber = random (10, 20); Serial.println (randNumber); delay (50); } randomSeed( ): Parmetros seed, tipo int nmero que gera o valor aleatrio. Retorno Nenhum. Exemplo longrandNumber; void setup ( ) { Serial.begin (9600); randomSeed (analogRead (0)); } Void loop ( ) [ randNumber = random (300);
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
44
FUNES PARA MTRATAR BITS E BYTES highByte( ) Extrai o byte de maior ordem ( esquerda) de uma palavra (ou o byte de menor ordem de um segundo tipo de dados maior). Sintaxe highByte (x) Parmetros x: um valor de qualquer tipo Retorno byte lowByte() Extrai o byte de menor ordem ( direita) de uma varivel. Sintaxe Lowbyte (x) Parmetros x: um valor de qualquer tipo Retorno byte
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
45
Parmetros x: o nmero a partir do qual se faz a leitura. n: o nmero de bits a ser lido, comeando em 0 para o bit menos significativo. Retorno O valor do bit (0 ou 1) bitWrite() Grava um bit de uma varivel numrica.
Sintaxe bitWrite (x, n, b) Parmetros x: varivel numrica na qual se escreve. n: o nmero de bits a ser escrito, comeando em 0 para o bit menos significativo. b: o valor a se gravar (bit com valor 0 ou 1) Retorno nenhum bitSet() Seta 1 em um bit de uma varivel numrica. Sintaxe
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
46
bitset (x,n) Parmetros x: varivel numrica cujo valor quer se definir. n: o bit a se definir, a partir de 0 para o bit menos significativo (mais direita) Retorno nenhum bitClear() Limpa (escreve 0) em um bit de uma varivel numrica. Sintaxe bitClear (x, n) Parmetros x: varivel numrica cujo bit se quer zerado. n: qual o bit a ser zerado, a partir de 0 para o bit menos significativo (mais direita). Retorno Nenhum bit() Calcula o valor do bit especificado (bit 0 1, o bit 1 2, o bit 2 4, etc.) Sintaxe bit (n) Parmetros n: o bit, cujo valor se deseja calcular Retorno o valor do bit
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
47
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
48
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
49
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
50
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
51
Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA 98 3245 3737 - www.netcom-ma.com.br
52
#include <IRremote.h> #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros arduinos #define FIRST_SERVO_PIN8 MegaServo Servos[NBR_SERVOS] ; constint RECV_PIN = 2; //SENSOR DE INFRARED NO PIN 2 IRrecvirrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); Servos[1].attach(8,880,2400) ; //SERVO DIREITO NO PIN 8 Servos[2].attach(9,880,2400) ; //SERVO ESQUERDO NO PIN 9 Servos[1].write(70) ; Servos[2].write(70) ; irrecv.enableIRIn(); // Start the receiver irrecv.blink13(true); delay(15); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 144){ //Chave CH+ frente Servos[1].write(180) ; Servos[2].write(0) ; delay(15);} if (results.value == 2192){ //Chave CH- volta Servos[1].write(0) ; Servos[2].write(180) ; delay(15); } if (results.value == 1168){ //Chave VOL+ direita Servos[1].write(0) ; Servos[2].write(0) ; delay(15); } if (results.value == 3216){ //Chave VOL+ esquerda Servos[1].write(180) ; Servos[2].write(180) ; delay(15); } if (results.value>= 3536){ //Chave JUMP PRA Servos[1].write(70) ; Servos[2].write(70) ; delay(15); } irrecv.resume(); // Recebe proximo valor } Avenida 05, n 22, Cohab Anil IV, CEP 65.053 330, So Lus MA }
98 3245 3737 - www.netcom-ma.com.br