Apostila Arduino Basico Documentos Google

20
Tutorial básico de arduino * para programadores José de Figueiredo (autor) Suélen Camargo (revisão) Apresentação Este tutorial está sendo desenvolvido para orientar, de forma introdutória, o uso do arduino. Nosso públicoalvo são profissionais de TI, que já tenham alguma experiência com a linguagem de programação C/C++. O que é o arduino? É um kit de prototipagem rápida, uma placa de circuitos eletrônicos, que foca na automação de dispositivos e sistemas. Para isto a placa possui um microcontrolador programável com diversos pinos de entrada e saída, digitais e analógicas. Com o arduino, podese automatizar uma variedade de atividades eletro/mecânica desde que o arduino esteja devidamente preparado e equipado para tal. Como por exemplo, podese automatizar a abertura e fechamento de cortinas conforme determinadas condições ditadas de acordo com as preferências do usuários. A figura 1 mostra a placa da última versão do arduino, a Arduino UNO. Figura 1 Para os profissionais da computação, esta ferramenta se revela de grande valia, uma vez que é uma das formas de implementar de forma prática e rápida, a Internet das Coisas e também a computação ubíqua/pervasiva, 1 conceitos estes relacionados a computação distribuída, um fator de alta relevância na atualidade. O arduino também contribui para redução de custos e o desperdício de tempo em projetos de automação. 1 Também chamada de IoT – Internet of Things

description

arduino

Transcript of Apostila Arduino Basico Documentos Google

Page 1: Apostila Arduino Basico Documentos Google

Tutorial básico de arduino

* para programadores José de Figueiredo (autor) Suélen Camargo (revisão)

Apresentação

Este tutorial está sendo desenvolvido para orientar, de forma introdutória, o uso do arduino. Nosso público­alvo são profissionais de TI, que já tenham alguma experiência com a linguagem de programação C/C++.

O que é o arduino?

É um kit de prototipagem rápida, uma placa de circuitos eletrônicos, que foca na automação de dispositivos e sistemas. Para isto a placa possui um microcontrolador programável com diversos pinos de entrada e saída, digitais e analógicas.

Com o arduino, pode­se automatizar uma variedade de atividades eletro/mecânica desde que o arduino esteja devidamente preparado e equipado para tal. Como por exemplo, pode­se automatizar a abertura e fechamento de cortinas conforme determinadas condições ditadas de acordo com as preferências do usuários.

A figura 1 mostra a placa da última versão do arduino, a Arduino UNO.

Figura 1

Para os profissionais da computação, esta ferramenta se revela de

grande valia, uma vez que é uma das formas de implementar de forma prática e rápida, a Internet das Coisas e também a computação ubíqua/pervasiva, 1

conceitos estes relacionados a computação distribuída, um fator de alta relevância na atualidade.

O arduino também contribui para redução de custos e o desperdício de tempo em projetos de automação.

1Também chamada de IoT – Internet of Things

Page 2: Apostila Arduino Basico Documentos Google

Versões do arduino

O arduino é fornecido em diversos formatos que são escolhidos conforme

as necessidades específicas do usuário. Apresentamos aqui 3 dos modelos mais comuns:

Arduino UNO: É a placa mais recente fornecida pelos desenvolvedores (dez/2012). É sobre esta placa que este tutorial está sendo baseado;

Arduino MEGA: É uma versão mais robusta, tem mais velocidade e mais portas de interfaceamento;

Arduino NANO: Versão compacta, com características parecidas com as do UNO.

Outras versões e variações podem ser encontradas no mercado. Por ser

uma tecnologia de hardware livre diferentes versões podem ser criadas por 2

diferentes desenvolvedores. Expandindo assim as capacidades desta tecnologia.

Características técnicas do arduino UNO Alimentação: A placa do circuito pode ser energizada com tensões de

7v a 12v. Isto pode ser feito com baterias, pilhas ou fontes externas usando o pluge de alimentação disponibilizado na placa, assim como via USB. Em aplicações simples usamos alimentação via USB, porém esta não poderá ser usada quando precisarmos da comunicação serial do aparelho.

Alimentação: A placa trabalha com alimentação entre 7v e 12v. Tensão de operação: A placa trabalha, considerando o uso das saídas

PWM , com tensões de 0 a 5V. 3

Corrente nos pinos de I/O: A corrente máxima suportada por cada pino é de 40mA. A corrente total de kit é de 150mA.

Memória flash: 32KB ­ É a memória onde é gravado o programa que foi criado ­ denominado firmware.

