arduino day 2014 bh - hello world arduino

Post on 15-Jul-2015

565 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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.

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

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

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

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

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

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

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

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

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

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Arquitetura do Arduino

Arduino UNO R3

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

Estrutura do Arduino

13

Arquitetura do ATmega

14

Arquitetura do padrão AVR

15

16

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

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"

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Manipulando as Portas

Interagindo e controlando o mundo externo

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

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)

Arquitetura da Conversão Analógica

22

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

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

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

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

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.

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.

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);

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

INTERVALO

o Tempo de uma música

31

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Continuando

Perguntas

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Tipos de Variáveis

Alocando Memória

Operações Matemáticas

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

34

Variáveis vs constantes

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

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

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

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

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Manipulando VariáveisOperações Matemática

+, -, *, /, %

+=, -=, *=, /=

++, --

<<, >>

Operações Lógicas

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

&&, ||

&, |, ^, ~,

? :

39

http://facebook.com/CursoArduinoMinas

http://facebook.com/BasicaoDaEletronica

http://facebook.com/TelefoniaEAutomacao

Estrutura Lógica de Controle

Mudando os rumos e tomando decisões

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

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

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

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

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

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;

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

top related