Você está na página 1de 96

Programao em Arduino

Mdulo Bsico
Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

Material produzido para o projeto Oficina


de Robtica por:

Financiamento:

Anderson Luiz Fernandes Perez


Renan Rocha Dars

Contatos:

Universidade Federal de Santa Catarina


Laboratrio de Automao e Robtica Mvel
anderson.perez (at) ufsc.br
renanrdaros (at) hotmail.com

Execuo:

http://oficinaderobotica.ufsc.br
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Introduo
Microcontroladores
Arduino UNO
Ambiente de desenvolvimento
Funes setup() e loop()
Monitor Serial
Portas digitais e analgicas
Programando em Arduino
Expandindo as funcionalidades
Arduino

Financiamento:

Execuo:

do
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

O Arduino uma plataforma utilizada para


prototipao de circuitos eletrnicos.
O projeto do Arduino teve incio em 2005 na
cidade de Ivrea, Itlia.
O Arduino composto por uma placa com
microcontrolador Atmel AVR e um ambiente de
programao baseado em Wiring e C++.
Tanto o hardware como o ambiente de
programao do Arduino so livres, ou seja,
qualquer
pessoa
pode
modific-los
e
reproduzi-los.
O Arduino tambm conhecido de plataforma
de computao fsica.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Tipos de Arduino

Existem vrios tipos de Arduino com especificidades de


hardware. O site oficial do Arduino lista os seguintes
tipos:

Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino
Arduino

UNO
Leonardo
Due
Esplora
Mega
Mega ADK
Ethernet
Mini
LilyPad
Micro
Nano
ProMini
Pro
Fio

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Referncias na WEB:
O site oficial do Arduino http://arduino.cc
Um documentrio sobre o Arduino pode ser
assistido
em:
http://arduinothedocumentary.org/

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Um microcontrolador um CI que
incorpora vrias funcionalidades.
Alguns vezes os microcontroladores so
chamados de computador de um nico
chip.
So utilizados em diversas aplicaes
de sistemas embarcados, tais como:
carros,
eletrodomsticos,
avies,
automao residencial, etc.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Processamento de dados
Financiamento:

Entrada

Processamento

Sada

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Vista da placa do Arduino UNO Rev 3


(frente e verso)

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

Caractersticas

Microcontrolador: ATmega328
Tenso de operao: 5V
Tenso recomendada (entrada): 7-12V
Limite da tenso de entrada: 6-20V
Pinos digitais: 14 (seis pinos com sada PWM)
Entrada analgica: 6 pinos
Corrente contnua por pino de entrada e sada: 40
mA
Corrente para o pino de 3.3 V: 50 mA
Quantidade de memria FLASH: 32 KB (ATmega328)
onde 0.5 KB usado para o bootloader
Quantidade de memria SRAM: 2 KB (ATmega328)
Quantidade
de
memria
EEPROM:
1
KB
(ATmega328)
Velocidade de clock: 16 MHz

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

10

Alimentao
O Arduino UNO pode ser alimentado pela
porta USB ou por uma fonte externa DC.
A recomendao 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.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

11

O ambiente de desenvolvimento do
Arduino (IDE) gratuito e pode ser
baixado
no
seguinte
endereo:
arduino.cc.
As principais funcionalidades do IDE do
Arduino so:

Escrever o cdigo do programa


Salvar o cdigo do programa
Compilar um programa
Transportar o cdigo compilado para a placa
do Arduino

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

12

Interface principal
desenvolvimento

do

ambiente

de
Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

13

As duas principais partes (funes) de


um programa desenvolvido para o
Arduino so:
setup(): onde devem ser definidas algumas
configuraes iniciais do programa. Executa
uma nica vez.
loop(): funo principal do programa. Fica
executando indefinidamente.

Financiamento:

Execuo:

Todo programa para o Arduino deve ter


estas duas funes.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

14

Exemplo 1: formato das funes setup()


e loop()

Financiamento:

void setup()
{
}
void loop()
{

Execuo:

}
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

15

Exemplo 2: exemplo funes setup() e

loop()

Financiamento:

void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

16

O monitor serial utilizado para


