Sei sulla pagina 1di 43

25/05/2017

Mini-curso

Prof. Stefano

1
Prof. Stefano

O que é o Arduino?
• “Arduino é uma plataforma de prototipagem eletrônica open-
source baseado em hardware e software, flexível e fácil de usar. É
destinado a artistas, designers, hobbistas e qualquer pessoa
interessada em criar objetos ou ambientes interativos.” fonte:
http://www.arduino.cc/

1
25/05/2017

O que é o Arduino?
• Ou seja,
– O Arduino é uma placa eletrônica que possui um
microcontrolador, onde você pode desenvolver programas,
para receber sinais de sensores e botões nas suas entradas e
controlar leds e outras cargas nas suas saídas.

– Para fazer sua programação utiliza-se um software específico


baseado em linguagem C;

– Ele baseia-se na filosofia de hardware e software livre, onde


pode-se baixar gratuitamente o software e o hardware é
aberto, para que se alguém quiser montar sua própria placa ou
pode ser comprado pronta por um dos inúmeros fornecedores
existentes.
3

Exemplo de placa do Arduino


Alguns componentes
de uma placa do Entradas/Saídas Digitais
Arduino

Modelo

Conector
Mini-B USB

microcontrolador
Entrada
fonte

Alimentação Entradas Analógicas


4

2
25/05/2017

Outros modelos

Arduino Mega

Arduino Nano
5

Software Arduino
• IDE (Integrated Development Environment – Ambiente Integrado
de Desenvolvimento)

Verifica o programa

Carrega o programa no
microcontrolador

Programa novo

Abrir um programa

Salvar o programa

3
25/05/2017

Exemplo prático – exer01


• Digite o programa a seguir no IDE do Arduino.
Salve o programa como exer01.

Após digitar aperte


o primeiro ícone
para verificar o
programa

Exemplo prático – exer01


• Explicando o programa
// - permite a inclusão de comentários, que são importantes para
documentar o projeto. Funciona por linha;
/* */ - comentário para várias linhas;
; - o ponto e vírgula é utilizado para indicar o fim do comando;

No programa temos no mínimo duas funções obrigatórias:

void setup ( ) - onde fazemos as configurações, como por exemplo


se os pinos são entrada (INPUT) ou saída (OUTPUT).
É executada somente uma vez;
void loop ( ) – é a principal função do programa onde ele é
executado continuamente;
8

4
25/05/2017

Exemplo prático – exer01


• Explicando o programa
• pinMode(pino, MODO); - instrução para definir se o pino é
entrada (INPUT) ou saída (OUTPUT). Ex: pinMode (7,INPUT);

• digitalWrite(pino, VALOR); - instrução que coloca determinado


pino em nível lógico alto (HIGH – 5 volts na saída) ou baixo (LOW –
zero volts na saída). Neste caso irá liga o led do pino 13, que está
na própria placa;

• delay(tempo em ms); - instrução que gera um atraso, em


milisegundos. Lembrando que 1000 milisegundos é igual a 1
segundo;

Exemplo prático – exer01


• Conecte a placa do arduino ao computador;
• Em Tools verifique o modelo de placa e porta que está conectada;

placa
Porta
serial

• Depois carregue o programa no arduino;


10

5
25/05/2017

Exemplo prático – exer01


• Programa final com comentários.

• Altere o programa para que pisque a cada 2 segundos. 11

Examples e Sketchbook
• Abra o exemplo Blink. File Examples 01 Basics Blink;

• Altere o tempo para 500 ms e salve.

12

6
25/05/2017

Examples e Sketchbook
• Os exemplos (examples) são arquivos somente de leitura e não
será permitido salvar;

• Quando pressionamos o OK o IDE irá abrir uma nova página para


que seja salvo no livro de rascunho (Sketchbook), geralmente na
área de documentos;

13

