You are on page 1of 9

Filipe Pereira

Software Instalao e Utilizao O Software de desenvolvimento do Arduino bastante fcil e intuitivo de utilizar, no havendo qualquer nvel de dificuldade. Foram estruturados passos de forma a simplificar a sua utilizao e instalao. O 1 passo consiste em efetuar o download do respectivo software de desenvolvimento, atravs do site oficial Arduino (www.arduino.cc). A ltima verso disponvel aparecer na parte superior da pgina, como mostra a figura 1, sendo s necessrio escolher a verso apropriada para o sistema operativo com que estamos trabalhando.

Atualmente, a verso mais recente a 0016, mas quando o leitor estiver lendo este tutorial muito provavelmente j deve haver uma verso mais avanada. Veja a figura 2.

Filipe Pereira

O 2 passo consiste em descompactar o fichrio .ZIP (verso Windows e Mac OS) ou .tgz (verso Linux) para uma pasta de sua escolha. Selecione uma pasta de destino final, pois o programa no necessita de instalao. Utilizando o sistema operacional Windows, o contedo da pasta, mostrado na figura 3, dever ser o seguinte:

O 3 passo consiste em ligar a placa de desenvolvimento ao computador e instalar os drivers FTDI para permitir uma converso de USB para srie. A representao do pinout de um FTDI a ilustrada na figura 4:

Os drivers encontram-se disponveis na pasta do Software Arduino que foi descompactado no passo 2 - ou se preferir pode sempre retirar os drivers mais atualizados do site oficial FTDI - www.ftdichip.com. O 4 passo consiste em configurar a porta srie a ser usada e qual o tipo de modelo Arduino, que estamos utilizando. Para tal, necessitamos de abrir o Software de desenvolvimento e escolher na barra de separadores a opo Tools. Observe a figura 5.

O 5 e ltimo passo para a utilizao do Software consiste em elaborar o seu Sketch, compilar e, caso no tenha erros, fazer o uploading para a placa de desenvolvimento Arduino. Figura 6.

Filipe Pereira

Ciclo de Desenvolvimento Um resumo do referido anteriormente pode ser encontrado na figura seguinte, que demonstra os passos necessrios para elaborar uma aplicao (aps ter feito a instalao do Software) de uma forma esquemtica e a qual se pode designar por ciclo de desenvolvimento (figura 7).

A anlise da figura anterior permite fazer um resumo possvel de todas as fases necessrias at a execuo do programa criado, sendo muito importante a sua compreenso e apreenso. A figura 8 visa dar outra perspectiva ao exposto na figura 7, tentando fazer compreender uma vez mais qual o ciclo de desenvolvimento da plataforma de desenvolvimento Arduino.

Caso se pretenda interagir com outro tipo de Software com a plataforma de desenvolvimento Arduino, pode-se recorrer ao separador Playground (figura 9), podendo encontrar inmeras referncias de interao do Arduino com outro Software de desenvolvimento (por exemplo: Processing, Mathematica, MatLab, entre outros).

ndice de Instrues Neste curso, vo ser referidas as mais importantes instrues bsicas do ambiente de desenvolvimento Arduino, sem recorrer a bibliotecas externas, sendo estas enumeradas por tipo de aplicao. Antes de abordar algumas das instrues possveis numa linguagem de alto nvel, podemos fazer uma breve abordagem para analisar qual a classificao a atribuir ao microcontrolador em estudo. Podemos classificar os processadores tendo em conta o seu conjunto de instrues em duas categorias: CISC (Complex Instruction Set Computers); RISC (Reduced Instruction Set Computers).
Filipe Pereira

Baseando-se a arquitetura CISC num conjunto de instrues com modos de endereamento bastante complexos. Ao utilizar este tipo de arquitetura, permitido elaborar programas bastante compactos e codificveis quando recorremos a um uso reduzido de instrues. Alguns dos inconvenientes deste tipo de arquitetura so baseados no elevado tempo de ciclos de relgio, necessrio para executar cada uma das suas instrues. Outro inconveniente a existncia de variados modos de endereamento.

