SlideShare uma empresa Scribd logo
Financiamento: Execução:
Laboratório de Automação
e Robótica Móvel
Programação em Arduino
Módulo Básico
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
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
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
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 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
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
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 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
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Processamento de dados
UFSC - Oficina de Robótica - @2013 8
Entrada Processamento Saída
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
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
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
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
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
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
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
void setup()
{
}
void loop()
{
}
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
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
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
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
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");
}
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
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
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
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
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
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
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
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
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
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
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
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.
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
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.
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
#define BOTAO 10 // constante
const int pin_botao = 13; // constante
void setup()
{
}
void loop()
{
int valor_x; // variável
}
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
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
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
}
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
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Operadores aritméticos
UFSC - Oficina de Robótica - @2013 35
Símbolo Função
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo (resto da divisão inteira)
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Operadores relacionais
UFSC - Oficina de Robótica - @2013 36
Símbolo Função
> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
== Igual
!= Diferente
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Operadores lógicos
UFSC - Oficina de Robótica - @2013 37
Símbolo Função
&& E (and)
|| OU (or)
! Não (not)
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Operadores compostos
UFSC - Oficina de Robótica - @2013 38
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
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
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
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
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
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
}
}
}
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
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
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);
}
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
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
}
}
}
}
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
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
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);
}
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
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!!!");
}
}
}
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
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
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
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!!!");
}
}
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
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
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!!!");
}
}
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
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 55
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
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
}
}
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
Define a porta 10 como entrada de
dados e ativa o resistor pull-up.
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
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
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
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val = analogRead(0);
Serial.println(val);
}
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
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
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);
}
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
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
1/T = a + b * ln(R) + c * (ln(R))3
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
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
/*
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;
}
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
void setup()
{
Serial.begin(9600);
}
void loop()
{
int valor = analogRead(sensor);
double c = tempCelsius(valor);
Serial.println(valor);
Serial.println(c);
delay(100);
}
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
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
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
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()");
}
}
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
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
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);
}
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
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
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
}
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
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
7 8 1 3
0 1 32
Vetor
Dado armazenado
Índices
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
7 8 1 3
0 1 32
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
7 8 1 3
0 1 32
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
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);
}
}
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
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]
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
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
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
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);
}
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
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
Parâmetros
Tipo de dado
Nome
Conjunto de
instruções
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
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);
}
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
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();
}
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
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
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
Período
Pulso
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
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
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
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
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);
}
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
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
Laboratório de Automação
e Robótica Móvel
Financiamento:
Execução:
 Exemplos de shields
UFSC - Oficina de Robótica - @2013 96

Mais conteúdo relacionado

PDF
Apostila para Programar Arduino
PPTX
Introdução ao Arduino: Fundamentos e Aplicações de Microcontroladores
PPT
Interfaces fisicas para dispositivos moveis
PDF
Arduino - Hardware Livre e Robótica
PPTX
PLCduino - A PLC using Arduino platform
PPTX
Introdução a arduino, oficina para iniciantes
PPTX
1 aula do curso de automação - Arduino
ODP
Arduino- Conceitos e Aplicações
Apostila para Programar Arduino
Introdução ao Arduino: Fundamentos e Aplicações de Microcontroladores
Interfaces fisicas para dispositivos moveis
Arduino - Hardware Livre e Robótica
PLCduino - A PLC using Arduino platform
Introdução a arduino, oficina para iniciantes
1 aula do curso de automação - Arduino
Arduino- Conceitos e Aplicações

Mais procurados (19)

PDF
Minicurso introducao a plataforma arduino nathecia cunha e alcimar medeiros -...
PDF
Programação em-arduino-módulo-básico
PPTX
Arduino day-2015-v1
PDF
Arduino - Dicas & Truques
PDF
Ap apostila arduino-rev4
PPT
Arduino - Desenvolvendo com hardware livre
PDF
Introdução ao Arduino e robótica
PDF
Introdução a Sistemas Embarcados com Arduino - mini-curso
PPTX
Arduino Hack Day Corumbá
PDF
Minicurso arduino eeep aurora
PPT
Arduino Hack Day por Vinicius Senger
PPT
Introdução ao arduino palestra
PDF
Curso de arduino
ODP
Aula 1: Conhecendo o Arduino
PDF
Cartilhado arduino ed10
PDF
Guia arduino iniciante multilogica ARDUINO
PPT
Técnicas de Prototipação II - LEGO Aula 02
PDF
Sestinfo 2013 - Arduino
PDF
Arduino introdução - 10 projectos
Minicurso introducao a plataforma arduino nathecia cunha e alcimar medeiros -...
Programação em-arduino-módulo-básico
Arduino day-2015-v1
Arduino - Dicas & Truques
Ap apostila arduino-rev4
Arduino - Desenvolvendo com hardware livre
Introdução ao Arduino e robótica
Introdução a Sistemas Embarcados com Arduino - mini-curso
Arduino Hack Day Corumbá
Minicurso arduino eeep aurora
Arduino Hack Day por Vinicius Senger
Introdução ao arduino palestra
Curso de arduino
Aula 1: Conhecendo o Arduino
Cartilhado arduino ed10
Guia arduino iniciante multilogica ARDUINO
Técnicas de Prototipação II - LEGO Aula 02
Sestinfo 2013 - Arduino
Arduino introdução - 10 projectos
Anúncio

Destaque (20)

PDF
Introdução ao Arduino
PPT
C.E.S.A.R Introducao ao Arduino
PDF
Palestra: Robótica com Arduino
PDF
Mini-curso de Introdução a Eletrônica com Arduino
PDF
Literatura infantil recurso_metodologico_ensino_aprendizagem_matematica
PDF
Oficina Arduino
PDF
CSEduino - Build your Arduino from scratch
PPTX
Projeto banana
PPT
Oficina Scratch para Arduino Cap UFRJ
PPTX
PPTX
Oficina de Robótica e Automação Casa de Vovó Dedé: Introdução
PDF
Estratégias para salvar um restaurante e fazer o negócio decolar a partir da ...
PDF
Scratch & Arduino
PPTX
O sensor de ultrassons SR-04 e programação em S4A
PDF
Robótica Educacional - Vex IQ Brasil
PDF
TDC2016POA | Trilha Education - O ensino de programação, robótica e automação...
PPTX
Arduino – eletrônica básica
PDF
Computação física com arduino
PDF
Robótica e Ética
PDF
Projeto Arduino - Hardware para fazer coisas legais - FOCAI
Introdução ao Arduino
C.E.S.A.R Introducao ao Arduino
Palestra: Robótica com Arduino
Mini-curso de Introdução a Eletrônica com Arduino
Literatura infantil recurso_metodologico_ensino_aprendizagem_matematica
Oficina Arduino
CSEduino - Build your Arduino from scratch
Projeto banana
Oficina Scratch para Arduino Cap UFRJ
Oficina de Robótica e Automação Casa de Vovó Dedé: Introdução
Estratégias para salvar um restaurante e fazer o negócio decolar a partir da ...
Scratch & Arduino
O sensor de ultrassons SR-04 e programação em S4A
Robótica Educacional - Vex IQ Brasil
TDC2016POA | Trilha Education - O ensino de programação, robótica e automação...
Arduino – eletrônica básica
Computação física com arduino
Robótica e Ética
Projeto Arduino - Hardware para fazer coisas legais - FOCAI
Anúncio

Semelhante a Programação em-arduino-módulo-básico (20)

PDF
Workshop iniciação à robótica - Gyro
PDF
Workshop iniciação à robótica - Farrusco
PPTX
Arduíno muito prazer
PDF
Curso-Programação-Básica-em-Arduino-Aula-1.pdf
PPTX
Aula básica Arduino
PPT
Arduino na engenharia civil introdução.ppt
PDF
Ufes erus minicurso arduino
PPTX
Robótica e Sistemas interativos utilizando Arduino
PPT
Mini Curso Sistemas Embarcados
PDF
MATEMÁTICA E SUAS TECNOLOGIAS CIÊNCIAS DA NATUREZA E SUAS TECNOLOGIAS Volume ...
PPT
V2 - Microcontroladores: a revolucao do arduino
PPTX
Introdução a plataforma arduino
PPTX
Desafio de Robótica - Católica de Santa Catarina - Joinville
PDF
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
PDF
Robô seguidor de linha
PPT
Arduino
PPTX
Introdução à eletronica e robótica com arduino
PPTX
Sistemas Digitais - Aula 06 - Como programar o Arduino
PDF
Slide - Introdução ao Arduino e Sensores.pdf
PDF
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Workshop iniciação à robótica - Gyro
Workshop iniciação à robótica - Farrusco
Arduíno muito prazer
Curso-Programação-Básica-em-Arduino-Aula-1.pdf
Aula básica Arduino
Arduino na engenharia civil introdução.ppt
Ufes erus minicurso arduino
Robótica e Sistemas interativos utilizando Arduino
Mini Curso Sistemas Embarcados
MATEMÁTICA E SUAS TECNOLOGIAS CIÊNCIAS DA NATUREZA E SUAS TECNOLOGIAS Volume ...
V2 - Microcontroladores: a revolucao do arduino
Introdução a plataforma arduino
Desafio de Robótica - Católica de Santa Catarina - Joinville
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
Robô seguidor de linha
Arduino
Introdução à eletronica e robótica com arduino
Sistemas Digitais - Aula 06 - Como programar o Arduino
Slide - Introdução ao Arduino e Sensores.pdf
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II

Último (20)

PDF
Material referente ao método kanban f2ms
PPTX
Portuguese_Portfolio_May_2024.pptx_redes
PDF
Análise do concreto permeável com adição de resíduos
PDF
1 - Aula Pneumática Elementos da Pneumática.pdf
PPTX
Integração SMS introdutorio 111111111111
PDF
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
PDF
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
PDF
Aspectos Gerais da area de Instrumentacao.pdf
PPT
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
PPTX
Introducao a Olericultura I E CLASSIFICAÇÃO
PPTX
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
PPT
O gênero resumo O gênero resumo O gênero
PDF
Mapa de Oferta Eng Civil (20h 02min, 06-08-2025).pdf
PDF
Projecto Fotovoltaico de um sistema de abastecimento de agua
PPT
Ergonomia Aula 01 conceitos básicos segurança
PDF
Boas práticas em rebobinamento trifásico .pdf
PPT
Aula_2_Atomo distribuiçao eletronica.ppt
PPTX
2 - introducao a ciencia do solo para o curso de agronomia.ppt
PDF
MIP - soja.- pragas da cultura e seu controle
PPTX
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
Material referente ao método kanban f2ms
Portuguese_Portfolio_May_2024.pptx_redes
Análise do concreto permeável com adição de resíduos
1 - Aula Pneumática Elementos da Pneumática.pdf
Integração SMS introdutorio 111111111111
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
Maqinas1(ENCANAMENTOS E ACESSORIOS)2.pdf
Aspectos Gerais da area de Instrumentacao.pdf
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
Introducao a Olericultura I E CLASSIFICAÇÃO
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
O gênero resumo O gênero resumo O gênero
Mapa de Oferta Eng Civil (20h 02min, 06-08-2025).pdf
Projecto Fotovoltaico de um sistema de abastecimento de agua
Ergonomia Aula 01 conceitos básicos segurança
Boas práticas em rebobinamento trifásico .pdf
Aula_2_Atomo distribuiçao eletronica.ppt
2 - introducao a ciencia do solo para o curso de agronomia.ppt
MIP - soja.- pragas da cultura e seu controle
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais

Programação em-arduino-módulo-básico

  • 1. Financiamento: Execução: Laboratório de Automação e Robótica Móvel Programação em Arduino Módulo Básico
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  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
  • 6. 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
  • 7. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  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
  • 8. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Processamento de dados UFSC - Oficina de Robótica - @2013 8 Entrada Processamento Saída
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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 void setup() { } void loop() { }
  • 16. 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 void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
  • 17. 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
  • 18. 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 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"); }
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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 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.
  • 30. 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 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.
  • 31. 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 #define BOTAO 10 // constante const int pin_botao = 13; // constante void setup() { } void loop() { int valor_x; // variável }
  • 32. 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
  • 33. 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 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 }
  • 34. 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
  • 35. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Operadores aritméticos UFSC - Oficina de Robótica - @2013 35 Símbolo Função + Adição - Subtração * Multiplicação / Divisão % Módulo (resto da divisão inteira)
  • 36. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Operadores relacionais UFSC - Oficina de Robótica - @2013 36 Símbolo Função > Maior < Menor >= Maior ou igual <= Menor ou igual == Igual != Diferente
  • 37. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Operadores lógicos UFSC - Oficina de Robótica - @2013 37 Símbolo Função && E (and) || OU (or) ! Não (not)
  • 38. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Operadores compostos UFSC - Oficina de Robótica - @2013 38 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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 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 } } }
  • 43. 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
  • 44. 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 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); }
  • 45. 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 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 } } } }
  • 46. 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
  • 47. 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 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); }
  • 48. 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 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!!!"); } } }
  • 49. 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
  • 50. 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
  • 51. 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 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!!!"); } }
  • 52. 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
  • 53. 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 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!!!"); } }
  • 54. 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
  • 55. 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 55
  • 56. 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 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 } }
  • 57. 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 Define a porta 10 como entrada de dados e ativa o resistor pull-up.
  • 58. 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
  • 59. 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
  • 60. 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 void setup() { Serial.begin(9600); } void loop() { int val = analogRead(0); Serial.println(val); }
  • 61. 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
  • 62. 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 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); }
  • 63. 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
  • 64. 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 1/T = a + b * ln(R) + c * (ln(R))3
  • 65. 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
  • 66. 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 /* 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; }
  • 67. 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 void setup() { Serial.begin(9600); } void loop() { int valor = analogRead(sensor); double c = tempCelsius(valor); Serial.println(valor); Serial.println(c); delay(100); }
  • 68. 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
  • 69. 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
  • 70. 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 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()"); } }
  • 71. 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
  • 72. 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 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); }
  • 73. 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
  • 74. 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 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 }
  • 75. 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
  • 76. 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 7 8 1 3 0 1 32 Vetor Dado armazenado Índices
  • 77. 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 7 8 1 3 0 1 32
  • 78. 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 7 8 1 3 0 1 32
  • 79. 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 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); } }
  • 80. 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 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]
  • 81. 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
  • 82. 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
  • 83. 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 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); }
  • 84. 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
  • 85. 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 Parâmetros Tipo de dado Nome Conjunto de instruções
  • 86. 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 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); }
  • 87. 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 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(); }
  • 88. 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
  • 89. 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
  • 90. 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 Período Pulso
  • 91. 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
  • 92. 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 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
  • 93. 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 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); }
  • 94. 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
  • 95. 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
  • 96. Laboratório de Automação e Robótica Móvel Financiamento: Execução:  Exemplos de shields UFSC - Oficina de Robótica - @2013 96