Entrada Analógica
• O arduino tem 6 entradas analógicas, onde é possível aplicar uma
tensão entre 0 e 5 volts que serão convertidos para um valor
digital entre 0 e 1023, pois o conversor é de 10 bits (210 = 1024);

analogRead(pino); retorna um valor entre 0 e 1023.


• Exemplo de aplicação:
– Int valor = analogRead(A0); // Faz a leitura da entrada A0 e atribui este
valor a variável valor.
A função map converte o valor de
uma variável de uma escala para outra.
map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,100)
14

7
25/05/2017

Comunicação Serial
• O software do arduino tem uma função específica que permite
obter informações do microcontrolador durante a execução do
programa utilizando os comandos de comunicação serial.
• Para isso devemos inicialmente definir a taxa de transmissão em
“bits por segundo”. O usual é que a transmissão seja de 9600 bits
por segundo.
• No programa a seguir enviaremos o valor obtido da entrada
analógica e depois o valor convertido

15

Comunicação Serial
Exemplo de programa com comunicação serial

int valor,valorCon;
void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}

void loop() {

valor = analogRead(A0);
valorCon= map(valor,0,1023,0,255);
analogWrite(9,valorCon);
Serial.print(“\n Entrada = “);
Serial.print(valor);
Serial.print(“ \t Convertido = “);
Serial.println(valorCon);

}
16

8
25/05/2017

Comunicação Serial
• Funções para comunicação serial:
• Serial.begin(taxa); -- inicializa a comunicação serial na taxa
desejada;
• Serialprint(“mensagem”); -- envia para tela a mensagem
• Serialprintln(“mensagem”); -- envia para tela e vai para nova
linha;
• Serial.read( ); - lê dados da porta serial;

– Funções de caracteres:
– \n - nova linha;
– \t – tabulação horizontal;
– \a – tabulação vertical;

17

Comunicação Serial
Para visualizar as informações abra o “Serial Monitor”

18

9
25/05/2017

Comunicação Serial

Exercício
Desenvolver um programa para monitorar as entradas digitais 2 e 3.

DigitalReadSerial

10
25/05/2017

SHIELD LCD
DISPLAY ALFANUMÉRICO

MODELO 16 COLUNAS
POR 2 LINHAS

21

SHIELD LCD

Fonte: http://www.arduinoecia.com.br/2013/08/arduino-shield-lcd-16x2-com-keypad.html
http://blog.filipeflop.com/display/controlando-um-lcd-16x2-com-arduino.html 22

11
25/05/2017

DISPLAY DE CRISTAL LÍQUIDO - LCD


Composto por display
alfanumérico com 16 colunas e 2
linhas.

É preciso verificar a pinagem com o


fabricante, mas no geral encontramos a
seguinte sequência para o LCD. 14 Pinagem 1

No caso deste shield são utilizados os pinos Os botões utilizam a entrada


analógica A0

Sobram os pinos 0, 1, 2, 3, 11, 12, 13 (digitais),


e A1, A2, A3, A4, A5 (analógicos)

12
25/05/2017

Programas: fazer uma versão ensinando a programar utilizando o


LCD
- mostrar no lcd, posicionar linha coluna, apagar, tempo
- leitura da entrada analógica A1. Valor aparece na tela lcd e utilizar
função MAP em outro ponto do LCD. Depois mostrar o valor da
entrada utilizando as chaves e A0
- mostrar o conceito de variável e constante utilizando o LCD e
inicialização dos elementos
- tipos de if com as chaves, switch
- for chaves e função scroll
- while – chaves
- arrays e matrizes
- mini projetos - menu

-? mostrar operação matemática?

SHIELD LCD
#include <LiquidCrystal.h> // Inclui biblioteca do LCD

// Inicializa a biblioteca com os números dos pinos da interface


LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Cria um LCD objeto com estes pinos
//ATENÇÃO: Diferente dos exemplos do Arduino lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2); // Seta o display 16 colunas por 2 linhas
}