Memória de execução: 2KB Pinos de I/O: 14 no total, sendo que 6 destes podem ser configurados como saídas PWM;

6 pinos de entrada analógica (conversor A/D); 1 porta serial (pinos 0 e 1) ou porta serial USB.

2 Forma de tecnologia em que qualquer desenvolvedor tem acesso a sua fonte, tendo total liberdade para executar melhorias e/ou modificações. 3 PWM ­ Pulse Width Modulation.

Page 3: Apostila Arduino Basico Documentos Google

Programação do arduino O arduino é programado em linguagem C/C++ em uma IDE

dedicada e fornecida pelo próprio arduino. A ferramenta é multiplataforma e traz “embutida” compilador e gravador.

Estrutura do programa feito para arduino no IDE arduino Todo programa tem duas funções principais que são: void setup() ­ é executada apenas uma vez ­ na inicialização da placa (quando esta for ligada). Esta função é frequentemente usada para incializar variáveis, objetos ou métodos.

void loop() ­ é executada sequencialmente, em loop infinito, após a inicalização. É onde nosso programa fica.

Para um programar é necessário conhecer o hardware e entender como

o programa que iremos criar interage com este hardware. É preciso saber quais pinos ligamos usamos, como usamos e quando usamos.

Queremos um programa que ligue um led ­ então precisamos saber onde o led foi ligado, para poder codificar usando a porta certa.

Primeiro Hello World Um hello world no arduino pode significar uma infinidade de opções.

