Programação em Arduino


Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
Financiamento:

http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
Execução:

LARM
Laboratório de Automação
e Robótica Móvel

Oficina de Robótica

Módulo Básico

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Material produzido para o projeto Oficina
de Robótica por:
.Anderson Luiz Fernandes Perez
.Renan Rocha Darós

 

.Contatos:
.Universidade Federal de Santa Catarina –
Laboratório de Automação e Robótica Móvel
.anderson.perez (at) ufsc.br
.renanrdaros (at) hotmail.com

 

 

.http://oficinaderobotica.ufsc.br

 

UFSC – Oficina de Robótica – @2013

2

Apresentação

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Introdução
.Microcontroladores
.Arduino UNO
.Ambiente de desenvolvimento
.Funções setup() e loop()
.Monitor Serial
.Portas digitais e analógicas
.Programando em Arduino
.Expandindo as funcionalidades do
Arduino

 

UFSC – Oficina de Robótica – @2013

3

Sumário

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.O Arduino é uma plataforma utilizada para
prototipação de circuitos eletrônicos.
.O projeto do Arduino teve início em 2005 na
cidade de Ivrea, Itália.
.O Arduino é composto por uma placa com
microcontrolador Atmel AVR e um ambiente de
programação baseado em Wiring e C++.
.Tanto o hardware como o ambiente de
programação do Arduino são livres, ou seja,
qualquer pessoa pode modificá-los e
reproduzi-los.
.O Arduino também é conhecido de plataforma
de computação física.

 

UFSC – Oficina de Robótica – @2013

4
Introdução

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

http://arduino.cc/en/uploads/Main/Esplora_thumb.png
http://arduino.cc/en/uploads/Main/ArduinoMega2560_R3_thumb.jpg
http://arduino.cc/en/uploads/Main/Lilypad_thumb_3.jpg
http://arduino.cc/en/uploads/Main/ArduinoMicro_thumb.jpg
.Tipos de Arduino
.Existem vários tipos de Arduino com especificidades de
hardware. O site oficial do Arduino lista os seguintes
tipos:
.Arduino UNO
.Arduino Leonardo
.Arduino Due
.Arduino Esplora
.Arduino Mega
.Arduino Mega ADK
.Arduino Ethernet
.Arduino Mini
.Arduino LilyPad
.Arduino Micro
.Arduino Nano
.Arduino ProMini
.Arduino Pro
.Arduino Fio

 

 

 

UFSC – Oficina de Robótica – @2013

5
Introdução
http://arduino.cc/en/uploads/Main/ArduinoFio_thumb.jpg
http://arduino.cc/en/uploads/Main/ArduinoPro_thumb.jpg
http://arduino.cc/en/uploads/Main/ArduinoProMini_thumb.jpg
http://arduino.cc/en/uploads/Main/ArduinoNano_thumb.jpg
http://arduino.cc/en/uploads/Main/ArduinoMini_r05_thumb.jpg
http://arduino.cc/en/uploads/Main/ArduinoEthernet_thumb.jpg
http://arduino.cc/en/uploads/Main/Leonardo_thumb_a.jpg

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Referências na WEB:
.O site oficial do Arduino é http://arduino.cc
.Um documentário sobre o Arduino pode ser
assistido em:
http://arduinothedocumentary.org/

 

 

UFSC – Oficina de Robótica – @2013

6
Introdução
Arduino The Documentary Poster (Flickr Link)

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

http://www.nkcelectronics.com/assets/images/atmega328p.jpg
.Um microcontrolador é um CI que
incorpora várias funcionalidades.
.Alguns vezes os microcontroladores são
chamados de “computador de um único
chip”.
.São utilizados em diversas aplicações
de sistemas embarcados, tais como:
carros, eletrodomésticos, aviões,
automação residencial, etc.

 

UFSC – Oficina de Robótica – @2013

7
Microcontroladores

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Processamento de dados

 

UFSC – Oficina de Robótica – @2013

8
Microcontroladores
Entrada Processamento

Saída
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vista da placa do Arduino UNO Rev 3
(frente e verso)

 

UFSC – Oficina de Robótica – @2013 9

Arduino UNO
http://arduino.cc/en/uploads/Main/ArduinoUno_r2_front.jpg
http://arduino.cc/en/uploads/Main/ArduinoUno_R3_Back_450px.jpg

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Características
.Microcontrolador: ATmega328
.Tensão de operação: 5V
.Tensão recomendada (entrada): 7-12V
.Limite da tensão de entrada: 6-20V
.Pinos digitais: 14 (seis pinos com saída PWM)
.Entrada analógica: 6 pinos
.Corrente contínua por pino de entrada e saída: 40
mA
.Corrente para o pino de 3.3 V: 50 mA
.Quantidade de memória FLASH: 32 KB (ATmega328)
onde 0.5 KB usado para o bootloader
.Quantidade de memória SRAM: 2 KB (ATmega328)
.Quantidade de memória EEPROM: 1 KB
(ATmega328)
.Velocidade de clock: 16 MHz

 

 

UFSC – Oficina de Robótica – @2013 10
Arduino UNO

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Alimentação
.O Arduino UNO pode ser alimentado pela
porta USB ou por uma fonte externa DC.
.A recomendação é que a fonte externa seja
de 7 V a 12 V e pode ser ligada diretamente
no conector de fonte ou nos pinos Vin e Gnd.

 

 

UFSC – Oficina de Robótica – @2013