comunicao entre o Arduino e o
computador (PC).
O monitor serial pode ser aberto no
menu tools opo serial monitor, ou
pressionando as teclas CTRL + SHIFT +
M.
As principais funes do monitor serial
so: begin(), read(), write(), print(),
println() e available().

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

17

Exemplo: imprimindo uma mensagem


de boas vindas no monitor serial

Financiamento:

void setup()
{
Serial.begin(9600); // Definio da velocide de transmisso
}
void loop()
{
Serial.println("Ola, seu nome, seja bem vindo ao maravilhoso mundo do Arduino");
}
Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

18

O Arduino possui tanto portas digitais


como portas analgicas.
As portas servem para comunicao
entre o Arduino e dispositivos externos,
por exemplo: ler um boto, acender um
led ou uma lmpada.
Conforme j mencionado, o Arduino
UNO, possui 14 portas digitais e 6
portas analgicas (que tambm podem
ser utilizadas como portas digitais).

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

19

Portas Digitais
As portas digitais trabalham com valores
bem definidos, ou seja, no caso do Arduino
esses valores so 0V e 5V.
0V indica a ausncia de um sinal e 5V indica
a presena de um sinal.
Para escrever em uma porta digital basta
utilizar a funo digitalWrite(pin, estado).
Para ler um valor em uma porta digital basta
utilizar a funo digitalRead(pin).

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

20

Portas Analgicas

As portas analgicas so utilizadas para entrada


de dados.
Os valores lidos em uma porta analgica variam
de 0V a 5V.
Para ler uma valor em uma porta analgica basta
utilizar a funo analogRead(pin).
Os conversores analgicos-digitais (ADC) do
Arduino so de 10 bits.
Os conversores ADC (do Ingls Analog Digital
Converter) permitem uma preciso de 0.005V ou
5mV.
Os valores lidos em uma porta analgica variam
de 0 a 1023 (10 bits), onde 0 representa 0V e
1023 representa 5V.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

21

Para definir uma porta como entrada ou


sada necessrio explicitar essa
situao no programa.
A funo pinMode(pin, estado)
utilizada para definir se a porta ser de
entrada ou sada de dados.
Exemplo:
Define que a porta 13 ser de sada

Financiamento:

Execuo:

pinMode(13, OUTPUT)

Define que a porta 7 ser de entrada


pinMode(7, INPUT)

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

22

Algoritmo
Sequncia de passos que visa atingir um
objetivo bem definido.
Exemplo: Receita caseira

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

23

Constantes e Variveis
Um dado constante quando no sofre
nenhuma variao no decorrer do tempo.
Do incio ao fim do programa o valor
permanece inalterado.
Exemplos:
10
Bata antes de entrar!
-0,58

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

24

Constantes e Variveis
A criao de constantes no Arduino pode ser
feita de duas maneiras:

Financiamento:

Usando a palavra reservada const


Exemplo:
const int x = 100;

Usando a palavra reservada define


Exemplo:
#define X 100

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

25

Constantes e Variveis

No Arduino existem algumas constantes


previamente definidas e so consideradas
palavras reservadas.
As constantes definidas so:

true indica valor lgico verdadeiro


false indica valor lgico 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 sada de
dados.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

26

Constantes e Variveis
Variveis so lugares (posies) na memria
principal que servem para armazenar dados.
As variveis so acessadas atravs de um
identificador nico.
O contedo de uma varivel pode variar ao longo
do tempo durante a execuo de um programa.
Uma varivel s pode armazenar um valor a cada
instante.
Um identificador para uma varivel formado por
um ou mais caracteres, obedecendo a seguinte
regra:
o
primeiro
caractere
deve,
obrigatoriamente, ser uma letra.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

27

Constantes e Variveis
Financiamento:

ATENO!!!

Um identificador de uma varivel ou


constante no pode ser formado por
caracteres
especiais
ou
palavras
reservadas da linguagem.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

28

Tipos de Variveis no Arduino


Financiamento:
Tipo

Definio

void

Indica tipo indefinido. Usado geralmente para informar que uma


funo no retorna nenhum valor.

boolean

Os valores possveis so true (1) e false (0). Ocupa um byte de


memria.

char

Ocupa um byte de memria. Pode ser uma letra ou um nmero.


