25/05/2017
1
Prof. Stefano1
Mini-curso
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 pessoainteressada em criar objetos ou ambientes interativos.” fonte:http://www.arduino.cc/
2
25/05/2017
2
O que é o Arduino?
• Ou seja,
– O Arduino é uma placa eletrônica que possui ummicrocontrolador, onde você pode desenvolver programas,para receber sinais de sensores e botões nas suas entradas econtrolar leds e outras cargas nas suas saídas.
– Para fazer sua programação utiliza-se um software específicobaseado em linguagem C;
– Ele baseia-se na filosofia de hardware e software livre, ondepode-se baixar gratuitamente o software e o hardware éaberto, para que se alguém quiser montar sua própria placa oupode ser comprado pronta por um dos inúmeros fornecedoresexistentes.
3
Exemplo de placa do Arduino
4
Entradas/Saídas DigitaisAlguns componentesde uma placa doArduino
Entradas Analógicas
microcontrolador
ConectorMini-B USB
Entradafonte
Modelo
Alimentação
25/05/2017
3
Outros modelos
5Arduino Nano
Arduino Mega
Software Arduino
• IDE (Integrated Development Environment – Ambiente Integrado
de Desenvolvimento)
6
Verifica o programa
Carrega o programa no microcontrolador
Programa novo
Abrir um programa
Salvar o programa
25/05/2017
4
Exemplo prático – exer01
• Digite o programa a seguir no IDE do Arduino.
7
Após digitar aperteo primeiro íconepara verificar o
programa
Salve o programa como exer01.
Exemplo prático – exer01
• Explicando o programa
// - permite a inclusão de comentários, que são importantes paradocumentar 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 exemplose 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
25/05/2017
5
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 determinadopino 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, emmilisegundos. Lembrando que 1000 milisegundos é igual a 1segundo;
9
Exemplo prático – exer01
• Conecte a placa do arduino ao computador;
• Em Tools verifique o modelo de placa e porta que está conectada;
• Depois carregue o programa no arduino;
10
placa
Porta serial
25/05/2017
6
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
25/05/2017
7
Examples e Sketchbook
• Os exemplos (examples) são arquivos somente de leitura e nãoserá permitido salvar;
• Quando pressionamos o OK o IDE irá abrir uma nova página paraque 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 umatensão entre 0 e 5 volts que serão convertidos para um valordigital 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.
14
A função map converte o valor deuma variável de uma escala para outra.
map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,100)
25/05/2017
8
Comunicação Serial
• O software do arduino tem uma função específica que permiteobter informações do microcontrolador durante a execução doprograma 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 bitspor segundo.
• No programa a seguir enviaremos o valor obtido da entradaanalógica e depois o valor convertido
15
Comunicação Serial
16
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);
}
Exemplo de programa com comunicação serial
25/05/2017
9
Comunicação Serial
• Funções para comunicação serial:
• Serial.begin(taxa); -- inicializa a comunicação serial na taxadesejada;
• Serialprint(“mensagem”); -- envia para tela a mensagem
• Serialprintln(“mensagem”); -- envia para tela e vai para novalinha;
• 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
18
Para visualizar as informações abra o “Serial Monitor”
25/05/2017
10
Comunicação Serial
Exercício
Desenvolver um programa para monitorar as entradas digitais 2 e 3.
DigitalReadSerial
25/05/2017
11
SHIELD LCD
DISPLAY ALFANUMÉRICO
21
MODELO 16 COLUNAS POR 2 LINHAS
SHIELD LCD
22Fonte: 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
25/05/2017
12
Composto por displayalfanumérico com 16 colunas e 2linhas.
114 Pinagem
É preciso verificar a pinagem com ofabricante, mas no geral encontramos aseguinte sequência para o LCD.
DISPLAY DE CRISTAL LÍQUIDO - LCD
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)
25/05/2017
13
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
26
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
// Inicializa a biblioteca com os números dos pinos da interfaceLiquidCrystal 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 Displaylcd.print("IFSC"); // Escreve o textodelay(2000); //espera em mslcd.setCursor(5,1); // Cursor coluna 5 linha 1 (linhas 0 ou 1)lcd.print("Campus JLLE");delay(2000);
}
25/05/2017
14
SHIELD LCD
• #include <LiquidCrystal.h> // inclui a biblioteca de LCD
� LiquidCrystal(rs, enable, d4, d5, d6, d7); // Cria um objeto LCDcom 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 doprograma;
– Exemplo: π = 3,1415927.... Em vez de escrever toda vez onúmero podemos nomear uma constante PI = 3,1415927 edurante programa utilizar PI;
• Variáveis: são elementos que permitem a alteraçãodo seu valor durante a execução do programa. Érecomendável que no início do programa sejaatribuído um valor inicial a elas, que elas sejaminicializadas;
– Exemplo: Calcule consumo médio de combustível de umautomóvel. CONSUMO= KM/L
28
25/05/2017
15
No arduino os tipos básicos são:
29
Constantes e variáveis
Tipo Tamanho
(Bits)
Tamanho
(Bytes)
Intervalo Obs
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 3.4028235E+38
Valor em ponto flutuante
Double 32 4 -3.4028235E+38 a 3.4028235E+38
Valor em ponto flutuante (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.
SHIELD LCD
30
#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; char valor = ‘B’;
void setup() {lcd.begin(16, 2);
}
void loop() {
byte by=B1001;lcd.clear(); // Limpa Displaylcd.print("Valor de i = "); lcd.print(i); //Mostra o valor da variável inteira na mesma linhalcd.setCursor(5,1); lcd.print(valor); //Mostra o valor do caracterelcd.setCursor(8,1); lcd.print(by); //Mostra o valor da variável bytedelay(2000);
}
Exemplo de programa com utilização de variáveis
Declara e inicializavariáveis globais
Declara e inicializa variável local
Variável
GlobalX
Local
25/05/2017
16
Operadores
• Operador Aritmético
31
Operador Operação realizada
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão
+ + Incremento
- - Decremento
SHIELD LCD + Entrada Analógica
32
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int valor,valorCon;
void setup() {lcd.begin(16, 2);
}
void loop() {valor = analogRead(A0); //Leitura entrada A0lcd.clear(); // Limpa Displaylcd.print("A0 = "); lcd.print(valor);lcd.setCursor(0,1); valorCon= map(valor,0,1023,0,100); lcd.print(" A0 Conver = "); lcd.print(valorCon);delay(200);
}
A função map converte o valor deuma variável de uma escala para outra.
map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,100)
No shield LCD a entrada A0 tem oconjunto de chaves conectadas atravésde divisor de tensão e de acordo chavepressionada obtemos diferentes valores.Na figura abaixo temos os valoresaproximados para cada caso.
0
132
307
480
720
25/05/2017
17
Operadores
• Operador de Relação: eles testam as relações nasexpressões. Seu resultado é 1 se for verdadeiro ou 0se for falso;
33
Operador Operação realizada
= = Igual a
! = Diferente
> Maior que
< Menor que
> = Maior ou igual a
< = Menor ou igual a
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
25/05/2017
18
Operadores
• Operadores lógicos: realizam operações lógicas nasexpressões. Os operandos são consideradosverdadeiros(1) ou falsos(0). Seu resultado é 1 se forverdadeiro ou 0 se for falso;
35
Operador Operação realizada
& & AND
| | OR
! NOT (Negado)
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
25/05/2017
19
Operadores
• Operadores Bit a Bit: eles testam as relações dosoperadores nas expressões bit a bit;
37
Operador Operação realizada
& AND
| OR
^ XOR
~ NOT
> > SHIFT RIGHT,desloca bits a
direita
< < SHIFT LEFT, desloca bits a
esquerda
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
25/05/2017
20
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
40
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
boolean running = false;
void setup() {lcd.begin(16, 2);
}
void loop() {
lcd.clear(); // Limpa Displaylcd.print("Bool "); lcd.print(running);lcd.setCursor(8,0); lcd.print("4>3 = "); lcd.print(4>3);lcd.setCursor(0,1); lcd.print("(3>1)&&(2==2)= "); lcd.print((3>1) && (2==2)); //3>1=1;2==2=1;1&&1=1delay(2000); running = !running; //inverte variável
}
Exemplos de programas com operadores lógicos
Teste o programa para manipulação de bits
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int a = 5;int b = 0;
void setup() {lcd.begin(16, 2);
}
void loop() {
lcd.clear(); // Limpa Displaylcd.print("a="); lcd.print(a); // binary: 000101 (5 dec)lcd.setCursor(5,0); b=a<<3; // binary: 00101000 (40 dec)lcd.print("b=a<<3 ->"); lcd.print(b);lcd.setCursor(4,1); lcd.print("a OR b = "); lcd.print(a | b); // binary: 00101101 (45 dec)delay(2000);
}
25/05/2017
21
• 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
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 forverdadeira. A opção ELSE não é obrigatória.
42
IF (true) THENCommandsTrue
ELSECommandsFalse
IF (verdadeiro) THENComandosVerdadeiro
ELSEComandosFalso
25/05/2017
22
• Caso 1: somente verdadeiro:
43
Controle de fluxo de um programa
if (true) {
CommandsTrue}
#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 Displayentrada = analogRead(A0);if(entrada<100){ //botão direita do shield pressionadolcd.print(“right selecionado”);delay(2000); }
}
• Caso 2: com verdadeiro e falso:
44
Controle de fluxo de um programa
if (true) {
CommandsTrue}else{
CommandsFalse}
#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 Displayentrada = analogRead(A0);lcd.setCursor(1,0); lcd.print(“botão right”);lcd.setCursor(3,1);
if(entrada<100){ //botão direita do shield pressionadolcd.print(“pressionado”);}else{lcd.print(“não pressionado”);}delay(2000); }
}
25/05/2017
23
• Caso 3: IF aninhado:
45
Controle de fluxo de um programa
if (true1) {
Commands1}else if(true2)
{Commands2}
else if (true3){Commands3}
else{Commands4}
true1?
Commands1
N
V
true2?
N
V
true3?
N
V
Commands2
Commands3
Commands4
28/04/16
#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 Displayentrada = 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 "); }
}
25/05/2017
24
28/04/16
switchSwitch( ) case:
• Declaração de controle condicional
switch (var){
case 1:
comandos;
break;
case 2:
comandos;
break;
default:
comandos;
break;
}
28/04/16
#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 Displayentrada = 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;}
Switch( ) case:
25/05/2017
25
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 permanecerverdadeira o(s) comando(s) é/são executados.
49
WHILE (true){Comandos}
pergunta?
Comandos
N
V
50
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 Displayentrada = 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);
}
25/05/2017
26
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)
51
DO{Comandos}WHILE (true);
pergunta?
Comandos
N
V
52
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 Displayentrada = 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);
}
25/05/2017
27
Controle de fluxo de um programa
• Declaração de controle condicional FOR
• Ele é utilizado para executar determinados comandospor um certo número de vezes.
53
FOR (INÍCIO;CONDIÇÃO,INCREMENTO) {Comandos;
}
28/04/16
Exemplo Scroll LCD#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 Displaylcd.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);}
25/05/2017
28
PWM
• PWM – Modulação por Largura de Pulso (Pulse-WidthModulation)
• Permite variar a largura do pulso de uma saída simplesmentevariando o número (0 – 255) enviado para ela.
55
Se ligarmos um led na saídapoderemos observar o feito davariação da tensão média sobre ocomponente
PWM
• Exercício: Elabore um programa que varie a intensidade luminosade um led no pino 9 entre 100%, 75%, 50%, 25% e 0%, com meiosegundo de intervalo entre cada estágio.
56
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);
}
25/05/2017
29
Entrada Analógica e PWM
• Exercício: Elabore um programa que controle a luminosidade deum led utilizando a saída PWM do pino 9 através de umpotenciômetro na entrada analógica A0.
57
int valor,valorCon;void setup() {
pinMode(9, OUTPUT); }
void loop() {
valor = analogRead(A0);valorCon= map(valor,0,1023,0,255); analogWrite(9,valorCon);
}
A função map converte o valor deuma variável de uma escala para
outra.map(variável,ini,fim,iniNova,fimNova)
map(valor,0,1023,0,255)
Faltou esquema para ligar pot
Servomotor
• São motores especiais que permitem o controle do ângulo deposição do eixo.
58
25/05/2017
30
Servomotor
59
Servomotor
• ATENÇÃO: LIGAR A ALIMENTAÇÃO INVERTIDA PODE LEVAR AQUEIMA DO SERVO
60
25/05/2017
31
Servomotor
• Programa exemplo: Controle um servo no pino 5 pela leitura dopotenciômetro.
61
#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ômetroangle=map(angle, 0, 1023, 0, 180); // Mapeia os valores de 0 a 180 grausservo1.write(angle); // Escreve o ângulo para o servodelay(15); // Espera de 15ms, para permitir que o servo atinja a posição
}
Leitura da entrada
• Para ler o nível lógico de algum pino da entradautilizamos a instrução:
digitalRead(pino);
• Para ler o nível lógico de algum pino da entrada
utilizamos a instrução:
62
25/05/2017
32
Motor Corrente Contínua
63Fonte: http://en.wikipedia.org/wiki/Brushed_DC_electric_motor
Motor Corrente Contínua
• Sentido de giro de um motor CC - Exemplo
64
+ V -
I
- V +
I
25/05/2017
33
Ponte H
65
SHIELD para motor CC
66
Fonte:http://www.dfrobot.com
25/05/2017
34
SHIELD para motor CC
67
int M1 = 4; //direção motor 2int E1 = 5; //PWM motor 2
int E2 = 6; //PWM motor 1 int M2 = 7; //direção motor 1
void setup(){
pinMode(M1, OUTPUT); pinMode(M2, OUTPUT);
}
void loop(){
digitalWrite(M1,HIGH); //sentidodigitalWrite(M2, HIGH); //sentido analogWrite(E1, 255); //PWM analogWrite(E2, 122); //PWM delay(30);
}
Altere o programa paramudar o sentido evelocidades dosmotores
Motor de Passo• Motor de passo é um motor síncrono sem escovas, com
enrolamento no estator e imã permanente no rotor(tipo PM ouhíbrido). Seu movimento é feito em passos.
68Fonte:http://www.engineersgarage.com/articles/stepper-motors
Os motores de passosão fabricadosgeralmente com 12,24, 72, 144, 180, e200, passos por volta,o que resulta emângulos de 30, 15, 5,2.5, 2, e 1.8 graus porpasso (pode variar)
25/05/2017
35
Motor de Passo
• UNIPOLAR
69
Motor de Passo
70
25/05/2017
36
Motor de Passo
• BIPOLAR
71
• Os motores de passo bipolares são conhecidos por sua excelente relaçãotamanho/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 magnetizaambos os pólos em que a fase (ou bobina) está instalada
Fonte: http://labdegaragem.com/profiles/blogs/tutorial-sobre-motor-de-passo
Motor de Passo
72
25/05/2017
37
Motor de Passo
• Modo de acionamento – PASSO COMPLETO (Full Step)
73
Motor de Passo
• Modo de acionamento – MEIO PASSO (Half-Step)
74
25/05/2017
38
Motor de Passo
75Fonte: http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm
Motor de Passo
• MOTOR DE PASSO COM ARDUINO – ULN 2003
76
Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/
25/05/2017
39
Motor de Passo
• LIGAÇÕES
77
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/
Motor de Passo
78
#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áriodelay(500); // Delay de 0,5seg antes do próximo
myStepper.setSpeed(30); // // Ajusta a velocidademyStepper.step(-1500); // Numero de passos, agora sentido anti-horáriodelay(500); // Delay de 0,5seg
}
Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/
25/05/2017
40
Motor de Passo
• #include <Stepper.h> - inclui a biblioteca do motor de passo;
• Stepper myStepper(passo, pino1, pino2, pino3, pino4); - informaao programa o passo e ligações do motor;
• myStepper.setSpeed(rpm); - seta a velocidade do motor de passoem RPM;
• myStepper.step(passos); - faz com que o motor se desloque umdeterminado número de passos. (esta função faz o programaparar até que atinja o número de passos programado)
79
Comparativo Motores
80
Fonte:http://www.telecom.uff.br/pet/petws/downloads/tutoriais/stepmotor/stepmotor2k81119.pdf
25/05/2017
41
28/04/16
• SENSOR ULTRASSONICO – HC-SR04
http://blog.filipeflop.com/sensores/sensor-ultrassonico-hc-sr04-ao-arduino.html
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://www.arduinoecia.com.br/2013/12/controle-de-vagas-de-estacionamento-com.html
28/04/16
biblioteca Ultrasonic,
25/05/2017
42
//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);
}
28/04/16
• SENSOR DE PRESENÇA INFRAVERMELHO PIR DYP-ME003
http://blog.filipeflop.com/sensores/acendendo-uma-lampada-com-sensor-de-presenca.html
25/05/2017
43
28/04/16
//Programa : Sensor de presenca com modulo PIR//Autor : FILIPEFLOP
int pinopir = 7; //Pino ligado ao sensor PIRint acionamento; //Variavel para guardar valor do sensor
void setup(){pinMode(pinopir, INPUT); //Define pino sensor como entradaSerial.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 !!!");}}
86
• Michael McRoberts .Arduino Básico .;
• Aprendendo a programar o arduino. PET Autonet
• www.arduino.cc
• Notas de aula. Professor Stefano.
REFERÊNCIAS