void loop() {

lcd.clear(); // Limpa Display


lcd.print("IFSC"); // Escreve o texto
delay(2000); //espera em ms
lcd.setCursor(5,1); // Cursor coluna 5 linha 1 (linhas 0 ou 1)
lcd.print("Campus JLLE");
delay(2000);

26

13
25/05/2017

SHIELD LCD
• #include <LiquidCrystal.h> // inclui a biblioteca de LCD
LiquidCrystal(rs, enable, d4, d5, d6, d7); // Cria um objeto LCD
com os respectivos pinos
• lcd.begin(coluna, linha); // define o nr de colunas e linhas do LCD
• lcd.clear(); // Limpa Display
• lcd.print(“TEXTO"); // Escreve algum texto
• lcd.setCursor(coluna,linha); // Posiciona Cursor
• lcd.scrollDisplayLeft(); //Desloca display esquerda
• lcd.scrollDisplayRight(); //Desloca display direita
lcd.noDisplay(); // Desliga Display
lcd.display(); //Liga display

27

Constantes e variáveis
• Constantes: são elementos que tem um valor fixo,
não podendo ser mudados durante a execução do
programa;
– Exemplo: π = 3,1415927.... Em vez de escrever toda vez o
número podemos nomear uma constante PI = 3,1415927 e
durante programa utilizar PI;
• Variáveis: são elementos que permitem a alteração
do seu valor durante a execução do programa. É
recomendável que no início do programa seja
atribuído um valor inicial a elas, que elas sejam
inicializadas;
– Exemplo: Calcule consumo médio de combustível de um
automóvel. CONSUMO= KM/L
28

14
25/05/2017

Constantes e variáveis
No arduino os tipos básicos são:
Tipo Tamanho Tamanho Intervalo Obs
(Bits) (Bytes)
Char 8 1 -128 a 127 Especificados pela tabela
ASCII
Int 16 2 -32768 a 32767 Números inteiros
Float 32 4 -3.4028235E+38 a Valor em ponto flutuante
3.4028235E+38
Double 32 4 -3.4028235E+38 a Valor em ponto flutuante
3.4028235E+38 (Na placa Due é de 64 bits)
Boolean 8 1 true ou false Valores booleanos
verdadeiros ou falsos
Byte 8 1 0 a 255 Números inteiros
Word 16 2 0 a 65535 Números inteiros

• O uso de operador do tipo float ou double acarretará em maior espaço alocado na


memória e mais tempo de processamento nas operações matemáticas;
• Ainda temos outros tipos que veremos em maiores detalhes mais adiante.
29

SHIELD LCD
Exemplo de programa com utilização de variáveis
#include <LiquidCrystal.h> // Inclui biblioteca do LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


//ATENÇÃO: Diferente dos exemplos do Arduino lcd(12, 11, 5, 4, 3, 2);

int i=5; Declara e inicializa


char valor = ‘B’; variáveis globais

void setup() {
lcd.begin(16, 2); Variável
}
Global
void loop() {
X
byte by=B1001; Declara e inicializa variável local Local
lcd.clear(); // Limpa Display
lcd.print("Valor de i = ");
lcd.print(i); //Mostra o valor da variável inteira na mesma linha
lcd.setCursor(5,1);
lcd.print(valor); //Mostra o valor do caractere
lcd.setCursor(8,1);
lcd.print(by); //Mostra o valor da variável byte
delay(2000);
}
30

15
25/05/2017

Operadores
• Operador Aritmético

Operador Operação realizada


+ Soma

- Subtração

* Multiplicação

/ Divisão

% Resto da divisão

++ Incremento

-- Decremento

31

SHIELD LCD + Entrada Analógica


#include <LiquidCrystal.h>
No shield LCD a entrada A0 tem o
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); conjunto de chaves conectadas através
int valor,valorCon;
de divisor de tensão e de acordo chave
pressionada obtemos diferentes valores.
void setup() { Na figura abaixo temos os valores
lcd.begin(16, 2);
aproximados para cada caso.
}

void loop() {
valor = analogRead(A0); //Leitura entrada A0
lcd.clear(); // Limpa Display
lcd.print("A0 = "); 0
lcd.print(valor);
lcd.setCursor(0,1);
valorCon= map(valor,0,1023,0,100);
132
lcd.print(" A0 Conver = ");
lcd.print(valorCon); 307
delay(200);
}
480
A função map converte o valor de
uma variável de uma escala para outra. 720
map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,100)
32

