47
http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Hello World Arduino Uma Introdução ao Arduino. Os primeiros passos para domina-lo.

Arduino day 2014 BH - Hello World Arduino

Embed Size (px)

Citation preview

Page 1: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Hello World Arduino

Uma Introdução ao Arduino.

Os primeiros passos para domina-lo.

Page 2: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Quem Sou?Carlos Delfino - Um idealista, as vezes utópico

Hobista/Maker Eletronica e TI desde 1984 (a 30 anos)

Analísta de suporte desde 1992 (a 22 anos)

(Xenix, Unix, Linux, Windows, VirtuOS)

Analista de redes desde 2005 (formação)

Desenvolvedor Java desde 2005

(bolsista em projetos de mestrado e pesquisa)

Desenvolvedor PHP desde 1999/2000

Usuário Linux desde 1996

(Um dos motivadores da função da comunidade

Slackware em BH)

2

Page 3: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Quem Sou?FIC - Faculdade Integrada do Ceará - 2005

Projeto e Implementação de Redes de Computadores

Um dezena ou mais de cursos de programação e gestão de projetos desde 2003

Atuei como Bolsista em dois projetos de mestrado,

cheguei a ser cotado como bolsista para mestrado na UFC, com 4 semestres de faculdade.

Nós últimos 15 anos buscando influenciar e desenvolver um projeto Social de tecnologia, inspirado no Woz

(Worzniak)

A 6 anos conheci o xBee

A 3 anos conheci o Arduino

3

Page 4: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

O que espero com este cursoAbrir a porta do mundo para quem quer conhecer as possibilidades de se criar seu

próprio projeto;

Apresentar os conceitos básicos do Arduino e tópicos relacionados;

Alimentar o desejo dos participantes na tecnologia e mostrar que é melhor criar do que

ser [CTRL+C]/[CTRL+V];

Se tornarem programadores de verdade, e mostrar que nem sempre o caminho mais fácil

é o mais adequado e elegante;

Programar é mais que escrever código, é tanto quanto escrever poesias e belos contos.

4

Page 5: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Tópicos do CursoModelos de Arduinos

Arquitetura do Arduino UNO

Arquitetura do AtMega328

Esqueleton, estrutura do código do Arduino

Manipulando Portas

Portas Digitais

Portas Analógicas

Comunicação Serial

Tipo de Variáveis

Estruturas Lógica de Controle:

If

For

While

Escopo de variáveis

Interrupções

Expandindo o Arduino

Shields

Módulos

Protocolos

5

Page 6: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Modelos de ArduinoMuito Além de uma placa, um controlador

Um conceito.

Originais e Clones

Page 7: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

ATmega2560, 54 Portas Digitais, 16 Analógicas, 15 PWM, 4 UARTS (Seriais), 6

Interrupções externas, 256KB Flash (8k para bootloader), 8KB SRAM, 4KB

EEPROM

Arduino Mega

7

Page 8: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

ATmega32U4, 12 Analógicas, 7 PWM, 4 Interrupções externas, 32k

Flash (4k para bootloader), 2,5K SRAM, 1KB EEPROM

Arduino Leonardo

8

Page 9: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

SAM3X8E ARM Cortex-M3, 32bits, clock de 84Mhz, 96KB SRAM, 512KB Flash, 54 portas

digitais, 12PWM, 12Analogicas, 4 UARTs (Seriais), 2 DACs, 1USB OTG, 2 TWI, DEBUG, usa

3.3V

Arduino DUE

9

Page 10: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Existem muitos outros modelos, que podem ser encontrados na

