Arduino day 2014 BH - Hello World Arduino

1.000 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
  • Seja o primeiro a comentar

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

×