16
25/05/2017

Operadores
• Operador de Relação: eles testam as relações nas
expressões. Seu resultado é 1 se for verdadeiro ou 0
se for falso;
Operador Operação realizada
== Igual a

!= Diferente

> Maior que

< Menor que

>= Maior ou igual a

<= Menor ou igual a

33

Operadores
• Exemplos de Operador de Relação:
• 4 = = 3; retorna 0 - FALSO
• 3 = = 3; retorna 1 - VERDADEIRO
• 7 > = 3; retorna 1 – VERDADEIRO
• 4 < = 3; retorna 0 - FALSO
• 4 ! = 3; retorna 1 – VERDADEIRO
• 4 > 3; retorna 1 – VERDADEIRO

34

17
25/05/2017

Operadores
• Operadores lógicos: realizam operações lógicas nas
expressões. Os operandos são considerados
verdadeiros(1) ou falsos(0). Seu resultado é 1 se for
verdadeiro ou 0 se for falso;

Operador Operação realizada


&& AND

|| OR

! NOT (Negado)

35

Operadores
• Exemplos de Operador Lógico:
a) (3 > 1) & & (2= = 2);
1 & & 1; resulta em 1 - verdadeiro

b) (3 > 7) | | (2= = 2);


0 | | 1 ; resulta em 1 - verdadeiro

c) !{(3 > 1) & & (2= = 2)} ;


!{ 1 & & 1};
!{ 1} ; - resulta em 0 - falso

36

18
25/05/2017

Operadores
• Operadores Bit a Bit: eles testam as relações dos
operadores nas expressões bit a bit;

Operador Operação realizada


& AND

| OR

^ XOR

~ NOT

>> SHIFT RIGHT,desloca bits a


direita
<< SHIFT LEFT, desloca bits a
esquerda
37

Operadores
• Exemplos de Operador Bit a Bit:
a) v1= 101101, v2=110011, v3 = v1 & v2; AND
v1 = 1 0 1 1 0 1
v2 = 1 1 0 0 1 1
v3 = 1 0 0 0 0 1

b) v1= 110001, v2=010111, v3 = v1 | v2; OR


v1 = 1 1 0 0 0 1
v2 = 0 1 0 1 1 1
v3 = 1 1 0 1 1 1

38

19
25/05/2017

Operadores
• Exemplos de Operador Bit a Bit:
c) v1= 101101, v2=110011, v3 = v1 ^ v2; XOR
v1 = 1 0 1 1 0 1
v2 = 1 1 0 0 1 1
v3 = 0 1 1 1 1 0

d) v1= 110001, v2 = ~ v1 ; NOT


v1 = 1 1 0 0 0 1
v2 = 0 0 1 1 1 0

39

SHIELD LCD
Exemplos de programas com operadores lógicos
Teste o programa para manipulação de bits
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
boolean running = false;
int a = 5;
void setup() {
int b = 0;
lcd.begin(16, 2);
}
void setup() {
lcd.begin(16, 2);
void loop() {
}
lcd.clear(); // Limpa Display
void loop() {
lcd.print("Bool ");
lcd.print(running);
lcd.clear(); // Limpa Display
lcd.setCursor(8,0);
lcd.print("a=");
lcd.print("4>3 = ");
lcd.print(a); // binary: 000101 (5 dec)
lcd.print(4>3);
lcd.setCursor(5,0);
lcd.setCursor(0,1);
b=a<<3; // binary: 00101000 (40 dec)
lcd.print("(3>1)&&(2==2)= ");
lcd.print("b=a<<3 ->");
lcd.print((3>1) && (2==2)); //3>1=1;2==2=1;1&&1=1
lcd.print(b);
delay(2000);
lcd.setCursor(4,1);
running = !running; //inverte variável
lcd.print("a OR b = ");
}
lcd.print(a | b); // binary: 00101101 (45 dec)
delay(2000);
}

