Professional Documents
Culture Documents
Mdulo Bsico
Financiamento: Execuo:
Laboratrio de Automao
e Robtica Mvel
Material produzido para o projeto Oficina
de Robtica por: Financiamento:
Contatos:
Universidade Federal de Santa Catarina -
Laboratrio de Automao e Robtica Mvel
anderson.perez (at) ufsc.br Execuo:
http://oficinaderobotica.ufsc.br
Laboratrio de Automao
e Robtica Mvel
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
Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel
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:
void setup()
{
}
Execuo:
void loop()
{
}
Laboratrio de Automao
e Robtica Mvel
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{ Execuo:
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Laboratrio de Automao
e Robtica Mvel
computador (PC).
O monitor serial pode ser aberto no
menu tools opo serial monitor, ou
pressionando as teclas CTRL + SHIFT +
M. Execuo:
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
Laboratrio de Automao
e Robtica Mvel
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
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
Execuo:
Laboratrio de Automao
e Robtica Mvel
-0,58
Laboratrio de Automao
e Robtica Mvel
Laboratrio de Automao
e Robtica Mvel
ATENO!!!
Laboratrio de Automao
e Robtica Mvel
Laboratrio de Automao
word O mesmo que um unsigned int. e Robtica Mvel
Tipo Definio
Laboratrio de Automao
e Robtica Mvel
uma varivel
#define BOTAO 10 // constante
void setup()
{
Execuo:
}
void loop()
{
int valor_x; // varivel
} Laboratrio de Automao
e Robtica Mvel
Ateno!!!
O operador de atribuio no vale para o
comando #define.
Laboratrio de Automao
e Robtica Mvel
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
Laboratrio de Automao
e Robtica Mvel
Smbolo Funo
+ Adio
- Subtrao
* Multiplicao
/ Diviso
Execuo:
% Mdulo (resto da diviso inteira)
Laboratrio de Automao
e Robtica Mvel
Smbolo Funo
> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
Execuo:
== Igual
!= Diferente
Laboratrio de Automao
e Robtica Mvel
Smbolo Funo
&& E (and)
|| OU (or)
! No (not)
Execuo:
Laboratrio de Automao
e Robtica Mvel
Smbolo Funo
++ Incremento
-- Decremento
+= Adio com atribuio
-= Subtrao com atribuio
Execuo:
*= Multiplicao com atribuio
/= Diviso com atribuio
Laboratrio de Automao
e Robtica Mvel
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
char led;
void setup()
{
pinMode(led_vermelho, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
Serial.begin(9600);
}
monitor serial
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;
char led;
serial
void loop()
{
if (Serial.available()) {
led = Serial.read();
serial
const int led_vermelho = 5;
const int led_verde = 6;
const int led_amarelo = 7;
char led;
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:
Laboratrio de Automao
e Robtica Mvel
Resistor
pull-down
10K
Execuo:
Laboratrio de Automao
e Robtica Mvel
Programa
const int botao = 8;
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
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:
Execuo:
Laboratrio de Automao
e Robtica Mvel
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
Execuo:
Laboratrio de Automao
e Robtica Mvel
void setup()
{
Serial.begin(9600);
}
{
int val = analogRead(0);
Serial.println(val);
}
Laboratrio de Automao
e Robtica Mvel
e acionando um LED
Execuo:
Laboratrio de Automao
e Robtica Mvel
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);
}
Laboratrio de Automao
e Robtica Mvel
onde:
T = temperatura em Kelvin
R = resistncia em ohms
a, b, c: constantes definidas pelo fabricante do sensor Execuo:
Execuo:
Laboratrio de Automao
e Robtica Mvel
/*
Programa que utiliza a equao de Steinhart-Hart
*/
#include <math.h>
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
Laboratrio de Automao
e Robtica Mvel
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
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
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.
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);
}
Nota:
Laboratrio de Automao
Neste tipo de comando de repetio a avaliao da expresso e Robtica Mvel
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:
7 8 1 3
ndices 0 1 2 3
7 8 1 3
0 1 2 3
7 8 1 3
0 1 2 3
Exemplo:
digitalWrite(vetor[0], HIGH);
Ativa a porta cujo nmero est definido na
posio 0 do vetor.
Laboratrio de Automao
e Robtica Mvel
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
Laboratrio de Automao
e Robtica Mvel
Laboratrio de Automao
e Robtica Mvel
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;
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:
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:
void loop()
{
pisca_diagonal_principal();
pisca_diagonal_secundaria(); Laboratrio de Automao
e Robtica Mvel
}
Laboratrio de Automao
e Robtica Mvel
Perodo
Pulso Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel
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:
Execuo:
Laboratrio de Automao
e Robtica Mvel
Execuo:
Laboratrio de Automao
e Robtica Mvel