Upload
felipe-martins
View
8.806
Download
8
Embed Size (px)
DESCRIPTION
Mini-curso de Introdução a Sistemas Embarcados com Arduino. Conteúdo: - Sistemas embarcados; - Arduino: características de hardware; - Arduino: características de software; - Microcontrolador; - Eletrônica: conceitos básicos; - Planejamento de programas; - Sensores digitais (problemas e debounce); - Sensores analógicos (Intensidade luminosa, deslocamento angular ou linear, Força/Torque, proximidade, aceleração/inclinação, temperatura); - Comunicação serial (USART, SPI, I2C); - Controle de cargas com PWM; - LCD (displays de cristal líquido); - Armazenamento de dados em cartão SD; - Acionamento de motores e servomotores; - Simulação de sistemas com Arduino; - Práticas (montagem e programação); - Avançando com o Arduino: shields, comunicação sem fio, Arduino com MATLAB, aplicações em robótica...
Citation preview
v. 2 - 2014
Introdução aSistemas Embarcados
com Arduino
Felipe Nascimento Martins
O trabalho Introdução ao Arduino de Felipe Nascimento Martins foi
licenciado com uma Licença
Creative Commons - Atribuição-CompartilhaIgual 3.0 Não Adaptada.
Introdução aSistemas Embarcados
com Arduino
Felipe Nascimento Martins
Conteúdo
• Sistemas embarcados;
• Arduino: características de hardware;
• Arduino: características de software;
• Microcontrolador;
• Eletrônica: conceitos básicos;
• Planejamento de programas;
• Sensores e atuadores;
• Práticas (montagem e programação);
• Avançando com o Arduino: shields, comunicação sem fio, aplicações em robótica...
Felipe Nascimento Martins
Felipe Nascimento Martins
Sistemas Embarcados
Sistema Embarcado
• Sistema baseado em microcontroladores em que o computador é encapsulado e dedicado ao dispositivo ou sistema que ele controla;
• Realiza um conjunto de tarefas pré-definidas, com requisitos específicos;
• Além do computador dedicado, em geral possui sensores, atuadores e uma interface com o usuário.
Felipe Nascimento Martins
Sistema de Controle Embarcado
Felipe Nascimento Martins
Exemplos de Sistemas Embarcados
• MP3 player, relógio digital, calculadora, controlador de veículo elétrico, navegador com GPS, leitora para pagamento com cartões de crédito, robô, semáforo, roteador, console de vídeo game, lavadora de roupas, marca-passo, quadricóptero, forno de micro-ondas, tablet, medidor de pressão arterial, televisão etc.
Felipe Nascimento Martins
Exemplos de Aplicação
Felipe Nascimento Martins
O que é Arduino?
• Arduino é uma plataforma de prototipagem
eletrônica open-source, baseada nos princípios
de flexibilidade e facilidade de uso para hardware
e software.
• Consiste de uma placa com microcontrolador
programável preparada para receber sinais de
sensores e acionar atuadores.
• Sua linguagem de programação é baseada em
Wiring (baseado em C/C++).
• A placa pode funcionar em conjunto ou de forma
independente do computador.
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – software
Arduino é Open Source
• Desenvolvido por: Massimo Banzi, David
Cuartielles, Tom Igoe, Gianluca Martino e David
Mellis, na Itália, em 2005;
• Todo o projeto é aberto: open source hardware
and software;
• 200 placas vendidas em 2005, 5.000 em 2006,
30.000 em 2007 e mais de 300.000 em 2011 e
cerca de 1 milhão até setembro de 2013!
• Site oficial: www.arduino.cc
Felipe Nascimento Martins
Arduino é Open Source!
Felipe Nascimento Martins
Arduino é Open Source!
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
• Mas...
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão
disponíveis.
• Quem quiser, pode comprar os componentes e montar a
sua placa!
• O software de programação também é livre e está
disponível para download gratuitamente.
• Mas...
• O nome Arduino é marca registrada!
Felipe Nascimento Martins
Clones do Arduino
• Freeduino
Felipe Nascimento Martins
Clones do Arduino
• Seeduino
Felipe Nascimento Martins
Clones do Arduino
• Brasuíno
Felipe Nascimento Martins
Clones do Arduino
• Severino
Felipe Nascimento Martins
Similares ao Arduino
• chipKIT Uno32 - PIC32MX320F128 (32 bits,
80MHz, 128kB Flash, 16kB SRAM)
Felipe Nascimento Martins
Similares ao Arduino
• Olimexino – STM32F103RBT6 (núcleo ARM Cortex
M3, 32 bits, 128kB, 72MHz)
Felipe Nascimento Martins
Similares ao Arduino
• Adafruit Trinket – ATtiny85
Felipe Nascimento Martins
Similares ao Arduino
• TI LaunchPad:
MSP430
Felipe Nascimento Martins
Similares ao Arduino
• LaunchPad:
ARM Cortex M4
Felipe Nascimento Martins
Compatível com Arduino
Felipe Nascimento Martins
Felipe Nascimento Martins
Características de Hardware
Arduino Uno
• Microcontrolador: ATmega328;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S:14 (6 podem ter sinal PWM);
• Pinos com entrada analógica: 6;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 1 porta serial (UART TTL),
I2C (TWI), SPI;
• Memória Flash (de programa): 32 kB, dos quais 0,5 kB
são usados pelo bootloader;
• Memória SRAM: 2 kB; EEPROM: 1 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Leonardo
• Microcontrolador: ATmega32u4;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S: 20 (7 podem ter sinal PWM);
• Pinos com entrada analógica: 12;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 1 porta serial (UART TTL),
I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse);
• Memória Flash (de programa): 32 kB, dos quais 4 kB são
usados pelo bootloader;
• Memória SRAM: 2,5 kB; EEPROM: 1 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Mega 2560
• Microcontrolador: ATmega2560;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S: 54 (15 podem ter sinal PWM);
• Pinos com entrada analógica: 16;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 4 portas seriais (UART
TTL), I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse);
• Memória Flash (de programa): 256 kB, dos quais 8 kB
são usados pelo bootloader;
• Memória SRAM: 8 kB; EEPROM: 4 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Mega 2560
Felipe Nascimento Martins
Microcontrolador
O que é um Microcontrolador?
– Chip;
– CPU de pequeno porte, capaz de executar
um conjunto de instruções;
– Ou seja, possui um microprocessador!
– Instruções simples e rápidas;
– Possui memória(s);
– Possui periféricos;
– Pode se comunicar com outros periféricos;
etc.
Felipe Nascimento Martins
Componentes de um Microcontrolador
ConversorD/A
ConversorA/D
PWM
CPU
EEPROM
RAM
PortaSerial
PortaParalela
Temporizadores
Microcontrolador
Felipe Nascimento Martins
Diagrama de blocos da arquitetura
Felipe Nascimento Martins
Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Cadê o
Arduino??
Felipe Nascimento Martins
Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale)
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
• ATMEL
• ATmega168: Diecimila, Duemilanove, Nano,
LilyPad;
• ATmega328P: Duemilanove, Nano, Fio, LilyPad,
Uno;
• ATmega1280: Mega;
• ATmega2560: Mega2560;
• ATmega32u4: Leonardo, Esplora, LilyPad USB,
Yún, Robot;
• AT91SAM3X8E: Due.
Microcontroladores do Arduino
Felipe Nascimento Martins
Arduino ProcessadorFlash
kB
EEPROM
kB
SRAM
kB
Dig.
I/O
Pinos
A/D
Clock
(MHz)
Pinos
PWM
Duemilanove ATmega168/328P 16/32 0,5/1 0,5 14 6 16 6
Uno ATmega328P 32 1 2 14 6 16 6
Mega ATmega1280 128 4 8 54 16 16 15
Mega2560 ATmega2560 256 4 8 54 16 16 15
NanoATmega168 ou
ATmega32816/32 0,5/1 0,5 14 8 16 6
LilyPadATmega168V ou
ATmega328V16/32 0,5 1 14 6 16 6
Leonardo ATmega32u4 32 1 2,5 20 12 16 7
Due AT91SAM3X8E 512 -- 96 54 12 84 12
Esplora ATmega32u4 32 1 2,5 20 12 16 7
Arduino
Felipe Nascimento Martins
Arduino - Microcontrolador
Felipe Nascimento Martins
Arduino - Microcontrolador
• ATmega328 (Arduino Uno):
• Núcleo AVR RISC de 8 bits;
• 32kB Flash, 2kB RAM, 1kB EEPROM;
• 23 pinos de E/S;
• 3 temporizadores/contadores;
• USART, I2C, interface a 2 fios SPI;
• 6 canais de conversor A/D de 10 bits;
• WDT com oscilador interno;
• Clock máximo de 20MHz;
• Opera de 1,8V a 5,5V.
Felipe Nascimento Martins
Arduino - Microcontrolador
• ATmega32u4 (Arduino Leonardo):
• Núcleo AVR RISC de 8 bits;
• 32kB Flash, 2kB RAM, 1kB EEPROM;
• 26 pinos de E/S;
• 3 temporizadores/contadores;
• USART, USB transceiver, I2C, 2 interfaces a 2 fios SPI;
• 12 canais de conversor A/D de 10 bits;
• WDT com oscilador interno;
• Clock máximo de 16MHz;
• Opera de 2,7V a 5,5V.
Felipe Nascimento Martins
Felipe Nascimento Martins
Características de Software
Arduino – Programação
Felipe Nascimento Martins
Arduino – Programação
Programa.HEXCompilador
Programador
IDE
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
No Arduino Uno:
pinos digitais 0 a 13 (0 a 13);
pinos analógicos 0 a 5 (14 a 19).
Prática 1: Pisca-LED
• Montagem:
Felipe Nascimento Martins
Matriz de contatos (Breadboard ou Protoboard)
Felipe Nascimento Martins
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155964-pratica-1-pisca-led/embed
Prática 1: Pisca-LED
Felipe Nascimento Martins
Eletrônica: Conceitos Básicos
Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja, ele fica com 5V.
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja,
ele fica com 5V.
• Este pino está ligado ao
RESISTOR+LED, e ao pino
GND (0V).
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa.
• Mas o que acontece nos
pinos do Arduino?
• A função
digitalWrite(12,HIGH);
faz com que o pino 12 vá
para “nível alto”, ou seja,
ele fica com 5V.
• Este pino está ligado ao
RESISTOR+LED, e ao pino
GND (0V).
• É um circuito série, por
onde circula corrente!
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz
acender o LED;
• Experimente retirar o fio
que liga o LED ao GND,
mantendo o pino 12 em 5V.
• O LED apaga pois a
corrente precisa circular
num circuito fechado!
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz
acender o LED;
• A corrente só existirá se
houver diferença de
potencial elétrico
(diferença de tensão) entre
pontos do circuito: 5V – 0 =
5V;
• Tensão: volt [V];
• Corrente: ampère [A].
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• A função
digitalWrite(12,LOW);
faz com que o pino 12 vá
para “nível baixo”, ou seja,
ele fica com 0V.
• Logo, como não há
diferença de tensão entre
os pinos 12 e GND, a
corrente é zero => LED
apaga.
Felipe Nascimento Martins
0V
0V
Um pouco de eletrônica
• Beleza. Mas, e o resistor?
Serve para quê?
Felipe Nascimento Martins
Um pouco de eletrônica
• Beleza. Mas, e o resistor?
Serve para quê?
• O elemento resistor serve
para dificultar a circulação
de corrente elétrica;
• Ele é colocado no circuito
para evitar que a corrente
cresça muito, o que pode
provocar problemas;
• No nosso circuito, o
resistor serve para evitar
que o LED queime devido
a uma corrente muito alta.
Felipe Nascimento Martins
Um pouco de eletrônica
• Quanto maior for o valor
da resistência do resistor,
menor será a corrente
(para uma mesma
diferença de tensão).
• O brilho do LED varia com
a corrente.
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220Ω.
• I = 5 / 220
• I = 0,0227 A = 22,7 mA
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220Ω + 220Ω.
• I = 5 / 440
• I = 0,0114 A = 11,4 mA
• Podemos calcular a queda de
tensão em cada resistor:
• VR = R * I, R = 220Ω, I = 11,4 mA.
• VR = 220 * 0,0114 = 2,5 V.
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• O LED tem queda de
tensão fixa = ~1,73V. Logo:
• V = 5 – 1,73 = 3,27V.
• V = R * I => I = V / R.
• I = 3,27 / 220 = 0,0149 A
• I = 14,9mA.
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Note que se a tensão do
pino 12 pudesse ser
alterada, a corrente no
circuito seria diferente.
• Ou seja, poderíamos
controlar o brilho do LED!
Felipe Nascimento Martins
+5V
0V
Prática 2: Código Morse
• Modifique o programa
Pisca-LED de forma que o
LED sinalize
indefinidamente o código
Morse que representa
S.O.S.:
...---...
OBS.: “ponto” é uma piscada
rápida do LED (pouco
tempo aceso), enquanto o
“traço” é uma piscada mais
lenta (mais tempo aceso).
Felipe Nascimento Martins
Diodo
• Dispositivo semicondutor que permite a circulação de
corrente apenas em um sentido;
• A tensão em seus terminais deve ter polaridade correta:
mais positiva no terminal A (anodo) e mais negativa no
terminal K (catodo);
• Apresenta queda de tensão aproximadamente fixa
(~0,7V) quando a corrente circula;
• Usado em circuitos retificadores: transforma corrente
alternada para contínua.
Felipe Nascimento Martins
Diodo
• Retificador de onda completa:
Felipe Nascimento Martins
Diodo - exemplos
Felipe Nascimento Martins
Prática 3: Não pisca-LED
• LED é um diodo especial
que brilha quando a
corrente circula por ele.
• Experimente inverter a
ligação dos pinos do LED
em nosso circuito e
verifique que ele não vai
mais piscar, mesmo
quando houver diferença
de potencial nos pinos!
Felipe Nascimento Martins
Capacitor
• Elemento que armazena energia na forma de campo
elétrico;
• Existem vários tipos: alguns têm polaridade (como os
eletrolíticos), outros não (como os cerâmicos);
• A tensão em seus terminais depende da carga
acumulada, e não varia instantaneamente;
• Em corrente contínua, são usados como filtros ou
“suavizadores” de tensão.
Felipe Nascimento Martins
Capacitor - exemplos
Felipe Nascimento Martins
Capacitor – exemplo de aplicação
• Retificador de onda completa com capacitor:
Felipe Nascimento Martins
Felipe Nascimento Martins
Sensores Digitais
Sensores com Sinais Digitais
• Diversos sensores proveem informação através
de sinais digitais:
• Botão;
• Porta aberta/fechada;
• Andar de elevador;
• Fim-de-curso em máquinas industriais;
• Equipamento ligado/desligado;
• Nível de reservatório;
• Presença;
• Toque;
• Etc.
Felipe Nascimento Martins
Sensores com Sinais Digitais
• Do ponto de vista elétrico, comportam-se como se
fossem uma chave liga/desliga;
• Nesses casos, podemos fazer a ligação de modo
que o sinal do sensor seja 0V ou 5V;
• No Arduino, a função utilizada para leitura de sinais digitais é digitalRead(pino); onde pino é o
número do pino em que o sensor está ligado;
• Para Vs = 5V, retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
Prática 4: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao
lado.
• Altere o programa
da prática 1 para
que o LED acenda
com o botão for
pressionado, e
apague quando o
botão for liberado.
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155968-pratica-4-leitura-de-sinal-digital/embed
Prática 4: Leitura de Sinal Digital
Felipe Nascimento Martins
Programas mais complexos
Funções do Arduino
• Já vimos:
void setup(){
...
}
void loop(){
...
}
Felipe Nascimento Martins
Funções do Arduino
• Já vimos:
pinMode(pino, OUTPUT ou INPUT);
digitalWrite(pino, LOW ou HIGH);
delay(número inteiro);
digitalRead(pino);
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de
microssegundos.
millis();
Retorna o número de milissegundos que se passou
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de
microssegundos.
millis();
Retorna o número de milissegundos que se passou
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de
microssegundos.
millis();
Retorna o número de milissegundos que se passou
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
while(analogRead(A2) < 950){
... // bloco de código
}
Executa o bloco de código até que o valor de retorno
da função analogRead seja maior que 950.
for(int conta = 0; conta < 6; conta++){
... // bloco de código
}
Executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
while(analogRead(A2) < 950){
... // bloco de código
}
Executa o bloco de código até que o valor de retorno
da função analogRead seja maior que 950.
for(int conta = 0; conta < 6; conta++){
... // bloco de código
}
Executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
if (brilho == 0 || brilho == 255) {
... // bloco de código 1
}
else {
... // bloco de código 2
}
Executa o bloco de código 1 se a condição de teste
for verdadeira. Caso contrário, executa o bloco de
código 2.
Felipe Nascimento Martins
Criando Funções no Arduino
int led = 13;
void setup(){
pinMode(led, OUTPUT);
}
void inverteLED(){
if (digitalRead(led)==0)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
}
void loop(){
inverteLED();
delay(500);
}
Felipe Nascimento Martins
Tipos de Dados no Arduino
Felipe Nascimento Martins
boolean (8 bits) – true/false;
byte (8 bits) – número entre 0 e 255;
char (8 bits) – caractere (número entre -128 e 127);
unsigned char (8 bits) – mesmo tipo que ‘byte’;
word (16 bits) – número entre 0 e 65.535;
unsigned int (16 bits) – mesmo tipo que ‘word’;
int (16 bits) – número entre -32.768 e 32.767;
unsigned long (32 bits) – número entre 0 e
4.294.967.295;
long (32 bits) – número entre -2.147.483.648 e
2.147.483.647;
float (32 bits) – entre -3,4028235E38 to 3,4028235E38.
Linguagem do Arduino
Felipe Nascimento Martins
Linguagem do Arduino
Felipe Nascimento Martins
Linguagem do Arduino
Felipe Nascimento Martins
Planejamento de um Programa
• Fluxogramas
Felipe Nascimento Martins
Planejamento de um Programa
Felipe Nascimento Martins
Exercício: Desenhe o Fluxogramaconst int ledPin = 13; // pino do LED
int ledState = LOW; // estado do LED
long previousMillis = 0; // última atualização do LED
long interval = 500; // interval para piscar LED
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
} Felipe Nascimento Martins
Prática 5: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao
lado.
• Altere o programa
da prática 4 para
que o LED troque
de estado a cada
pressionar de
botão: se estiver
apagado, acende; e
vice-versa.
Prática 5: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao
lado.
• Altere o programa
da prática 4 para
que o LED troque
de estado a cada
pressionar de
botão: se estiver
apagado, acende; e
vice-versa.
• Funcionou como
esperado?
Leitura de Sinal Digital
Felipe Nascimento Martins
Bounce (oscilação de contato)
Felipe Nascimento Martins
Técnica para fazer debounce do sinal
Felipe Nascimento Martins
Felipe Nascimento Martins
int led_pin = 13;
int led_state = LOW;
int button_pin = 0;
int button_state;
// the setup routine runs once when you press reset:
void setup() {
pinMode(led_pin, OUTPUT);
pinMode(button_pin, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// Enquanto o botão não for pressionado, não faz nada.
while (digitalRead(button_pin)!=0){
}
// Depois que o botão é pressionado, aguarda ser solto
while (digitalRead(button_pin)==0){
}
// Atraso para aguardar oscilação de contato terminar
delay(50);
// Inverte o estado da variável led_state
led_state = !led_state;
// Copia variável led_state para o pino do LED
digitalWrite(led_pin, led_state);
}
Felipe Nascimento Martins
Sensores Analógicos
Sensores com Sinais Analógicos
• Diversos sensores proveem informação através
de sinais analógicos:
• Intensidade luminosa (LDR);
• Deslocamento (angular ou linear);
• Força/Torque (SFR, strain gage);
• Proximidade;
• Aceleração;
• Inclinação;
• Temperatura;
• Etc.
Felipe Nascimento Martins
Intensidade Luminosa: LDR
• Resistor cuja resistência varia conforme a
intensidade da luz incidente.
• Vários modelos com diferentes sensibilidades.• Datasheet: http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/40/LDR_NSL19_M51.pdf
Felipe Nascimento Martins
Intensidade Luminosa: LDR
Felipe Nascimento Martins
Prática 6: Usando o sensor de luz
• Monte o circuito com LDR – Light Dependent
Resistor (sensor de luz).
• Escreva um programa que acenda o LED do pino
13 quando houver pouca luz e apague o mesmo LED quando houver muita luz.
void setup() {
...
}
void loop() {
...
}
Felipe Nascimento Martins
Deslocamento
• Deslocamento linear ou angular pode ser medido com potenciômetros;
• Com alimentação de 5V, o sinal varia de 0 a 5V (mínimo a máximo deslocamento);
• Há potenciômetros angulares multivoltas e potenciômetros lineares de longo alcance.
Felipe Nascimento Martins
Deslocamento
Felipe Nascimento Martins
Força e Torque
• FSR (Force Sensing Resistor) e Strain Gage (extensômetro): resistência varia com a deformação.
• Usados para medir força e torque.• Datasheets:
FSR - http://www.trossenrobotics.com/productdocs/2010-10-26-DataSheet-FSR402-Layout2.pdf
Célula de carga - http://www.alfainstrumentos.com.br/manuais/celulas/catalogo_celulas_0302cp.pdf
Felipe Nascimento Martins
Strain Gage
Felipe Nascimento Martins
Proximidade por infravermelho
• Sharp GP2Y0A21YK0F
• Tensão de alimentação: 5V;
• Pode medir distâncias de 10 a 80 cm;
• Sinal: tensão entre 1,65V e 2,15V.
• Há outros modelos com outras faixas de medição.Datasheet: https://www.sparkfun.com/datasheets/Components/GP2Y0A21YK.pdf
Felipe Nascimento Martins
Proximidade por infravermelho
Felipe Nascimento Martins
Aceleração/Inclinação
• ADXL335
• Tensão de alimentação: 3,3 V;
• Mede aceleração nos 3 eixos do espaço;
• Mede aceleração de até 3g;
• Mede aceleração da gravidade (estática), podendo ser usado para medir inclinação.
• Datasheet: https://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf
Felipe Nascimento Martins
Temperatura: RTDs
• RTD = Resistance Temperature Detectors
• Normalmente confeccionados com um fio (ou
enrolamento) de alta pureza de cobre, níquel ou
platina (estes são os melhores).
• RTDs comuns podem medir com erros da ordem de
±0,1ºC. Os de platina (PRT – Platinum Resistance
Thermometer) podem chegar a ±0,0001ºC.
• São estáveis e lineares, com ótima repetitividade.
• Aplicações incluem refrigeração de alimentos e
compostos químicos, fornos de fusão (produção de
metais e ligas), destilação fracionada (produção de
bebidas e derivados de petróleo), usinas nucleares e
aquecedores e refrigeradores domésticos.
Felipe Nascimento Martins
Temperatura: Termistores NTC/PTC
• São semicondutores cerâmicos que têm sua resistência alterada com a variação de temperatura.
• Geralmente seu coeficiente de variação é maior que o dos RTDs, mas a variação de resistência é menos linear.
• Podem ser de dois tipos: NTC ou PTC (Negative ou Positive Temperature Coefficient).
• Faixa típica de operação: de -100ºC a 300ºC.
• Resistência a 25ºC: de 0,5Ω a 100MΩ.
• Aplicações: circuitos simples de medição de temperatura; para reduzir corrente de carga de capacitores em fontes chaveadas (NTCs) etc.
Felipe Nascimento Martins
Temperatura: RTD x NTC
Temperatura: RTD ou NTC
Felipe Nascimento Martins
Temperatura: TMP35/36/37
• Tensão de alimentação: 2,7 V a 5,5 V;
• Fator de escala: 10 mV/°C;
• Precisão: ±2°C;
• Linearidade: ±0,5°C;
• Faixa de operação: −40°C a +125°C.
• Datasheet: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/TMP35_36_37.pdf
Felipe Nascimento Martins
Temperatura: TMP35/36/37
Felipe Nascimento Martins
Felipe Nascimento Martins
Comunicação Serial
Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Síncrona: uma linha de dados e outra de clock:
Felipe Nascimento Martins
Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Assíncrona: apenas uma linha de dados. A
velocidade deve ser definida:
Felipe Nascimento Martins
Comunicação serial
• OK.
• Mas como posso transmitir outras informações
além de “zeros” e “uns”?
Felipe Nascimento Martins
Comunicação serial
• OK.
• Mas como posso transmitir outras informações
além de “zeros” e “uns”?
• Existe uma tabela que relaciona caracteres a
sequências de zeros e uns:
• ASCII (American Standard Code for
Information Interchange).
• Esta tabela criou um padrão para troca de
informações em sistemas binários.
Felipe Nascimento Martins
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Microcontrolador possui hardware para
comunicação serial:• Pino digital 0 (RX): recepção de dados;
• Pino digital 1 (TX): transmissão de dados;
• Bit 1 = 5V; Bit 0 = 0V;
• A maioria das placas Arduino possui hardware
que converte sinais do padrão serial assíncrono
para USB;
Felipe Nascimento Martins
Prática 7: Medindo Temperatura
• Monte o circuito com o sensor de temperatura.
• Escreva um programa que mostre o valor da temperatura na tela do computador a cada 0,5s.
Felipe Nascimento Martins
Prática 7: Medindo Temperatura
• Exemplo de programa:
void setup() {
Serial.begin(9600);
}
void loop() {
int sensor = analogRead(A0);
Serial.println(sensor);
delay(500);
}
Felipe Nascimento Martins
Arduino
• A.
Prática 7: Medindo Temperatura
http://123d.circuits.io/circuits/155990-pratica-7-medindo-temperatura-sinal-analogico/embed
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Serial.println(analogValue, DEC); //
envia analogValue (int) codificada em
ASCII no formato decimal
• Serial.println(analogValue, HEX); //
envia ASCII no formato hexadecimal
• Serial.println(analogValue, OCT); //
envia ASCII no formato octal
• Serial.println(analogValue, BIN); //
envia ASCII no formato binário
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Serial.available(); // retorna 1 se
houver caracter disponível no buffer de
recepção. Caso contrário, retorna 0.
• Serial.read(); // lê um byte recebido
pela Serial (int)
• Exemplo:
int incomingByte;
if (Serial.available() > 0) {
incomingByte = Serial.read();
}
Felipe Nascimento Martins
Prática 8: Comunicação bidirecional
• Outro exemplo de comunicação serial: desta vez
o Arduino vai receber um dado do computador,
processá-lo e retornar o resultado pela porta
serial.
• Vamos analisar o programa:int i, numero;
void setup() {
Serial.begin(9600);
}
void loop() {
while (true) {
Serial.print("Entre com um numero: ");
while (Serial.available()==0);
numero = Serial.read();
Felipe Nascimento Martins
if (numero>='0' && numero<='9')
Serial.println(numero-’0’);
else {
Serial.println("O valor deve ser numerico!");
continue;
}
numero-='0';
for (i = 0; i <= 10; i++) {
Serial.print(numero);
Serial.print(" x ");
Serial.print(i);
Serial.print(" = ");
Serial.println(numero*i);
}
Serial.println("");
}
}
Felipe Nascimento Martins
Prática 8: Comunicação bidirecional
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155997-pratica-8-comunicacao-bidirecional-tabuada/embed
Felipe Nascimento Martins
Mais um pouco de Eletrônica
Shift Registers
• Shift registers (ou Registradores de
Deslocamento) são memórias que recebem
uma sequência de bits enviados serialmente e
disponibilizam seus valores de forma
simultânea;
• Muito utilizados em sistemas embarcados
para economizar pinos de E/S dos
microcontroladores;
• CI 74HC595 é um shift register de 8 bits.• Datasheet: http://arduino.cc/en/uploads/Tutorial/595datasheet.pdf
Felipe Nascimento Martins
Shift Registers
74HC595
Felipe Nascimento Martins
Shift Registers
74HC595
Felipe Nascimento Martins
Prática 9: Usando shift register
• Monte o circuito abaixo.
Felipe Nascimento Martins
Prática 9: Usando shift register
int latchPin = 8; //Pin connected to ST_CP of 74HC595
int clockPin = 12; //Pin connected to SH_CP of 74HC595
int dataPin = 11; //Pin connected to DS of 74HC595
void setup() {
//set pins to output so you can control the shift
register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
Felipe Nascimento Martins
Prática 9: Usando shift register
void loop() {
// count from 0 to 255 and display the number
for (int numberToDisplay = 0; numberToDisplay < 256;
numberToDisplay++) {
// take the latchPin low: LEDs don't change
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST,
numberToDisplay);
digitalWrite(latchPin, HIGH); // turn LEDs on
delay(500);
}
}
Felipe Nascimento Martins
Felipe Nascimento Martins
Controle de cargas analógicas
“Simulando” uma tensão analógica
• PWM = Pulse Width Modulation;
• Razão cíclica (duty cycle): define a tensão
média aplicada:
T(PWM) T(PWM) T(PWM)
A1 A2 A3
Felipe Nascimento Martins
Tensão média de um sinal PWM
Felipe Nascimento Martins
Sinal PWM versus sinal analógico
Felipe Nascimento Martins
Controle de potência por PWM
P = V2 / R
analogWrite(11, 200);
cria no pino 11 um sinal
PWM com razão cíclica
igual a 200;
f = 490Hz;
apenas alguns pinos
possuem saída PWM.
Felipe Nascimento Martins
Prática 10: Controle de brilho
int brilho = 0; // brilho do LED
int sensor; // valor do LDR
void setup() {
pinMode(A2, INPUT); // pino do LDR: entrada A2
pinMode(13, OUTPUT); // pino do LED: saida 13
Serial.begin(9600);
}
void loop() {
sensor = analogRead(A2); // le valor do LDR
brilho = map(sensor, 0, 1023, 0, 255);
Serial.println(brilho); // envia ao PC
analogWrite(13, brilho); // aciona LED
delay(100);
}
Felipe Nascimento Martins
Prática 11: Pisca-pisca suave
int brilho = 0; // brilho do LED
int variacao = 5; // quanto varia o brilho
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
analogWrite(13, brilho);
brilho = brilho + variacao;
if (brilho == 0 || brilho == 255) {
variacao = -variacao;
}
delay(30);
}
Felipe Nascimento Martins
Felipe Nascimento Martins
Módulo LCD
LCD – Liquid Cristal Display
• Opção prática de apresentar uma grande
quantidade de dados de forma relativamente
simples e barata;
• O módulo é constituído de um display de
cristal líquido (LCD) e de um controlador de
display;
• Existem dois tipos de módulo LCD: caractere
e gráfico.
Felipe Nascimento Martins
• Os displays de caracteres são mais baratos e capazes de apresentar caracteres como letras, números e símbolos;
• Sua tela é dividida em linhas e colunas, e cada posição armazena um caractere;
• Não funcionam adequadamente para a apresentação de gráficos.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• Os displays gráficos são mais caros e
complexos de programar;
• Podem apresentar basicamente qualquer tipo de
informação na tela, inclusive gráficos, fotos etc.
100 x 64 pixels 128 x 64 pixels
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• Serão abordados neste curso os módulos de caractere baseados no chip controlador Hitachi HD 44780;
• É um chip que é praticamente padrão no segmento de módulos de display LCD;
• Permite um interface simples com microcontroladores.
LCD – Liquid Cristal Display
• Tem largura de barramento de dados selecionável para 4 ou 8 bits;
• São necessárias três linhas de controle adicionais: ENABLE, RS e R/W;
• A comunicação no modo de 4 bits é realizada utilizando apenas as quatro linhas mais significativas (D7 a D4). O byte é dividido em dois nibbles onde o mais significativo é enviado primeiro.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Bit 1 de dados do LCDD18
Bit 0 de dados do LCDD07
EnableE6
Read/WriteR/W5
Register SelectRS4
ContrasteVo3
Positivo (5V)Vdd2
TerraVss1
FunçãoNomePino
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Catodo do back-light (se existir)K16
Anodo do back-light (se existir)A15
Bit 7 de dados do LCDD714
Bit 6 de dados do LCDD613
Bit 5 de dados do LCDD512
Bit 4 de dados do LCDD411
Bit 3 de dados do LCDD310
Bit 2 de dados do LCDD29
FunçãoNomePino
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• O HD 44780 possui as seguintes memórias:
– 80 bytes de memória RAM (DDRAM – Data
Display RAM);
– 64 bytes de RAM para o gerador de
caracteres (CGRAM – Caracter Generator
RAM);
– 9920 bits de memória ROM (CGROM): 208
caracteres 5x8 ou 32 caracteres 5x10.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• O Arduino possui uma biblioteca para
utilização de LCDs de caractere;
• Após incluir a biblioteca, é necessário
declarar o display informando a que pinos do
Arduino o LCD está conectado;
• Em seguida, deve ser chamada a função de
inicialização, passando como parâmetros o
número de caracteres e de linhas que o LCD
possui.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Prática 12: Dados no LCD
#include <LiquidCrystal.h>
// inicializa bib. informando os pinos conectados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // inicializa o LCD
lcd.print("hello, world!"); // mostra mensagem
}
void loop() {
// coloca cursor na coluna 0, linha 1:
lcd.setCursor(0, 1);
// mostra numero de segundos desde o reset:
lcd.print(millis()/1000);
delay(100);
}
Felipe Nascimento Martins
Prática 12: Dados no LCD
Felipe Nascimento Martins
Prática 12: Dados no LCD
Felipe Nascimento Martins
• Outras funções interessantes:
lcd.home(); // retorna cursor ao início
lcd.write(char); // imprime um caracter
lcd.blink(); // aciona cursor piscante
lcd.noBlink(); // desliga cursor piscante
lcd.autoscroll(); // ativa deslocamento a esquerda
lcd.noAutoscroll(); // desliga deslocamento
lcd.noDisplay(); // apaga tela (texto na memória)
lcd.display(); // liga tela (exibe caracteres)
lcd.rightToLeft(); // próxima letra à esquerda
lcd.leftToRight(); // próxima letra à direita
lcd.clear(); // limpa a tela
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Prática 13: Valor do sensor no LCD
• Modifique o programa anterior para fazer com que a
primeira linha do LCD mostre o valor de temperatura
e a segunda linha mostre um relógio tipo HH:MM:SS.
Felipe Nascimento Martins
LCD gráfico 128 x 64 pixels
Detalhes: http://nossosrobos.blogspot.com.br/2012/01/lcd-para-seu-robo-com-arduino.html
Felipe Nascimento Martins
Felipe Nascimento Martins
Avançando com Arduino e Sistemas Embarcados
Felipe Nascimento Martins
Motores Elétricos
Motor de Corrente Contínua (CC)
Felipe Nascimento Martins
• Alimentado em corrente contínua;
• Possui ímã e bobinas internamente;
• Velocidade é ajustada pela tensão de
alimentação (pode ser por PWM!);
• Sentido de giro é alterado pela polaridade.
Motor de Passo
Felipe Nascimento Martins
• Alimentado com sinais
digitais;
• Alimentação das
bobinas deve ser
sequencial;
• Permite controle preciso
de posição;
• Torque cai muito com o
aumento da velocidade.
Medição de deslocamento (encoder)
• Permite medir a velocidade e posição angular
dos motores;
• Precisão: número de pulsos por volta.
Felipe Nascimento Martins
Medição de deslocamento (encoder)
Felipe Nascimento Martins
Medição de deslocamento (encoder)
Felipe Nascimento Martins
Servomotor
Felipe Nascimento Martins
• É um motor CC que possui um sistema de
interno de medição e de controle:
• angular – controla a posição (giro) do eixo;
• contínuo – controla a velocidade do eixo;
Servomotor
Felipe Nascimento Martins
Servomotor
Felipe Nascimento Martins
• Normalmente é feito com um motor de
corrente contínua, um circuito eletrônico e
engrenagens para aumentar o torque;
Servomotor
Felipe Nascimento Martins
• Três fios: 2 de alimentação e um de controle;
• O sinal de referência (de posição ou
velocidade) é do tipo PWM.
Servomotor
Felipe Nascimento Martins
• Três fios: 2 de alimentação e um de controle;
• O sinal de referência (de posição ou
velocidade) é do tipo PWM.
Exemplo: Controle de Servomotores
Felipe Nascimento Martins
Felipe Nascimento Martins
Exemplo: Controle de Servomotores
#include <Servo.h>
Servo myservo; // create servo object
Servo myservo2;
int potpin = 0; // used to connect the potentiometer
int val; // value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin
myservo2.attach(10);
}
void loop() {
val = analogRead(potpin); // entre 0 e 1023
val = map(val, 0, 1023, 0, 179); // escalona
myservo.write(val);
myservo2.write(179-val);
delay(15);
} Felipe Nascimento Martins
Exemplo: Controle de Servomotores
Outros motores com Arduino
• Cada pino do Arduino pode fornecer, no máximo,
40mA de corrente -> pode não ser suficiente para
acionar um motor!
• Solução: usar transistores.
Felipe Nascimento Martins
Transistor
• Um transistor pode ser entendido
como uma “válvula” eletrônica: é
capaz de acionar cargas de alta
corrente a partir de um sinal de
controle de baixa corrente.
• Quanto maior for a corrente no pino
de “base” (B), maior será a corrente
entre os pinos “coletor” (C) e “emissor”
(E).
• Por exemplo, se a corrente na base
variar de 0 a 0,01 A, a corrente de
coletor pode variar de 0 a 1A!
Felipe Nascimento Martins
Exemplo: Motor CC com transistor
Felipe Nascimento Martins
Exemplo: Motor CC com transistor
Felipe Nascimento Martins
• Com um transistor é possível ligar e desligar um
motor, além de controlar sua velocidade (PWM);
• Mas, para inverter o sentido de giro de um motor
CC é necessário inverter o sentido de circulação
da corrente no motor;
• Com um transistor, a corrente circula apenas num
sentido;
• Solução: usar quatro transistores conectados em
forma de ponte: Ponte H.
Ponte H
Felipe Nascimento Martins
Ponte H
Felipe Nascimento Martins
Ponte H – exemplo
Felipe Nascimento Martins
Motor Shield oficial
Felipe Nascimento Martins
• Shield oficial para controle de motores: circuito
integrado com ponte H.
Motor Shield
• Pode acionar dois motores CC ou um motor de passo: até 36V, 600mA, 5kHz.
Felipe Nascimento Martins
Motor Shield
• Exemplo: controle de velocidade dos motores com o Shield Motor Control:
Felipe Nascimento Martins
• Pode acionar quatro
motores CC (46V, 4A) e
uma carga resistiva de até
30A.
Motor Shield 4 Power
Felipe Nascimento Martins
Felipe Nascimento Martins
Conectando Dispositivos
Comunicação Serial no Arduino
• A maioria das placas Arduino possui hardware
para implementação de comunicação serial em
diferentes padrões:
• SPI – Serial Peripheral Interface;
• TWI – Two Wire serial Interface (I2C);
• USART – Universal Synchronous and
Asynchronous serial Receiver and
Transmitter (estilo RS-232) – Já vimos este
tipo;
Felipe Nascimento Martins
SPI – Serial Peripheral Interface
Felipe Nascimento Martins
SPI
• SPI – Serial Peripheral Interface – é uma interface de comunicação serial síncrona utilizada para comunicação a curta distância:
• CIs conversores A/D e D/A;
• Memórias Flash e EEPROM;
• Relógios de tempo real;
• Sensores;
• Potenciômetros digitais;
• Telas de LCD; etc.
Felipe Nascimento Martins
SPI
• Na comunicação SPI sempre existe um dispositivo mestre (em geral é o próprio microcontrolador) que controla os periféricos;
• Três linhas são comuns a todos os dispositivos:
– MISO (Master In Slave Out) – linha pela qual o escravo envia dados ao mestre;
– MOSI (Master Out Slave In) – linha pela qual o mestre envia dados aos escravos;
– SCK (Serial Clock) – clock gerado pelo mestre para sincronizar a comunicação.
Felipe Nascimento Martins
SPI
• Além das linhas MISO, MOSI e SCK, cada
dispositivo está conectado a uma linha SS:
• SS (Slave Select) – cada escravo possui uma
entrada desta linha, que é controlada pelo
mestre para habilitar ou desabilitar os
dispositivos individualmente:
• Em nível baixo: comunicação habilitada;
• Em nível alto: escravo ignora o mestre.
Felipe Nascimento Martins
SPI
Felipe Nascimento Martins
SPI com vários escravos
Felipe Nascimento Martins
SPI com vários escravos
Felipe Nascimento Martins
SPI com Arduino
• A biblioteca do Arduino faz a placa operar em modo mestre;
• Ordem de transmissão dos dados (primeiro pelo MSB ou pelo LSB): SPI.setBitOrder()
• Linha de clock fica em nível alto ou baixo quando inativa e modo de amostragem de dados: SPI.setDataMode()
• Velocidade de comunicação: SPI.setClockDivider()
Felipe Nascimento Martins
Cartão de Memória SD
Felipe Nascimento Martins
Cartão de Memória SD
• A biblioteca “SD.h” provê meios de
utilização de cartões de memória SD com o
Arduino.
• Esse tipo de memória se comunica com o
microcontrolador por SPI.
Felipe Nascimento Martins
Cartão de Memória SD
Felipe Nascimento Martins
Cartão de Memória SD
Alimentação: 3,3V uso de resistores em 5V!
Felipe Nascimento Martins
Exemplo: data logger#include <SD.h>
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT); // chip select
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
}
Felipe Nascimento Martins
Exemplo: data loggervoid loop()
{
// make a string for assembling the data to log:
String dataString = "";
// read three sensors and append to the string:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
}
Felipe Nascimento Martins
Exemplo: data logger// open the file. only one file can be open at a time,
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
}
Felipe Nascimento Martins
TWI – Two Wire serial Interface (I2C)
Felipe Nascimento Martins
I2C
• I2C (Inter-Integrated Circuit) foi desenvolvido
pela PHILIPS no início da década de 1980 para
transferência de dados entre
microcontroladores e equipamentos;
• Barramento de comunicação serial de dados
entre dispositivos onde a conexão é feita
através de 2 fios;
• É half-duplex, ou seja, em determinado
instante, apenas recebe ou envia informação;
Felipe Nascimento Martins
I2C
• Taxa de transferência: até 100kbits/s;
• Operação em modo mestre/escravo: um
dispositivo ou processo (mestre) tem controle
unidirecional sobre um ou mais outros
dispositivos (escravos);
• Pode possuir mais de um mestre, mas só um
controla o barramento de cada vez.
Felipe Nascimento Martins
I2C
Felipe Nascimento Martins
I2C
Felipe Nascimento Martins
I2C• Um fio transporta o sinal do clock (SCL – Serial
Clock Line) e o outro, os dados (DAS - Serial
Data Line);
• A comunicação é síncrona. Primeiro é enviado o
endereço do dispositivo destinatário. Em
seguida, o dado é enviado ao barramento.
I2C
Felipe Nascimento Martins
TWI (I2C)
• No Arduino a biblioteca Wire possui as funções para implementação da comunicação I2C;
• Esta biblioteca implementa apenas endereçamento de 7 bits;
• Caso use dispositivos que exijam 8 bits de endereçamento, deve-se configurar seu endereço para a faixa 0-127.
Felipe Nascimento Martins
TWI (I2C)
Felipe Nascimento Martins
Exemplo: Potenciômetro Digital#include <Wire.h>
void setup() {
Wire.begin(); // join i2c (address optional for master)
}
byte val = 0;
void loop() {
Wire.beginTransmission(44); // transmit to device #44
// device address is specified in datasheet
Wire.write(byte(0x00)); // sends instruction byte
Wire.write(val); // sends potentiometer value byte
Wire.endTransmission(); // stop transmitting
val++; // increment value
if(val == 64) { // if reached 64th position (max)
val = 0; // start over from lowest value
}
delay(500);
}
Felipe Nascimento Martins
Arduino e NXT via RS-485 e I2C
Felipe Nascimento Martins
Arduino Nano
Arduino e NXT via RS-485 e I2C
Detalhes: http://nossosrobos.blogspot.com.br/2011/08/arduino-conversando-com-nxt-via-rs-485.html
http://nossosrobos.blogspot.com.br/2013/03/comunicacao-ic-entre-lego-nxt-e-arduino.html
Felipe Nascimento Martins
Comunicação Serial USART:Meios de Utilização
Felipe Nascimento Martins
Comunicação sem-fio
• Wixel shield for Arduino, com dois módulos Wixel;
• Rádio de 2,4GHz para até 30 metros, 350kbps;
• Possui microcontrolador programável por interface amigável;
• Tem 15 pinos de I/O, com 6 entradas analógicas, que podem ser programados de forma independente da comunicação;
• Permite a criação de uma rede com até 128 módulos de comunicação;
• A comunicação é feita como se fosse comunicação serial padrão;
• Permite gravar programas no Arduino sem ligar o cabo USB à placa!
Felipe Nascimento Martins
Comunicação sem-fio
http://nossosrobos.blogspot.com.br/2011/12/arduino-wireless.html
Felipe Nascimento Martins
Conexão Bluetooth
• Modelo JY-BT03 - Shenzhen Jiayuan Electronic Co. Ltd.;
• Conexão com pinos RX-TX do microcontrolador;
• Comunicação Bluetooth 2.0;
• Baud rate: 2.400 a 1.382.400 bps;
• Tensão de alimentação: 5,0 V (3,6V a 6,0V);
• Corrente: 35mA quando realiza "pareamento"; 8mA quando conectado;
• Antena impressa na própria placa;
• Possui LED que indica o estado da conexão Bluetooth;
• Senha padrão: 1234.
Felipe Nascimento Martins
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão Bluetooth
Conexão Bluetooth
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão Bluetooth
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão em rede ZigBee
• ZigBee designa um conjunto de especificações
para a comunicação sem-fio entre dispositivos
eletrônicos, com ênfase na baixa potência de
operação, na baixa taxa de transmissão de
dados e no baixo custo de implantação;
• Pode-se formar uma rede com vários módulos,
de maneira que a informação seja transmitida
de um ao seguinte (Mesh) para aumentar o
alcance total.
Felipe Nascimento Martins
Módulo XBee – ZigBee
• Módulo Digi XBee ZB - Antena Wire - Low Power
• Frequência de Transm.: 2,4 GHz
• Potência de Transm.: 1,25 mW
• Alcance Máximo estimado: até 120m (+1 dBm)
• Topologias de rede: P-to-P, P-to-M, ZigBee/Mesh
• Sleep Mode < 1µA
• RF Data Rate 250 kbps
• Segurança: 128-bit AES
• (10) GPIO, (4) ADC e 3V3 CMOS UART
Felipe Nascimento Martins
Módulo XBee – ZigBee
• XBee e XBee-PRO ZB
• Frequência de Transm.: 2,4 GHz
• Potência de transm.: 63 mW (+18 dBm) / Int'l10 mW (+10 dBm)
• Alcance Máximo estimado: 3200 m
• RF Data Rate: RF 250 kbps, Serial até 1 Mbps
• Segurança: 128-bit AES
• Antena PCB - Ref: PIT
Felipe Nascimento Martins
Ethernet Shield
Felipe Nascimento Martins
Arduino com MATLAB
Detalhes: http://nossosrobos.blogspot.com.br/2011/10/arduino-com-matlab.html
Felipe Nascimento Martins
Arduino com LabVIEW
Detalhes: http://sine.ni.com/nips/cds/view/p/lang/pt/nid/209835
Felipe Nascimento Martins
http://www.blendedtechnologies.com/realtime-plot-of-arduino-serial-data-using-python/231
Aquisição de dados com Arduino
Felipe Nascimento Martins
Aquisição de dados com Arduino
Felipe Nascimento Martins
Controle de um Robô
Detalhes: http://nossosrobos.blogspot.com.br/2012/09/monte-seu-robo-com-arduino.html
Felipe Nascimento Martins
Robôs baseados em Arduino
• DFRobotShop Rover - Arduino
Compatible Tracked Robot
Felipe Nascimento Martins
Robôs baseados em Arduino
• DFRobotShop Rover 2.0 – Arduino
Compatible Mecanum
Felipe Nascimento Martins
Robô Arduino oficial
• Arduino Robot
Felipe Nascimento Martins
Detalhes: http://nossosrobos.blogspot.com.br/2013/07/arduino-robot-o-primeiro-robo-arduino.html
Softwares gratuitos
Felipe Nascimento Martins
• IDE de programação do Arduino:
www.arduino.cc
• Fritzing - para fazer esquemas elétricos, de
proto-board e placas de circuito impresso:
www.fritzing.org
• 123D Circuits.io - para simulação de circuitos
com ou sem Arduino e projeto de placas de
circuito impresso (roda no navegador):
http://123d.circuits.io
Referências
Felipe Nascimento Martins
• ARDUINO. Language Reference. Disponível em:
<http://arduino.cc/en/Reference/HomePage>. MAR/2014.
• ERIKSSON, Fredrik. Industrial Circuits Application Note - Stepper
Motor Basics.
• FONSECA, Érika e BEPPU, Mathyan. Apostila Arduino. CT/UFF, 2010.
• JUSTEN, Álvaro. Curso de Arduino (apostila), 2011.
• LIMA, Charles B. de; VILLAÇA, Marco V. M. AVR e Arduino – Técnicas
de Projeto. 2ª ed. 2012.
• MARTINS, Felipe N. Introdução à Eletrônica com Arduino. Disponível
em: <http://www.slideshare.net/felipenm/oficina-de-introduo-a-eletrnica-
com-arduino>.
• Nossos Robôs: www.nossosrobos.blogspot.com
• POMÍLIO, J.A. Eletrônica de Potência. UNICAMP (apostila para o
curso de graduação). Acesso em AGO/2010.
• http://www.labdegaragem.com.br/wiki
• http://www.learningaboutelectronics.com/
• VALPEREIRO, Filipe. Workshop Arduino, 2008.
Obrigado!
Felipe N. Martins
@f_n_martinswww.facebook.com/felipenm