Post on 15-Jul-2015
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