11
Arduino UNO

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.O ambiente de desenvolvimento do
Arduino (IDE) é gratuito e pode ser
baixado no seguinte endereço:
arduino.cc.
.As principais funcionalidades do IDE do
Arduino são:
.Escrever o código do programa
.Salvar o código do programa
.Compilar um programa
.Transportar o código compilado para a placa
do Arduino

 

 

UFSC – Oficina de Robótica – @2013

12
Ambiente de desenvolvimento

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Interface principal do ambiente de
desenvolvimento

 

UFSC – Oficina de Robótica – @2013

13
Ambiente de desenvolvimento

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.As duas principais partes (funções) de
um programa desenvolvido para o
Arduino são:
.setup(): onde devem ser definidas algumas
configurações iniciais do programa. Executa
uma única vez.
.loop(): função principal do programa. Fica
executando indefinidamente.

 

.Todo programa para o Arduino deve ter
estas duas funções.

 

UFSC – Oficina de Robótica – @2013

14
Funções setup() e loop()

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo 1: formato das funções setup()
e loop()

 

UFSC – Oficina de Robótica – @2013

15
Funções setup() e loop()
void setup()
{
}
void loop()
{
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo 2: exemplo funções setup() e
loop()

 

UFSC – Oficina de Robótica – @2013 16

Funções setup() e loop()
void setup()

{

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(1000);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.O monitor serial é utilizado para
comunicação entre o Arduino e o
computador (PC).
.O monitor serial pode ser aberto no
menu tools opção serial monitor, ou
pressionando as teclas CTRL + SHIFT +
M.
.As principais funções do monitor serial
são: begin(), read(), write(), print(),
println() e available().

 

UFSC – Oficina de Robótica – @2013

17
Monitor Serial

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo: imprimindo uma mensagem
de boas vindas no monitor serial

 

UFSC – Oficina de Robótica – @2013 18
Monitor Serial
void setup()

{

Serial.begin(9600); // Definição da velocide de transmissão

}

void loop()

{

Serial.println(“Ola, seu nome, seja bem vindo ao maravilhoso mundo do Arduino”);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.O Arduino possui tanto portas digitais
como portas analógicas.
.As portas servem para comunicação
entre o Arduino e dispositivos externos,
por exemplo: ler um botão, acender um
led ou uma lâmpada.
.Conforme já mencionado, o Arduino
UNO, possui 14 portas digitais e 6
portas analógicas (que também podem
ser utilizadas como portas digitais).

 

UFSC – Oficina de Robótica – @2013 19

Portas digitais e analógicas

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Portas Digitais
.As portas digitais trabalham com valores
bem definidos, ou seja, no caso do Arduino
esses valores são 0V e 5V.
.0V indica a ausência de um sinal e 5V indica
a presença de um sinal.
.Para escrever em uma porta digital basta
utilizar a função digitalWrite(pin, estado).
.Para ler um valor em uma porta digital basta
utilizar a função digitalRead(pin).

 

 

UFSC – Oficina de Robótica – @2013 20
Portas digitais e analógicas

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Portas Analógicas
.As portas analógicas são utilizadas para entrada
de dados.
.Os valores lidos em uma porta analógica variam
de 0V a 5V.
.Para ler uma valor em uma porta analógica basta
utilizar a função analogRead(pin).
.Os conversores analógicos-digitais (ADC) do
Arduino são de 10 bits.
.Os conversores ADC (do Inglês Analog Digital
Converter) permitem uma precisão de 0.005V ou
5mV.
.Os valores lidos em uma porta analógica variam
de 0 a 1023 (10 bits), onde 0 representa 0V e
1023 representa 5V.

 

 

UFSC – Oficina de Robótica – @2013

21
Portas digitais e analógicas

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Para definir uma porta como entrada ou
saída é necessário explicitar essa
situação no programa.
.A função pinMode(pin, estado) é
utilizada para definir se a porta será de
entrada ou saída de dados.
.Exemplo:
.Define que a porta 13 será de saída
.pinMode(13, OUTPUT)

 

.Define que a porta 7 será de entrada
.pinMode(7, INPUT)

 

 

 

UFSC – Oficina de Robótica – @2013

22
Portas digitais e analógicas

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Algoritmo
.Sequência de passos que visa atingir um
objetivo bem definido.
.Exemplo: Receita caseira

 

 

UFSC – Oficina de Robótica – @2013

23
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Constantes e Variáveis
.Um dado é constante quando não sofre
nenhuma variação no decorrer do tempo.
.Do início ao fim do programa o valor
permanece inalterado.
.Exemplos:
.10
.“Bata antes de entrar!”
.-0,58

 

 

 

UFSC – Oficina de Robótica – @2013

24
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Constantes e Variáveis
.A criação de constantes no Arduino pode ser
feita de duas maneiras:
.Usando a palavra reservada const
.Exemplo:
.const int x = 100;

 

 

.Usando a palavra reservada define
.Exemplo:
.#define X 100

 

 

 

 

 

UFSC – Oficina de Robótica – @2013

25
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Constantes e Variáveis
.No Arduino existem algumas constantes
previamente definidas e são consideradas
palavras reservadas.
.As constantes definidas são:
.true – indica valor lógico verdadeiro
.false – indica valor lógico falso
.HIGH – indica que uma porta está ativada, ou seja,
está em 5V.
.LOW – indica que uma porta está desativada, ou seja,
está em 0V.
.INPUT – indica que uma porta será de entrada de
dados.
.OUTPUT – indica que uma porta será de saída de
dados.

 

 

 

UFSC – Oficina de Robótica – @2013

26
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Constantes e Variáveis
.Variáveis são lugares (posições) na memória
principal que servem para armazenar dados.
.As variáveis são acessadas através de um
identificador único.
.O conteúdo de uma variável pode variar ao longo
do tempo durante a execução de um programa.
.Uma variável só pode armazenar um valor a cada
instante.
.Um identificador para uma variável é formado por
um ou mais caracteres, obedecendo a seguinte
regra: o primeiro caractere deve,
obrigatoriamente, ser uma letra.

 

 

UFSC – Oficina de Robótica – @2013

27
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Constantes e Variáveis
.ATENÇÃO!!!
.Um identificador de uma variável ou
constante não pode ser formado por
caracteres especiais ou palavras
reservadas da linguagem.

 

 

 

UFSC – Oficina de Robótica – @2013

28
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Tipos de Variáveis no Arduino

 

UFSC – Oficina de Robótica – @2013

29
Programando em Arduino
Tipo Definição

void

Indica tipo indefinido. Usado geralmente para informar que uma
função não retorna nenhum valor.

boolean

Os valores possíveis são true (1) e false (0). Ocupa um byte de
memória.

char

Ocupa um byte de memória. Pode ser uma letra ou um número.
A faixa de valores válidos é de -128 a 127.

unsigned char

O mesmo que o char, porém a faixa de valores válidos é de 0 a
255.

byte

Ocupa 8 bits de memória. A faixa de valores é de 0 a 255.

int

Armazena números inteiros e ocupa 16 bits de memória (
2bytes). A faixa de valores é de -32.768 a 32.767.

unsigned int

O mesmo que o int, porém a faixa de valores válidos é de 0 a
65.535.

word

O mesmo que um unsigned int.

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Tipos de Variáveis no Arduino

 

UFSC – Oficina de Robótica – @2013

30
Programando em Arduino
Tipo

Definição

long

Armazena números de até 32 bits (4 bytes). A faixa de valores é
de -2.147.483.648 até 2.147.483.647.

unsigned long

O mesmo que o long, porém a faixa de valores é de 0 até
4.294.967.295.

short

Armazena número de até 16 bits (2 bytes). A faixa de valores é
de -32.768 até 32.767.

float

Armazena valores de ponto flutuante (com vírgula) e ocupa 32
bits (4 bytes) de memória. A faixa de valores é de
-3.4028235E+38 até 3.4028235E+38

double

O mesmo que o float.

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Declaração de Variáveis e Constantes
.Exemplo: declaração de duas constantes e
uma variável

 

 

UFSC – Oficina de Robótica – @2013

31
Programando em Arduino
#define BOTAO 10 // constante
const int pin_botao = 13; // constante
void setup()
{
}
void loop()
{
int valor_x; // variável
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Atribuição de valores a variáveis e
constantes
.A atribuição de valores a variáveis e
constantes é feito com o uso do operador de
atribuição =.
.Exemplos:
.int valor = 100;
.const float pi = 3.14;

 

.Atenção!!!
.O operador de atribuição não vale para o
comando #define.

 

 

 

UFSC – Oficina de Robótica – @2013 32

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Atribuição de valores a variáveis e
constantes
.Exemplo: lendo dados do monitor serial

 

 

UFSC – Oficina de Robótica – @2013 33

Programando em Arduino
int valor = 0;
void setup()
{
Serial.begin(9600); // Definição da velocidade de transmissão
}
void loop()
{
Serial.println(“Digite um numero “);
valor = Serial.read(); // leitura de dados do monitor serial
Serial.print(“O numero digitado foi “);
Serial.write(valor);
Serial.println();
delay(2000); // Aguarda por 2 segundos
}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Operadores
.Em uma linguagem de programação existem
vários operadores que permitem operações
do tipo:
.Aritmética
.Relacional
.Lógica
.Composta

 

 

 

UFSC – Oficina de Robótica – @2013 34
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Operadores aritméticos

 

UFSC – Oficina de Robótica – @2013 35
Programando em Arduino
Símbolo

Função

+

Adição

Subtração

*

Multiplicação

/

Divisão

%

Módulo (resto da divisão inteira)

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Operadores relacionais

 

UFSC – Oficina de Robótica – @2013

36
Programando em Arduino
Símbolo

Função

>

Maior

<

Menor

>=

Maior ou igual

<=

Menor ou igual

==

Igual

!=

Diferente

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Operadores lógicos

 

UFSC – Oficina de Robótica – @2013

37
Programando em Arduino
Símbolo

Função

&&

E (and)

||

OU (or)

!

Não (not)

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Operadores compostos

 

UFSC – Oficina de Robótica – @2013

38
Programando em Arduino
Símbolo

Função

++

Incremento

Decremento

+=

Adição com atribuição

-=

Subtração com atribuição

*=

Multiplicação com atribuição

/=

Divisão com atribuição

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comentários
.Muitas vezes é importante comentar alguma parte
do código do programa.
.Existem duas maneiras de adicionar comentários a
um programa em Arduino.
.A primeira é usando //, como no exemplo abaixo:
.// Este é um comentário de linha

 

.A segunda é usando /* */, como no exemplo
abaixo:
./* Este é um comentário de bloco. Permite acrescentar
comentários com mais de uma linha */

 

.Nota:
.Quando o programa é compilado os comentários são
automaticamente suprimidos do arquivo executável,
aquele que será gravado na placa do Arduino.

 

 

 

UFSC – Oficina de Robótica – @2013

39
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Seleção
.Em vários momentos em um programa
precisamos verificar uma determinada
condição afim de selecionar uma ação ou
ações que serão executadas.
.Um comando de seleção também é
conhecido por desvio condicional, ou seja,
dada um condição, um parte do programa é
executada.
.Os comandos de seleção podem ser do tipo:
.Seleção simples
.Seleção composta
.Seleção de múltipla escolha

 

 

 

UFSC – Oficina de Robótica – @2013

40
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção simples
.Um comando de seleção simples avalia uma
condição, ou expressão, para executar uma ação
ou conjunto de ações.
.No Arduino o comando de seleção simples é:

 

 

if (expr) {

cmd

}

.onde:
.expr – representa uma expressão a ser avaliada que
pode ser do tipo lógica, relacional ou aritmética. O
resultado da avaliação de uma expressão é sempre
um valor lógico.
.cmd – comando(s) a ser executado.

 

 

 

UFSC – Oficina de Robótica – @2013

41
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção simples
.Exemplo: acendendo leds pelo monitor serial

 

 

UFSC – Oficina de Robótica – @2013

42
Programando em Arduino
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;
char led;
void setup()
{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) {
led = Serial.read();
if (led == ‘R’) { // Led vermelho – red
digitalWrite(led_vermelho, HIGH); // Acende led
}
if (led == ‘G’) { // Led verde – green
digitalWrite(led_verde, HIGH); // Acende led
}
if (led == ‘Y’) { // Led amarelo – yellow
digitalWrite(led_amarelo, HIGH); // Acende led
}
}
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção composta
.Um comando de seleção composta é complementar ao comando
de seleção simples.
.O objetivo é executar um comando mesmo que a expressão
avaliada pelo comando if (expr) retorne um valor falso.
.No Arduino o comando de seleção composta é:

 

 

if (expr) {

cmd;

}

else {

cmd;

}

.onde:
.expr – representa uma expressão a ser avaliada que pode ser
do tipo lógica, relacional ou aritmética. O resultado da
avaliação de uma expressão é sempre um valor lógico.
.cmd – comando(s) a ser executado.

 

 

 

UFSC – Oficina de Robótica – @2013 43

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção composta
.Exemplo: acendendo e apagando leds pelo
monitor serial

 

 

UFSC – Oficina de Robótica – @2013 44

Programando em Arduino
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;
char led;
void setup()
{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção composta
.Exemplo: acendendo e apagando leds pelo monitor
serial

 

 

UFSC – Oficina de Robótica – @2013 45
Programando em Arduino
void loop()

{

if (Serial.available()) {

led = Serial.read();

if (led == ‘R’) { // Led vermelho – red

digitalWrite(led_vermelho, HIGH); // Acende led

}

else {

if (led == ‘r’) {

digitalWrite(led_vermelho, LOW); // Apaga led

}

}

if (led == ‘G’) { // Led verde – green

digitalWrite(led_verde, HIGH); // Acende led

}

else {

if (led == ‘g’) {

digitalWrite(led_verde, LOW); // Apaga led

}

}

if (led == ‘Y’) { // Led amarelo – yellow

digitalWrite(led_amarelo, HIGH); // Acende led

}

else {

if (led == ‘y’) {

digitalWrite(led_amarelo, LOW); // Apaga led

}

}

}

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção de múltipla escolha
.Na seleção de múltipla escolha é possível avaliar mais de um valor.
.No Arduino o comando de seleção de múltipla escolha é:

 

 

switch (valor) {

case x: cmd1;

break;

case y: cmd2;

break;

default: cmd;

}

.onde:
.valor – é um dado a ser avaliado. É representado por uma variável de
memória.
.cmdx – comando a ser executado.
.case– indica a opção a ser executada.
.default – comando padrão que deverá ser executado se nenhuma outra
escolha (case) tiver sido selecionada.

 

 

 

UFSC – Oficina de Robótica – @2013 46

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção de múltipla escolha
.Exemplo: acendendo e apagando leds pelo monitor
serial

 

 

UFSC – Oficina de Robótica – @2013 47
Programando em Arduino
const int led_vermelho = 5;

const int led_verde = 6;

const int led_amarelo = 7;

char led;

void setup()

{

pinMode(led_vermelho, OUTPUT);

pinMode(led_verde, OUTPUT);

pinMode(led_amarelo, OUTPUT);

Serial.begin(9600);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comando de seleção de múltipla escolha
.Exemplo: acendendo e apagando leds pelo monitor
serial

 

 

UFSC – Oficina de Robótica – @2013 48
Programando em Arduino
void loop()

{

if (Serial.available()) {

led = Serial.read();

switch (led) {

case ‘R’: digitalWrite(led_vermelho, HIGH); // Acende led

break;

case ‘r’: digitalWrite(led_vermelho, LOW); // Apaga led

break;

case ‘G’: digitalWrite(led_verde, HIGH); // Acende led

break;

case ‘g’: digitalWrite(led_verde, LOW); // Apaga led

break;

case ‘Y’: digitalWrite(led_amarelo, HIGH); // Acende led

break;

case ‘y’: digitalWrite(led_amarelo, LOW); // Apaga led

break;

default: Serial.println(“Nenhum led selecionado!!!”);

}

}

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo um botão
.Para ler um botão basta ligá-lo em uma
porta digital.
.Para que um circuito com botão funcione
adequadamente, ou seja, sem ruídos, é
necessário o uso de resistores pull-down ou
pull-up.
.Os resistores pull-down e pull-up garantem
que os níveis lógicos estarão próximos às
tensões esperadas.

 

 

UFSC – Oficina de Robótica – @2013 49
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

Resistor
pull-down
10K
.Lendo um botão com resistor pull-down
.Ligação no protoboard

 

 

UFSC – Oficina de Robótica – @2013 50

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo um botão com resistor pull-
down
.Programa

 

 

UFSC – Oficina de Robótica – @2013 51
Programando em Arduino
const int botao = 8;

boolean vlr_btn = false;

void setup()

{

pinMode(botao, INPUT);

Serial.begin(9600);

}

void loop()

{

vlr_btn = digitalRead(botao);

if (vlr_btn == true) {

Serial.println(“Botao pressionado!!!”);

}

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

Resistor
pull-up
10K
.Lendo um botão com resistor pull-up
.Ligação no protoboard

 

 

UFSC – Oficina de Robótica – @2013

52

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo um botão com resistor pull-up
.Programa

 

 

UFSC – Oficina de Robótica – @2013 53

Programando em Arduino
const int botao = 8;
boolean vlr_btn = false;
void setup()
{
pinMode(botao, INPUT);
Serial.begin(9600);
}
void loop()
{
vlr_btn = digitalRead(botao);
if (vlr_btn == false) {
Serial.println(“Botao pressionado!!!”);
}
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Nota
.O Arduino possui resistores pull-up nas
portas digitais, e estes variam de 20K a 50K.
.Para ativar os resistores pull-up de uma
porta digital basta defini-la como entrada e
colocá-la em nível alto (HIGH) na função
setup().
.pinMode(pin, INPUT)
.digitalWrite(pin, HIGH)

 

.Para desativar os resistores pull-up de uma
porta digital basta colocá-la em nível baixo.
.digitalWrite(pin, LOW)

 

 

 

UFSC – Oficina de Robótica – @2013 54

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

fig_slide_55.png
.Exemplo: ativando o resistor pull-up de
uma porta digital
.Quanto o botão for pressionado o led irá
apagar

 

 

UFSC – Oficina de Robótica – @2013 55
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo: ativando o resistor pull-up de
uma porta digital
.Quanto o botão for pressionado o led irá
apagar

 

 

UFSC – Oficina de Robótica – @2013

56
Programando em Arduino
const int led = 7;

const int botao = 10;

void setup()

{

pinMode(led, OUTPUT);

pinMode(botao, INPUT);

digitalWrite(botao, HIGH); // Ativa resistor pull-up

}

void loop()

{

int valor = digitalRead(botao);

if (valor == HIGH) {

digitalWrite(led, HIGH); // Acende o led

}

else {

digitalWrite(led, LOW); // Apaga o led

}

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo: ativando o resistor pull-up de
uma porta digital
.Nota:
.O Arduino possui uma constante chamada
INPUT_PULLUP que define que a porta será de
entrada e o resistor pull-up da mesma será
ativado.
.Exemplo:

 

 

 

void setup()

{

pinMode(10, INPUT_PULLUP);

}

UFSC – Oficina de Robótica – @2013 57
Programando em Arduino
Define a porta 10 como entrada de
dados e ativa o resistor pull-up.

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.O Arduino UNO possui 6 (seis) portas analógicas.
.Por padrão todas as portas analógicas são
definidas como entrada de dados, desta forma
não é necessário fazer esta definição na função
setup().
.O conversor analógico-digital do Arduino é de 10
(dez) bits, logo a faixa de valores lidos varia de 0
a 1023.
.As portas analógicas no Arduino UNO são
identificadas como A0, A1, A2, A3, A4 e A5. Estas
portas também podem ser identificadas por 14
(A0), 15 (A1), 16 (A2), 17 (A3), 18 (A4) e 19 (A5).

 

 

UFSC – Oficina de Robótica – @2013

58
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo dados de um potenciômetro

 

 

UFSC – Oficina de Robótica – @2013

59
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo dados de um potenciômetro

 

 

UFSC – Oficina de Robótica – @2013

60
Programando em Arduino
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val = analogRead(0);
Serial.println(val);
}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo dados de um potenciômetro
e acionando um LED

 

 

UFSC – Oficina de Robótica – @2013 61

Programando em Arduino
fig_slide_61.png

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo dados de um potenciômetro
e acionando um LED

 

 

UFSC – Oficina de Robótica – @2013 62

Programando em Arduino
const int led = 6;
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int val = analogRead(0);
Serial.println(val);
digitalWrite(led, HIGH);
delay(val);
digitalWrite(led, LOW);
delay(val);
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo um sensor de temperatura
.O sensores de temperatura, termistores, podem
ser do tipo NTC – Negative Temperature
Coefficient ou PTC – Positive Temperature
Coefficient.
.Nos sensores do tipo NTC a resistência diminui
com o aumento da temperatura.
.Nos sensores do tipo PTC a resistência aumenta
com o aumento da temperatura.

 

 

 

UFSC – Oficina de Robótica – @2013 63
Programando em Arduino
http://4.bp.blogspot.com/-_Hh3stwQkjU/T6vVq4HcjLI/AAAAAAAAANs/kEeznJH0CWc/s1600/ntc+termistor.jpg

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo um sensor de temperatura
.Equação de Steinhart-Hart
.onde:
.T = temperatura em Kelvin
.R = resistência em ohms
.a, b, c: constantes definidas pelo fabricante do sensor

 

 

.Esta equação é utilizada para transformar os valores
lidos pelo sensor em temperatura na escala Kelvin.
.Para encontrar a temperatura em Celsius basta subtrair
o valor 273.15 da temperatura em Kelvin.

 

 

 

UFSC – Oficina de Robótica – @2013 64
Programando em Arduino
1/T = a + b * ln(R) + c * (ln(R))3
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo um sensor de temperatura

 

 

UFSC – Oficina de Robótica – @2013 65
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo um sensor de temperatura

 

 

UFSC – Oficina de Robótica – @2013 66
Programando em Arduino
/*
Programa que utiliza a equação de Steinhart-Hart
1/T = a + b * ln(R) + c * (ln(R))3
*/
#include <math.h>
const int sensor = A0;
double tempCelsius(int valorNTC)
{
double temp;
temp = log(((10240000 / valorNTC) – 10000)); // Considerando resistência de 10K
temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * temp * temp ))* temp );
temp = temp – 273.15; // Converte Kelvin para Celsius
return temp;
}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Lendo Portas Analógicas
.Exemplo: lendo um sensor de temperatura

 

 

UFSC – Oficina de Robótica – @2013 67
Programando em Arduino
void setup()

{

Serial.begin(9600);

}

void loop()

{

int valor = analogRead(sensor);

double c = tempCelsius(valor);

Serial.println(valor);

Serial.println(c);

delay(100);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Muitas vezes é necessário repetir uma
determinada instrução mais de uma vez.
.Os comandos de repetição mantêm em um
“laço” uma instrução ou conjunto de
instruções.
.Os comandos de repetição do Arduino são:
.Baseado em um contador
.Baseado em uma expressão com teste no início
.Baseado em uma expressão com teste no final

 

 

 

UFSC – Oficina de Robótica – @2013 68
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em um Contador
.Este tipo de comando de repetição deve ser utilizado
quando se sabe a quantidade de vezes que uma
determinada instrução deve ser executada.
.No Arduino o comando de repetição baseado em um
contador é:

 

 

 

for (contador início; expr; incremento do contador) {

cmd;

}

.onde:
.contador = é uma variável do tipo inteiro (int)
.expr = é uma expressão relacional
.incremento do contador = passo de incremento do
contador

 

 

 

 

UFSC – Oficina de Robótica – @2013 69
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em um Contador
.Exemplo: escrevendo uma mensagem x vezes
no monitor serial

 

 

 

UFSC – Oficina de Robótica – @2013

70
Programando em Arduino
int vezes = 10; // Quantidade de vezes que a mensagem será impressa no monitor serial
int executado = 0; // Quantidade de mensagens já impressas
void setup()
{
Serial.begin(9600);
}
void loop()
{
for (executado; executado < vezes; executado++) {
Serial.println(“Testando o comando de repeticao for()”);
}
}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em uma expressão com teste no início
.Este tipo de comando de repetição avalia uma expressão, caso seja
verdadeira, a(s) intrução(ções) dentro do “laço” permanecem
executando.
.No Arduino o comando de repetição baseado em uma expressão com
teste no início é:

 

 

 

while (expr) {

cmd;

}

.onde:
.expr – é uma expressão que pode ser lógica, relacional ou
aritmética. A permanência de execução do “laço” é garantida
enquanto a expressão for verdadeira.

 

.Nota:
.Neste tipo de comando de repetição a avaliação da expressão é
realizada no início do laço, ou seja, pode ser que o cmd não execute
nenhuma vez.

 

 

 

 

UFSC – Oficina de Robótica – @2013 71
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em uma expressão com teste no
início
.Exemplo:

 

 

 

UFSC – Oficina de Robótica – @2013 72

Programando em Arduino
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}
void loop()
{
// Teste do comando while()
while (digitalRead(botao)); // Espera até que o botão seja pressionado
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em uma expressão com teste no final
.Este tipo de comando de repetição avalia uma expressão, caso
seja verdadeira, a(s) intrução(ções) dentro do “laço”
permanecem executando.
.No Arduino o comando de repetição baseado em uma
expressão com teste no final é:

 

 

 

do {

cmd;

} while (expr) ;

.onde:
.expr – é uma expressão que pode ser lógica, relacional ou
aritmética. A permanência de execução do “laço” é garantida
enquanto a expressão for verdadeira.

 

.Nota:
.Neste tipo de comando de repetição a avaliação da expressão é
realizada no final do laço, ou seja, é garatido que pelo menos uma
vez o cmd será executado.

 

 

 

 

UFSC – Oficina de Robótica – @2013 73
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Comandos de Repetição
.Baseado em uma expressão com teste no
final
.Exemplo:

 

 

 

UFSC – Oficina de Robótica – @2013 74
Programando em Arduino
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}
void loop()
{
// Teste do comando do while()
do {
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
delay(2000);
} while (digitalRead(botao)); // Enquanto o botão não for pressionado, pisca o led
}
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Uma variável escalar pode armazenar muitos
valores ao longo da execução do programa,
porém não ao mesmo tempo.
.Existem variáveis que podem armazenar
mais de um valor ao mesmo tempo. Essas
variáveis são conhecidas como “variáveis
compostas homogêneas”.
.No Arduino é possível trabalhar com dois
tipos de variáveis compostas homogêneas,
vetores e matrizes.

 

 

UFSC – Oficina de Robótica – @2013 75
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Vetor
.A declaração de um vetor é feita da mesma
maneira que uma variável escalar, entretanto é
necessário definir a quantidade de itens do
vetor.
.Exemplo:
.int vetor[4];

 

.Vetor com 4 (quatro) elementos do tipo inteiro.

 

 

 

UFSC – Oficina de Robótica – @2013 76
Programando em Arduino
7 8

1 3
0 1

3

2

Vetor

Dado armazenado

Índices

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Vetor
.Para atribuir um valor a uma determinada
posição do vetor, basta usar o índice, ou seja, a
posição onde o valor será armazenado no
vetor.
.Exemplo:
.vetor[0] = 7;
.Atribui o valor 7 a posição 0 do vetor.

 

 

 

 

UFSC – Oficina de Robótica – @2013 77
Programando em Arduino
7

8

1

3

0

1

3

2

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Vetor
.Para acessar um determinado valor em uma
posição do vetor, basta usar o índice, ou seja, a
posição onde o valor está armazenado no vetor.
.Exemplo:
.digitalWrite(vetor[0], HIGH);
.Ativa a porta cujo número está definido na
posição 0 do vetor.

 

 

 

 

UFSC – Oficina de Robótica – @2013

78

Programando em Arduino
7

8

1

3

0

1

3

2

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Vetor
.Exemplo: acendendo e apagando leds cujas
portas estão definidas em um vetor

 

 

 

UFSC – Oficina de Robótica – @2013

79

Programando em Arduino
int leds[5] = {2, 3, 4, 5, 6}; // Define as portas onde estão os leds

void setup()

{

int i;

for (i = 0; i < 5; i++) {

pinMode(leds[i], OUTPUT); // Define as portas como saída

}

}

void loop()

{

int i;

for (i = 0; i < 5; i++) {

digitalWrite(leds[i], HIGH); // Acende os leds

delay(1000);

}

for (i = 0; i < 5; i++) {

digitalWrite(leds[i], LOW); // Apaga os leds

delay(1000);

}

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Matriz
.Uma matriz é similar a um vetor, entretanto pode ser formada
por duas ou mais dimensões.
.Uma matriz bidimensional possui um determinado número de
linhas e de colunas.
.Exemplo:
.int matriz[4][6];

 

.Matriz com 4 (quatro) linhas e 6 (seis) colunas de elementos
do tipo inteiro.

 

 

 

UFSC – Oficina de Robótica – @2013

80

Programando em Arduino
1

2 3

4

5

6

7

8

9

10

11

12

13 14

15

16

17

18
19

20

21

22

23

24

0

1

2

3

4 5

0

1

2

3
Índices

Valor armazenado
na posição [3,0]

linhas

 

colunas

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Matriz
.Para atribuir um valor a uma determinada
posição da matriz, basta usar o índice da linha
e o índice da coluna, ou seja, a posição onde o
valor será armazenado na matriz.
.Exemplo:
.matriz[1][2] = 9;
.Atribui o valor 9 a posição 1 (linha), 2 (coluna) da
matriz.

 

 

 

 

UFSC – Oficina de Robótica – @2013

81

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Matriz
.Para acessar um determinado valor em uma
posição da matriz, basta usar o índice da linha
e o da coluna, ou seja, a posição onde o valor
está armazenado na matriz.
.Exemplo:
.digitalWrite(matriz[0][0], HIGH);
.Ativa a porta cujo número está definido na
posição 0 (linha), 0 (coluna) da matriz.

 

 

 

 

UFSC – Oficina de Robótica – @2013

82

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Vetores e matrizes
.Matriz
.Exemplo: acendendo e apagando leds
aleatoriamente em uma matriz

 

 

 

UFSC – Oficina de Robótica – @2013

83
Programando em Arduino
int matriz_leds[2][2] = {{2, 3}, {4, 5}};

void setup()

{

int i, j;

for (i = 0; i < 2; i++) {

for (j = 0; j < 2; j++) {

// Inicializa portas

pinMode(matriz_leds[i][j], OUTPUT);

}

}

randomSeed(analogRead(0)); // Define uma semente a partir da porta ananlógica 0

}

void loop()

{

int linha, coluna;

linha = random(2); // Gera um número aleatório entre 0 e 1

coluna = random(2); // Gera um número aleatório entre 0 e 1

// Acende led

digitalWrite(matriz_leds[linha][coluna], HIGH);

delay(500);

// Apaga led

digitalWrite(matriz_leds[linha][coluna], LOW);

delay(500);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Modularizando um Programa – funções
.O objetivo da modularização é separar o
programa em módulos funcionais – “dividir para
conquistar”.
.Um módulo pode ser chamado (acionado) em
qualquer ponto do programa.
.Os módulos funcionais de um programa também
são chamados de funções.
.Uma função implementa uma ou mais instruções
responsáveis por uma parte do programa.
.As funções deixam um programa mais
organizado e legível, uma vez que são
responsáveis por ações bem específicas.

 

 

UFSC – Oficina de Robótica – @2013 84

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Modularizando um Programa – funções
.Uma função tem quatro partes fundamentais, que
são:
.um tipo de dado associado a ela (pode ser void);
.um nome;
.uma lista de parâmetros (se houver);
.conjunto de instruções.
.Exemplo:

 

 

 

int soma(int a, int b)

{

int resultado= a + b;

return resultado;

}

 

UFSC – Oficina de Robótica – @2013 85

Programando em Arduino
Parâmetros

Tipo de dado

Nome
Conjunto de
instruções
Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Modularizando um Programa – funções
.Exemplo: programa para acionar 4 (quatro)
leds usando funções (dispostos em matriz)

 

 

UFSC – Oficina de Robótica – @2013

86
Programando em Arduino
int matriz_leds[2][2] = {{5, 4}, {2, 3}};

void pisca_diagonal_principal() // função para controlar os leds da diagonal principal

{

digitalWrite(matriz_leds[0][0], HIGH);

digitalWrite(matriz_leds[1][1], HIGH);

delay(1000);

digitalWrite(matriz_leds[0][0], LOW);

digitalWrite(matriz_leds[1][1], LOW);

delay(1000);

}

void pisca_diagonal_secundaria() // função para controlar os leds da diagonal secundária

{

digitalWrite(matriz_leds[0][1], HIGH);

digitalWrite(matriz_leds[1][0], HIGH);

delay(1000);

digitalWrite(matriz_leds[0][1], LOW);

digitalWrite(matriz_leds[1][0], LOW);

delay(1000);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Modularizando um Programa – funções
.Exemplo: programa para acionar 4 (quatro)
leds usando funções (dispostos em matriz)

 

 

UFSC – Oficina de Robótica – @2013

87
Programando em Arduino
void setup()

{

int i, j;

for (i = 0; i < 2; i++) {

for (j = 0; j < 2; j++) {

// Inicializa portas

pinMode(matriz_leds[i][j], OUTPUT);

}

}

}

void loop()

{

pisca_diagonal_principal();

pisca_diagonal_secundaria();

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
.O Arduino UNO possui 6 (seis) portas PWM,
3, 5, 6, 9, 10 e 11.
.O sinal PWM pode variar de 0 a 255 e para
ativá-lo basta usar a seguinte instrução em
uma das portas PWM:
.analogWrite(pin, sinal_pwm);

 

.Note que as portas PWM são todas digitais,
porém o sinal é modulado “como se fosse”
um sinal analógico.

 

 

UFSC – Oficina de Robótica – @2013

88
Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
.Ciclo de Trabalho – Duty-Cicle
.O sinal PWM possui um ciclo de trabalho que
determina com que frequência o sinal muda do
nível lógico HIGH para o nível lógico LOW e vice
versa.
.No Arduino a frequência do PWM pode ser
definida entre 32Hz até 62kHz.

 

 

 

UFSC – Oficina de Robótica – @2013 89

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
.Ciclo de Trabalho – Duty-Cicle
.Duty cicle = (100% * largura do pulso) / período

 

 

 

UFSC – Oficina de Robótica – @2013

90
Programando em Arduino
Período
Pulso

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
.Exemplo PWM – extraído de Teach Yourself PIC
Microconrollers for Absolute Beginners – M. Amer
Iqbal Qureshi, 2006.

 

 

UFSC – Oficina de Robótica – @2013 91

Programando em Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation (Modulação por
Largura de Pulso)

 

UFSC – Oficina de Robótica – @2013

92
Programando em Arduino
Frequência

Tempo por troca de ciclo

Pinos

30Hz

32 milissegundos

9 e10, 11e 3

61Hz

16 milissegundos

5 e 6

122Hz

8 milissegundos

9 e10, 11e 3

244Hz

4 milissegundos

5 e 6, 11e 3

488Hz

2 milissegundos

9 e10, 11e 3

976Hz (1kHz)

1 milissegundos

5 e 6, 11e 3

3.906Hz (4kHz)

256 microssegundos

9 e10, 11e 3

7.812Hz (8kHz)

128 microssegundos

5 e 6

31.250Hz (32kHz)

32 microssegundos

9 e10, 11e 3

62.500Hz (62kHz)

16 microssegundos

5 e 6

 

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Sinal PWM – Pulse Width Modulation
(Modulação por Largura de Pulso)
.Exemplo: mudando a intensidade de um led de alto
brilho com sinal PWM

 

 

UFSC – Oficina de Robótica – @2013

93
Programando em Arduino
const int led_alto_brilho = 3;

void setup()

{

pinMode(led_alto_brilho, OUTPUT);

Serial.begin(9600);

}

void loop()

{

int i;

for (i = 10; i <= 255; i+=10) {

analogWrite(led_alto_brilho, i); // Aumenta a intensidade do brilho

Serial.println(i);

delay(300);

}

for (i = 255; i >= 5; i-=10) {

analogWrite(led_alto_brilho, i); // Diminui a intensidade do brilho

Serial.println(i);

delay(300);

}

delay(3000);

}

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.É possível agregar novas funcionalidades a
uma placa do Arduino.
.As extensões das placas do Arduino são
chamadas de shields.
.Existem shields para as mais diversas
funcionalidades, por exemplo:
.Comunicação ethernet
.Comunicação wifi
.Comunicação bluethooth
.Ponte H
.Banco de relês
….

 

 

UFSC – Oficina de Robótica – @2013 94

Expandindo as funcionalidades do Arduino

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplo: Arduino com vários shields

 

UFSC – Oficina de Robótica – @2013 95

Expandindo as funcionalidades do Arduino
http://shieldlist.org/templates/images/stacked-shields.jpg

Logo.gif
http://memoria.cnpq.br/img/logomarca/logo.gif
http://envolverde.com.br/portal/wp-content/uploads/2011/04/29_MHG_vale-logo.jpg
http://www.inf.ufsc.br/%7Enelson.mariano/images/ufsc-logo.png
LARM
Laboratório de Automação
e Robótica Móvel

Financiamento:

Execução:

.Exemplos de shields

 

UFSC – Oficina de Robótica – @2013

96
Expandindo as funcionalidades do Arduino
http://img2.mlstatic.com/bluetooth-shield-ttl-rs232-serial-arduino_MLB-O-2978560183_082012.jpg
http://img1.mlstatic.com/arduino-shield-ponte-h-l293d-robo-motor-dc-servo_MLB-O-3275607874_102012.jpg
http://www.tinyosshop.com/image/data/ARDUINO/Shield/wifishield-7.jpg
http://static.mercadoshops.com/modulo-rele-canais-5v-arduino-brick_iZ102XvZmXpZ1XfZ23631289-190354987-1.jpgXsZ23631289xIM.jpg
http://www.cooking-hacks.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/a/r/arduino_ethernet_3_600_1.png

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s