página do Arduino (http://arduino.cc) ;

Há também há clones ou similares, como por exemplo o FreeDuino

ou o Sanguino;

10

Outros Modelos

Page 11: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Arquitetura do Arduino

Arduino UNO R3

Page 12: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Microcontrolador: ATmega328

Voltagem padrão de Operação: 5V

Nível de voltagem de entrada recomendado: 7 a 12V, Limites: 6-20V

Pinos de Entrada e Saída Digital: 14 (sendo 6 com saída PWM)

+ 6 compartilhadas com as entradas Analógicas.

Pinos de Entrada Analógica: 6 (que também podem ser usadas como digital)

Limite de corrente por saída 5V: 40mA, máximo de 200mA simultâneo.

Memória Flash (Memória de programa): 32KB,

sendo 0.5KB é usado pelo Bootloader.

SRAM (Memória de dados): 2KB

EEPROM: 1KB

Clock: 16Mhz

12

Características Técnicas

Page 13: Arduino day 2014   BH - Hello World Arduino

Estrutura do Arduino

13

Page 14: Arduino day 2014   BH - Hello World Arduino

Arquitetura do ATmega

14

Page 15: Arduino day 2014   BH - Hello World Arduino

Arquitetura do padrão AVR

15

Page 16: Arduino day 2014   BH - Hello World Arduino

16

Page 17: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

O Arduino é composto por um framework chamado Wiring

Em sua forma original o Wiring dá suporte para cores AVR, AVR Xmega, AVR

Tiny, MSP430 da TI, PIC24/32 e STM M3 ARM

No Arduino podemos dizer que usamos um Dialeto C/C++ chamado Wiring, que é

nada mais que a Linguagem C/C++ empoderada com o Framework Wiring.

Compilador utilizado para Arduino é o GCC-AVR,

Há outros compiladores para a linha AVR: IAR, Eclipse + GCC, ATMel Studio

(Visual Studio + GCC)

17

C, C++ ou Wiring

Page 18: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

void setup(){

}

void loop(){

}

void serialevent(){

}

18

EsqueletonA estrutura do código do Arduino

Setup: prepara todo o ambiente é executado quando se

liga o Arduino;

Loop: Executado constantemente, mesmo que

solicitando explicitamente a saída é chamada

novamente;

SerialEvent: Função executada sempre que chega

algum caracter na serial, porém somente é executada

entre interações com a função loop. "Não é obrigatório"

Page 19: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Manipulando as Portas

Interagindo e controlando o mundo externo

Page 20: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Usando as Portas Digitais

pinMode(port, mode);

digitalWrite(port, state);

bool digitalRead(port);

20

pinMode: ajusta a porta se entrada ou

saída, recebe o número indicativo da

porta e um dos modos: INPUT,

OUTPUT, INPUT_PULLUP

digitalWrite: escreve na porta informada

um dos estados: HIGH (1) ou LOW (0)

bool digitalRead: Lê a porta retornando

um bool, o estado da porta

HIGH/TRUE/1 ou LOW/FALSE/0

Page 21: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Usando as Portas Analógicas

analogReference(type);

int analogRead(port);

analogWrite(port,value);

21

anlogReference: permite definir uma nova referência de

limites para conversão analógica, podendo ser

DEFAULT (5V), INTERNAL (1.1V), EXTERNAL (usa o

pino ARef)

analogRead: Faz a leitura do nível de tensão da porta

analógica A0 até A5, retornando um valor entre 0 e

1023, veremos mais a frente mais detalhes;

analogWrite: simula uma saída analógica, podem ser

usadas apenas em pinos que possuam recurso PWM,

sendo as portas 3,5,6,9,10,11. Permite valores entre 0

(0%) e 255(100%) do nível de tensão (5V)

Page 22: Arduino day 2014   BH - Hello World Arduino

Arquitetura da Conversão Analógica

22

Page 23: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Amostragens de 10bits, ou seja valores resultantes entre 0 e 1023, sendo 5V de

referência, resulta em 5V/1024, ou seja uma precisão de 0,0048V (5mV);

Tempo entre conversões de 500nS (0,5uS), Considerando que cada instrução no Arduino

gasta 62,5nS, é um tempo razoável;

Nunca mude a tenção de referência em ARef diretamente, primeiro ajuste para interno

(DEFAULT), ajuste a nova tensão, e retorne para EXTERNAL;

Sempre dê um 1mS entre leituras em portas diferentes;

Certifique-se que o resistor de Pull-Up está desativado sempre colocando a porta como

(INPUT) apenas;

23

Características da Conversão Analógica

Page 24: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Cada porta digital é capaz de fornecer 5V e uma corrente máxima de 40mA, a nível de stress;

O Arduino (ATmega) no total é capaz de fornecer 200mA, portanto apenas 5 portas em seu limite

de stress;

A conversão analógica leva .5uS para ser executada, porém há também um tempo necessário

para estabilização quando se troca o nível de tenção de referência;

Evite deixar as portas analógicas flutuando, procure colocar um resistor de pull-up ou pull-down

quando isso puder acontecer. Válido também para as portas digitais.

As portas de IO possuem um resistor de PULL-UP que podem ser ativado, cuidado ao usa-lo nas

portas analógicas, ele pode interferir na leitura dos valores da porta, seu valor é entre 20K até 50K

24

Detalhes e Macetes Portas

Page 25: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Comunicação Serial

Comunicando com o PC e outros Dispositivos via

Protocolo TTL Serial

Page 26: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Sem muitos detalhes, TTL atua com 5V, RS232 atua de -12 a +12V;

É Preciso um conversor para adequar o sinal, as vezes um simples

conjunto de transistores para converter entre TTL e RS232;

Conversão para USB é feita nos modelos antigos usando um chip chamado

FTTI, nos modelos atuais usa um ATmega16U2, que traz grandes

possibilidades, pois o firmware pode ser atualizado.

O conversor USB Serial TTL do Arduino pode ser usado em diversas

situações, como acessar outros dispositivos.

26

TTL vs RS232 vs USB

Page 27: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Comunicação Serial

Serial.begin(bauds);

Serial.print(value);

Serial.println(value);

27

begin: inicializa a serial com os parâmetros

adequados ao seu funcionamento, além do

baudrates, pode se ajustar o número de bits, e o uso

ou não de paridade e bits de paradas.

print: Imprime na serial a string ou valor informado,

pode se definir o formato número dos valores, como

HEX, OCT, BIN e DEC, sendo DEC o padrão.

println: faz o mesmo que “print” porém imprime no

final um salto de linha e um retorno de carro.

Page 28: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Comunicação Serial

byte Serial.available();

char Serial.read();

char Serial.peek();

void SerialEvent(){}

28

available: Para saber se há dados disponíveis consulta

verifique consulte a serial usando available(), irá retornar o

número de bits;

read: lê o próximo caracter disponível na porta serial.

peek: lê o caracter que está disponível na serial, normalmente

o último caracter lido pela chamada de Serial.read();

SerialEvent: é uma função usada para capturar informações

enviadas entre interações do bloco "loop()", somente é

chamada quando há caracteres disponíveis na serial e a

função "loop()" termina.

Page 29: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Comunicação Serial

long Serial.parseInt();

29

parseInt: apôs chamar availabel(), vc pode

obter o primeiro long (valor número) disponível

na serial.

caso se receba algum caracter inválido

"parseInt()" irá retornar zero, portanto, se tiver

certeza que virá por exemplo um \n seguido do

número, faça um “read()” na serial para limpar

este \n e evitar que seja mal interpretado com

zero (0);

Page 30: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

INTERVALO

o Tempo de uma música

Page 31: Arduino day 2014   BH - Hello World Arduino

31

Page 32: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Continuando

Perguntas

Page 33: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Tipos de Variáveis

Alocando Memória

Operações Matemáticas

Page 34: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

34

Variáveis vs constantes

Page 35: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Tipos de variáveischar: 1 Byte, representações de caracteres,

limites entre -128 e +127, “unsigned char"

valores entre 0 e 255;

byte, similar ao "unsigned char", sempre

valores de 0 a 255;

bool, sempre “true” (1) ou “false” (0)

int, 2 Bytes, valores de -32768 a 32767,

“unsigned int” limites entre 0 e 65535;

long, 4 Bytes, valores de -2,147,483,648 a

2,147,483,647, “unsigned long” limites entre 0

a 4,294,967,295;

float, usado para números complexos e

representados por notação cientifica, limites

entre -3.4028235E+38 e 3.4028235E+38;

string/String, representa um arras de char

(char[]), usado para armazenar sequências de

caracteres, em especial finalizadas com “\0”, já

String, com “S" maiúscula, é um objeto com

diverso recursos para manipulação de Strings.

35

Page 36: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Há o qualificador “const" para definir uma identificador de memória

como sendo constante;

porém também há uma diretiva de compilador chamada “#define”

que reduz o consumo de espaço de memória em se tratando de

números, porém pode haver conflitos pois substitui palavras idênticas

pela nova definição.

36

Constantes vs Macros

Page 37: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Começamos identificando o conjunto de instrução que se deseja

repetir ou que já se repete e queremos evitar, economizando

memória;

Identificando os parâmetros, que serão passados para uso dentro do

bloco e o que o bloco irá gerar de resultado.

Vamos codificar um pouco, criando blocos de códigos e funções;

Veremos mais a frente, em contexto de variáveis do porque trabalhar

com blocos de códigos;

37

Blocos de Código

Page 38: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

global, são visíveis em todo o arquivo onde é definida;

static global, são visíveis em todo o projeto;

local, apenas visível no bloco de código onde é definido;

static local, como local, porém inicializa apenas uma vez.

38

Visibilidade de Variáveis

Page 39: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Manipulando VariáveisOperações Matemática

+, -, *, /, %

+=, -=, *=, /=

++, --

<<, >>

Operações Lógicas

>, <, <=, >=, ==, !=, !

&&, ||

&, |, ^, ~,

? :

39

Page 40: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Estrutura Lógica de Controle

Mudando os rumos e tomando decisões

Page 41: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

long millis();

Retorna o tempo em milessegundos desde o momento de ativação do Arduino. Não funciona dentro

de interrupções, em 50 dias o Arduino zeta o valor;

long micros();

Retorna o tempo em microssegundos, tem resolução multiplica de 4, além disso seu valor zera a

cada 70 minutos, devido a limitação de memória.

delay(unsigned long);

Interrompe seu código pelo tempo em milessegundos informados. As interrupções continuam

funcionando, porém não funciona dentro das interrupções.

delayMicrosseconds(unsigned int);

Este delay é similar ao delay(), porem ocorre em microssegundos, pode ser usado até 16383uS.

41

Controlando o Tempo

Page 42: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

idêntico ao java, php ou mesmo C#

Vamos fazer uns códigos.

42

IF / ELSE IF / ELSE

Page 43: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Vamos fazer uns códigos;

para um melhor desempenho opte em começar do maior número

para o menor, o assembler tem instruções que comparam com

resultado zero ou negativo;

43

FOR

Page 44: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Vamos codificar, também;

Como na instrução for, também é bom começar do maior número e

ir até zero.

44

WHILE / DO WHILE

Page 45: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Não iremos falar aqui de interrupções

Talvez durante o Hands-ON.

45

Interrupções

Page 46: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Expandindo o Arduino

Shields, Módulos e Bibliotecas

Vamos reanalizar a Arquitetura do Arduino,

e dar uma olhadinha na estrutura de diretório da interface;

Page 47: Arduino day 2014   BH - Hello World Arduino

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

ObrigadoMusica de Abertura: Underdog -

Kassabian

Arte base criada pelo Designer

Digital Elimar Santos de Sete Lagoas.

Imagens obtidas na internet,

reproduzidas conforme licenças.

Apoio: Ed Waldo, Thiago Munhoz,

Marcelino Freitas - IFPI

Eternamente grato aos amigos do

Ceará/Fortaleza, em especial Prof.

Aminadabe e Prof. Inacio

Eternamente Grato a muitos outros

amigos em Minas, Rio, Bahia,

Brasilia, Pernambuco, e pelo mundo a

fora.

Eternamente Grato a minha família.

47