A faixa de valores vlidos de -128 a 127.

unsigned char

O mesmo que o char, porm a faixa de valores vlidos de 0 a


255.

byte
int
unsigned int
word

Ocupa 8 bits de memria. A faixa de valores de 0 a 255.

Execuo:

Armazena nmeros inteiros e ocupa 16 bits de memria (


2bytes). A faixa de valores de -32.768 a 32.767.
O mesmo que o int, porm a faixa de valores vlidos de 0 a
65.535.
O mesmo que um unsigned int.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

29

Tipos de Variveis no Arduino


Financiamento:
Tipo

Definio

long

Armazena nmeros 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, porm a faixa de valores de 0 at


4.294.967.295.

short

Armazena nmero de at 16 bits (2 bytes). A faixa de valores


de -32.768 at 32.767.

float

Armazena valores de ponto flutuante (com vrgula) e ocupa 32


bits (4 bytes) de memria. A faixa de valores de
-3.4028235E+38 at 3.4028235E+38

double

Execuo:

O mesmo que o float.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

30

Declarao de Variveis e Constantes

Exemplo: declarao de duas constantes e


uma varivel

Financiamento:

#define BOTAO 10 // constante


const int pin_botao = 13; // constante
void setup()
{

Execuo:

}
void loop()
{
int valor_x; // varivel
}

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

31

Atribuio de valores a variveis e


constantes

Financiamento:

A atribuio de valores a variveis e


constantes feito com o uso do operador de
atribuio =.
Exemplos:
int valor = 100;
const float pi = 3.14;

Execuo:

Ateno!!!

O operador de atribuio no vale para o


comando #define.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

32

Atribuio de valores a variveis e


constantes

Financiamento:

Exemplo: lendo dados do monitor serial


int valor = 0;
void setup()
{
Serial.begin(9600); // Definio da velocidade de transmisso
}
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
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

33

Operadores
Em uma linguagem de programao existem
vrios operadores que permitem operaes
do tipo:

Aritmtica
Relacional
Lgica
Composta

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

34

Operadores aritmticos
Financiamento:

Smbolo

Funo

Adio

Subtrao

Multiplicao

Diviso

Mdulo (resto da diviso inteira)

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

35

Operadores relacionais
Financiamento:

Smbolo

Funo

>

Maior

<

Menor

>=

Maior ou igual

<=

Menor ou igual

==

Igual

!=

Diferente

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

36

Operadores lgicos
Financiamento:

Smbolo

Funo

&&

E (and)

||

OU (or)

No (not)
Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

37

Operadores compostos
Financiamento:

Smbolo

Funo

++

Incremento

--

Decremento

+=

Adio com atribuio

-=

Subtrao com atribuio

*=

Multiplicao com atribuio

/=

Diviso com atribuio

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

38

Comentrios

Muitas vezes importante comentar alguma parte


do cdigo do programa.
Existem duas maneiras de adicionar comentrios a
um programa em Arduino.
A primeira usando //, como no exemplo abaixo:

Financiamento:

// Este um comentrio de linha

A segunda usando /* */, como no exemplo


abaixo:
/* Este um comentrio de bloco. Permite acrescentar
comentrios com mais de uma linha */

Execuo:

Nota:

Quando o programa compilado os comentrios so


automaticamente suprimidos do arquivo executvel,
aquele que ser gravado na placa do Arduino.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

39

Comandos de Seleo

Em vrios momentos em um programa


precisamos
verificar
uma
determinada
condio afim de selecionar uma ao ou
aes que sero executadas.
Um comando de seleo tambm
conhecido por desvio condicional, ou seja,
dada um condio, um parte do programa
executada.
Os comandos de seleo podem ser do tipo:
Seleo simples
Seleo composta
Seleo de mltipla escolha

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

40

Comando de seleo simples

Um comando de seleo simples avalia uma


condio, ou expresso, para executar uma ao
ou conjunto de aes.
No Arduino o comando de seleo simples :

Financiamento:

if (expr) {
}

cmd

onde:
expr representa uma expresso a ser avaliada que

Execuo:

pode ser do tipo lgica, relacional ou aritmtica. O


resultado da avaliao de uma expresso sempre
um valor lgico.
cmd comando(s) a ser executado.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