40

20
25/05/2017

Controle de fluxo de um programa

• O controle do fluxo normal de um programa é um


poderoso recurso em qualquer linguagem de
programação;

• A seguir veremos as diferentes formas de fazer este


controle;

41

Controle de fluxo de um programa


• Declaração de controle condicional IF
IF.......THEN....ELSE
SE......ENTÃO...SENÃO
• Ele é utilizado para executar um determinado
comando se uma determinada condição for
verdadeira. A opção ELSE não é obrigatória.

IF (true) THEN IF (verdadeiro) THEN


CommandsTrue ComandosVerdadeiro
ELSE ELSE
CommandsFalse
ComandosFalso
42

21
25/05/2017

Controle de fluxo de um programa


• Caso 1: somente verdadeiro:
if (true)
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
{
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
CommandsTrue
}
int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


entrada = analogRead(A0);
if(entrada<100){ //botão direita do shield pressionado
lcd.print(“right selecionado”);
delay(2000); }
}

43

Controle de fluxo de um programa


• Caso 2: com verdadeiro e falso:
if (true) #include <LiquidCrystal.h> // Inclui biblioteca do LCD
{ LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
CommandsTrue int entrada=0;
} void setup() {
else }
lcd.begin(16, 2);

{ void loop() {
CommandsFalse lcd.clear(); // Limpa Display
} entrada = analogRead(A0);
lcd.setCursor(1,0);
lcd.print(“botão right”);
lcd.setCursor(3,1);
if(entrada<100){ //botão direita do shield pressionado
lcd.print(“pressionado”);}
else{
lcd.print(“não pressionado”);}
delay(2000); }
}

44

22
25/05/2017

Controle de fluxo de um programa


• Caso 3: IF aninhado:
if (true1)
{ V
true1 Commands1
Commands1 ?
}
N
else if(true2)
{ V
Commands2 true2 Commands2
?
}
else if (true3) N
{
V
Commands3 true3 Commands3
} ?
else
N
{
Commands4
Commands4
}
45

#include <LiquidCrystal.h> // Inclui biblioteca do LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


entrada = analogRead(A0);
lcd.setCursor(1,0);
if (entrada < 100) {
lcd.print ("Direita "); }
else if (entrada < 200) {
lcd.print ("Cima "); }
else if (entrada < 400){
lcd.print ("Baixo "); }
else if (entrada < 600){
lcd.print ("Esquerda"); }
else if (entrada < 800)
{ lcd.print ("Select "); }

28/04/16

23
25/05/2017

switch
Switch( ) case:
• Declaração de controle condicional
switch (var){
case 1:
comandos;
break;
case 2:
comandos;
break;
default:
comandos;
break;
}
28/04/16

Switch( ) case:
#include <LiquidCrystal.h> // Inclui biblioteca do LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


entrada = analogRead(A0);
valorCon= map(entrada,0,1023,0,10);
lcd.setCursor(1,0);
lcd.print(" valorCon ");
lcd.print(valorCon);
lcd.setCursor(1,1);
switch (valorCon){
case 1:
lcd.print ("Direita ");
break;
case 2:
lcd.print ("Cima ");
break;
default:
lcd.print ("Select ");
Break;
}
28/04/16

24
25/05/2017

Controle de fluxo de um programa


• Declaração de controle condicional WHILE
WHILE (true) { }
ENQUANTO (verdadeiro) { }
• Faz a verificação da condição ANTES de executar o
comando. Enquanto a condição permanecer
verdadeira o(s) comando(s) é/são executados.

