You are on page 1of 49

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino


Realizao: PET Auto Net
Autor: Micael Bronzatti Gaier

2011

www.autonet.cba.ifmt.edu.br

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

IFMT Campus Cuiab

A obra Aprendendo a Programar em Arduino de Micael Gaier - PET AutoNet IFMT foi licenciada com uma Licena Creative Commons - Atribuio - Uso No Comercial - Partilha nos Mesmos Termos 3.0 No Adaptada.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Sumrio

Introduo Conhecendo A Plataforma Arduino Base Da Programao Em Arduino Comentrios Funes - Base Pinmode(Pino, Modo) Entrada E Sada De Dados I Portas Digitais Portas Analgicas Tempo Bibliotecas #INCLUDE e #DEFINE Variveis E Modificadores Variveis Classe De Variveis Tipos De Dados E Modificadores Funes I Como Programar Em Arduino Operadores Booleanos, De Comparao E Incremento E Decremento Operadores De Comparao Operadores Booleanos Operadores De Incremento E Decremento Estruturas De Controle De Fluxo If If... Else For Switch Case While

4 5 11 11 12 12 12 12 12 14 15 15 16 16 16 17 18 20 20 20 20 21 21 21 22 22 23 25

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Do While Comunicao Serial Operadores Matemticos e Trigonometria Operadores Matemticos Trigonometria Entrada E Saida De Dados II Sinais PWM pulseIn(Pino, Valor, Tempo De Resposta) Usando O Arduino Com Dispositivos O Uso De Arduino em Projetos Shields Para Arduino Fazendo Um Motor DC Funcionar Programao Ponte H Conectando Um Display De Cristal Liquido (LCD) Programando Um LCD Em Arduino Uso De Sensores Anexos Bibliografia

26 26 28 28 30 30 30 32 33 33 33 35 40 42 43 45 47 48

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Introduo

A cada dia que passa a plataforma Arduino vem conquistando novos usurios. Tal sucesso devido a sua simplicidade e ao fato de no necessitar conhecer profundamente a eletrnica e as estruturas de linguagens para criar gadgets, robs ou pequenos sistemas inteligentes. Devido ao aumento de procura dos estudantes do IFMT para realizar seus projetos com a plataforma Arduino, o Grupo PET AutoNet juntamente com o Departamento da rea de Eletro-Eletrnica (DAE-E), o Departamento da rea de Informtica (DAI) e o Departamento de Pesquisa e Ps-Graduao (DPPG) desta instituio resolveram ministrar sob orientao do Prof. Dr. Ronan Marcelo Martins um minicurso sobre a plataforma Arduino aos estudantes interessados, de onde surgiu esta apostila. Esta apostila foi desenvolvida para complementar o aprendizado sobre Arduino, que possui tanto a parte do hardware como do software do Arduino proporcionando aos estudantes um melhor entendimento sobre o assunto. Esta apostila serve como apoio tanto para a comunidade interna ou externa ao IFMT devido s aes sociais realizadas pelo grupo PET AutoNet.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Conhecendo a Plataforma Arduino


O Arduino uma ferramenta open source que vem sendo muito utilizado no meio acadmico para a realizao e desenvolvimento de diferentes projetos. O Arduino tanto um hardware como um software. Hardware: como hardware, o Arduino uma plataforma de desenvolvimento em cima de microcontroladores da famlia Atmel, onde, invs de o responsvel por um projeto em especfico comprar diversos componentes e montar a sua prpria placa, basta ele economizar tempo e dinheiro adquirindo uma plataforma simples e j pronta para programao. H placas com diversas capacidades e variados microcontroladores, assim, podemos realizar diferentes tipos de projetos usando uma mesma plataforma de desenvolvimento. Neste minicurso, estaremos usando a plataforma ARDUINO UNO.

Texto extrado da Revista Saber Eletrnica; Ano 47; N 454 2011; Editora Saber LTDA Pginas 12 a 15. Autor Filipe Pereira Apresentao do Arduino: uma placa microcontroladora baseada no microcontrolador ATmega 328. Ela tem 14 pinos I/O digitais, 6 entradas analgicas, um oscilador de 16 MHz (a cristal), uma conexo USB, um jaque de alimentao, um header ICSP, e um boto de reset. Ela contm tudo o que necessrio para o suporte do C (microcontrolador), ligando-a simplesmente a um computador atravs de um cabo USB, ou alimentando-a com um adaptador AC/AD (ou bateria) para dar a partida.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Microcontrolador Tenso de Funcionamento Tenso de Entrada (recomendado) Tenso de Entrada (limites) Pinos E/S digitais Pinos de Entrada Analgicos Corrente DC por pino E/S Corrente DC por pino 3.3V Memria Flash SRAM EEPROM

ATmega328 5V 7-12 V 6-20 V 14 (dos quais 6 so sadas PWM) 6 40 mA 50 mA 32 KB, sendo 2KB utilizado pelo bootloader 2 KB 1 KB

Alimentao O Arduino pode ser alimentado pela ligao USB ou por qualquer fonte de alimentao externa. A fonte de alimentao selecionada automaticamente. Alimentao externa (no USB) pode ser tanto de uma fonte como de uma bateria. A fonte pode ser ligada com um plugue de 2,1 mm (centro positivo) no conector de alimentao. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (massa) e Vin (entrada de tenso) do conector de alimentao. A placa pode funcionar com uma alimentao externa de 6 a 20 volts. Entretanto, se a alimentao for inferior a 7 volts, o pino 5 V pode fornecer menos de 5 volts e a placa poder ficar instvel. Se a alimentao for superior a 12 volts, o regulador de tenso poder sobreaquecer e avariar a placa. A alimentao recomendada de 7 a 12 volts. Os pinos de alimentao so: VIN - Entrada de alimentao para a placa Arduino quando uma fonte externa for utilizada. Poderse- fornecer alimentao por este pino ou, se for usar o conector de alimentao, empregar a alimentao por este pino. 5V - A fonte de alimentao utilizada para o microcontrolador e para outros componentes da placa pode ser proveniente do pino Vin atravs de um regulador on-board, ou ser fornecida pelo USB ou outra fonte de 5 volts. 3V3 - Alimentao de 3,3 volts fornecida pelo chip FTDI. A corrente mxima de 50 mA. GND - Pino terra ou massa.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Memria

O ATmega328 tem 32 KB de memria flash para armazenar cdigo (dos quais 2 KB so utilizados pelo bootloader), alm de 2 KB de SRAM e 1 KB de EEPROM (Electrically-Erasable Programmable Read-Only Memory), que pode ser lida e escrita atravs da biblioteca EEPROM. Entrada e Sada Cada um dos 14 pinos digitais do Arduino pode ser utilizado como entrada ou sada, usando as funes de pinMode(), digitalWrite(), e digitalRead(). Eles trabalham com 5 volts. Cada pino pode fornecer ou receber um mximo de 40 mA e tem uma resistncia de pull-up interna (vem desligada de fbrica) de 20-50 k. Alm disso, alguns pinos tm funes especficas, a saber: Serial: 0 (RX) e 1 (TX): so usados para receber (RX) e transmitir (TX) dados srie, TTL. Estes pinos so ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL External Interrupts: 2 and 3 - Estes pinos podem ser configurados para ativar uma interrupo por um baixo valor, uma elevao ou falling edge ou uma mudana de valor. Veja a funo attachInterrupt() para mais pormenores. PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma sada analgica PWM de 8-bit com a funo analogWrite(). SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicao SPI, que embora compatvel com o hardware, no est includa na linguagem do Arduino. LED: 13 - H um LED j montado e ligado de origem ao pino digital 13. Quando o pino est no valor HIGH, o LED acende; quando o valor est em LOW, ele apaga. O Arduino tem 6 entradas analgicas e cada uma delas tem uma resoluo de 10 bits (i.e. 1024 valores diferentes). Por padro, elas medem de 0 a 5 volts, embora seja possvel mudar o limite superior usando o pino AREF e um pouco de cdigo de baixo nvel. Adicionalmente alguns pinos tm funcionalidades especficas, a saber: I2C: 4 (SDA) and 5 (SCL) - Suportam comunicao I2C (TWI) usando a biblioteca. H ainda mais alguns pinos na placa: AREF - Referncia de tenso para entradas analgicas. So usados com o analogReference(). Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. tipicamente utilizado para adicionar um boto de reset aos shields que bloqueiam o que h na placa.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