Por outro lado, os processadores baseados em arquiteturas do tipo RISC apresentam um conjunto de instrues bastante reduzido, possibilitando assim obter uma enorme simplicidade e um tempo de execuo menor por instruo que a arquitetura CISC, conseguindo, ento, com um conjunto de instrues bsicas com tempos de execuo menores, obter, no final, velocidades de processamento mais elevadas que a arquitetura CISC. Na sua verso mais simples, pode afirmar-se que os processadores RISC possuem os seguintes tipos de instrues: Instrues lgicas e aritmticas sobre registros; Instrues de transferncia de dados entre memria e registros; Instrues de controle. No datasheet dos microcontroladores utilizados nos modelos do Arduino, pode-se perceber que estamos perante microcontroladores baseados numa arquitetura advanced RISC. Funes Base - void setup() Descrio: Esta funo executada apenas uma vez e normalmente utilizada para executar a inicializao de variveis, a inicializao da utilizao de bibliotecas (no confundir com declarao de bibliotecas), a definio dos pinos (como input ou output), o incio do uso de comunicao srie, entre outros. Esta funo apenas volta a ser executada ao ser efetuado o reset, ou quando se desligar e voltar a ligar a placa de desenvolvimento Arduino. Exemplo: (1) int botao=3; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3. (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie. (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT. (5) } (6) void loop(){ (7) (.) (8) } Funes Base - void loop() Descrio: Esta funo faz um loop sucessivo (como o prprio nome indica), ou seja, todos os comandos existentes no interior desta funo so sucessivamente repetidos, o que pode permitir a leitura sucessiva de portas, a leitura sucessiva de parmetros provenientes de sensores externos e atuar de acordo com as condies estabelecidas, entre muitas outras aplicaes, bastando apenas ter criatividade. Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500){ // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) } Nota: As funes atrs descritas tm de ser necessariamente do tipo void, ou seja, no podem retornar qualquer valor depois da sua execuo. Resumindo As funes void setup()e void loop() so de carter obrigatrio, ou seja, mesmo que no necessria a sua utilizao, devero constar no cdigo utilizado. E apenas sero chamadas funes externas que constem na funo void loop(). Um resumo dos subcaptulos anteriores encontra-se expresso no exemplo seguinte: Exemplo: Declarao de variveis globais; void setup(){ Instruo 1; Conjunto de intrues

Instruo 2; apenas executados uma vez, na inicializao do programa a executar (...) } Conjunto de instrues que executado em loop void loop (){ Instruo 6; Instruo 9; Funo1(); (...) }
Filipe Pereira

Tipos de variveis disponveis Varivel do Tipo Boolean Descrio: Uma varivel deste tipo apenas pode tomar dois valores distintos - true ou false. Esta varivel reserva 1 byte de memria para a sua utilizao. Sintaxe: boolean varivel = valor; Quando referido acima a valor, nos referimos a true ou false. Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analgica inicializada com o valor 3, de uma varivel do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vetor f[] com 11 posies de memria do mesmo tipo (integer). (2) boolean teste = false; // Definio de uma varivel do tipo boolean inicializada com false (3) void setup() { (4) Serial.begin(9600); // Permite a inicializao da comunicao Srie (5) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (6) } (7) void loop(){ (8) do{ //Permite definir o incio do ciclo (9) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (10) f[i]=val: //Atribui o valor da varivel val ao vetor f[i], ou seja, permite preencher o vetor com valores provenientes do pino analgico 3 (11) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+1 (12) teste = !teste; //modifica o valor atribudo varivel booleana teste o seu oposto ( se true fica false, e vice-versa) (13)} (14) while(i<=10); // Se a condio se verificar repete o ciclo, caso no se verifique o ciclo termina (15) }
Filipe Pereira

Varivel do tipo float vs double Descrio: A varivel do tipo float apresenta uma maior resoluo, face s variveis do tipo integer. So reservados em memria 4 bytes (32 bits), para armazenar o seu contedo. Este tipo de varivel pode conter valores no intervalo de 3,4028235*1038 e 3,4028235*1038. Paralelamente, o conceito de double leva-nos a considerar uma varivel que possua o dobro da preciso de uma varivel do tipo float, apesar de no contexto de estudo a declarao de uma varivel do tipo float ou do tipo double ser igual. Ou seja, no existe um incremento de preciso mantendo-se o mesmo espao reservado de memria para ambos os tipos no Arduino. Sintaxe: float varivel = valor; double varivel = valor; Exemplos: float exemplo = 1.589; // Declara uma varivel do tipo float e atribui-lhe o valor de 1.589 double exemplo_1 = 1.589; // Declara uma varivel do tipo double e atribui-lhe o valor de 1.589 Varivel do Tipo array e a Noo de string Descrio: considerado um array, um vetor de variveis do mesmo tipo ao qual se pode acessar atravs do seu respectivo ndice. O conceito de string comumente utilizado para designar um vetor de

variveis do tipo char. Sintaxe: tipo_varivel nome_varivel[ndice] = valor; Ao declarar um ndice de valor 10, estamos na verdade reservando 11 espaos na memria para a varivel do tipo declarado. Pois, tambm, temos de contar com o ndice zero, este fator torna-se muitas vezes objeto de erro. Exemplos: float exemplo[10]; //Declarao de um vetor com 11 espaos, do tipo float float exemplo_2[]={1,2,3,4,5,6,7,8,9,10}; //Declarao de um vetor do tipo float, que vai ter um ndice compreendido entre 0e 9. char exemplo_3[11]=Hello World; //Declarao de uma string char exemplo_4[11]={H,E,L,L,O, ,W,O,R,L,D}; //Declarao de uma string, com o contedo semelhante ao exemplo anterior, mas com outra forma de colocar o mesmo contedo Funes - Input/Output digital pinMode() Descrio: Ao recorrer a esta instruo, possvel configurar o modo de comportamento de um determinado pino, possibilitando assim defini-lo como input ou output, esta definio normalmente efetuada recorrendo funo void setup(). Sintaxe: pinMode(Nmero do pino, Modo); O Modo acima descrito pode ser definido da seguinte forma: INPUT Exemplo: (1) int botao=3,val; //Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); //Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); //Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); //Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) //Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); //Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }
Filipe Pereira