WHILE (true)
{ V
pergunta Comandos
Comandos ?
} N

49

Controle de fluxo de um programa


#include <LiquidCrystal.h> // Inclui biblioteca do LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


entrada = analogRead(A0);
lcd.setCursor(1,0);
lcd.print(" entrada ");
lcd.print(entrada);
lcd.setCursor(1,1);

while(entrada<400){
lcd.print(“robô explorando”);
delay(1000); }
lcd.print(“robô parado”);
delay(2000);
}

50

25
25/05/2017

Controle de fluxo de um programa


• Declaração de controle condicional DO ... WHILE
DO { }WHILE (true)
FAÇA{ } ENQUANTO (verdadeiro)
• Executa a ação ANTES de verificar a condução.
Enquanto a condição permanecer verdadeira o(s)
comando(s) é/são executados.(Menu)
Comandos
DO
{ V
Comandos pergunta
?
}WHILE (true);
N

51

Controle de fluxo de um programa


#include <LiquidCrystal.h> // Inclui biblioteca do LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


entrada = analogRead(A0);
lcd.setCursor(1,0);
lcd.print(" entrada ");
lcd.print(entrada);
lcd.setCursor(1,1);
do{
lcd.print(“robô explorando”);
delay(1000); }
while(entrada<400){
lcd.print(“robô parado”);
delay(2000);
}

52

26
25/05/2017

Controle de fluxo de um programa


• Declaração de controle condicional FOR
• Ele é utilizado para executar determinados comandos
por um certo número de vezes.

FOR (INÍCIO;CONDIÇÃO,INCREMENTO) {
Comandos;
}

53

#include <LiquidCrystal.h> // Inclui biblioteca do LCD


Exemplo Scroll LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int entrada=0;

void setup() {
lcd.begin(16, 2);
}

void loop() {

lcd.clear(); // Limpa Display


lcd.setCursor(1,0);
lcd.print(“IFSC”);
lcd.setCursor(3,1);
lcd.print(“Robótica”);

for (int Counter = 0; Counter < 13; Counter++) {


lcd.scrollDisplayLeft();
delay(150);
}
for (int Counter = 0; Counter < 29; Counter++) {
lcd.scrollDisplayRight();
delay(150);
}

28/04/16

27
25/05/2017

PWM
• PWM – Modulação por Largura de Pulso (Pulse-Width
Modulation)
• Permite variar a largura do pulso de uma saída simplesmente
variando o número (0 – 255) enviado para ela.

Se ligarmos um led na saída


poderemos observar o feito da
variação da tensão média sobre o
componente

55

PWM
• Exercício: Elabore um programa que varie a intensidade luminosa
de um led no pino 9 entre 100%, 75%, 50%, 25% e 0%, com meio
segundo de intervalo entre cada estágio.

void setup( ) {
pinMode(9, OUTPUT);
}

void loop( ) {

analogWrite(9,255); // saída em 100%


delay(500);
analogWrite(9,191); // saída em 175%
delay(500);
analogWrite(9,127); // saída em 50%
delay(500);
analogWrite(9,63); // saída em 25%
delay(500);
analogWrite(9,0); // saída em 0%
delay(500);

56

28
25/05/2017

Entrada Analógica e PWM


• Exercício: Elabore um programa que controle a luminosidade de
um led utilizando a saída PWM do pino 9 através de um
potenciômetro na entrada analógica A0.

int valor,valorCon;
A função map converte o valor de
void setup() {
uma variável de uma escala para
pinMode(9, OUTPUT);
outra.
}
map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,255)
void loop() {

valor = analogRead(A0);
valorCon= map(valor,0,1023,0,255); Faltou esquema para ligar pot
analogWrite(9,valorCon);
}

57

Servomotor
• São motores especiais que permitem o controle do ângulo de
posição do eixo.

58

29
25/05/2017

Servomotor

59

Servomotor
• ATENÇÃO: LIGAR A ALIMENTAÇÃO INVERTIDA PODE LEVAR A
QUEIMA DO SERVO

60

30
25/05/2017

Servomotor
• Programa exemplo: Controle um servo no pino 5 pela leitura do
potenciômetro.
#include <Servo.h>

Servo servo1; // Cria um objeto servo

void setup() {

servo1.attach(5); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico)


}