Nesta primeira versão vamos fazer o led que está na placa (ao lado do pino 13 (pisca em cor laranja).

Page 4: Apostila Arduino Basico Documentos Google

helloworldv1.ino

byte Led = 13; void setup() pinMode(Led, OUTPUT); void loop() digitalWrite(Led,HIGH); delay(1000); digitalWrite(Led,LOW); delay(1000);

Segundo Hello World O circuito: O circuito mostrado na figura abaixo apresenta um led

comum, ligado a um resistor de 220R entre os pinos 13 e GND. A lógica do circuito pode ser entendida assim: “o sinal lógico alto e 5v (HIGH) sai pelo pino 13, passa pelo resistor de 220R (limitador de corrente) e passa pelo led; se o sinal lógico for baixo (LOW), então na da passa pelo led e este fica desligado.

1. Porque precisamos usar um resisitor? Nenhum componente pode ser ligado diretamente na placa arduino (e a nenhum outra placa eletrônica) sem um resistor limitador de corrente. Este resistor limitador de corrente impede que o LED “puxe” mais corrente do que o arduino pode fornecer. Se o led for ligado diretamente (sem o resistor), a porta de saída do arduino (e talvez o próprio arduino) poderá ser quimada por excesso corrente. Esta característica é muito importante para garantir a longevidade do kit, caso contrário….

Page 5: Apostila Arduino Basico Documentos Google

2. Um pouco mais sobre corrente: De forma bem simples, a corrente elétrica o movimento dos elétrons em um condutor; este movimento de elétrons é capaz de produzir trabalhos, como ligar leds, motores, acionar dispositivos entre outros. A unidade de medida usada para medir corrente é conhecida por ampére (simbolo A, também encontramos I). Em circuitos microcontrolados a corrente é muito pequena, frequentemente medida em miliamperes (mA). a. Entendendo o consumo: Para qualquer coisa funcionar, é preciso saber quantos Ampéres serão consumidos. Por exemplo: uma lâmpada incandescente de 100W (aquelas antigas) precisa de aproximadamente 0,45A para ligar; se ligarmos 3 lampadas em um circuito qualquer, teremos um consumo de 3 x 0,45A = 1,3A.

b. Consumo de um LED: Para funcionar, um led precisa de apenas 0,001A (1 mA). Como no arduino, todas as portas lógicas tem saída de 5v, precisamos ligar o led com um resistor de 4,7K.

Resistor = Volt/Corrente Resistor = 5V/0,001A = 5000 ohms 4

Resistor comercial = 4,7K ohms c. Leds na Internet: Vale observar que na internet, os diagramas de ligação de led indicam o uso de resistores de 330 ohms. E funciona… mas com este resistor o led vai ser ligado com uma corrente de 15mA. Mas porque 15mA se precisamos de apenas 1mA? O efeito colateral disto é a redução no tempo de vida útil do led e do arduino, além de “matar a bateria” mas rapidamente.

(Corrente = Volts/Resistência) 5v/330 ohms = 15mA

d. Sempre consulte o manual de referência (datasheet) do componente que você pretende ligar ao arduino, procure sempre saber qual a corrente máxima que ele consumirá ­ caso contrario ...

Mas e o programa? O programa usado será o mesmo do exemplo anterior helloworldv1.ino ­ observe que o led externo está ligado no pino da saida 13, que é o mesmo compartilhado pelo led da placa.

Posso ligar em outra porta? Sim, podemos ligar em outra porta desde que sejam respeitados os limites e que a programação seja adequada.

4 Ohms é o nome dado a unidade de medida de resistência.

Page 6: Apostila Arduino Basico Documentos Google
Page 7: Apostila Arduino Basico Documentos Google

Semáforo simples Neste exemplo vamos programar um simples semáforo.

Circuito:

Neste circuito temos 3 leds, cada um sendo limitado por um resistor de 330R. Os leds verde, amarelo e vermelho estão conectados respectivamente, nas portas 8, 9 e 10. Saber onde estão ligados é importante para que possamos escrever nosso código. Código: byte ledG = 8; byte ledY = 9; byte ledR = 10; void setup() pinMode(ledG,OUTPUT); pinMode(ledY,OUTPUT); pinMode(ledR,OUTPUT);

void loop() digitalWrite(ledR,HIGH); digitalWrite(ledY,LOW); digitalWrite(ledG,LOW); delay(500); digitalWrite(ledR,LOW); digitalWrite(ledY,HIGH); digitalWrite(ledG,LOW); delay(500); digitalWrite(ledR,LOW); digitalWrite(ledY,LOW); digitalWrite(ledG,HIGH); delay(500);

Nosso código é bastante simples, inicializamos variáveis de controle dos leds, que informam o “endereço” de cada led no arduino; na função setup() configuramos os “endereços” dos leds para o modo saída; na função loop() criamos um ciclo temporizado pela função delay(500). Esta função facilita bastante o controle de tempo para o programador arduino (controle de tempo

Page 8: Apostila Arduino Basico Documentos Google

SEMPRE é um desafio em microcontroladores). delay(1000) é referência para 1s; delay(500) é referência para 0,5s;

Enquanto que as funções digitalWrite(pino,estado) alternam os estados dos leds para ligado (HIGH) ou desligado (LOW).

Controlando o semáforo pela USB O arduino UNO trabalha comunica­se com o computador pela porta USB,

tanto para transmissão do “firmware” como para controle do programa. Vamos então controlar o semáforo enviando dados pela serial. O objetivo

é simples: alterar o tempo do semáforo enviando pela serial. Circuito:

Não muda. Código: byte ledG = 8; byte ledY = 9; byte ledR = 10; int tempo = 1000; char cmd; void setup() pinMode(ledG,OUTPUT); pinMode(ledY,OUTPUT); pinMode(ledR,OUTPUT); Serial.begin(9600);

void loop() digitalWrite(ledR,HIGH); digitalWrite(ledY,LOW); digitalWrite(ledG,LOW); delay(tempo); digitalWrite(ledR,LOW); digitalWrite(ledY,HIGH); digitalWrite(ledG,LOW); delay(tempo); digitalWrite(ledR,LOW); digitalWrite(ledY,LOW); digitalWrite(ledG,HIGH); delay(tempo); if(Serial.available() > 0)

cmd = Serial.read(); switch (cmd) case 'a':

tempo = tempo ­ 50; break;

case 'd': tempo = tempo ­ 50; break;

No código acima, temos a introdução da função Serial, que é inicializada

em setup(), setando a configuração para 9600 bps (taxa de transferência da serial.

Serial.begin(9600); A função Serial.available() detecta se há algo no buffer de entrada da

serial; havendo, o conteúdo é lido e armazenado em uma variável do tipo char. Esta variável é então testada, no caso em um switch/case, e uma ação correspondente é executada.

Page 9: Apostila Arduino Basico Documentos Google

O que mais poderia ser feito para melhorar o código acima ?

Controlado com botões Para microcontrolar coisas, é preciso ler sinais externos, como sensores

ou botões. No exemplo a seguir, dois botões controlam o desligamento e o desligamento do led da placa. Circuito:

O circuito da figura 5 mostra dois botões do tipo táctil; cada botão está ligado a um pino de entrada digital do arduino; enquanto o botão não está pressionado, o nível lógico no pino é baixo (LOW ou 0v); ao pressionar o botão um nível lógico alto (HIGH ou 5v) é colocado no pino. Alguma função será executada quando o botão for pressionado. Código:

byte btnOn = 7; byte btnOff = 8; byte led = 13; boolean flagEstado = LOW; void setup() pinMode(btnOn,INPUT); pinMode(btnOff,INPUT); pinMode(led,OUTPUT); digitalWrite(led,flagEstado);

void loop() if(digitalRead(btnOn))

flagEstado = HIGH; delay(250);

if(digitalRead(btnOff))

flagEstado = LOW; delay(250);

digitalWrite(led,flagEstado);

No código acima, temos a introdução da função de leitura de entrada

digital, que é inicializada em setup() com o comando pinMode(pino,INPUT). INPUT configura uma porta como entrada e posteriormente o comando digitalRead(porta) irá ler o estado desta porta.

Page 10: Apostila Arduino Basico Documentos Google

O circuito está montado para que as portas estejam sempre em estado baixo (LOW) passando para alto (HIGH) quando o botão é pressionado; o programa monitora os botões e quando detecta que um está em alto troca o estado da flagEstado; produzindo o efeito liga/desliga do led. Evidentemente poderíamos fazer o mesmo usando apenas um botão, bastando adequar o programa.

O que mais poderia ser feito para melhorar o código acima ?

Page 11: Apostila Arduino Basico Documentos Google

Saída analógica Antes de prosseguir, é necessário conhcer as diferenças entre os sinais

Digital, Analógico e PWM.

Sinal Analógico A natureza é analógica; tudo ao nosso redor é analógico, pois suas

medidas variam infinitamente entre uma medida e outra. Ex. som (temos uma infinidade de amplitudes de som entre as frequências A e B. Sinal Digital

Computadores e sistemas informatizados em geral são digitais; seus sinais variam entre um estado e outro. O famoso 0 (nível lógico baixo) e 1 (nível lógico alto). Ex. liga/desliga de um led.

A figura 6 mostra a diferença gráfica entre os sinais. O sinal digital é

compreendido normalmente pelo arduino enquanto que o analógico precisa de uma interface especialmente projetada para fazer uma tradução. Sinal PWM ­ Pulse Width Modulation

Modulação por largura de pulso (PWM) é um mecanismo usado por microcontroladores para escrever em uma saída digital um sinal que se assemelha muito a um sinal analógico. Isto nos permite ter uma “emulação” quase perfeita de um sinal analógico. Seu funcionamento baseia­se na velocidade com que um sinal é mantido em “alto” ­ observando a figura 7 podemos ter uma visão mais clara.

Considerando uma tensão máxima de 5v, com 20% de PWM teremos uma tensão de saída de aproximadamente 1v (ver posição da seta na linha azul); ainda, com 50% de PWM teremos uma tensão de saída de aproximadamente 2,5v (ver posição da seta na linha azul); com 80% de PWM teremos uma tensão de saída de aproximadamente 4v (ver posição da seta na linha azul).

Podemos, desta forma atingir praticamente todos os níveis de tensão entre 0v e 5v.

Page 12: Apostila Arduino Basico Documentos Google

Saída analógica ­ PWM O arduino UNO é dotado de 6 saídas PWM que são saídas digitais

especiais, onde podemos emular uma saída analógica. A porta que tem esta característica pode também ser usada como saída digital convencional.

Estas portas PWM devem ser usadas sempre que precisamos controlar um dispositivo analógico (ou que tenha um efeito analógico). Por exemplo um buzzer (para produzir o som); um motor (para controlar a velocidade); um led (para controlar o brilho).

Controlando o Brilho de um led Neste exercício, vamos controlar a intensidade da luz emitida por um led

Circuito:

O circuito acima liga um led simples em uma porta PWM, no pino 9 do

Page 13: Apostila Arduino Basico Documentos Google

arduino. Código:

byte ledPWM = 9; void setup() //nada para ser feito aqui

void loop() for(int valFade = 0; valFade<=255; valFade +=5) analogWrite(ledPWM,valFade); delay(100); for(int valFade = 255; valFade<=0 ; valFade ­=5) analogWrite(ledPWM,valFade); delay(100);

O código acima apresenta a função analogWrite(pino,valor), pino DEVE ser uma saida PWM e valor deve ser um valor entre 0 e 255 (byte). O circuito aplica o PWM e leva para a saída a tensão correspondente.

O que mais poderia ser feito para melhorar o código acima ?

Page 14: Apostila Arduino Basico Documentos Google

Um alarme simples O sensor de alarme (conhecido por reed switch) também pode ser

configurado no arduino; seu funcionamento é muito parecido com o de um botão do tipo táctil apresentado no exemplo anterior, sendo que quando o sensor detectar que houve uma abertura o alarme irá disparar. Circuito:

O circuito acima combina um sensor reed switch, que é ligado da mesma

forma que um botão tátil e um buzzer (pequeno alto­falante), que é ligado em uma saída PWM. Código:

byte sensor = 5; byte buzz = 9; void setup() pinMode(sensor,INPUT); void loop() if(digitalRead(sensor))

disparaAlarme();

void disparaAlarme() analogWrite(buzz,127); delay(100); analogWrite(buzz,200); delay(100);

O código acima combina entrada digital com saída PWM. Já explorados em exemplos anteriores. A novidade está no uso de funções externas a ao

Page 15: Apostila Arduino Basico Documentos Google

loop() e ao seutp(), bastando simplesmente declarar a função e chamar dentro de loop(). O uso de funções segue o mesmo princípio da linguagem C.

O que mais poderia ser feito para melhorar o código acima ?

Entrada analógica O arduino pode monitorar sinais analógicos do mundo exterior.

Evidentemente esta entrada deve ser um valor entre 0v e 5v; em outras palavras, não podemos entrar diretamente com um sinal de 50v nos pinos analógicos ­ senão ……

Para que o arduino possa compreender o sinal que está sendo informado na entrada, o microcontorlador possui um conversor AD (analógico para digital) com resolução de 10bits.

* Quanto mais bits tiver o conversor, mais precisa será sua medida do valor analógico.

Sensor de luminosidade Nesta experiência, vamos fazer a leitura da intensidade e luminosidade

em um ambiente usando um componente sensível a esta variação. Circuito:

O circuito liga um sensor LDR (light dependent resistor), alimentado por

5v, com corrente controlada por um resistor de 10KR, na porta 0 (primeira entrada analógica).

Page 16: Apostila Arduino Basico Documentos Google

Código:

byte sensorLRD = A0; int valLido; void setup() Serial.begin(9600);

void loop() valLido = analogRead(sensorLDR); Serial.println(valLido); delay(500);

O sensor LDR está ligado de forma a inserir na porta 0 um valor que

varia entre 0v e 5v; ao ler o valor na porta 0 este valor passa por uma conversão para digital em uma matriz de 10bits. O comando analogRead(pino) faz a leitura do pino analógico e coloca em uma variável do tipo inteira; a função Serial.println(varivavel) mostra este valor lido no monitor serial.

Importante ressaltar que o valor lido é uma representação da tensão (analógica) lida no pino 0; no caso não está sendo feita nenhum tipo de conversão de unidade.

O que mais poderia ser feito para melhorar o código acima ?

Lendo um potenciômetro Nesta experiência, vamos fazer a leitura da variação causada por um

potenciômetro. Circuito:

Page 17: Apostila Arduino Basico Documentos Google

O potenciômetro do circuito é um resitor que varia seu valor entre 0 e 10KR; esta variação faz com que a tensão que saia do pino do meio (e que está ligado na entrada analógica ­ pino 0 ) varie entre 0v e 5v. Código:

byte poten= A0; int valLido; void setup() Serial.begin(9600);

void loop() valLido = analogRead(poten); Serial.print(valLido,DEC); delay(500);

O códgio é bastant simples; lê o valor analógico no pino 0 e envia pela serial a cada ½s.

O que mais poderia ser feito para melhorar o código acima ?

Lendo a temperatura Nesta experiência vamos usar um sensor de temperatura bastante

simples e fácil de manipular.

Circuito:

O sensor de temperatura LM35 é provávelmente um dos componentes

mais simples de se conectar ao arduino; sua alimentação não precisa de resistor limitador, bastando ligar diretamente nos pinos de 5v e gnd. Os dados lidos são entregues em uma saída analógica com variação de 10mV/ grau

Page 18: Apostila Arduino Basico Documentos Google

célcius. Código:

byte lm35= A0; int valLido; int temp; void setup() Serial.begin(9600);

void loop() valLido = analogRead(lm35); Serial.println(valLido); delay(500);

Page 19: Apostila Arduino Basico Documentos Google

Bibliografia ARDUINO. Guia de referência. Disponível em: <http: arduino.cc/en/Reference/HomePage>. Acesso em: 29 out. 2013. ARDUINIZANDO. Brincando com o Arduino. Disponível em: <http://arduinizando.blogspot.com.br>. Acesso em: 29 out. 2013. LABDEGARAGEM. Portal Lab de Garagem (arduino, eletrônica, robotica). Disponível em: <http: labdegaragem.com>. Acesso em: 29 out. 2013. WEBTRONICO. Blog Projetos eletrônicos. Disponível em: <http://blog.webtronico.com>. Acesso em: 29 out. 2013.

Page 20: Apostila Arduino Basico Documentos Google