41

Comando de seleo simples

Exemplo: acendendo leds pelo monitor serial

Financiamento:

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
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

42

Comando de seleo composta


Um comando de seleo composta complementar ao comando
de seleo simples.
O objetivo executar um comando mesmo que a expresso
avaliada pelo comando if (expr) retorne um valor falso.
No Arduino o comando de seleo composta :

Financiamento:

if (expr) {
cmd;
}
else {
cmd;

Execuo:

onde:
expr representa uma expresso a ser avaliada que pode ser
do tipo lgica, relacional ou aritmtica. O resultado da
avaliao de uma expresso sempre um valor lgico.
cmd comando(s) a ser executado.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

43

Comando de seleo composta


Exemplo: acendendo e apagando leds pelo
monitor serial

Financiamento:

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);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

44

Comando de seleo composta

Exemplo: acendendo e apagando leds pelo monitor


serial

Financiamento:

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
}
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

45

Comando de seleo de mltipla escolha


Na seleo de mltipla escolha possvel avaliar mais de um valor.
No Arduino o comando de seleo de mltipla escolha :

Financiamento:

switch (valor) {
case x: cmd1;
break;
case y: cmd2;
break;
default: cmd;
}

onde:
valor um dado a ser avaliado. representado por uma varivel de
memria.
cmdx comando a ser executado.
case indica a opo a ser executada.
default comando padro que dever ser executado se nenhuma outra
escolha (case) tiver sido selecionada.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

46

Comando de seleo de mltipla escolha


Exemplo: acendendo e apagando leds pelo monitor
serial

Financiamento:

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);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

47

Comando de seleo de mltipla escolha

Exemplo: acendendo e apagando leds pelo monitor


serial

Financiamento:

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!!!");
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

48

Lendo um boto
Para ler um boto basta lig-lo em uma
porta digital.
Para que um circuito com boto funcione
adequadamente, ou seja, sem rudos,
necessrio o uso de resistores pull-down ou
pull-up.
Os resistores pull-down e pull-up garantem
que os nveis lgicos estaro prximos s
tenses esperadas.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

49

Lendo um boto com resistor pull-down


Ligao no protoboard

Financiamento:

Resistor
pull-down
10K

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

50

Lendo um boto com resistor pull-

down

Financiamento:

Programa
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!!!");
}
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

51

Lendo um boto com resistor pull-up


Ligao no protoboard

Financiamento:

Resistor
pull-up
10K

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

52

Lendo um boto com resistor pull-up


Programa

Financiamento:

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!!!");
}
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

53

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 nvel alto (HIGH) na funo
setup().
pinMode(pin, INPUT)
digitalWrite(pin, HIGH)
Para desativar os resistores pull-up de uma
porta digital basta coloc-la em nvel baixo.
digitalWrite(pin, LOW)

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

54

Exemplo: ativando o resistor pull-up de


uma porta digital

Financiamento:

Quanto o boto for pressionado o led ir


apagar

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

55

Exemplo: ativando o resistor pull-up de


uma porta digital

Financiamento:

Quanto o boto for pressionado o led ir