void loop() {

int angle = analogRead(0); // Lê o valor do potenciômetro


angle=map(angle, 0, 1023, 0, 180); // Mapeia os valores de 0 a 180 graus
servo1.write(angle); // Escreve o ângulo para o servo
delay(15); // Espera de 15ms, para permitir que o servo atinja a posição

}
61

Leitura da entrada
• Para ler o nível lógico de algum pino da entrada
utilizamos a instrução:
digitalRead(pino);
• Para ler o nível lógico de algum pino da entrada
utilizamos a instrução:

62

31
25/05/2017

Motor Corrente Contínua

Fonte: http://en.wikipedia.org/wiki/Brushed_DC_electric_motor 63

Motor Corrente Contínua


• Sentido de giro de um motor CC - Exemplo

I I

+ V - - V +

64

32
25/05/2017

Ponte H

65

SHIELD para motor CC

Fonte:http://www.dfrobot.com
66

33
25/05/2017

SHIELD para motor CC


int M1 = 4; //direção motor 2
int E1 = 5; //PWM motor 2

int E2 = 6; //PWM motor 1


int M2 = 7; //direção motor 1

void setup()
{
pinMode(M1, OUTPUT); Altere o programa para
pinMode(M2, OUTPUT); mudar o sentido e
} velocidades dos
motores
void loop()
{
digitalWrite(M1,HIGH); //sentido
digitalWrite(M2, HIGH); //sentido
analogWrite(E1, 255); //PWM
analogWrite(E2, 122); //PWM
delay(30);
}
67

Motor de Passo
• Motor de passo é um motor síncrono sem escovas, com
enrolamento no estator e imã permanente no rotor(tipo PM ou
híbrido). Seu movimento é feito em passos.

Os motores de passo
são fabricados
geralmente com 12,
24, 72, 144, 180, e
200, passos por volta,
o que resulta em
ângulos de 30, 15, 5,
2.5, 2, e 1.8 graus por
passo (pode variar)

Fonte:http://www.engineersgarage.com/articles/stepper-motors 68

34
25/05/2017

Motor de Passo
• UNIPOLAR

69

Motor de Passo

70

35
25/05/2017

Motor de Passo
• BIPOLAR

• Os motores de passo bipolares são conhecidos por sua excelente relação


tamanho/torque: eles proporcionam um maior torque, cerca de 40% a mais,
comparativamente a um motor unipolar do mesmo tamanho.
• Isto se deve ao fato de que quando se energiza uma fase, se magnetiza
ambos os pólos em que a fase (ou bobina) está instalada

Fonte: http://labdegaragem.com/profiles/blogs/tutorial-sobre-motor-de-passo
71

Motor de Passo

72

36
25/05/2017

Motor de Passo
• Modo de acionamento – PASSO COMPLETO (Full Step)

73

Motor de Passo
• Modo de acionamento – MEIO PASSO (Half-Step)

74

37
25/05/2017

Motor de Passo

Fonte: http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm
75

Motor de Passo
• MOTOR DE PASSO COM ARDUINO – ULN 2003

Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/

76

38
25/05/2017

Motor de Passo
• LIGAÇÕES

Alimente o motor de passo com +5V e o GND provenientes do Arduino.


Conecte o Pino 2 do Arduino ao IN1, Pino 3 ao IN2, Pino 4 ao IN3 e
Pino 5 ao IN4.

Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/

77

Motor de Passo
#include <Stepper.h> // Incluir Biblioteca 'Stepper'

Stepper myStepper(300, 2, 4,3, 5);

