Arduino day 2014 BH - Hello World Arduino

939 visualizações

Publicada em

Palestra ministrada no Arduino Day 2014 em Belo Horizonte.
A palestra apresenta informações Básicas para quem está começando com o Arduino

Publicada em: Tecnologia
0 comentários
6 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
939
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
52
Comentários
0
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 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.
  • Arduino day 2014 BH - Hello World Arduino

    1. 1. 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.
    2. 2. 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
    3. 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. 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
    5. 5. 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
    6. 6. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Modelos de Arduino Muito Além de uma placa, um controlador Um conceito. Originais e Clones
    7. 7. 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
    8. 8. 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
    9. 9. 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
    10. 10. 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
    11. 11. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Arquitetura do Arduino Arduino UNO R3
    12. 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
    13. 13. Estrutura do Arduino 13
    14. 14. Arquitetura do ATmega 14
    15. 15. Arquitetura do padrão AVR 15
    16. 16. 16
    17. 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
    18. 18. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao void setup(){ } void loop(){ } void serialevent(){ } 18 Esqueleton A 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"
    19. 19. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Manipulando as Portas Interagindo e controlando o mundo externo
    20. 20. 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
    21. 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)
    22. 22. Arquitetura da Conversão Analógica 22
    23. 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. 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
    25. 25. 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
    26. 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
    27. 27. 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.
    28. 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.
    29. 29. 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);
    30. 30. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao INTERVALO o Tempo de uma música
    31. 31. 31
    32. 32. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Continuando Perguntas
    33. 33. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Tipos de Variáveis Alocando Memória Operações Matemáticas
    34. 34. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao 34 Variáveis vs constantes
    35. 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
    36. 36. 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
    37. 37. 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
    38. 38. 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
    39. 39. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Manipulando Variáveis Operações Matemática +, -, *, /, % +=, -=, *=, /= ++, -- <<, >> Operações Lógicas >, <, <=, >=, ==, !=, ! &&, || &, |, ^, ~, ? : 39
    40. 40. http://facebook.com/CursoArduinoMinas http://facebook.com/BasicaoDaEletronica http://facebook.com/TelefoniaEAutomacao Estrutura Lógica de Controle Mudando os rumos e tomando decisões
    41. 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
    42. 42. 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
    43. 43. 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
    44. 44. 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
    45. 45. 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
    46. 46. 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;
    47. 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

    ×