You are on page 1of 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 Execuo:

renanrdaros (at) hotmail.com

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

UFSC - Oficina de Robtica - @2013 2


Introduo
Microcontroladores Financiamento:

Arduino UNO
Ambiente de desenvolvimento
Funes setup() e loop()
Monitor Serial
Portas digitais e analgicas Execuo:

Programando em Arduino
Expandindo as funcionalidades do
Arduino
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 3


O Arduino uma plataforma utilizada para
prototipao de circuitos eletrnicos. Financiamento:

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, Execuo:

qualquer pessoa pode modific-los e


reproduzi-los.
O Arduino tambm conhecido de plataforma
de computao fsica.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 4


Tipos de Arduino
Existem vrios tipos de Arduino com especificidades de
Financiamento:
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 Execuo:
Arduino LilyPad
Arduino Micro
Arduino Nano
Arduino ProMini
Arduino Pro
Arduino Fio Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 5


Referncias na WEB:
O site oficial do Arduino http://arduino.cc Financiamento:

Um documentrio sobre o Arduino pode ser


assistido em:
http://arduinothedocumentary.org/

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 6


Um microcontrolador um CI que
incorpora vrias funcionalidades. Financiamento:

Alguns vezes os microcontroladores so


chamados de computador de um nico
chip.
So utilizados em diversas aplicaes
de sistemas embarcados, tais como: Execuo:

carros, eletrodomsticos, avies,


automao residencial, etc.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 7


Processamento de dados
Financiamento:

Entrada Processamento Sada

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 8


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

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 9


Caractersticas
Microcontrolador: ATmega328 Financiamento:
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) Execuo:

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

UFSC - Oficina de Robtica - @2013 10


Alimentao
O Arduino UNO pode ser alimentado pela Financiamento:

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.

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 11


O ambiente de desenvolvimento do
Arduino (IDE) gratuito e pode ser Financiamento:

baixado no seguinte endereo:


arduino.cc.
As principais funcionalidades do IDE do
Arduino so:
Escrever o cdigo do programa Execuo:

Salvar o cdigo do programa


Compilar um programa
Transportar o cdigo compilado para a placa
do Arduino Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 12


Interface principal do ambiente de
desenvolvimento 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 Financiamento:

Arduino so:
setup(): onde devem ser definidas algumas
configuraes iniciais do programa. Executa
uma nica vez.
loop(): funo principal do programa. Fica
executando indefinidamente. 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()
{

}
Execuo:
void loop()
{

}
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()
{ Execuo:
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 16


O monitor serial utilizado para
comunicao entre o Arduino e o Financiamento:

computador (PC).
O monitor serial pode ser aberto no
menu tools opo serial monitor, ou
pressionando as teclas CTRL + SHIFT +
M. Execuo:

As principais funes do monitor serial


so: begin(), read(), write(), print(),
println() e available().
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. Financiamento:

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 Execuo:

UNO, possui 14 portas digitais e 6


portas analgicas (que tambm podem
ser utilizadas como portas digitais).
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 19


Portas Digitais
As portas digitais trabalham com valores Financiamento:

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). Execuo:

Para ler um valor em uma porta digital basta


utilizar a funo digitalRead(pin).

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 20


Portas Analgicas
As portas analgicas so utilizadas para entrada Financiamento:
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 Execuo:

5mV.
Os valores lidos em uma porta analgica variam
de 0 a 1023 (10 bits), onde 0 representa 0V e
1023 representa 5V.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 21


Para definir uma porta como entrada ou
sada necessrio explicitar essa Financiamento:

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 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 Financiamento:

objetivo bem definido.


Exemplo: Receita caseira

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 23


Constantes e Variveis
Um dado constante quando no sofre Financiamento:

nenhuma variao no decorrer do tempo.


Do incio ao fim do programa o valor
permanece inalterado.
Exemplos:
10
Bata antes de entrar! Execuo:

-0,58

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 24


Constantes e Variveis
A criao de constantes no Arduino pode ser Financiamento:

feita de duas maneiras:


Usando a palavra reservada const
Exemplo:
const int x = 100;
Usando a palavra reservada define
Exemplo: Execuo:
#define X 100

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 25


Constantes e Variveis
No Arduino existem algumas constantes Financiamento:
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. Execuo:

INPUT indica que uma porta ser de entrada de


dados.
OUTPUT indica que uma porta ser de sada de
dados.
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 26


Constantes e Variveis
Variveis so lugares (posies) na memria Financiamento:

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. Execuo:

Um identificador para uma varivel formado por


um ou mais caracteres, obedecendo a seguinte
regra: o primeiro caractere deve,
obrigatoriamente, ser uma letra. 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

Indica tipo indefinido. Usado geralmente para informar que uma


void
funo no retorna nenhum valor.
Os valores possveis so true (1) e false (0). Ocupa um byte de
boolean
memria.
Ocupa um byte de memria. Pode ser uma letra ou um nmero.
char
A faixa de valores vlidos de -128 a 127.
O mesmo que o char, porm a faixa de valores vlidos de 0 a
unsigned char
255.
Execuo:
byte Ocupa 8 bits de memria. A faixa de valores de 0 a 255.

Armazena nmeros inteiros e ocupa 16 bits de memria (


int
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
unsigned int 65.535.

Laboratrio de Automao
word O mesmo que um unsigned int. e Robtica Mvel

UFSC - Oficina de Robtica - @2013 29


Tipos de Variveis no Arduino
Financiamento:

Tipo Definio

Armazena nmeros de at 32 bits (4 bytes). A faixa de valores


long
de -2.147.483.648 at 2.147.483.647.
O mesmo que o long, porm a faixa de valores de 0 at
unsigned long
4.294.967.295.
Armazena nmero de at 16 bits (2 bytes). A faixa de valores
short
de -32.768 at 32.767.
Armazena valores de ponto flutuante (com vrgula) e ocupa 32
float bits (4 bytes) de memria. A faixa de valores de
Execuo:
-3.4028235E+38 at 3.4028235E+38

double 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 Financiamento:

uma varivel
#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
}
Execuo:
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(); Laboratrio de Automao
delay(2000); // Aguarda por 2 segundos e Robtica Mvel

UFSC - Oficina de Robtica - @2013 33


Operadores
Em uma linguagem de programao existem Financiamento:

vrios operadores que permitem operaes


do tipo:
Aritmtica
Relacional
Lgica
Composta Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 34


Operadores aritmticos
Financiamento:

Smbolo Funo
+ Adio
- Subtrao
* Multiplicao
/ Diviso
Execuo:
% Mdulo (resto da diviso inteira)

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
Execuo:
== Igual
!= Diferente

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
Execuo:
*= Multiplicao com atribuio
/= Diviso com atribuio

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 38


Comentrios
Muitas vezes importante comentar alguma parte Financiamento:
do cdigo do programa.
Existem duas maneiras de adicionar comentrios a
um programa em Arduino.
A primeira usando //, como no exemplo abaixo:
// 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 Financiamento:

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. Execuo:

Os comandos de seleo podem ser do tipo:


Seleo simples
Seleo composta
Seleo de mltipla escolha Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 40


Comando de seleo simples
Um comando de seleo simples avalia uma Financiamento:

condio, ou expresso, para executar uma ao


ou conjunto de aes.
No Arduino o comando de seleo simples :
if (expr) {
cmd
}
onde:
Execuo:
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 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() Execuo:


{
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 Laboratrio de Automao
e Robtica Mvel
digitalWrite(led_amarelo, HIGH); // Acende led
}
}
}
UFSC - Oficina de Robtica - @2013 42
Comando de seleo composta
Um comando de seleo composta complementar ao comando Financiamento:
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 :
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
Financiamento:

monitor serial
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;

char led;

void setup() Execuo:


{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
} Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 44


Comando de seleo composta
Exemplo: acendendo e apagando leds pelo monitor Financiamento:

serial
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 Execuo:
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 { Laboratrio de Automao
e Robtica Mvel
if (led == 'y') {
digitalWrite(led_amarelo, LOW); // Apaga led
}
}
}
}
UFSC - Oficina de Robtica - @2013 45
Comando de seleo de mltipla escolha
Na seleo de mltipla escolha possvel avaliar mais de um valor.
Financiamento:
No Arduino o comando de seleo de mltipla escolha :
switch (valor) {
case x: cmd1;
break;
case y: cmd2;
break;
default: cmd;
}
onde:
valor um dado a ser avaliado. representado por uma varivel de Execuo:
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.
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 Financiamento:

serial
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;

char led;

void setup() Execuo:


{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
}
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 Financiamento:

serial
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; Execuo:
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; Laboratrio de Automao
default: Serial.println("Nenhum led selecionado!!!"); e Robtica Mvel

}
}
}
UFSC - Oficina de Robtica - @2013 48
Lendo um boto
Para ler um boto basta lig-lo em uma Financiamento:

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 Execuo:

que os nveis lgicos estaro prximos s


tenses esperadas.

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

void loop()
{
vlr_btn = digitalRead(botao);
if (vlr_btn == true) {
Serial.println("Botao pressionado!!!"); 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); Execuo:
}

void loop()
{
vlr_btn = digitalRead(botao);
if (vlr_btn == false) {
Serial.println("Botao pressionado!!!"); Laboratrio de Automao
e Robtica Mvel

}
}
UFSC - Oficina de Robtica - @2013 53
Nota
O Arduino possui resistores pull-up nas Financiamento:

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) Execuo:

Para desativar os resistores pull-up de uma


porta digital basta coloc-la em nvel baixo.
digitalWrite(pin, LOW)
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
} Laboratrio de Automao
e Robtica Mvel
else {
digitalWrite(led, LOW); // Apaga o led
}
}
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. Execuo:
void setup()
{
pinMode(10, INPUT_PULLUP);
}
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 57


Lendo Portas Analgicas
O Arduino UNO possui 6 (seis) portas analgicas. Financiamento:

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. Execuo:

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). 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() Execuo:

{
int val = analogRead(0);
Serial.println(val);
}
Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 60


Lendo Portas Analgicas
Exemplo: lendo dados de um potencimetro Financiamento:

e acionando um LED

Execuo:

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 61


Lendo Portas Analgicas
Exemplo: lendo dados de um potencimetro Financiamento:

e acionando um LED
const int led = 6;

void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
}
Execuo:
void loop()
{
int val = analogRead(0);
Serial.println(val);
digitalWrite(led, HIGH);
delay(val);
digitalWrite(led, LOW); Laboratrio de Automao
e Robtica Mvel
delay(val);
}

UFSC - Oficina de Robtica - @2013 62


Lendo Portas Analgicas
Exemplo: lendo um sensor de temperatura Financiamento:

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

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 63


Lendo Portas Analgicas
Exemplo: lendo um sensor de temperatura Financiamento:
Equao de Steinhart-Hart

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;

double tempCelsius(int valorNTC) Execuo:


{
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); Execuo:
Serial.println(valor);
Serial.println(c);
delay(100);
}

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 67


Comandos de Repetio
Muitas vezes necessrio repetir uma Financiamento:

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 Execuo:

Baseado em uma expresso com teste no incio


Baseado em uma expresso com teste no final

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;
} Execuo:

onde:
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); Execuo:
}

void loop()
{
for (executado; executado < vezes; executado++) {
Serial.println("Testando o comando de repeticao for()");
} Laboratrio de Automao
} e Robtica Mvel

UFSC - Oficina de Robtica - @2013 70


Comandos de Repetio
Baseado em uma expresso com teste no incio 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 incio :
while (expr) {
cmd;
}
onde:
Execuo:
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 Laboratrio de Automao
e Robtica Mvel

nenhuma vez.

UFSC - Oficina de Robtica - @2013 71


Comandos de Repetio
Baseado em uma expresso com teste no Financiamento:

incio
Exemplo:
const int botao = 6;
const int led = 10;

void setup()
{
pinMode(botao, INPUT);
pinMode(led, OUTPUT); Execuo:
digitalWrite(botao, HIGH); // Ativa resistor pull-up
}

void loop()
{
// Teste do comando while()
while (digitalRead(botao)); // Espera at que o boto seja pressionado
digitalWrite(led, HIGH);
Laboratrio de Automao
delay(2000); e Robtica Mvel

digitalWrite(led, LOW);
}

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) ;
onde: Execuo:

expr uma expresso que pode ser lgica, relacional ou


aritmtica. A permanncia de execuo do lao garantida
enquanto a expresso for verdadeira.

Nota:
Laboratrio de Automao
Neste tipo de comando de repetio a avaliao da expresso e Robtica Mvel

realizada no final do lao, ou seja, garatido que pelo menos uma


vez o cmd ser executado.
UFSC - Oficina de Robtica - @2013 73
Comandos de Repetio
Baseado em uma expresso com teste no Financiamento:

final
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); Laboratrio de Automao
e Robtica Mvel
delay(2000);
} while (digitalRead(botao)); // Enquanto o boto no for pressionado, pisca o led
}
UFSC - Oficina de Robtica - @2013 74
Vetores e matrizes
Uma varivel escalar pode armazenar muitos Financiamento:

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. Execuo:

No Arduino possvel trabalhar com dois


tipos de variveis compostas homogneas,
vetores e matrizes.
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:
int vetor[4]; Dado armazenado
Execuo:

7 8 1 3
ndices 0 1 2 3

Vetor com 4 (quatro) elementos do tipo inteiro. Laboratrio de Automao


e Robtica Mvel

UFSC - Oficina de Robtica - @2013 76


Vetores e matrizes
Vetor Financiamento:

7 8 1 3
0 1 2 3

Para atribuir um valor a uma determinada


posio do vetor, basta usar o ndice, ou seja, a
posio onde o valor ser armazenado no Execuo:
vetor.
Exemplo:
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:

7 8 1 3
0 1 2 3

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. Execuo:

Exemplo:
digitalWrite(vetor[0], HIGH);
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
} Execuo:
}

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++) { Laboratrio de Automao
e Robtica Mvel
digitalWrite(leds[i], LOW); // Apaga os leds
delay(1000);
}
}
UFSC - Oficina de Robtica - @2013 79
Vetores e matrizes
Matriz
Financiamento:
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]; 0 1 2 3 4 5 6
1 7 8 9 10 11 12
ndices 2 13 14 15 16 17 18
Execuo:
3 19 20 21 22 23 24
Valor armazenado
na posio [3,0] 0 1 2 3 4 5

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; Execuo:
Atribui o valor 9 a posio 1 (linha), 2 (coluna) da
matriz.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 81


Vetores e matrizes
Matriz Financiamento:

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);
Execuo:
Ativa a porta cujo nmero est definido na
posio 0 (linha), 0 (coluna) da matriz.

Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 82


Vetores e matrizes
Matriz Financiamento:

Exemplo: acendendo e apagando leds


aleatoriamente em uma matriz
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);
}
} Execuo:
randomSeed(analogRead(0)); // Define uma semente a partir da porta ananlgica 0
}

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 Laboratrio de Automao


e Robtica Mvel
digitalWrite(matriz_leds[linha][coluna], HIGH);
delay(500);
// Apaga led
digitalWrite(matriz_leds[linha][coluna], LOW);
delay(500);
} UFSC - Oficina de Robtica - @2013 83
Modularizando um Programa funes
O objetivo da modularizao separar o Financiamento:

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 Execuo:

responsveis por uma parte do programa.


As funes deixam um programa mais
organizado e legvel, uma vez que so
responsveis por aes bem especficas. Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 84


Modularizando um Programa funes
Uma funo tem quatro partes fundamentais, que Financiamento:

so:
um tipo de dado associado a ela (pode ser void);
um nome;
uma lista de parmetros (se houver);
conjunto de instrues.
Exemplo:
Nome Parmetros Execuo:

int soma(int a, int b)


{
int resultado= a + b; Conjunto de
Tipo de dado
return resultado; instrues
} Laboratrio de Automao
e Robtica Mvel

UFSC - Oficina de Robtica - @2013 85


Modularizando um Programa funes
Exemplo: programa para acionar 4 (quatro) Financiamento:

leds usando funes (dispostos em matriz)


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); Execuo:
delay(1000);
}

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
digitalWrite(matriz_leds[0][1], LOW); e Robtica Mvel

digitalWrite(matriz_leds[1][0], LOW);
delay(1000);
}
UFSC - Oficina de Robtica - @2013 86
Modularizando um Programa funes
Exemplo: programa para acionar 4 (quatro) Financiamento:

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

void loop()
{
pisca_diagonal_principal();
pisca_diagonal_secundaria(); Laboratrio de Automao
e Robtica Mvel
}

UFSC - Oficina de Robtica - @2013 87


Sinal PWM Pulse Width Modulation
(Modulao por Largura de Pulso) Financiamento:

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); Execuo:

Note que as portas PWM so todas digitais,


porm o sinal modulado como se fosse
um sinal analgico.
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 Execuo:
definida entre 32Hz at 62kHz.

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) Financiamento:

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


Execuo:
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


Laboratrio de Automao
e Robtica Mvel

62.500Hz (62kHz) 16 microssegundos 5e6

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()
{
Execuo:
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); Laboratrio de Automao
e Robtica Mvel
delay(300);
}
delay(3000);
}
UFSC - Oficina de Robtica - @2013 93
possvel agregar novas funcionalidades a
uma placa do Arduino. Financiamento:

As extenses das placas do Arduino so


chamadas de shields.
Existem shields para as mais diversas
funcionalidades, por exemplo:
Comunicao ethernet
Comunicao wifi
Execuo:
Comunicao bluethooth
Ponte H
Banco de rels
...
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

You might also like