Академический Документы
Профессиональный Документы
Культура Документы
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.
Modelo
Conector
Mini-B USB
microcontrolador
Entrada
fonte
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
4
25/05/2017
placa
Porta
serial
5
25/05/2017
Examples e Sketchbook
• Abra o exemplo Blink. File Examples 01 Basics Blink;
12
6
25/05/2017
Examples e Sketchbook
• Os exemplos (examples) são arquivos somente de leitura e não
será permitido salvar;
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);
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
12
25/05/2017
SHIELD LCD
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
void setup() {
lcd.begin(16, 2); // Seta o display 16 colunas por 2 linhas
}
void loop() {
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
SHIELD LCD
Exemplo de programa com utilização de variáveis
#include <LiquidCrystal.h> // Inclui biblioteca do LCD
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
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão
++ Incremento
-- Decremento
31
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
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;
|| OR
! NOT (Negado)
35
Operadores
• Exemplos de Operador Lógico:
a) (3 > 1) & & (2= = 2);
1 & & 1; resulta em 1 - verdadeiro
36
18
25/05/2017
Operadores
• Operadores Bit a Bit: eles testam as relações dos
operadores nas expressões bit a bit;
| OR
^ XOR
~ NOT
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
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
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
41
21
25/05/2017
void setup() {
lcd.begin(16, 2);
}
void loop() {
43
{ 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
int entrada=0;
void setup() {
lcd.begin(16, 2);
}
void loop() {
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
int entrada=0;
void setup() {
lcd.begin(16, 2);
}
void loop() {
24
25/05/2017
WHILE (true)
{ V
pergunta Comandos
Comandos ?
} N
49
int entrada=0;
void setup() {
lcd.begin(16, 2);
}
void loop() {
while(entrada<400){
lcd.print(“robô explorando”);
delay(1000); }
lcd.print(“robô parado”);
delay(2000);
}
50
25
25/05/2017
51
int entrada=0;
void setup() {
lcd.begin(16, 2);
}
void loop() {
52
26
25/05/2017
FOR (INÍCIO;CONDIÇÃO,INCREMENTO) {
Comandos;
}
53
int entrada=0;
void setup() {
lcd.begin(16, 2);
}
void loop() {
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.
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( ) {
56
28
25/05/2017
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>
void setup() {
void loop() {
}
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
Fonte: http://en.wikipedia.org/wiki/Brushed_DC_electric_motor 63
I I
+ V - - V +
64
32
25/05/2017
Ponte H
65
Fonte:http://www.dfrobot.com
66
33
25/05/2017
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
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
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'
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
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
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
//Autor: FILIPEFLOP
#include <Ultrasonic.h>
#define pino_trigger 4
#define pino_echo 5
void setup()
Serial.begin(9600);
void loop()
Serial.print(cmMsec);
Serial.println(inMsec);
delay(1000);
http://blog.filipeflop.com/sensores/acendendo-uma-lampada-com-sensor-de-presenca.html
28/04/16
42
25/05/2017
void setup()
{
pinMode(pinopir, INPUT); //Define pino sensor como entrada
Serial.begin(9600);
}
void loop()
{
acionamento = digitalRead(pinopir); //Le o valor do sensor PIR
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