apagar
const int led = 7;
const int botao = 10;
void setup()
{
pinMode(led, OUTPUT);
pinMode(botao, INPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}

Execuo:

void loop()
{
int valor = digitalRead(botao);

if (valor == HIGH) {
digitalWrite(led, HIGH); // Acende o led
}
else {
digitalWrite(led, LOW); // Apaga o led
}

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

56

Exemplo: ativando o resistor pull-up de


uma porta digital

Financiamento:

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.
Define a porta 10 como entrada de
Exemplo:
dados e ativa o resistor pull-up.
void setup()
{
pinMode(10, INPUT_PULLUP);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

57

Lendo Portas Analgicas


O Arduino UNO possui 6 (seis) portas analgicas.
Por padro todas as portas analgicas so
definidas como entrada de dados, desta forma
no necessrio fazer esta definio na funo
setup().
O conversor analgico-digital do Arduino de 10
(dez) bits, logo a faixa de valores lidos varia de 0
a 1023.
As portas analgicas no Arduino UNO so
identificadas como A0, A1, A2, A3, A4 e A5. Estas
portas tambm podem ser identificadas por 14
(A0), 15 (A1), 16 (A2), 17 (A3), 18 (A4) e 19 (A5).

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

58

Lendo Portas Analgicas


Exemplo: lendo dados de um potencimetro

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

59

Lendo Portas Analgicas


Exemplo: lendo dados de um potencimetro

Financiamento:

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

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

60

Lendo Portas Analgicas


Exemplo: lendo dados de um potencimetro
e acionando um LED

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

61

Lendo Portas Analgicas


Exemplo: lendo dados de um potencimetro
e acionando um LED

Financiamento:

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);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

62

Lendo Portas Analgicas


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 resistncia diminui
com o aumento da temperatura.
Nos sensores do tipo PTC a resistncia aumenta
com o aumento da temperatura.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

63

Lendo Portas Analgicas

Exemplo: lendo um sensor de temperatura


Equao de Steinhart-Hart

Financiamento:

1/T = a + b * ln(R) + c * (ln(R))3


onde:

T = temperatura em Kelvin
R = resistncia em ohms
a, b, c: constantes definidas pelo fabricante do sensor

Execuo:

Esta equao 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.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

64

Lendo Portas Analgicas


Exemplo: lendo um sensor de temperatura

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

65

Lendo Portas Analgicas


Exemplo: lendo um sensor de temperatura

Financiamento:

/*
Programa que utiliza a equao de Steinhart-Hart
1/T = a + b * ln(R) + c * (ln(R))3
*/
#include <math.h>
const int sensor = A0;

Execuo:

double tempCelsius(int valorNTC)


{
double temp;
temp = log(((10240000 / valorNTC) - 10000)); // Considerando resistncia de 10K
temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * temp * temp ))* temp );
temp = temp - 273.15; // Converte Kelvin para Celsius
}

return temp;

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

66

Lendo Portas Analgicas


Exemplo: lendo um sensor de temperatura

Financiamento:

void setup()
{
Serial.begin(9600);
}
void loop()
{
int valor = analogRead(sensor);
double c = tempCelsius(valor);
Serial.println(valor);
Serial.println(c);
delay(100);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

67

Comandos de Repetio
Muitas vezes necessrio repetir uma
determinada instruo mais de uma vez.
Os comandos de repetio mantm em um
lao uma instruo ou conjunto de
instrues.
Os comandos de repetio do Arduino so:
Baseado em um contador
Baseado em uma expresso com teste no incio
Baseado em uma expresso com teste no final

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

68

Comandos de Repetio
Baseado em um Contador

Financiamento:

Este tipo de comando de repetio deve ser utilizado


quando se sabe a quantidade de vezes que uma
determinada instruo deve ser executada.
No Arduino o comando de repetio baseado em um
contador :
for (contador incio; expr; incremento do contador) {
cmd;
}
onde:

Execuo:

contador = uma varivel do tipo inteiro (int)


expr = uma expresso relacional
incremento do contador = passo de incremento do
contador

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

69

Comandos de Repetio
Baseado em um Contador

Financiamento:

Exemplo: escrevendo uma mensagem x vezes


no monitor serial
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()");
}
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

70

Comandos de Repetio
Baseado em uma expresso com teste no incio
Este tipo de comando de repetio avalia uma expresso, caso seja
verdadeira, a(s) intruo(es) dentro do lao permanecem
executando.
No Arduino o comando de repetio baseado em uma expresso com
teste no incio :
while (expr) {
cmd;
}
onde:
expr uma expresso que pode ser lgica, relacional ou
aritmtica. A permanncia de execuo do lao garantida
enquanto a expresso for verdadeira.
Nota:
Neste tipo de comando de repetio a avaliao da expresso
realizada no incio do lao, ou seja, pode ser que o cmd no execute
nenhuma vez.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

71

Comandos de Repetio
Baseado em uma expresso com teste no
incio

Financiamento:

Exemplo:
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}

Execuo:

void loop()
{
// Teste do comando while()
while (digitalRead(botao)); // Espera at que o boto seja pressionado
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
}

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

72

Comandos de Repetio
Baseado em uma expresso com teste no final

Financiamento:

Este tipo de comando de repetio avalia uma expresso, caso


seja verdadeira, a(s) intruo(es) dentro do lao
permanecem executando.
No Arduino o comando de repetio baseado em uma
expresso com teste no final :
do {

cmd;
} while (expr) ;
Execuo:

onde:
expr uma expresso que pode ser lgica, relacional ou
aritmtica. A permanncia de execuo do lao garantida
enquanto a expresso for verdadeira.

Nota:
Neste tipo de comando de repetio a avaliao da expresso
realizada no final do lao, ou seja, garatido que pelo menos uma
vez o cmd ser executado.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

73

Comandos de Repetio
Baseado em uma expresso com teste no
final

Financiamento:

Exemplo:
const int botao = 6;
const int led = 10;
void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT);
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}

Execuo:

void loop()
{
// Teste do comando do while()
do {
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
delay(2000);
} while (digitalRead(botao)); // Enquanto o boto no for pressionado, pisca o led
}

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

74

Vetores e matrizes
Uma varivel escalar pode armazenar muitos
valores ao longo da execuo do programa,
porm no ao mesmo tempo.
Existem variveis que podem armazenar
mais de um valor ao mesmo tempo. Essas
variveis so conhecidas como variveis
compostas homogneas.
No Arduino possvel trabalhar com dois
tipos de variveis compostas homogneas,
vetores e matrizes.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

75

Vetores e matrizes
Vetor

Financiamento:

A declarao de um vetor feita da mesma


maneira que uma varivel escalar, entretanto
necessrio definir a quantidade de itens do
vetor.
Vetor
Exemplo:

Dado armazenado

int vetor[4];

ndices

Vetor com 4 (quatro) elementos do tipo inteiro.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

76

Vetores e matrizes
Vetor

Financiamento:

Para atribuir um valor a uma determinada


posio do vetor, basta usar o ndice, ou seja, a
posio onde o valor ser armazenado no
vetor.
Exemplo:

Execuo:

vetor[0] = 7;
Atribui o valor 7 a posio 0 do vetor.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

77

Vetores e matrizes
Vetor

Financiamento:

Para acessar um determinado valor em uma


posio do vetor, basta usar o ndice, ou seja, a
posio onde o valor est armazenado no vetor.
Exemplo:
digitalWrite(vetor[0], HIGH);

Execuo:

Ativa a porta cujo nmero est definido na


posio 0 do vetor.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

78

Vetores e matrizes
Vetor

Financiamento:

Exemplo: acendendo e apagando leds cujas


portas esto definidas em um vetor
int leds[5] = {2, 3, 4, 5, 6}; // Define as portas onde esto os leds
void setup()
{
int i;
for (i = 0; i < 5; i++) {
pinMode(leds[i], OUTPUT); // Define as portas como sada
}
}
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);
}
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

79

Vetores e matrizes
Matriz

Uma matriz similar a um vetor, entretanto pode ser formada


por duas ou mais dimenses.
Uma matriz bidimensional possui um determinado nmero de
linhas e de colunas.
Exemplo:
int matriz[4][6];

ndices
Valor armazenado
na posio [3,0]

10 11 12

13 14 15 16 17 18

19 20 21 22 23 24
0

Financiamento:

Execuo:

Matriz com 4 (quatro) linhas e 6 (seis) colunas de elementos


do tipo inteiro.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

80

Vetores e matrizes
Matriz

Financiamento:

Para atribuir um valor a uma determinada


posio da matriz, basta usar o ndice da linha
e o ndice da coluna, ou seja, a posio onde o
valor ser armazenado na matriz.
Exemplo:
matriz[1][2] = 9;
Atribui o valor 9 a posio 1 (linha), 2 (coluna) da
matriz.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

81

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

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

82

Vetores e matrizes
Matriz
Exemplo:
acendendo
e
aleatoriamente em uma matriz

Financiamento:

apagando

leds

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 ananlgica 0
}

Execuo:

void loop()
{
int linha, coluna;
linha = random(2); // Gera um nmero aleatrio entre 0 e 1
coluna = random(2); // Gera um nmero aleatrio entre 0 e 1

// Acende led
digitalWrite(matriz_leds[linha][coluna], HIGH);
delay(500);
// Apaga led
digitalWrite(matriz_leds[linha][coluna], LOW);
delay(500);

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

83

Modularizando um Programa funes


O objetivo da modularizao separar o
programa em mdulos funcionais dividir para
conquistar.
Um mdulo pode ser chamado (acionado) em
qualquer ponto do programa.
Os mdulos funcionais de um programa tambm
so chamados de funes.
Uma funo implementa uma ou mais instrues
responsveis por uma parte do programa.
As funes deixam um programa mais
organizado e legvel, uma vez que so
responsveis por aes bem especficas.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

84

Modularizando um Programa funes

Uma funo tem quatro partes fundamentais, que


so:
um tipo de dado associado a ela (pode ser void);

Financiamento:

um nome;
uma lista de parmetros (se houver);
conjunto de instrues.
Exemplo:

Parmetros

Nome

Tipo de dado

int soma(int a, int b)


{
int resultado= a + b;
return resultado;
}

Execuo:

Conjunto de
instrues
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

85

Modularizando um Programa funes


Exemplo: programa para acionar 4 (quatro)
leds usando funes (dispostos em matriz)

Financiamento:

int matriz_leds[2][2] = {{5, 4}, {2, 3}};


void pisca_diagonal_principal() // funo 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);
}

Execuo:

void pisca_diagonal_secundaria() // funo para controlar os leds da diagonal secundria


{
digitalWrite(matriz_leds[0][1], HIGH);
digitalWrite(matriz_leds[1][0], HIGH);
delay(1000);
Laboratrio de Automao
e Robtica Mvel
digitalWrite(matriz_leds[0][1], LOW);
digitalWrite(matriz_leds[1][0], LOW);
delay(1000);
}
UFSC - Oficina de Robtica - @2013
86

Modularizando um Programa funes


Exemplo: programa para acionar 4 (quatro)
leds usando funes (dispostos em matriz)
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();
}

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

87

Sinal PWM Pulse Width Modulation


(Modulao 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 instruo em
uma das portas PWM:
analogWrite(pin, sinal_pwm);
Note que as portas PWM so todas digitais,
porm o sinal modulado como se fosse
um sinal analgico.

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

88

Sinal PWM Pulse Width Modulation


(Modulao por Largura de Pulso)

Financiamento:

Ciclo de Trabalho Duty-Cicle

O sinal PWM possui um ciclo de trabalho que


determina com que frequncia o sinal muda do
nvel lgico HIGH para o nvel lgico LOW e vice
versa.
No Arduino a frequncia do PWM pode ser
definida entre 32Hz at 62kHz.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

89

Sinal PWM Pulse Width Modulation


(Modulao por Largura de Pulso)

Financiamento:

Ciclo de Trabalho Duty-Cicle

Duty cicle = (100% * largura do pulso) / perodo

Perodo

Pulso

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

90

Sinal PWM Pulse Width Modulation


(Modulao por Largura de Pulso)

Financiamento:

Exemplo PWM extrado de Teach Yourself PIC

Microconrollers for Absolute Beginners M. Amer


Iqbal Qureshi, 2006.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

91

Sinal PWM Pulse Width Modulation (Modulao por


Largura de Pulso)
Frequncia

Tempo por troca de ciclo

Pinos

30Hz

32 milissegundos

9 e10, 11e 3

61Hz

16 milissegundos

5e6

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

5e6

31.250Hz (32kHz)

32 microssegundos

9 e10, 11e 3

62.500Hz (62kHz)

16 microssegundos

5e6

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

92

Sinal PWM Pulse Width Modulation


(Modulao por Largura de Pulso)

Financiamento:

Exemplo: mudando a intensidade de um led de alto


brilho com sinal PWM
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);
}

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

93

possvel agregar novas funcionalidades a


uma placa do Arduino.
As extenses das placas do Arduino so
chamadas de shields.
Existem shields para as mais diversas
funcionalidades, por exemplo:

Comunicao ethernet
Comunicao wifi
Comunicao bluethooth
Ponte H
Banco de rels
...

Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

94

Exemplo: Arduino com vrios shields


Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

95

Exemplos de shields
Financiamento:

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013

96

Você também pode gostar