ainda importante referir que a corrente mxima por cada pino analgico e digital de 40 mA, com exceo da sada que providencia 3,3 V, que permite correntes mximas de 50 mA. De acordo com Sousa and Lavinia, 2006, a capacidade de utilizar Pulse Width Modulation (PWM) muito importante, pois permite obter uma tenso analgica a partir de um sinal digital, ou seja, de um sinal que apenas pode assumir o estado lgico 0 (0 V) ou 1 (5 V). O conceito de PWM usado para referir sinal que possua uma frequncia constante e um duty-cicle varivel.

Comunicao Com o Arduino, a comunicao com um computador, com outro Arduino ou com outros microcontroladores muito simplificada. O ATmega328 permite comunicao srie no padro UART TTL (5V), que est disponvel nos pinos digitais 0 (RX) e 1 (TX), vide figura 2. Um chip FTDI FT232RL na placa encaminha esta comunicao srie atravs do USB e os drives FTDI (includo no software do Arduino) fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor srie que permite que dados simples de texto sejam enviados placa Arduino. Os LEDs RX e TX da placa piscam quando os dados esto para ser transferidos para o computador pelo chip FTDI. Pela ligao USB no d quando h comunicao srie pelos pinos 0 e 1. A biblioteca SoftwareSerial permite a comunicao srie por quaisquer dos pinos digitais do Duemilanove. O ATmega328 tambm oferece suporte aos padres de comunicao I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; para usar a comunicao SPI, veja a folha de informaes do ATmega328.

Programao O Arduino pode ser programado com o software Arduino (download). O ATmega328 no Arduino vem pr-gravado com um bootloader que permite enviar novos programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo original STK500 (referncia, C header files). Tambm poder-se- programar o ATmega328 atravs do ICSP (In-Circuit Serial Programming) header;

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

Reset automtico (Software)

Algumas verses anteriores do Arduino requerem um reset fsico (pressionando o boto de reset na placa) antes de carregar um sketch. Este Arduino projetado de modo a permitir que isto seja feito atravs do software que esteja correndo no computador a que est ligado. Uma das linhas de controle de hardware (DTR) do FT232RL est ligada ao reset do ATmega328 por via de um condensador de 100 nF. Quando feito reset a esta linha (ativo baixo), o sinal cai por tempo suficiente para efetuar o reset ao chip. O software Arduino usa esta caracterstica para permitir carregar o programa simplesmente pressionando-se o boto upload no ambiente Arduino. Isto significa que o bootloader pode ter um timeout mais curto, j que a ativao do DTR (sinal baixo) pode ser bem coordenada com o incio do upload. Considerando que programado para ignorar dados esprios (i.e. qualquer coisa a no ser um upload de um novo cdigo), ele interceptar os primeiros bytes dos dados que so enviados para a placa depois que a ligao for aberta. Se um sketch rodando na placa receber uma configurao de uma vez, ou outros dados ao inicializar, dever-se- assegurar que o software est em comunicao e espere um segundo depois de aberta a ligao, antes de enviar estes dados.

Proteo contra sobrecorrente USB O Arduino tem um fusvel que protege a porta USB do seu computador contra curto-circuito. Apesar da maioria dos computadores possurem proteo interna prpria, o fusvel proporciona uma proteo extra. Se mais de 500 mA foram aplicados na porta USB, o fusvel ir automaticamente interromper a ligao at que o curto ou a sobrecarga seja eliminada.

Caractersticas fsicas O comprimento e largura mximos do so 2,7 (68,50 mm) e 2,1 (53,34 mm) respectivamente, com o conector USB e o jack de alimentao indo um pouco alm destas dimenses. Trs furos de fixao permitem a montagem da placa numa superfcie ou caixa. Note que a distncia entre os pinos de entrada e sadas digitais n 7 e n 8 de 160 mil (milsimos de polegada), no sequer mltiplo do espaamento de 100 mil dos outros pinos.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

10

Software: como Software, no Arduino feita toda a parte de programao que ser usada para controlar o hardware. A programao baseada em linguagem C, porm, de forma mais simples. O software est disponvel para Windows, Linux e Mac OS no site www.arduino.cc.

IDENTIFICAO DO HARDWARE EM WINDOWS 7. Quando voc for compilar algum programa e for passar para o hardware ser necessrio plugar o Arduino na entrada USB do seu computador, porm isso no se procede de forma automtica e necessrio realizar o seguinte procedimento. 1. Conecte o cabo USB do Arduino no seu computador e aguarde o aviso de Novo Hardware Encontrado; 2. Abra o Gerenciador de Dispositivos, em Outros Dispositivos, aparecer o hardware, ento clique com o boto direito do mouse sobre o dispositivo e clique em Atualizar/Instalar Hardware. 3. Na janela que aparecer, clique em Procurar Software do Driver no Computador; 4. Em seguida, voc dever identificar a pasta exata onde est localizado o drive do Arduino, ou seja, dentro da pasta do programa que voc baixou do site haver uma pasta chamada Drivers, voc dever direcionar para esta pasta. Clique em avanar e espere a identificao do Arduino.

Software IDE do Arduino.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

11

Base da Programao em Arduino


A programao em Arduino tem como base a Linguagem C. Para aprendermos a programar em Arduino, devemos aprender alguns conceitos bsicos sobre Linguagem C. OBSERVAO! Na Linguagem C, letras maisculas, minsculas e conjuntos de palavras fazem a diferena. Ou seja, se voc for escrever algo como, por exemplo, ledPin, no ser a mesma coisa que LedPin. O programa precisa identificar qual o fim de uma linha de programao para poder seguir rodando o programa, para isso, necessrio ao final de cada linha onde possa ser identificado um comando, o uso de ; (ponto e vrgula). Para demonstrar essa base, vamos pegar um simples programa, que se encontra como exemplo dentro do prprio software, sendo ele para ligar um pequeno LED que se encontra na placa do circuito, identificado como pino 13. EXEMPLO 1:

/* Liga o LED por um segundo e ento o apaga por um segundo, repentidamente. Este exemplo de cdigo livre, de domnio publico. Traduzido por Micael Bronzatti Gaier */ void setup() { // inicializa o pino digital como sada de dados. pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } // // // // liga o LED espera por um segundo apaga o LED espera por um segundo

COMENTRIOS Quando desejamos realizar alguma instruo ou comentrio com mais de uma linha sobre o programa, usamos como smbolo /* ao incio de um comentrio e */ ao trmino do mesmo. Quando se deseja dar uma instruo breve, pode se usar //, assim, quando voc iniciar uma nova linha, voltar a editar o programa novamente.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

12

FUNES - BASE Um programa possui um corpo, uma funo principal, onde o programa ser rodado. Em Arduino, obrigatrio que o programa tenha a funo void setup() e a funo void loop(). Caso seu programa no tenha estas funes, ele no ser capaz de identificar a linguagem e no realizar a compilao. A funo void setup() funciona como uma funo de inicializao, o que estar contido nela rodar apenas uma vez no programa. Nela, deve conter as informaes principais para iniciar o seu programa, que estar contido dentro da funo void loop() . Em void loop() dever conter tudo o que voc quiser que o programa faa. pinMode(pino, MODO) No Arduino, como lidamos com entrada e sada de dados, o pinMode configura um pino especfico da placa como entrada ou sada. O pino um nmero inteiro e ele identificado na prpria placa. O MODO ele pode ser de entrada (INPUT) ou sada (OUTPUT) de dados. OBSERVAO: Quando se tratar de uma leitura de dados analgicos, no caso os pinos A0 ao A5, no necessrio realizar a declarao destes pinos em void setup(), porm, os pinos analgicos, tambm podem ser usados como pinos digitais, assim, quando estiver se referindo ao uso destes pinos como digitais, voc dever identificar no programa na funo de inicializao como pino 14 (no caso do A0) at o 19 (no caso do A5).

ENTRADA E SADA DE DADOS I Quando desejarmos introduzir dados ou ler dados recebidos de uma porta, devemos usar alguns comandos especficos. PORTAS DIGITAIS digitalRead(pino) Este comando responsvel pela leitura de dados nas portas digitais disponveis. Como falamos de leitura de dados digitais, ela ser feita como HIGH ou LOW. digitalWrite(pino, VALOR) Se voc configurar em void setup() um pino como OUTPUT (sada de dados), voc poder definir se ela ser alta (HIGH) ou baixa (LOW), assim, voc poder comandar qualquer aplicao que se encontrar conectado em tal pino. PORTAS ANALGICAS Se voc for ler dados em uma entrada analgica, voc obter como retorno um valor entre 0 e 1023, pois, o Arduino estudado possui um conversor analgico digital de 10 bits, ento, 210 = 1024. 1023 o valor mximo, assim, ser colocado na entrada

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino do pino o valor de tenso mximo de sua tenso de referncia (AREF Analog Reference). Mudar a tenso de referncia pode ser uma boa ideia, porm, alterando-a em hardware, deve-se tambm alterar em software. A tenso de referncia padro do Arduino de 5 V, mas, tambm h uma tenso de referncia interna no valor de 1,1V (no ATMega168), e uma de 2,56V (disponvel em apenas algumas plataformas). Podese tambm ser usada uma tenso de referncia externa, definida pelo tcnico. Se por exemplo, for usada a tenso padro (5V), dizemos que: 5V 1024 = 0,0048V 5mV Isso significa que a cada bit ser adicionado 5mV entrada e que o Arduino apenas conseguir detectar tenses superiores 5mV. Alterando o valor de referncia possvel obter uma maior sensibilidade, no caso de sensores que no necessitam uma tenso muito alta e uma grande preciso.

13

OBSERVAO! O recomendado caso for usada uma tenso de referncia externa, que seja colocado um resistor de 5kOms, assim, caso possua alguma configurao errada no software e o microcontrolador no conseguir entender, isso previne que ocorra algum dano no equipamento, porm, internamente, h uma resistncia no valor de 32kOms, isso significa que voc ter um divisor de tenso na entrada do equipamento, ou seja, a tenso de referncia ser diferente da tenso aplicada antes do resistor de 5kOms. Exemplo: Se for aplicada uma tenso de 4.2V na entrada do equipamento, a tenso de referncia ser: = , = , +

Se for definido o uso de uma tenso de referncia externa, as portas disponveis com valores de 5V e 3,3V sero fechadas e passaro a no funcionais mais. analogReference(TIPO) Em software, este comando usado para definir qual a tenso de referncia que ser usado em hardware. Ou seja, se o TIPO ser padro (DEFAULT), interna (INTERNAL) ou externa (EXTERNAL). analogRead(pino) Este comando usado para realizar a leitura de alguma entrada analgica. Uma entrada analgica no precisa ser definida na funo de inicializao como de entrada ou sada. O uso desta funo retorna um valor inteiro, que como j foi informado, ser de 0 a 1023 unidades, sendo equivalente um valor aproximado de 5mV por unidade. Para realizar a leitura de uma entrada digital necessrio um tempo aproximado de 100us.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino analogWrite(pino, valor) Possibilita usar os pinos PWM (Pulse Width Modulation) do Arduino. Esta funcionalidade serve tanto para variar o valor de um LED quanto para variar a velocidade de um motor. O sinal PWM se mantm at ser modificado por outra instruo. A frequncia de um sinal PWM aproximadamente 490Hz. Os pinos PWM no Arduino Uno so 3, 5, 6, 9, 10 e 11. O valor pode alterar entre 0 (sempre desligado) e 255 (apresenta um sinal constante). Haver mais explicaes sobre sinais PWM posteriormente. TEMPO delay(tempo em ms) Este comando possibilita uma pausa do programa em execuo em uma quantidade de milissegundos especfica que nomeada no campo tempo em ms. delayMicroseconds(tempo em us) Este comando possibilita uma pausa do programa em execuo em uma quantidade de microssegundos especfica que nomeada no campo tempo em us. millis() Este comando possibilita o retorno da quantidade de tempo que passou, em milissegundos, desde que o programa atual comeou a ser executado. Para usar este comando, necessrio o uso da varivel unsigned long. Observe o EXEMPLO 2 para podermos prosseguir com os ensinamentos:

14

/* Entrada Analgica Demonstra a leitura de um sensor analgico (A0) e a emisso de luz de um LED (13). O tempo que o LED permanecer acesso depender do valor obtido do sensor. Este exemplo de cdigo de domnio pblico. Modificado por Micael Bronzatti Gaier */ // #include <SoftwareSerial.h> #define sensor A0 // seleciona o pino de entrada do //potencimetro e o identifica como sensor int led = 13; // seleciona o pino para o LED int valSensor; // varivel que armazena o valor do sensor void setup() { Serial.begin(9600); pinMode(led, OUTPUT); }

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

15

void loop() { valSensor = analogRead(sensor); // l sensor e define // valor como varivel global Serial.println(valSensor); // envia valor do sensor // para porta serial piscarLED(); // funo secundria } void piscarLED(){ digitalWrite(led, HIGH); // ligar o LED delay(valSensor); //pausa de acordo com o valor da
//varivel

digitalWrite(led, LOW); // apagar o LED delay(valSensor); }

BIBLIOTECAS Voc, como programador, deve saber que devemos simplificar ao mximo nossos cdigos visando economizar espao na memria do programa. Para isso quando voc obtm um equipamento, sensor, etc., o fabricante muitas vezes fornece uma biblioteca para facilitar a programao, ou seja, invs de voc realizar uma longa e extensa programao, voc utiliza a biblioteca e simplifica o cdigo. Quando voc obtm uma biblioteca e a armazena na pasta de bibliotecas do Arduino, ao abrir um programa e clicar no menu em Sketch > Import Library, voc poder escolher a biblioteca que desejar. Quando escolher, aparecer no seu programa algo como no exemplo acima, porm, sem ser comentado. #include <NomeDaBiblioteca.h> Quando adicionar uma biblioteca ao seu programa, necessrio verificar as instrues corretas para realizar a programao.

#include e #define Quando voc usa #include, voc est dizendo ao programa que ele deve incluir o arquivo-cabealho ao programa. O uso da ferramenta #define interessante para ser usado com o Arduino. Observando o exemplo 2, voc percebe que logo aps a declarao da ferramenta, colocado um nome em geral. Aps ele foi usado o local onde est o sensor no Arduino, o pino A0. Com isso, voc percebe que em todo o programa quando quiser se referir ao pino A0, se usa a palavra sensor. Assim, podemos definir: #define nomeVariavel dados (OBS: no usado ; no final)

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Com isso dizemos que podemos usar um nome qualquer, invs de colocar os dados diretamente no programa. Isso facilita a programao, pois ela ficar mais legvel e caso seja necessrio alterar o valor dos dados, ser necessrio modificar apenas uma vez. A ferramenta #define, uma ferramenta local, ou seja, voc a usa apenas para programar, quando voc for compilar o programa, o nome da varivel ser substitudo automaticamente pelo dado contido, assim, voc acaba economizando espao na memria do microcontrolador.

16

VARIVEIS E MODIFICADORES VARIVEIS Os nomes das variveis apenas devem obedecer algumas regras: elas podem comear com letras ou sublinhado (_) e no podem ter nome idntico a alguma das palavras reservadas pelo programa ou de alguma biblioteca. As variveis devem ser declaradas antes de serem usadas. Observe: tipo_de_varivel lista_de_variveis Ex: int ledPin, potencimetro CLASSE DE VARIVEIS Um cdigo que se encontra dentro de outra funo, entre { e }, se encontra isolado de todo o resto do cdigo e os dados contidos l apenas podem ser armazenados atravs de variveis. Existem trs classes de variveis: locais, globais e estticas. VARIVEIS LOCAIS Quando uma varivel declarada dentro de uma funo especfica, ela denominada varivel local. Estas variveis apenas existem enquanto o bloco onde est armazenada estiver sendo executado. A partir do momento em que o programa voltar funo principal, esta varivel deixar de existir. VARIVEIS GLOBAIS Uma varivel global aquela varivel que conhecida por todo o programa, ou seja, independente da funo que estiver sendo executada ela ser reconhecida e rodar normalmente. Uma varivel global ela declarada antes mesmo da funo void setup(). VARIVEIS ESTTICAS Funcionam de forma parecida com as variveis globais conservando o valor durante a execuo de outras funes, porm, s so reconhecidas dentro da funo onde declarada. Como exemplo, podemos dizer que uma varivel esttica uma varivel declarada dentro da lista de parmetros de uma funo.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino TIPOS DE DADOS E MODIFICADORES Em linguagem C, e tambm em Arduino, existe 5 tipos de dados: char, int, float, void, double. void usado apenas na declarao de funes, indica que a funo chamada no retornar nenhum valor para a funo que a chamou. Exemplo: void loop() boolean variveis booleanas valores: verdadeiro (true) ou falso (false). Exemplo: condicao = false; estas variveis memorizam um de dois

17

char um tipo de dado que dedica 1 byte de memria para armazenar o valor de um caractere. Exemplo: palavra = Arduino; byte byte memoriza um nmero de 8-bits, de 0 a 255. Esse tipo de dados no memoria nmero negativos. Exemplo: byte b = B10010 (B significa que est em formato binrio) int a varivel padro do programa. Esta varivel consegue memorizar dados de -32768 at 32767. Esta varivel consegue memorizar nmeros negativos atravs da propriedade matemtica chamada complemento de dois. Exemplo: int ledPin = 13; int nomeVariavel = valorVariavel; string um vetor de caracteres terminado em um caractere nulo. Voc pode usar uma string para memorizar dados obtidos em forma de caracteres. Numa string voc denomina o nome e a quantidade mxima de caracteres que voc pretende usar mais um caractere reservado para o caractere nulo. Usando uma string voc pode modificar um caractere em particular no programa. Exemplo: char str1[8] = { a, r, d, u, i, n, o, /0 }; char str2[15] = arduino; TIPO char int float double void TAMANHO (BITS) 8 16 32 64 0 INTERVALO -128 a 127 -32768 a 32767 3,4E-38 a 3,4E+38 1,7E-308 a 1,7E+308 sem valor

MODIFICADORES Para cada tipo de varivel, existem os modificadores de tipos, sendo eles: signed, unsigned, short, long. Porm, em float no se pode aplicar nenhum modificador, e no double o nico aceito o long. Os quatro modificadores podem ser aplicados a qualquer inteiro. O objetivo de short e long que possam oferecer tamanhos diferentes de inteiros. Na realidade, o int ter o tamanho natural de uma determinada mquina, a nica restrio que

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino shorts e ints devem ocupar pelo menos 16 bits, longs pelo menos 32 bits, e que short no pode ser maior que int, que no pode ser maior que long. Observe a tabela. TIPO char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double NUMERO DE BITS 8 8 8 16 16 16 16 16 16 32 32 32 32 64 80 INTERVALO INICIO FIM -128 127 0 255 -128 127 -32.768 32.767 0 65.535 -32.768 32.767 -32.768 32.767 0 65.535 -32.768 32.767 -2.147.483.648 2.147.483.647 -2.147.483.648 2.147.483.647 0 4.294.967.295 3,4E-38 3.4E+38 1,7E-308 1,7E+308 3,4E-4932 3,4E+4932

18

FUNES I Anteriormente, j foi explicado um pouco a respeito sobre o void setup() e o void loop(), que mesmo no utilizando-os, eles precisam ser declarados. Uma funo uma unidade autnoma do cdigo, que foi feita para cumprir uma atividade em particular. Um programa consiste em vrias funes. Uma funo se resume em: tipo nome(declarao de parmetros){ comando1; comando2; ... } Existem dois tipos de funes: as que retornam algum valor para a funo onde est inserida e as funes que no retornam nenhum valor. Tipo int Uma funo int retorna um valor para a funo que a chamou. H duas formas de retornar de uma funo, uma delas quando o finalizador de funo ( } ) encontrado, ou quando for feito o uso da declarao return. A declarao return retorna um valor especificado para a funo que a chamou.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Exemplo: int checkSensor(){ if (analogRead(A0) > 400) { return 1; else{ return 0; } }

19

// se a leitura do pino A0 for maior que 400 // retorna 1 (verdadeiro) // se no for, retorne 0 (falso)

Tipo void uma funo tipo void no retorna nenhum valor para a funo que a chamou, ou seja, as aes executadas nesta funo no resultaram em nmeros binrios, variveis booleanas ou caracteres para a funo principal. Com o uso de void no permitido usar a declarao return. Usar funes pode simplificar o cdigo e o deixar mais organizado. No exemplo 2 percebemos que foi criada uma funo apenas para o LED piscar e que foi inserida na funo void loop(), com isso, se o cdigo fosse extenso e seria necessrio o LED piscar vrias vezes durante o programa, aquela parte do cdigo no precisaria ficar sendo repetida, assim, apenas chamaria a funo piscarLED(), ento quando ela terminasse de ser executada voltaria ao mesmo ponto em que parou.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

20

Como programar em Arduino


Agora que voc j sabe identificar comentrios, bibliotecas, variveis, consegue compreender como lidar com o tempo, sabe criar funes, identificar o corpo do programa e enviar e receber dados de entradas digitais e analgicas, podemos comear a programar em Arduino.

OPERADORES BOOLEANOS, DE COMPARAO E INCREMENTO E DECREMENTO Um passo importante para podermos programar corretamente de fazer o uso adequado dos operadores booleanos e os de comparao. OPERADORES DE COMPARAO x igual a y: x diferente de y: x menor que y: x maior que y: x menor ou igual a y: x maior ou igual a y: x == y x != y x< y x> y x <= y x >= y

OPERADORES BOOLEANOS Os operadores booleanos verificam se uma funo verdadeira ou no. OPERADOR E (&&) A condio apenas ser verdadeira se todos os itens foram verdadeiros. Exemplo: if (digitalRead(2) == 1 && digitalRead(3) == 1){ ... } Se a leitura digital dos pinos 2 e 3 forem 1 (HIGH), a condio verdadeira. OPERADOR OU ( || ) A condio ser verdadeira se algum dos itens for verdadeiro. Exemplo: if (x>0 || y>0){ ... } Se x ou y for maior que 0, a condio ser verdadeira. OPERADOR NO ( ! ) A condio ser verdadeira se o operador for falso. Exemplo: if (!x){ ... } Se x for falso, a condio verdadeira.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino OPERADORES DE INCREMENTO E DECREMENTO Em Linguagem C trabalhamos com operadores unrios e binrios. Operadores unrios agem em apenas uma varivel e a modifica ou no, enquanto os operadores binrios utilizam duas variveis, pegam seus valores sem alter-los e retorna um terceiro valor. A soma um exemplo de operador binrio. Os operadores de incremento e decremento so operadores unrios, pois alteram a varivel em que esto aplicados. Ento dizemos: x++ x-Que isso equivalente a: x++ > x=x+1 x-> x=x-1 Estes operadores podem ser pr-fixados ou ps-fixados. Os pr-fixados eles incrementam e retornam o valor da varivel j incrementada, enquanto os ps-fixados eles retornam o valor da varivel sem o incremento e depois incrementam a varivel. Pr-fixado Se: x=48 y=++x Ento: x=49 y=49 Ps-fixado Se: x=48 y=x++ Ento: x=49 y=48

21

Os operadores de incremento e decremento so de grande utilidade neste tipo de linguagem quando se trata de realizao de testes, como veremos adiante. OUTROS USOS x += y x=y x *= y x /= y > > > > x=x+y x=xy x=x*y x=x/y

ESTRUTURAS DE CONTROLE DE FLUXO Podemos dizer que as estruturas de controle de fluxo so a parte mais importante da programao em Arduino, pois toda a programao executada em torno delas.* IF IF testa se certa condio foi alcanada, como por exemplo, se uma entrada analgica obteve um nmero especfico. Se o resultado da condio for 0 (falsa), ela no ser executada, caso o resultado seja 1 (verdadeira), a funo ser executada. O formato desta estrutura de controle de fluxo :

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino if (certaCondicao) { // comandos... } IF... ELSE Usar if/else permite um controle maior sobre a estrutura, sendo que poder ser realizado vrios testes sem sair de uma nica funo. Podemos pensar no else como sendo um complemento ao comando if. if (certaCondicao) { // comando A } else { // comando B... } Podemos interpretar a estrutura da seguinte maneira: se a certaCondicao for verdadeira (1) execute o comando A, seno (se for falsa, 0), execute o comando B. OBSERVAO! Quando voc estiver trabalhando com vrias condies, onde no se restringe a apenas duas hipteses, dentro da estrutura de controle else, voc pode colocar mais funes if/else e assim por diante. Veja: if (Condicao1) { // comando A } else if (Condicao2) { // comando B... } else { // comando C }

22

FOR O estrutura for uma das estruturas que se trabalha com loops de repetio. Esta estrutura normalmente usada para repetir um bloco de informaes definidas na funo. Enquanto a condio for verdadeira, as informaes contidas na funo sero executadas. Sua forma geral : for (inicializao; condio; incremento) { //instruo(ou instrues); } Vamos entender os blocos desta estrutura: INICIALIZAO: a inicializao o que ocorre primeiro e apenas uma vez. CONDIO: o bloco for trabalha com loops de repetio, cada vez que a funo for repetida, a condio ser testada, se ela for verdadeira (1), executar o que se encontra dentro das chaves. INCREMENTO: se a condio for verdadeira, o incremento ser executado, caso contrrio, se a condio for falsa, o loop terminado. Caso ainda no conseguiu entender a estrutura for equivale a mesma coisa que o seguinte cdigo: inicializao; Micael Bronzatti Gaier
// primeiro: realiza-se a inicializao

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino if (condio) { // segundo: verifica se a condio verdadeira declarao; // terceiro: executa a declarao contida na funo incremento; // realiza o incremento "Volta para o comando if" }

23

EXEMPLO 3:
// Dimmer de um LED usando um pino PWM como sada int pinoPWM = 10; // LED ligado em srie com um resistor de 1k . //ao pino 10 void setup() { // no necessrio setup } void loop() { for (int i= 0; i <= 255; i++){ // a varivel i incrementada at que ir valer 255, //depois o loop terminado analogWrite(pinoPWM, i); //o valor de i escrito no pinoPWM delay(10); } }

SWITCH CASE O Switch Cace permite programar diferentes blocos de instrues para diferentes condies. Por exemplo, dizemos que voc possui um sensor analgico que emite diferentes valores e cada valor indica que voc necessita tomar uma ao especfica, ou seja, uma instruo diferente. Sua forma geral : switch (valor) { case 1: //fazer algo quando valor igual a 1 break; case 2: //fazer algo quando valor igual a 2 break; default: // se nenhum caso se encaixa, fazer algo como padro } Quando uma condio for verdadeira, break responsvel por interromper o cdigo e seguir a programao adiante. Usa-se default caso nenhuma das condies especificadas forem verdadeiras, e ento o bloco contido ser executado. EXEMPLO 4:

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

24

/* Leve em considerao que voc possui um equipamento que possui em sensor analgico que emite valores diferentes para cada situao. Assim, cada um desses sensores dever ligar um LED especfico conectado nos pinos 08 a 11. Cdigo feito por: Micael B. Gaier */ #define sensor A0 //sensor // LEDs conectados do pino 08 ao 11 void setup(){ for (int pino = 8; pino < 12; pino++) { pinMode(pino, OUTPUT); // inicializao dos LEDs } } void loop(){ // leitura do sensor analgico int valor = analogRead(sensor); switch(valor) { case 205 : // condio 1 digitalWrite(8,HIGH); break; case 409 : // condio 2 digitalWrite(9, HIGH); break; case 615 : // condio 3 digitalWrite(10, HIGH); break; case 830 : // condio 4 digitalWrite(11, HIGH); break; default : // condio padro // ligar LEDs for (int pino = 8; pino < 12; pino++){ digitalWrite(pino, HIGH); } // apagar LEDs for (int pino = 8; pino < 12; pino++){ digitalWrite(pino, LOW); } } }

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino WHILE A estrutura WHILE funciona como um loop de repetio. Enquanto a condio contida dentro dos parnteses permanecer verdadeira, a estrutura ser executada. A partir do momento que a condio for falsa, o programa seguir normalmente. Sua forma geral : while (condio) { // instruo 1... // intruo 2... } A condio ser booleana, ou seja, ser avaliada se 1 (verdadeira) ou 0 (falsa). EXEMPLO 5:

25

/* Controlar trs sadas digitais de acordo com o valor obtido de uma entrada analgica Feito por Micael B. Gaier */ #define #define #define #define analogPin A0 digPin01 4 digPin02 5 digPin03 6

void setup(){ // inicializao dos pinos digitais for (int i = 4; i<7; i++){ pinMode(i, OUTPUT); } } void loop(){ int valor = analogRead(analogPin); // leitura pino analgico while (valor < 900){ // executar se 'valor' for menor que 900 if (valor < 200){ digitalWrite(digPin01, HIGH); } else if ( valor >= 200 && valor < 600){ digitalWrite(digPin02, HIGH); } else { digitalWrite(digPin03, HIGH); } } for (int i = 4; i<7; i++){ digitalWrite(i, LOW); } } }

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino DO WHILE A estrutura de controle do - while a ultima estrutura de controle de loop repetitivo que estudaremos. Esta estrutura funciona de forma semelhante s estruturas for e while, porm, ao contrrio. Observe sua forma geral: do { // instruo 1... // instruo 2... } while (testa a condio); Esta estrutura primeiro realiza as instrues, e aps ela ser executada verificado se a condio valida, se ela ainda for vlida, ela volta a executar o bloco novamente. EXEMPLO 6:
/* Envia um sinal analgico a um equipamento, de acordo com o valor obtido de uma entrada digital. Feito por Micael B. Gaier */ #define digitalPin 5 #define analogPin A0 // para enviar o sinal analgico, o sinal digital dever ser baixo int valIdeal = LOW; void setup(){ pinMode(digitalPin, INPUT); } void loop(){ int val; do { analogWrite(analogPin, 255); val = digitalRead(digitalPin); } while (val == valIdeal); }

26

COMUNICAO SERIAL Se voc perceber em placas Arduino como Uno, Duemilanove, Nano e Mega, voc ver que h um CI responsvel por converter o sinal da porta serial de hardware para Universal Serial Bus (USB), para poder ser usado em qualquer dispositivo que possua esta sistema, como seu computador, por exemplo. Na comunicao serial, possvel voc obter todos os dados que o Arduino est gerando ou recebendo e enviar ao computador para simplesmente analisar os dados ou rodar algum outro programa. Quando voc conecta um dispositivo porta serial do Arduino, necessrio uma taxa de bits por segundo para a transmisso serial. O Arduino consegue emitir esta taxa nos seguintes valores: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, ou 115200 bits por segundo. H equipamentos que apenas recebero

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino estes dados caso o Arduino esteja configurado em uma taxa de bits especifica. Um computador, por exemplo, configurado por padro por receber dados da USB numa taxa de 9600. Da mesma maneira que iniciamos uma entrada digital na funo void setup(), devemos iniciar o comunicao serial, porm usamos a seguinte funo: Serial.begin(taxa); Veja a seguir alguns comandos relacionados a comunicao serial. Serial.available(); Obtm o nmero de bytes disponveis para a porta serial. Este comando retorna o nmero de bytes disponvel para leitura. Serial.read(); Obtm os dados da porta serial para leitura. Serial.print(); Envia dados para a porta serial como texto legvel ASII. Este comando pode possuir diferentes formas. Por exemplo: Serial.print(78) resulta em "78" Serial.print(1.23456) resulta em "1.23" Serial.print(byte(78)) resulta em "N" (em ASCII seu valor 78) Serial.print('N') resulta em "N" Serial.print("Ola Mundo.") resulta em "Ola Mundo." OBSERVAO! Para nos facilitar a tarefa de programar, existem vrias constantes. So caracteres que podem ser usados como qualquer outro. Observe: Caractere \n \t \a BIN OCT HEX DEC BYTE Significado Nova Linha Tabulao Horizontal (tab) Tabulao Vertical Binrio ou Base 2 Base 8 Hexadecimal ou Base 16 Decimal, ou Base 10 Resulta em Byte

27

Serial.println(); Envia dados para a porta serial, porm, com um caractere de retorno. Este comando funciona da mesma forma que Serial.print().

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

28

Exemplo 7:

/* Funo de comunicao serial.*/ #define pot A0 int var; void setup(){ // iniciarndo porta serial Serial.begin(9600); } void loop(){ // obtendo valor do potencimetro var = analogRead(pot); if (Serial.available() > 0){ // imprimindo frase na porta serial Serial.println("O valor obtido do potencimetro e: "); // imprimindo valor da varivel Serial.println(var); } delay(500); // lendo valores obtidos da porta serial int valSerial = Serial.read(); // imprimindo texto na porta serial Serial.print("Foi obtido da porta serial o seguinte valor: ") // imprimindo valores obtidos da porta Serial.println(valSerial, DEC); }

OPERADORES MATEMTICOS E TRIGONOMETRIA No Arduino tambm podemos realizar operaes matemticas e podemos trabalhar com trigonometria. Veja. OPERADORES MATEMTICOS min(x, y) Calcula o mnimo de dois nmeros, sendo x o primeiro nmero e y o segundo nmero. Ex: min(val, 100); max(x,y) Calcula o mximo de dois nmeros, sendo x o primeiro nmero e y o segundo. Ex: max(1, 300); (ir retornar 301)

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino abs(x) Retorna o valor absoluto de uma funo. Ou seja se x for maior que zero, retornar x, se x for menor que 0, retornar o mesmo valor, porm positivo. Ex: abs(-5); (a funo retornar 5) constrain(x,a,b) Limita um nmero dentro de uma faixa de valores. x = o nmero a limitar, o valor de referncia; a = o valor que ser retornado caso x seja menor que a; b = o valor que ser retornado caso x seja maior que b; Ex: constrain(sens,1,3); map(valor, deBaixa, deAlta, paraBaixa, paraAlta) Mapeia um valor de um intervalo para outro. Este operador matemtico pode ser facilmente usado quando voc desejar que os valores obtidos de uma entrada analgica (de 0 a 1023) controlem um valor de sada de uma entrada digital (de 0 a 255), ou seja, voc transforma um nmero em uma faixa de valores para outra faixa diferente. valor = valor a ser mapeado; deBaixa = o limite inferior atual da faixa atual do valor; deAlta = o limite superior da faixa atual do valor; paraBaixa = o limite inferior do valor de destino; paraAlta = o limite superior do valor de destino;
Ex:

29

void setup() {} void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); }

PARA ENTENDER! Dizemos que voc possui um sensor analgico (0 a 1023) que est controlando a velocidade de giro de um motor conectado numa entrada PWM (0 a 255). Quando o sensor analgico emitir o valor de 0, o resultado na sada PWM ser 0, enquanto se o sensor analgico emitir 1023, o resultado em PWM ser 255. Caso seja obtido um valor intermedirio do sensor, a sada PWM tambm obter um valor intermedirio equivalente, mas em sua faixa de valores. OBSERVAO: Esta funo no limita a faixa de valores, se voc estiver lidando com variveis em valor, e o seu limite superior de deAlta 1023 e o paraAlta 255, caso voc inserir um valor superior a 1023, o valor da faixa e sada tambm ser maior que 255. Por isso pode ser usada a funo constrain(x,a,b) para auxiliar e limitar esta faixa de valores. pow(base, expoente) Calcula o valor de um nmero elevado a uma potncia. base = um nmero qualquer (float) expoente = a potncia que a base ser elevada (float) RETORNO DA FUNO: double

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Ex: pow(7,2) ; - O resultado obtido ser um double no valor 49 . sqrt(x) Permite o calculo da raiz quadrada de um determinado valor. Ex: valor = sqrt(49) ; - valor ser 7, pois = 7.

30

TRIGONOMETRIA sin(rad) Calcula o seno de um ngulo (em radianos). rad = valor do ngulo em radianos (float) RETORNO DA FUNO: a funo retorna um valor entre -1 e 1 (double). cos(rad) Calcula o cosseno de um ngulo (em radianos). rad = valor do ngulo em radianos (float) RETORNO DA FUNO: a funo retorna um valor entre -1 e 1 (double). tan(rad) Calcula a tangente de um ngulo (em radianos). rad = valor do ngulo em radianos (float) RETORNO DA FUNO: a funo retorna um negativamente ou positivamente (double).

valor

infinito

OBSERVAO! suportam a impresso de floats.

As funes Serial.print() e Serial.println() no

ENTRADA E SAIDA DE DADOS II SINAIS PWM Pulse Width Modulation, Largura de Modulao de Pulso, ou simplesmente PWM a tcnica de obtm resultados analgicos atravs de meios digitais. O controle digital usado criando uma onda quadrada, um sinal oscilando entre ligado ou desligado, 0 ou 1. Por uma poro de tempo o sinal permanece alto enquanto pelo resto deste tempo ele permanece baixo. A durao desde tempo chamada modulao de pulso. Em um Arduino, a frequncia de um sinal PWM cerca de 490Hz, no caso, a modulao de pulso oscilaria a cada 2 milissegundos. Se voc aplicar um sinal atravs de analogWrite() com valores entre 0 e 255, voc obteria os valores da tabela a seguir em seu ciclo de trabalho. Observe o Exemplo 8.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

31

EXEMPLO 8

/* Controla o brilho de um LED atravs de um sinal PWM. Este exemplo de cdigo de domnio pblico e est contido dentro do software do Arduino. */ int ledPin = 9; // LED no pino PWM 9 void setup() { // no necessrio realizar declaraes } void loop() { // aumenta o brilho do LED de 0 a 255, num incremento de valor +5 for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(ledPin, fadeValue); // aguarda 30 milissegundos para o efeito de fading delay(30); } // diminui o brilho do LED de 0 a 255, num incremento de valor -5 for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(ledPin, fadeValue); delay(30); }}

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

32

pulseIn(pino, valor, tempo de resposta) L o pulso de um pino. Por exemplo, se valor HIGH, a funo aguardar um tempo especfico em microssegundos de acordo com o valor do tempo de resposta, e quando obtiver o valor especfico no pino ele comear uma contagem de tempo e apenas interromper quando o valor ser LOW. A funo retornar o comprimento do pulso em microssegundos. PARMETROS: pino = nmero do pino no qual voc deseja ler o pulso (int); valor = HIGH ou LOW (int); tempo de resposta (opcional) = o nmero de microssegundos a esperar aps o pulso iniciar (por padro um segundo). RETORNO DA FUNO: O comprimento do pulso em microssegundos ou 0 se o pulso comeou sem um tempo de resposta.

EXEMPLO 9
Este exemplo consiste no uso do sensor ultrassnico LV-Max Sonar EZ0 que capaz de informar se h obstculos a sua frente at 6,45 metros. Para o sistema funcionar corretamente necessrio um resistor de 100 ohms entre o pino de 5V do Arduino e a Entrada Vin do sensor, e um capacitor eletroltico de 100F entre as alimentaes (Vin e Gnd).

/* Uso do sensor LV-MaxSonar EZ0 para capturar obstculos a uma distancia de at 6,45m */ #define sensorUltra 9 long pwmOnda, pol, cm; void setup() { Serial.begin(9600); pinMode(sensorUltra, INPUT); } void loop() { pwmOnda = pulseIn(sensorUltra, HIGH); pol = pwmOnda / 147; cm = pol * 2.54; Serial.print(pol); Serial.print(" polegadas "); Serial.print(cm); Serial.println(" cm"); }

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

33

Usando o Arduino com Dispositivos


O USO DE ARDUINO EM PROJETOS O uso do Arduino com dispositivos eletrnicos vem se mostrando muito eficaz. A cada dia o nmero de dispositivos criados para funcionar exclusivamente com Arduino vem aumentando cada vez mais. O sucesso do uso deste equipamento devido ao fato de apenas conectar o dispositivo ao Arduino e de realizar uma programao simples em sua interface. Quando se deseja colocar o estudo de um projeto com dispositivos eletrnicos em prtica necessrio realizar uma srie de passos fundamentais. Antes de tudo voc precisa simular o projeto via software e verificar se ele funcionar adequadamente, aps necessrio criar a placa de circuito impresso no computador e ento dar inicio ao processo de fabricao da mesma, ento necessrio fixar todos os componentes na placa, testar novamente para verificar possveis erros e aps tudo isso que voc poder estar realizando estudos mais aprofundados. Porm, usando o Arduino todos estes passos anteriores so resumidos e voc acaba tendo um melhor desempenho. Isso faz com que muito pesquisadores acabam ganhando tempo em seus estudos e acabam obtendo melhores resultados. Por este motivo a cada dia aumenta o nmero de Universidades de aderem ao uso do Arduino em seus mtodos de pesquisa e ensino. Pelo Arduino j ter se tornado uma linguagem universal de programao, para qualquer aplicao que voc deseja realizar, voc encontrar informaes teis em fruns especficos na internet e poder encontrar at Shields especficos para cada um dos diversos usos.

SHIELDS PARA ARDUINO Shields so placas que otimizam as capacidades do Arduino e que podem ser plugadas na parte superior da placa PCB. Os Shields se baseiam no mesmo objetivo do Arduino: fcil de montar, barato de produzir. Atualmente voc pode obter shields de diferentes maneiras, para diferentes usos e de fabricantes diferentes. No final desta apostila, voc encontrar uma relao dos principais sites e fabricantes destes produtos. Exemplos de Shields:

Arduino XBee Shield: esta placa se encaixa diretamente sobre o Arduino Duemilanove e permite comunicao sem fios sobre um protocolo modificado ZigBee da Maxstream.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

34

Arduino Ethernet Shield: permite que o Arduino seja conectado internet, verses mais recentes deste shield tambm possuem slot para carto miro-SD, para que possa ser armazenados dados.

Motor Shield: so shields onde voc pode conectar diretamente no Arduino diversos tipos de motores, de diferentes capacidades.

LCD Shield: este shield conecta o Arduino uma tela LCD permitindo uma maior interao com o usurio.

Bluetooth Shield: so shields que permitem realizar conexo bluetooth com outros dispositivos eletrnicos, como celulares, por exemplo.

GPS Shield: permite a conexo do Arduino com um receptor GPS.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

35

Encontramos hoje no mercado uma vasta lista de shields para Arduino, alm destes, podemos encontrar shields que permitem realizar diversas funes como: MP3 Player, conexo com redes wi-fi, shields que simulam funes de celulares, etc. Normalmente os fabricantes dos shields oferecem bibliotecas de contedo para facilitar ainda a programao, assim, muitas vezes no necessrio fazer um estudo muito detalhado para aprender a executar funes especficas.

FAZENDO UM MOTOR DC FUNCIONAR Quando pensamos em controlar um rob atravs de um sistema inteligente logo pensamos em sua capacidade de locomoo, ou seja, em fazer o uso de motores para moviment-lo de acordo com sinais enviados pelo microcontrolador. Logo, devemos pensar que este motor no poder ficar conectado diretamente fonte de tenso e que devemos criar um sistema de chaves inteligentes para comandar o motor de acordo com o sinal enviado do Arduino. Um Arduino sozinho no capaz e nem seguro fazer um motor DC funcionar (o Arduino no capaz, pois fornece em suas sadas digitais corrente de cerca de 40mA), por isso, devemos obter um driver capaz de fornecer corrente suficiente para o motor DC funcionar adequadamente. No caso de pequenos motores o uso de transistores e diodos pode ser suficiente para fazer um sistema de chaves inteligentes. Observe o seguinte esquema.

Porm se analisarmos o circuito anterior, observaremos que o motor ir operar sem controle de velocidade e em apenas um sentido, no tornando o sistema totalmente inteligente e eficiente.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Um motor tem capacidade de movimentao tanto no sentido horrio como no sentido anti-horrio, e para aproveitarmos isso, devemos apenas criar um jogo de chaves onde podemos inverter o sentido da corrente do circuito.

36

Se a corrente estiver sendo conduzida de um lado ela dever seguir o seguinte esquema, fazendo o motor girar em um sentido.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Se a corrente estiver sendo conduzida pelo outro lado ela dever seguir este esquema, fazendo o motor girar no outro sentido.

37

Para um motor ter a habilidade de movimentao nos dois sentidos do seu eixo e tambm para obter um controle sobre sua velocidade, torque e outros dados tcnicos, devemos montar um circuito que seja inteligente para poder realizar estes fundamentos bsicos apresentados atravs de sinais enviados do Arduino. Se observarmos atentamente o esquema de chaves, veremos que ele se torna similar com um H, assim, dando a estes estudos o nome de Ponte H (H-Bridge, em ingls). H vrias maneiras de se montar uma Ponte H. Ela pode ser feita tanto com rels, como com transistores e at com CIs (circuitos inteligentes) j criados especialmente para isso. No h como apresentar um modelo de Ponte H e dizer que ela funcionar adequadamente com qualquer circuito que for, pois, ao montar o circuito, devemos levar em considerao os dados tcnicos do motor que est sendo usado, as especificaes do Arduino, dos dispositivos que sero utilizados e do ambiente em que o sistema atuar. Como exemplo ns usaremos uma Ponte H dupla desenvolvida no IFMT para comandar dois motores DC em um Rob Sumo. Observe o esquema.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

38

Quando montamos um circuito devemos pensar tambm em sua proteo, pois de um lado possumos um sistema sensvel (o Arduino), denominado transmissor, e do outro lado possumos um sistema responsvel pelo movimento de motores, denominado, receptor. Devemos realizar um isolamento dos circuitos para evitar possveis problemas como fuga de corrente ou ligaes e curtos no planejados. Para isso usamos um Acoplador ptico, onde o sinal recebido do Arduino transformado dentro do CI em emisso de um LED infravermelho que identificado por um sensor e consequentemente enviando um sinal de sada, com isso, isolamos totalmente o circuito transmissor do emissor evitando possveis problemas.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Se observarmos o circuito veremos aps um acoplador ptico existe um transistor NPN TIP142 funcionando como uma chave. Quando o Arduino envia um sinal alto a este transistor, ele ativado permitindo que a corrente vinda do motor flua at o GND da bateria usada, assim, fechando o circuito e fazendo o motor funcionar.

39

Conectado diretamente nos pinos dos motores so encontrados rels. Os rels funcionam como uma chave. Quando o Arduino enviar um pequeno sinal, o rel ir alterar as chaves, assim, alterando o sentido da corrente e fazendo o motor girar no sentido inverso.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

40

PROGRAMAO PONTE H Para programar uma Ponte H deve-se levar em considerao os conceitos apresentados sobre entrada e sada de dados. Esta programao leva o sistema de Ponte H apresentado anteriormente como referncia. Esta programao possui velocidade constante. Exemplo 10.

#define relea 2 // definindo rele motor A #define transa 3 // definindo transistor motor A #define releb 4 // definindo rel motor B #define transb 5 // definindo rel motor B void setup(){ // inicializao das sadas dos motores for (int i=2; i<6; i++){ pinMode(i, OUTPUT); } } void setup(){ frente(); delay(2000);

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

41

parar(); delay(1000); paratras(); delay(1000); } void frente(){ //enviando sinal alto de cada componente de forma individual digitalWrite(transa, HIGH); digitalWrite(transb, HIGH); } void paratras(){ // enviando sinal alto de TODOS componentes atravs da funo for for(int i=2, i<6, i++){ digitalWrite(i, HIGH); } } void parar(){ digitalWrite(relea, LOW); digitalWrite(trana, LOW); digitalWrite(releb, LOW); digitalWrite(transb, LOW); }

Observe na programao anterior que foram criadas funes especficas para cada um dos movimentos dos motores. O modo que os motores iro funcionar pode ser feito de diversas maneiras e utilizar vrias funes especificadas anteriormente, porm, caba ao programador organizar o programa da maneira que desejar. OBSERVAO! Caso voc queira controlar a velocidade do eixo de um motor DC, voc deve programar da mesma maneira que o exemplo 8, porm, invs de aplicar o sinal a um LED, voc ir aplicar ao componente usado no seu sistema de controle.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino CONECTANDO UM DISPLAY DE CRISTAL LIQUIDO (LCD)

42

Conectar um display de cristal lquido (LCD) no Arduino no uma tarefa to difcil como parece. Para o Arduino funcionar com o LCD, ele dever ser baseado no chipset Hitachi ou similares. Vamos usar como referncia um LCD alfanumrico de 16x2 (16 colunas, 2 linhas). O LCD possui uma srie de pinos que devem, ou no, ser conectados no Arduino, para isso, devemos entend-los. Observe o desenho e as explicaes abaixo para melhor compreender.

VSS: Alimentao do display: Ground, Terra; VDD: Alimentao do display: 5 V; VEE/VO: Ajuste de contraste. Alterando a tenso aplicada neste pino, voc altera o contraste do display; RS (Register Select): controla em qual parte do LCD voc est enviando dados. Este pino controla o que ser exibido na tela e o que so instrues de registro; RW (Read/Write): este pino seleciona se estar atuando em modo de leitura ou envio de dados; E (Enable): habilita o envio de dados aos registros; D0 a D7: controla o estado dos pinos (HIGH ou LOW)

Os displays LCD compatveis com o chipset Hitachi podem atuar nos modos de 4-bits ou 8-bits, porm, no modo de 4-bits necessrio apenas 7 pinos I/O do Arduino, enquanto no modo 8-bits necessrio 11 pinos I/O. Se voc for trabalhar apenas com textos o modo de 4-bits suficiente. Veja como fazer a ligao entre o display LCD e o Arduino corretamente.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino

43

No necessrio usar resistores ou qualquer outro componente entre o Arduino e o LCD. Apenas feito o uso de um potencimetro para regular a tenso aplicada ao pino VEE/VO para controlar o contraste do monitor. PROGRAMANDO UM LCD EM ARDUINO Neste caso definimos as seguintes conexes: : Pino no LCD RS E D4 D5 D6 D7 Pino no Arduino 12 11 5 4 3 2

Com isso podemos comear a realizar a programao baseada em uma biblioteca j contida no Arduino, a LiquidCrystal.h. Esta biblioteca compatvel com os displays baseados no chipset Hitachi e ela possui 20 diferentes funes. Com estas funes voc possui controle total sobre seu display LCD. Em nossos estudos no iremos aprender todas estas funes, apenas as bsicas para o funcionamento do LCD, caso voc tenha interesse o site oficial do Arduino oferece um estudo completo sobre elas.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Para realizar a programao basicamente deve-se: 1. Incluir a biblioteca do LCD: A biblioteca baseada no chipset Hitachi j est contida no Arduino e pode ser acessvel atravs do menu Sketch > Import Library > LiquidCrystal. 2. Identificar cada um dos pinos conectados ao Arduino: para realizar esta identificao usamos a seguinte funo, onde devemos colocar o nmero do pino conectado ao Arduino com o respectivo nome. LiquidCrystal lcd(RS, RW, E, D4, D5, D6, D7); NOTA: muitas vezes o uso do pino RW pode ser desconsiderado, assim, no sendo necessrio conect-lo ao Arduino ou identificando-o na programao. 3. Iniciar o display: iniciamos o display com a seguinte funo, onde identificamos o nmero de linhas e de colunas, neste caso, usamos um display 16x2: lcd.begin( COLUNAS, LINHAS); Ex: lcd.begin(16,2); 4. Imprimir dados no display: para imprimir dados, podemos usar a seguinte funo: lcd.print(Mensagem); Observe o exemplo 11.

44

/*Este exemplo de cdigo de domnio pblico */ #include <LiquidCrystal.h> // inclui o cdigo da biblioteca LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // inicializando biblioteca e os respectivos pinos void setup() { lcd.begin(16, 2); // inicializa o display com o nmero de colunas e linhas adequado lcd.print("hello, world!"); // Imprimindo uma mensagem no LCD } void loop() { // Fixa o cursor na coluna 0, linha 1 // NOTA: a contagem das linhas comea em 0, portanto a linha 1 a segunda linha lcd.setCursor(0, 1); // Imprime o nmero de segundos desde o reset. lcd.print(millis()/1000); }

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino USO DE SENSORES Um sensor um dispositivo que responde com um sinal eltrico a um estmulo fsico de uma maneira especfica. Como estes sinais so uma forma de energia, os sensores podem ser classificados de acordo com o tipo de energia que eles detectam, ou seja, podem ser sensores: De luz: clulas solares, fototransistores, fotodiodos; De som: microfones, sensores ssmicos; De temperatura: termmetros, termstores (resistores sensveis temperatura), termostato; De calor: calormetro; De radiao: dosmetro, contator Gaiger; De resistncia eltrica: ohmmetro; De corrente eltrica: galvanmetro, ampermetro; De tenso eltrica: voltmetro; De potncia eltrica: wattmetro; Magnticos: magnetmetro, compasso magntico; De presso: barmetro; De movimento: velocmetro, tacmetro; Mecnico: sensor de posio; De proximidade; De distncia.

45

Como foi dito, os sensores transformam um estmulo fsico em tenso eltrica, assim dizemos que ento o sinal enviado ao sistema lgico, neste caso, o Arduino. H sensores analgicos e tambm digitais, quando montarmos algum sistema devemos ter ateno ao tipo de sensor que usamos e as suas caractersticas bsicas como corrente, tenso, possveis usos, etc. Devemos ter uma ateno especial na parte da programao. Para programar o sensor corretamente necessitamos realizar testes e verificar os resultados. Qualquer programador pode estudar como o sensor age e ento realizar uma programao especfica e prpria para ele, porm, isso acaba ocupando muito tempo e o resultado pode no ser to significativo, por isso, o uso de sensores com o Arduino pode ser facilitado. Hoje grande parte dos fabricantes de diversos sensores em seus sites oficiais, em seus datasheets e em fruns na internet oferecem informaes especficas para o uso com Arduino e at fornecem bibliotecas j prontas, assim facilitando a programao e podendo fazer o sensor funcionar corretamente com poucas linhas de cdigos. Por estes motivos no se pode ensinar uma forma de programao vlida para funcionar com qualquer sensor, necessrio colocar em prtica todos os ensinamentos que foram passados at aqui como a leitura e escrita de dados analgicos e digitais, o uso de variveis para armazenar as informaes, o uso de ondas PWM, funes, estruturas de controle de fluxo, etc., enfim, o que vai fazer o sensor funcionar corretamente o conhecimento que voc adquiriu ao longo das suas experincias.

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino Ao longo da apostila, temos utilizado principalmente em exemplos o uso de LEDs e de potencimetros, isso facilita pois estes elementos funcionam como a base de conhecimento necessria para funcionar com sensores. Tanto potencimetros como sensores analgicos enviaram um sinal de 0 a 1023 e cabe ao programador mostrar o que cada perodo neste intervalo significa. A leitura do sinal de um LED ou de um boto, por exemplo, funciona to bem para demonstrar a leitura de um dado analgico assim como em sensores digitais. Nesta apostila onde falamos sobre ondas PWM (pgina 30), possumos dois exemplos que poderiam ser usados com sensores, sendo um dos exemplos de um sensor ultrassnico, onde ele capta a distncia de objetos em sua frente num raio de distncia especfico. O Arduino pode captar as informaes de um sensor analgico atravs da funo analogRead() e pode enviar informaes ao sensor atravs da funo analogWrite(). Sensores analgicos recebem um sinal de 0 a 1023 e cabe ao programador designar a grandeza medida. Exemplo, voc possui um sensor de temperatura analgico que mede grandeza em clsius de 0C a 50C, dizemos que o sinal 0 equivale a 0C e 1023 equivale a 50C, cabendo ao programador desvendar os valores equivalentes entre estes resultados. Sensores digitais funcionam apenas com sinal alto (HIGH) ou sinal baixo (LOW). Uma chave de fim de curso, por exemplo, pode ser considerado um sensor digital. Dizemos que a chave considerada como NF (normalmente fechada), assim, se for feita uma leitura atravs de digitalRead() quando a chave no estiver pressionada obteremos o valor 1 (HIGH, sinal alto), caso a chave seja pressionada, obteremos o valor 0 (LOW, sinal baixo), assim, cabe ao programador decidir qual ser a utilidade do uso deste sensor. Porm, h sensores de uso mais complexo, onde voc pode obter dados mais especficos ou variados tipos de dados, para isso, o fornecedor sempre oferece um manual de como realizar a programao e de como usar as bibliotecas dos sensores, mas para isso, voc sempre dever estar procurando por estas informaes em fruns especficos e no site dos fabricantes.

46

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino ANEXOS

47

1. Sites de fabricantes e vendedores de Arduinos originais, de plataformas baseadas em Arduino ou de shields.

1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7.

http://arduino.cc/ - Site Oficial do Arduino; http://www.ladyada.net/make/boarduino/ - Boarduino, plataforma baseada em Arduino; http://www.seeedstudio.com/blog/2008/09/15/seeeduino-release-noticever10b/ - Seeduino, baseado em Arduino; http://shieldlist.org/ - Lista de todos os fabricantes e shields para Arduino existentes no mercado; http://www.multilogica-shop.com/ - vendedor oficial de produtos Arduino no Brasil http://www.sparkfun.com/ - vendedor oficial internacional de Arduino, shields e sensores; http://www.adafruit.com/ - vendedor oficial internacional de Arduino, shields e sensores.

2. Sites de fruns e outros sites onde fornece informaes importantes sobre o Arduino. 2.1. 2.2. 2.3. http://www.arduino.cc/forum/ - Frum oficial Arduino. http://www.ladyada.net/ - Portfolio de informaes sobre Arduino e seus usos; http://forums.adafruit.com/viewforum.php?f=37&sid=e1903ded7b393d4f0c1 619914c76a6af Frum Adafruit sobre Arduino;

Micael Bronzatti Gaier

Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab

Aprendendo a Programar em Arduino BIBLIOGRAFIA

48

Site Oficial Arduino: http://arduino.cc/ - Acesso em 05 de Outubro de 2011; BANZI, Massimo; Getting Started With Arduino; OReilly Media Inc.; 2010; MCROBERTS, Michael; Beginning Arduino; Apress; 2010; SANTOS, Nuno Pessanha; Arduino, Introduo e Recursos Avanados; 2009; Disponvel em http://pt.scribd.com/doc/57058743/Tutorial-Arduino; Apostila Introduo a Linguagem C; Unicamp; Disponvel em ftp://ftp.unicamp.br/pub/apoio/treinamentos/linguagens/c.pdf.

Micael Bronzatti Gaier