introdução a sistemas embarcados com arduino - mini-curso

Post on 18-Dec-2014

8.806 Views

Category:

Education

8 Downloads

Preview:

Click to see full reader

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...

TRANSCRIPT

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

Contato:

Twitter: @f_n_martinshttp://www.facebook.com/felipenm

felipe.n.martins@gmail.com

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

top related