digitalWrite() Descrio: Possibilita, nos pinos configurados como output atravs da instruo pinMode, estabelecer a sada dos respectivos pinos com o valor lgico 1 (HIGH 5 V) ou com o valor lgico 0 (LOW 0 V). Sintaxe: digitalWrite(Nmero do pino, Modo); O Modo acima descrito, pode ser definido como: HIGH LOW Exemplo: (1) int botao=3,val; //Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); //Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); //Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); //Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) //Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); //Se a condio for verificada, atribudo ao pino digital 13 a condio

HIGH (5 V) (11) } (12) } digitalRead() Descrio: Possibilita a leitura de uma entrada digital especfica, retornando um valor no formato integer (int). Se obtivermos um valor de retorno de 1, estamos perante uma leitura do tipo HIGH (valor lgico 1). Se tal no se verificar, e tivermos um valor de retorno igual a 0, estaremos perante uma leitura do tipo LOW (valor lgico 0). Sintaxe: Varivel do tipo integer = digitalRead (Nmero do pino); Exemplo: (1) int botao=3,val; //Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); //Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); //Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=digitalRead(botao); //Permite a leitura do valor do pino 3 digital atribuindo o seu valor varivel val (9) if(val==1) //Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); //Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) else{ //Caso a condio do ciclo if no se verifique (13) digitalWrite(13,LOW); //Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) } (15) }

Filipe Pereira

Ciclo If...else (1) int botao=3,val; //Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); //Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); //Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); //Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) //Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); //Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (12) else (13) digitalWrite(13,LOW); //Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) } Ciclo for int entrada_analogica=3,val,f[10],i; // Declarao de uma varivel do tipo integer, com o nome entrada_analgica inicializada com o valor 3, de variveis do mesmo tipo com o nome val e i no inicializada, e de um vector f[ ] com 11 posies de memria do mesmo tipo (integer). void setup() { Serial.begin(9600); // Permite a inicializao da comunicao Srie pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT } void loop(){

(7) for(i=0;i<=10;i++) // Ciclo for que percorrido 11 vezes, i<=10 com i a comear no valor 0 { val=analogRead(entrada_analogica); //Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val; //Atribui o valor da varivel val ao vetor f[i], ou seja, permite preencher o vetor com 11 valores do pino analgico 3 } } Ciclo switch/case int entrada_analogica=3,val; // Declarao de uma varivel do tipo integer, com o nome entrada_analgica inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val void setup() { Serial.begin(9600); // Permite a inicializao da comunicao Srie pinMode(entrada_analogica,INPUT); //Permite definir o pino 3 como INPUT pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT } void loop() { val=analogRead(entrada_analogica); //Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val switch(val){ // Ciclo switch, sendo val a varivel a testar case 500: // condio de teste, se val == 500 (igual a 500) digitalWrite(13,HIGH); // Se a condio da linha 10 se verificar, esta instruo executada break; // Instruo que permite terminar o ciclo default: //Se nenhuma das condies se verificar (o seu uso opcional) digitalWrite(13,LOW); //Instruo que executada se a condio do ciclo switch no se verificar } }
Filipe Pereira

Ciclo while (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo inteir0, com o nome entrada_analgica inicializada com o valor 3, de variveis do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vetor f[] com 11 posies de memria do mesmo tipo (inteiro). (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(entrada_analgica,INPUT); //Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) while(i<=10){ // ciclo while, com a condio i<=10 (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val; //Atribui o valor da varivel val ao vetor f[i], ou seja, permite preencher o vetor com valores provenientes do pino analgico 3 (10) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+1 (11) } (12) } Ciclo dowhile (1) int entrada_analgica=3,val,i=0,f[10]; //Declarao de uma varivel do tipo integer, com o nome entrada_analgica inicializada com o valor 3, de uma varivel do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vetor f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); //Permite a inicializao da comunicao Srie (4) pinMode(entrada_analgica,INPUT); //Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) do{ //Permite definir o incio do ciclo (8) val=analogRead(entrada_analgica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val: //Atribui o valor da varivel val ao vetor f[i], ou seja, permite preencher o vetor com valores provenientes do pino analgico 3

(10) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+1 (11)} (12) while(i<=10); // Se a condio se verificar repete o ciclo, caso no se verifique o ciclo termina (13) } * Matria originalmente publicada na revista Saber Eletrnica; Ano: 47; N 455; Set / Out 2011

You might also like