Este documento apresenta uma introdução ao Arduino, discutindo seus principais tópicos como:
1) Apresenta diferentes modelos de Arduino e suas características;
2) Explica a arquitetura do Arduino UNO e do microcontrolador ATmega328;
3) Discutem conceitos básicos como manipulação de portas, comunicação serial, tipos de variáveis e estruturas de controle.
3. 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
4. http://facebook.com/CursoArduinoMinas
http://facebook.com/BasicaoDaEletronica
http://facebook.com/TelefoniaEAutomacao
O que espero com este curso
Abrir 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
12. 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
17. 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
21. 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)
23. 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
24. 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
26. 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
28. 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.
35. http://facebook.com/CursoArduinoMinas
http://facebook.com/BasicaoDaEletronica
http://facebook.com/TelefoniaEAutomacao
Tipos de variáveis
char: 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
41. 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
47. http://facebook.com/CursoArduinoMinas
http://facebook.com/BasicaoDaEletronica
http://facebook.com/TelefoniaEAutomacao
Obrigado
Musica 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
Hinweis der Redaktion
Usa 4K para o bootloader porque ele nào tem o acoplador usb serial ttl, já que o próprio chip atmega32u4 tem a porta USB diretamente, portanto o código de adaptação USB já vem no bootloader.
Usa 4K para o bootloader porque ele nào tem o acoplador usb serial ttl, já que o próprio chip atmega32u4 tem a porta USB diretamente, portanto o código de adaptação USB já vem no bootloader.
Fale um pouco do ARM-M, ARM-A
OTG
consumo total em todas as portas Digitais 130mA
Não pode suar os pinos de 5V e 3.3V para alimentar a placa, pois é preciso ser regulado, pode danificar
Falar da Linguagem Wiring, sua origem.
O Framework Wiring completo pode ser obtida no site: http://wiring.org.co/
Wiring é uma iniciativa de Hernando Barragán da Universidade de Los Andes, da escola de Design e Arquitetura. Foi criada no Instituto de Interação e Design de Ivrea na Italia e é atualmente desenvolvida na Universidade de Los Andes na Colombia.
Já o IAR é um sistema integrado de desenvolvimento que gera código para uma ampla gama de microcontroladores e processadores, sendo produzido pela IAR System.
Falar da estrutura do código, funções:
void setup(){}
void loop(){}
void serialevent(){}
Aqui veremos o uso das portas Digitais tanto como entrada e saída, a escolha das portas e um pouco de PWM (Pulse Width Modulation) e interrupções além das portas que são de uso especifico como serial e SPI (Serial Processor Interface)
Neste ponto iremos tratar as portas analógicas, tanto para leitura (A0-A5) como também as portas PWM, trataremos superficialmente sobre o que é PWM. Na leitura analógica veremos os cálculos envolvidos, o uso da porta de controle analogRef.
Primeiras instruções, inicializa a serial, envia um valor, ou envia um valor e faz o salto de linha.
Baud Rates disponíveis:
300, 600, 1200, 2400, 4800, 9600 (Padrão), 14400, 19200, 28800, 38400, 57600,
ou 115200
fazer uma pequena pausa para esclarecer dúvidas e pegar o ritmo de novo.
Precisamos falar do conceito de blocos de código, para falar de contexto, sua identificação através de funções, e seu principalmente da importância na organização do código. E impacto na economia de memória.
Nas Arduinos de 16Mhz a função micros() retorna valores múltiplos de 4, já nos Arduinos de 8Mhz tem resolução de 8uS, ou seja retorna múltiplos de 8.
se der tempo vamos bater um papo sobre o assunto e analisar o Arduino voltando a discutir sua arquitetura.