void setup(){

void loop(){
myStepper.setSpeed(20); // Ajusta a velocidade.
myStepper.step(1500); // Numero de passos, sentido horário
delay(500); // Delay de 0,5seg antes do próximo

myStepper.setSpeed(30); // // Ajusta a velocidade


myStepper.step(-1500); // Numero de passos, agora sentido anti-horário
delay(500); // Delay de 0,5seg
}

Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/

78

39
25/05/2017

Motor de Passo
• #include <Stepper.h> - inclui a biblioteca do motor de passo;
• Stepper myStepper(passo, pino1, pino2, pino3, pino4); - informa
ao programa o passo e ligações do motor;
• myStepper.setSpeed(rpm); - seta a velocidade do motor de passo
em RPM;
• myStepper.step(passos); - faz com que o motor se desloque um
determinado número de passos. (esta função faz o programa
parar até que atinja o número de passos programado)

79

Comparativo Motores

Fonte:http://www.telecom.uff.br/pet/petws/downloads/tutoriais/stepmotor/stepmotor2k81119.pdf

80

40
25/05/2017

• SENSOR ULTRASSONICO – HC-SR04

http://blog.filipeflop.com/sensores/sensor-
ultrassonico-hc-sr04-ao-arduino.html
Primeiramente é enviado um pulso de 10µs, indicando
o início da transmissão de dados. Depois disso, são
enviado 8 pulsos de 40 KHz e o sensor então aguarda
o retorno (em nível alto/high), para determinar a
distância entre o sensor e o objeto, utilizando a
equação Distância = (Tempo echo em nível alto *
velocidade do som) /2

http://blog.filipeflop.com/sensores/sensor-ultrassonico-hc-sr04-ao-arduino.html
http://www.arduinoecia.com.br/2013/12/controle-de-vagas-de-estacionamento-com.html
28/04/16

biblioteca Ultrasonic,

28/04/16

41
25/05/2017

//Programa: Conectando Sensor Ultrassonico HC-SR04 ao Arduino

//Autor: FILIPEFLOP

//Carrega a biblioteca do sensor ultrassonico

#include <Ultrasonic.h>

//Define os pinos para o trigger e echo

#define pino_trigger 4

#define pino_echo 5

//Inicializa o sensor nos pinos definidos acima

Ultrasonic ultrasonic(pino_trigger, pino_echo);

void setup()

Serial.begin(9600);

Serial.println("Lendo dados do sensor...");

void loop()

//Le as informacoes do sensor, em cm e pol

float cmMsec, inMsec;

long microsec = ultrasonic.timing();

cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);

//Exibe informacoes no serial monitor

Serial.print("Distancia em cm: ");

Serial.print(cmMsec);

Serial.print(" - Distancia em polegadas: ");

Serial.println(inMsec);

delay(1000);

• SENSOR DE PRESENÇA INFRAVERMELHO PIR DYP-ME003

http://blog.filipeflop.com/sensores/acendendo-uma-lampada-com-sensor-de-presenca.html

28/04/16

42
25/05/2017

//Programa : Sensor de presenca com modulo PIR


//Autor : FILIPEFLOP

int pinopir = 7; //Pino ligado ao sensor PIR


int acionamento; //Variavel para guardar valor do sensor

void setup()
{
pinMode(pinopir, INPUT); //Define pino sensor como entrada
Serial.begin(9600);
}

void loop()
{
acionamento = digitalRead(pinopir); //Le o valor do sensor PIR

if (acionamento == LOW) //Sem movimento, mantem rele


desligado
{
Serial.println("Parado");
}
else //Caso seja detectado um movimento, aciona o rele
{
Serial.println("Movimento !!!");
}
}

28/04/16

REFERÊNCIAS
• Michael McRoberts .Arduino Básico .;
• Aprendendo a programar o arduino. PET
Autonet
• www.arduino.cc
• Notas de aula. Professor Stefano.

86

43

Potrebbero piacerti anche