Introdução a Sistemas Embarcados com Arduino - mini-curso

30,287 views

Published on

Mini-curso de Introdução a Sistemas Embarcados com Arduino.

Conteúdo:

- Sistemas embarcados;
- Arduino: características de hardware;
- Arduino: características de software;
- Microcontrolador;
- Eletrônica: conceitos básicos;
- Planejamento de programas;
- Sensores digitais (problemas e debounce);
- Sensores analógicos (Intensidade luminosa, deslocamento angular ou linear, Força/Torque, proximidade, aceleração/inclinação, temperatura);
- Comunicação serial (USART, SPI, I2C);
- Controle de cargas com PWM;
- LCD (displays de cristal líquido);
- Armazenamento de dados em cartão SD;
- Acionamento de motores e servomotores;
- Simulação de sistemas com Arduino;
- Práticas (montagem e programação);
- Avançando com o Arduino: shields, comunicação sem fio, Arduino com MATLAB, aplicações em robótica...

Published in: Education

Introdução a Sistemas Embarcados com Arduino - mini-curso

  1. 1. v. 2 - 2014 Introdução a Sistemas Embarcados com Arduino Felipe Nascimento Martins
  2. 2. O trabalho Introdução ao Arduino de Felipe Nascimento Martins foi licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 3.0 Não Adaptada. Introdução a Sistemas Embarcados com Arduino Felipe Nascimento Martins
  3. 3. Contato: Twitter: @f_n_martins http://www.facebook.com/felipenm felipe.n.martins@gmail.com
  4. 4. Conteúdo • Sistemas embarcados; • Arduino: características de hardware; • Arduino: características de software; • Microcontrolador; • Eletrônica: conceitos básicos; • Planejamento de programas; • Sensores e atuadores; • Práticas (montagem e programação); • Avançando com o Arduino: shields, comunicação sem fio, aplicações em robótica... Felipe Nascimento Martins
  5. 5. Felipe Nascimento Martins Sistemas Embarcados
  6. 6. Sistema Embarcado • Sistema baseado em microcontroladores em que o computador é encapsulado e dedicado ao dispositivo ou sistema que ele controla; • Realiza um conjunto de tarefas pré-definidas, com requisitos específicos; • Além do computador dedicado, em geral possui sensores, atuadores e uma interface com o usuário. Felipe Nascimento Martins
  7. 7. Sistema de Controle Embarcado Felipe Nascimento Martins
  8. 8. Exemplos de Sistemas Embarcados • MP3 player, relógio digital, calculadora, controlador de veículo elétrico, navegador com GPS, leitora para pagamento com cartões de crédito, robô, semáforo, roteador, console de vídeo game, lavadora de roupas, marca-passo, quadricóptero, forno de micro- ondas, tablet, medidor de pressão arterial, televisão etc. Felipe Nascimento Martins
  9. 9. Exemplos de Aplicação
  10. 10. Felipe Nascimento Martins
  11. 11. O que é Arduino? • Arduino é uma plataforma de prototipagem eletrônica open-source, baseada nos princípios de flexibilidade e facilidade de uso para hardware e software. • Consiste de uma placa com microcontrolador programável preparada para receber sinais de sensores e acionar atuadores. • Sua linguagem de programação é baseada em Wiring (baseado em C/C++). • A placa pode funcionar em conjunto ou de forma independente do computador. Felipe Nascimento Martins
  12. 12. Arduino – hardware Felipe Nascimento Martins
  13. 13. Arduino – hardware Felipe Nascimento Martins
  14. 14. Arduino – hardware Felipe Nascimento Martins
  15. 15. Arduino – software
  16. 16. Arduino é Open Source • Desenvolvido por: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David Mellis, na Itália, em 2005; • Todo o projeto é aberto: open source hardware and software; • 200 placas vendidas em 2005, 5.000 em 2006, 30.000 em 2007 e mais de 300.000 em 2011 e cerca de 1 milhão até setembro de 2013! • Site oficial: www.arduino.cc Felipe Nascimento Martins
  17. 17. Arduino é Open Source! Felipe Nascimento Martins
  18. 18. Arduino é Open Source! Felipe Nascimento Martins
  19. 19. Arduino é Open Source! • Todo o hardware é aberto e os projetos estão disponíveis. • Quem quiser, pode comprar os componentes e montar a sua placa! • O software de programação também é livre e está disponível para download gratuitamente. Felipe Nascimento Martins
  20. 20. Arduino é Open Source! • Todo o hardware é aberto e os projetos estão disponíveis. • Quem quiser, pode comprar os componentes e montar a sua placa! • O software de programação também é livre e está disponível para download gratuitamente. • Mas... Felipe Nascimento Martins
  21. 21. Arduino é Open Source! • Todo o hardware é aberto e os projetos estão disponíveis. • Quem quiser, pode comprar os componentes e montar a sua placa! • O software de programação também é livre e está disponível para download gratuitamente. • Mas... • O nome Arduino é marca registrada! Felipe Nascimento Martins
  22. 22. Clones do Arduino • Freeduino Felipe Nascimento Martins
  23. 23. Clones do Arduino • Seeduino Felipe Nascimento Martins
  24. 24. Clones do Arduino • Brasuíno Felipe Nascimento Martins
  25. 25. Clones do Arduino • Severino Felipe Nascimento Martins
  26. 26. Similares ao Arduino • chipKIT Uno32 - PIC32MX320F128 (32 bits, 80MHz, 128kB Flash, 16kB SRAM) Felipe Nascimento Martins
  27. 27. Similares ao Arduino • Olimexino – STM32F103RBT6 (núcleo ARM Cortex M3, 32 bits, 128kB, 72MHz) Felipe Nascimento Martins
  28. 28. Similares ao Arduino • Adafruit Trinket – ATtiny85 Felipe Nascimento Martins
  29. 29. Similares ao Arduino • TI LaunchPad: MSP430 Felipe Nascimento Martins
  30. 30. Similares ao Arduino • LaunchPad: ARM Cortex M4 Felipe Nascimento Martins
  31. 31. Compatível com Arduino Felipe Nascimento Martins
  32. 32. Felipe Nascimento Martins Características de Hardware
  33. 33. Arduino Uno • Microcontrolador: ATmega328; • Tensão de operação: 5V; • Tensão de entrada (recomendada): 7-12V; • Pinos digitais de E/S:14 (6 podem ter sinal PWM); • Pinos com entrada analógica: 6; • Corrente máxima por pino de E/S: 40 mA; • Hardware para comunicação: 1 porta serial (UART TTL), I2C (TWI), SPI; • Memória Flash (de programa): 32 kB, dos quais 0,5 kB são usados pelo bootloader; • Memória SRAM: 2 kB; EEPROM: 1 kB; • Frequência de clock: 16 MHz. Felipe Nascimento Martins
  34. 34. Felipe Nascimento Martins
  35. 35. Arduino Leonardo • Microcontrolador: ATmega32u4; • Tensão de operação: 5V; • Tensão de entrada (recomendada): 7-12V; • Pinos digitais de E/S: 20 (7 podem ter sinal PWM); • Pinos com entrada analógica: 12; • Corrente máxima por pino de E/S: 40 mA; • Hardware para comunicação: 1 porta serial (UART TTL), I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse); • Memória Flash (de programa): 32 kB, dos quais 4 kB são usados pelo bootloader; • Memória SRAM: 2,5 kB; EEPROM: 1 kB; • Frequência de clock: 16 MHz. Felipe Nascimento Martins
  36. 36. Felipe Nascimento Martins
  37. 37. Arduino Mega 2560 • Microcontrolador: ATmega2560; • Tensão de operação: 5V; • Tensão de entrada (recomendada): 7-12V; • Pinos digitais de E/S: 54 (15 podem ter sinal PWM); • Pinos com entrada analógica: 16; • Corrente máxima por pino de E/S: 40 mA; • Hardware para comunicação: 4 portas seriais (UART TTL), I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse); • Memória Flash (de programa): 256 kB, dos quais 8 kB são usados pelo bootloader; • Memória SRAM: 8 kB; EEPROM: 4 kB; • Frequência de clock: 16 MHz. Felipe Nascimento Martins
  38. 38. Felipe Nascimento Martins Arduino Mega 2560
  39. 39. Felipe Nascimento Martins Microcontrolador
  40. 40. O que é um Microcontrolador? – Chip; – CPU de pequeno porte, capaz de executar um conjunto de instruções; – Ou seja, possui um microprocessador! – Instruções simples e rápidas; – Possui memória(s); – Possui periféricos; – Pode se comunicar com outros periféricos; etc. Felipe Nascimento Martins
  41. 41. Componentes de um Microcontrolador Conversor D/A Conversor A/D PWM CPU EEPROM RAM Porta Serial Porta Paralela Temporizadores Microcontrolador Felipe Nascimento Martins
  42. 42. Diagrama de blocos da arquitetura Felipe Nascimento Martins
  43. 43. Exemplos de Microcontroladores • Família 8051 (Intel ou ATMEL) • 80C196KB (Intel) • 68HC11 (Motorola / Freescale) • MSP430 (Texas Instruments) • ATmega328 (ATMEL) • PIC16F628A (Microchip) • dsPIC30F6014 (Microchip) • Cortex M3 (ARM) Felipe Nascimento Martins
  44. 44. Exemplos de Microcontroladores • Família 8051 (Intel ou ATMEL) • 80C196KB (Intel) • 68HC11 (Motorola / Freescale) • MSP430 (Texas Instruments) • ATmega328 (ATMEL) • PIC16F628A (Microchip) • dsPIC30F6014 (Microchip) • Cortex M3 (ARM) Cadê o Arduino?? Felipe Nascimento Martins
  45. 45. Exemplos de Microcontroladores • Família 8051 (Intel ou ATMEL) • 80C196KB (Intel) • 68HC11 (Motorola / Freescale) • MSP430 (Texas Instruments) • ATmega328 (ATMEL) • PIC16F628A (Microchip) • dsPIC30F6014 (Microchip) • Cortex M3 (ARM) Felipe Nascimento Martins
  46. 46. • ATMEL • ATmega168: Diecimila, Duemilanove, Nano, LilyPad; • ATmega328P: Duemilanove, Nano, Fio, LilyPad, Uno; • ATmega1280: Mega; • ATmega2560: Mega2560; • ATmega32u4: Leonardo, Esplora, LilyPad USB, Yún, Robot; • AT91SAM3X8E: Due. Microcontroladores do Arduino Felipe Nascimento Martins
  47. 47. Arduino Processador Flash kB EEPROM kB SRAM kB Dig. I/O Pinos A/D Clock (MHz) Pinos PWM Duemilanove ATmega168/328P 16/32 0,5/1 0,5 14 6 16 6 Uno ATmega328P 32 1 2 14 6 16 6 Mega ATmega1280 128 4 8 54 16 16 15 Mega2560 ATmega2560 256 4 8 54 16 16 15 Nano ATmega168 ou ATmega328 16/32 0,5/1 0,5 14 8 16 6 LilyPad ATmega168V ou ATmega328V 16/32 0,5 1 14 6 16 6 Leonardo ATmega32u4 32 1 2,5 20 12 16 7 Due AT91SAM3X8E 512 -- 96 54 12 84 12 Esplora ATmega32u4 32 1 2,5 20 12 16 7 Arduino Felipe Nascimento Martins
  48. 48. Arduino - Microcontrolador Felipe Nascimento Martins
  49. 49. Arduino - Microcontrolador • ATmega328 (Arduino Uno): • Núcleo AVR RISC de 8 bits; • 32kB Flash, 2kB RAM, 1kB EEPROM; • 23 pinos de E/S; • 3 temporizadores/contadores; • USART, I2C, interface a 2 fios SPI; • 6 canais de conversor A/D de 10 bits; • WDT com oscilador interno; • Clock máximo de 20MHz; • Opera de 1,8V a 5,5V. Felipe Nascimento Martins
  50. 50. Arduino - Microcontrolador • ATmega32u4 (Arduino Leonardo): • Núcleo AVR RISC de 8 bits; • 32kB Flash, 2kB RAM, 1kB EEPROM; • 26 pinos de E/S; • 3 temporizadores/contadores; • USART, USB transceiver, I2C, 2 interfaces a 2 fios SPI; • 12 canais de conversor A/D de 10 bits; • WDT com oscilador interno; • Clock máximo de 16MHz; • Opera de 2,7V a 5,5V. Felipe Nascimento Martins
  51. 51. Felipe Nascimento Martins Características de Software
  52. 52. Arduino – Programação Felipe Nascimento Martins
  53. 53. Arduino – Programação Programa.HEXCompilador Programador IDE Felipe Nascimento Martins
  54. 54. Arduino – Programa básico Felipe Nascimento Martins
  55. 55. Arduino – Programa básico Felipe Nascimento Martins
  56. 56. Arduino – Programa básico Felipe Nascimento Martins
  57. 57. Arduino – Programa básico Felipe Nascimento Martins
  58. 58. Arduino – Programa básico Felipe Nascimento Martins
  59. 59. Arduino – Programa básico Felipe Nascimento Martins No Arduino Uno: pinos digitais 0 a 13 (0 a 13); pinos analógicos 0 a 5 (14 a 19).
  60. 60. Prática 1: Pisca-LED • Montagem: Felipe Nascimento Martins
  61. 61. Matriz de contatos (Breadboard ou Protoboard) Felipe Nascimento Martins
  62. 62. Felipe Nascimento Martins http://123d.circuits.io/circuits/155964-pratica-1-pisca-led/embed Prática 1: Pisca-LED
  63. 63. Felipe Nascimento Martins Eletrônica: Conceitos Básicos
  64. 64. Um pouco de eletrônica • Ok. Entendi o programa. • Mas o que acontece nos pinos do Arduino? Felipe Nascimento Martins
  65. 65. Um pouco de eletrônica • Ok. Entendi o programa. • Mas o que acontece nos pinos do Arduino? • A função digitalWrite(12,HIGH); faz com que o pino 12 vá para “nível alto”, ou seja, ele fica com 5V. Felipe Nascimento Martins
  66. 66. Um pouco de eletrônica • Ok. Entendi o programa. • Mas o que acontece nos pinos do Arduino? • A função digitalWrite(12,HIGH); faz com que o pino 12 vá para “nível alto”, ou seja, ele fica com 5V. • Este pino está ligado ao RESISTOR+LED, e ao pino GND (0V). Felipe Nascimento Martins
  67. 67. Um pouco de eletrônica • Ok. Entendi o programa. • Mas o que acontece nos pinos do Arduino? • A função digitalWrite(12,HIGH); faz com que o pino 12 vá para “nível alto”, ou seja, ele fica com 5V. • Este pino está ligado ao RESISTOR+LED, e ao pino GND (0V). • É um circuito série, por onde circula corrente! Felipe Nascimento Martins +5V 0V
  68. 68. Um pouco de eletrônica • Em resumo: • É a circulação de corrente elétrica (elétrons) que faz acender o LED; • Experimente retirar o fio que liga o LED ao GND, mantendo o pino 12 em 5V. • O LED apaga pois a corrente precisa circular num circuito fechado! Felipe Nascimento Martins +5V 0V
  69. 69. Um pouco de eletrônica • Em resumo: • É a circulação de corrente elétrica (elétrons) que faz acender o LED; • A corrente só existirá se houver diferença de potencial elétrico (diferença de tensão) entre pontos do circuito: 5V – 0 = 5V; • Tensão: volt [V]; • Corrente: ampère [A]. Felipe Nascimento Martins +5V 0V
  70. 70. Um pouco de eletrônica • A função digitalWrite(12,LOW); faz com que o pino 12 vá para “nível baixo”, ou seja, ele fica com 0V. • Logo, como não há diferença de tensão entre os pinos 12 e GND, a corrente é zero => LED apaga. Felipe Nascimento Martins 0V 0V
  71. 71. Um pouco de eletrônica • Beleza. Mas, e o resistor? Serve para quê? Felipe Nascimento Martins
  72. 72. Um pouco de eletrônica • Beleza. Mas, e o resistor? Serve para quê? • O elemento resistor serve para dificultar a circulação de corrente elétrica; • Ele é colocado no circuito para evitar que a corrente cresça muito, o que pode provocar problemas; • No nosso circuito, o resistor serve para evitar que o LED queime devido a uma corrente muito alta. Felipe Nascimento Martins
  73. 73. Um pouco de eletrônica • Quanto maior for o valor da resistência do resistor, menor será a corrente (para uma mesma diferença de tensão). • O brilho do LED varia com a corrente. Felipe Nascimento Martins
  74. 74. Um pouco de eletrônica • Cálculo da corrente: • Lei de Ohm: V = R * I • V = 5V, R = 220Ω. • I = 5 / 220 • I = 0,0227 A = 22,7 mA Felipe Nascimento Martins
  75. 75. Um pouco de eletrônica • Cálculo da corrente: • Lei de Ohm: V = R * I • V = 5V, R = 220Ω + 220Ω. • I = 5 / 440 • I = 0,0114 A = 11,4 mA • Podemos calcular a queda de tensão em cada resistor: • VR = R * I, R = 220Ω, I = 11,4 mA. • VR = 220 * 0,0114 = 2,5 V. Felipe Nascimento Martins
  76. 76. Um pouco de eletrônica • Cálculo da corrente: • O LED tem queda de tensão fixa = ~1,73V. Logo: • V = 5 – 1,73 = 3,27V. • V = R * I => I = V / R. • I = 3,27 / 220 = 0,0149 A • I = 14,9mA. Felipe Nascimento Martins +5V 0V
  77. 77. Um pouco de eletrônica • Note que se a tensão do pino 12 pudesse ser alterada, a corrente no circuito seria diferente. • Ou seja, poderíamos controlar o brilho do LED! Felipe Nascimento Martins +5V 0V
  78. 78. Prática 2: Código Morse • Modifique o programa Pisca-LED de forma que o LED sinalize indefinidamente o código Morse que representa S.O.S.: ...---... OBS.: “ponto” é uma piscada rápida do LED (pouco tempo aceso), enquanto o “traço” é uma piscada mais lenta (mais tempo aceso). Felipe Nascimento Martins
  79. 79. Diodo • Dispositivo semicondutor que permite a circulação de corrente apenas em um sentido; • A tensão em seus terminais deve ter polaridade correta: mais positiva no terminal A (anodo) e mais negativa no terminal K (catodo); • Apresenta queda de tensão aproximadamente fixa (~0,7V) quando a corrente circula; • Usado em circuitos retificadores: transforma corrente alternada para contínua. Felipe Nascimento Martins
  80. 80. Diodo • Retificador de onda completa: Felipe Nascimento Martins
  81. 81. Diodo - exemplos Felipe Nascimento Martins
  82. 82. Prática 3: Não pisca-LED • LED é um diodo especial que brilha quando a corrente circula por ele. • Experimente inverter a ligação dos pinos do LED em nosso circuito e verifique que ele não vai mais piscar, mesmo quando houver diferença de potencial nos pinos! Felipe Nascimento Martins
  83. 83. Capacitor • Elemento que armazena energia na forma de campo elétrico; • Existem vários tipos: alguns têm polaridade (como os eletrolíticos), outros não (como os cerâmicos); • A tensão em seus terminais depende da carga acumulada, e não varia instantaneamente; • Em corrente contínua, são usados como filtros ou “suavizadores” de tensão. Felipe Nascimento Martins
  84. 84. Capacitor - exemplos Felipe Nascimento Martins
  85. 85. Capacitor – exemplo de aplicação • Retificador de onda completa com capacitor: Felipe Nascimento Martins
  86. 86. Felipe Nascimento Martins Sensores Digitais
  87. 87. Sensores com Sinais Digitais • Diversos sensores proveem informação através de sinais digitais: • Botão; • Porta aberta/fechada; • Andar de elevador; • Fim-de-curso em máquinas industriais; • Equipamento ligado/desligado; • Nível de reservatório; • Presença; • Toque; • Etc. Felipe Nascimento Martins
  88. 88. Sensores com Sinais Digitais • Do ponto de vista elétrico, comportam-se como se fossem uma chave liga/desliga; • Nesses casos, podemos fazer a ligação de modo que o sinal do sensor seja 0V ou 5V; • No Arduino, a função utilizada para leitura de sinais digitais é digitalRead(pino); onde pino é o número do pino em que o sensor está ligado; • Para Vs = 5V, retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
  89. 89. Prática 4: Leitura de Sinal Digital Felipe Nascimento Martins • Monte o circuito ao lado. • Altere o programa da prática 1 para que o LED acenda com o botão for pressionado, e apague quando o botão for liberado.
  90. 90. Felipe Nascimento Martins http://123d.circuits.io/circuits/155968-pratica-4-leitura-de-sinal-digital/embed Prática 4: Leitura de Sinal Digital
  91. 91. Felipe Nascimento Martins Programas mais complexos
  92. 92. Funções do Arduino • Já vimos: void setup(){ ... } void loop(){ ... } Felipe Nascimento Martins
  93. 93. Funções do Arduino • Já vimos: pinMode(pino, OUTPUT ou INPUT); digitalWrite(pino, LOW ou HIGH); delay(número inteiro); digitalRead(pino); Felipe Nascimento Martins
  94. 94. Funções do Arduino • Outras funções: delayMicroseconds(número inteiro); Pausa o programa pela quantidade definida de microssegundos. millis(); Retorna o número de milissegundos que se passou desde que o microcontrolador foi ligado. analogRead(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100μs. Felipe Nascimento Martins
  95. 95. Funções do Arduino • Outras funções: delayMicroseconds(número inteiro); Pausa o programa pela quantidade definida de microssegundos. millis(); Retorna o número de milissegundos que se passou desde que o microcontrolador foi ligado. analogRead(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100μs. Felipe Nascimento Martins
  96. 96. Funções do Arduino • Outras funções: delayMicroseconds(número inteiro); Pausa o programa pela quantidade definida de microssegundos. millis(); Retorna o número de milissegundos que se passou desde que o microcontrolador foi ligado. analogRead(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100μs. Felipe Nascimento Martins
  97. 97. Funções do Arduino • Exemplos: while(analogRead(A2) < 950){ ... // bloco de código } Executa o bloco de código até que o valor de retorno da função analogRead seja maior que 950. for(int conta = 0; conta < 6; conta++){ ... // bloco de código } Executa o bloco de código até que conta >= 6. Felipe Nascimento Martins
  98. 98. Funções do Arduino • Exemplos: while(analogRead(A2) < 950){ ... // bloco de código } Executa o bloco de código até que o valor de retorno da função analogRead seja maior que 950. for(int conta = 0; conta < 6; conta++){ ... // bloco de código } Executa o bloco de código até que conta >= 6. Felipe Nascimento Martins
  99. 99. Funções do Arduino • Exemplos: if (brilho == 0 || brilho == 255) { ... // bloco de código 1 } else { ... // bloco de código 2 } Executa o bloco de código 1 se a condição de teste for verdadeira. Caso contrário, executa o bloco de código 2. Felipe Nascimento Martins
  100. 100. Criando Funções no Arduino int led = 13; void setup(){ pinMode(led, OUTPUT); } void inverteLED(){ if (digitalRead(led)==0) digitalWrite(led, HIGH); else digitalWrite(led, LOW); } void loop(){ inverteLED(); delay(500); } Felipe Nascimento Martins
  101. 101. Tipos de Dados no Arduino Felipe Nascimento Martins boolean (8 bits) – true/false; byte (8 bits) – número entre 0 e 255; char (8 bits) – caractere (número entre -128 e 127); unsigned char (8 bits) – mesmo tipo que ‘byte’; word (16 bits) – número entre 0 e 65.535; unsigned int (16 bits) – mesmo tipo que ‘word’; int (16 bits) – número entre -32.768 e 32.767; unsigned long (32 bits) – número entre 0 e 4.294.967.295; long (32 bits) – número entre -2.147.483.648 e 2.147.483.647; float (32 bits) – entre -3,4028235E38 to 3,4028235E38.
  102. 102. Linguagem do Arduino Felipe Nascimento Martins
  103. 103. Linguagem do Arduino Felipe Nascimento Martins
  104. 104. Linguagem do Arduino Felipe Nascimento Martins
  105. 105. Planejamento de um Programa • Fluxogramas Felipe Nascimento Martins
  106. 106. Planejamento de um Programa Felipe Nascimento Martins
  107. 107. Exercício: Desenhe o Fluxograma const int ledPin = 13; // pino do LED int ledState = LOW; // estado do LED long previousMillis = 0; // última atualização do LED long interval = 500; // interval para piscar LED void setup() { pinMode(ledPin, OUTPUT); } void loop(){ unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); } } Felipe Nascimento Martins
  108. 108. Prática 5: Leitura de Sinal Digital Felipe Nascimento Martins • Monte o circuito ao lado. • Altere o programa da prática 4 para que o LED troque de estado a cada pressionar de botão: se estiver apagado, acende; e vice-versa.
  109. 109. Prática 5: Leitura de Sinal Digital Felipe Nascimento Martins • Monte o circuito ao lado. • Altere o programa da prática 4 para que o LED troque de estado a cada pressionar de botão: se estiver apagado, acende; e vice-versa. • Funcionou como esperado?
  110. 110. Leitura de Sinal Digital Felipe Nascimento Martins
  111. 111. Bounce (oscilação de contato) Felipe Nascimento Martins
  112. 112. Técnica para fazer debounce do sinal Felipe Nascimento Martins
  113. 113. Felipe Nascimento Martins int led_pin = 13; int led_state = LOW; int button_pin = 0; int button_state; // the setup routine runs once when you press reset: void setup() { pinMode(led_pin, OUTPUT); pinMode(button_pin, INPUT); } // the loop routine runs over and over again forever: void loop() { // Enquanto o botão não for pressionado, não faz nada. while (digitalRead(button_pin)!=0){ } // Depois que o botão é pressionado, aguarda ser solto while (digitalRead(button_pin)==0){ } // Atraso para aguardar oscilação de contato terminar delay(50); // Inverte o estado da variável led_state led_state = !led_state; // Copia variável led_state para o pino do LED digitalWrite(led_pin, led_state); }
  114. 114. Felipe Nascimento Martins Sensores Analógicos
  115. 115. Sensores com Sinais Analógicos • Diversos sensores proveem informação através de sinais analógicos: • Intensidade luminosa (LDR); • Deslocamento (angular ou linear); • Força/Torque (SFR, strain gage); • Proximidade; • Aceleração; • Inclinação; • Temperatura; • Etc. Felipe Nascimento Martins
  116. 116. Intensidade Luminosa: LDR • Resistor cuja resistência varia conforme a intensidade da luz incidente. • Vários modelos com diferentes sensibilidades. • Datasheet: http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/40/LDR_NSL19_M51.pdf Felipe Nascimento Martins
  117. 117. Intensidade Luminosa: LDR Felipe Nascimento Martins
  118. 118. Prática 6: Usando o sensor de luz • Monte o circuito com LDR – Light Dependent Resistor (sensor de luz). • Escreva um programa que acenda o LED do pino 13 quando houver pouca luz e apague o mesmo LED quando houver muita luz. void setup() { ... } void loop() { ... } Felipe Nascimento Martins
  119. 119. Deslocamento • Deslocamento linear ou angular pode ser medido com potenciômetros; • Com alimentação de 5V, o sinal varia de 0 a 5V (mínimo a máximo deslocamento); • Há potenciômetros angulares multivoltas e potenciômetros lineares de longo alcance. Felipe Nascimento Martins
  120. 120. Deslocamento Felipe Nascimento Martins
  121. 121. Força e Torque • FSR (Force Sensing Resistor) e Strain Gage (extensômetro): resistência varia com a deformação. • Usados para medir força e torque. • Datasheets: FSR - http://www.trossenrobotics.com/productdocs/2010-10-26-DataSheet-FSR402-Layout2.pdf Célula de carga - http://www.alfainstrumentos.com.br/manuais/celulas/catalogo_celulas_0302cp.pdf Felipe Nascimento Martins
  122. 122. Strain Gage Felipe Nascimento Martins
  123. 123. Proximidade por infravermelho • Sharp GP2Y0A21YK0F • Tensão de alimentação: 5V; • Pode medir distâncias de 10 a 80 cm; • Sinal: tensão entre 1,65V e 2,15V. • Há outros modelos com outras faixas de medição. Datasheet: https://www.sparkfun.com/datasheets/Components/GP2Y0A21YK.pdf Felipe Nascimento Martins
  124. 124. Proximidade por infravermelho Felipe Nascimento Martins
  125. 125. Aceleração/Inclinação • ADXL335 • Tensão de alimentação: 3,3 V; • Mede aceleração nos 3 eixos do espaço; • Mede aceleração de até 3g; • Mede aceleração da gravidade (estática), podendo ser usado para medir inclinação. • Datasheet: https://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf Felipe Nascimento Martins
  126. 126. Temperatura: RTDs • RTD = Resistance Temperature Detectors • Normalmente confeccionados com um fio (ou enrolamento) de alta pureza de cobre, níquel ou platina (estes são os melhores). • RTDs comuns podem medir com erros da ordem de ±0,1ºC. Os de platina (PRT – Platinum Resistance Thermometer) podem chegar a ±0,0001ºC. • São estáveis e lineares, com ótima repetitividade. • Aplicações incluem refrigeração de alimentos e compostos químicos, fornos de fusão (produção de metais e ligas), destilação fracionada (produção de bebidas e derivados de petróleo), usinas nucleares e aquecedores e refrigeradores domésticos. Felipe Nascimento Martins
  127. 127. Temperatura: Termistores NTC/PTC • São semicondutores cerâmicos que têm sua resistência alterada com a variação de temperatura. • Geralmente seu coeficiente de variação é maior que o dos RTDs, mas a variação de resistência é menos linear. • Podem ser de dois tipos: NTC ou PTC (Negative ou Positive Temperature Coefficient). • Faixa típica de operação: de -100ºC a 300ºC. • Resistência a 25ºC: de 0,5Ω a 100MΩ. • Aplicações: circuitos simples de medição de temperatura; para reduzir corrente de carga de capacitores em fontes chaveadas (NTCs) etc. Felipe Nascimento Martins
  128. 128. Temperatura: RTD x NTC
  129. 129. Temperatura: RTD ou NTC Felipe Nascimento Martins
  130. 130. Temperatura: TMP35/36/37 • Tensão de alimentação: 2,7 V a 5,5 V; • Fator de escala: 10 mV/°C; • Precisão: ±2°C; • Linearidade: ±0,5°C; • Faixa de operação: −40°C a +125°C. • Datasheet: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/TMP35_36_37.pdf Felipe Nascimento Martins
  131. 131. Temperatura: TMP35/36/37 Felipe Nascimento Martins
  132. 132. Felipe Nascimento Martins Comunicação Serial
  133. 133. Comunicação serial • Bit: menor unidade de informação -> 0 ou 1; • Informação é enviada bit a bit, em sequência; • Síncrona: uma linha de dados e outra de clock: Felipe Nascimento Martins
  134. 134. Comunicação serial • Bit: menor unidade de informação -> 0 ou 1; • Informação é enviada bit a bit, em sequência; • Assíncrona: apenas uma linha de dados. A velocidade deve ser definida: Felipe Nascimento Martins
  135. 135. Comunicação serial • OK. • Mas como posso transmitir outras informações além de “zeros” e “uns”? Felipe Nascimento Martins
  136. 136. Comunicação serial • OK. • Mas como posso transmitir outras informações além de “zeros” e “uns”? • Existe uma tabela que relaciona caracteres a sequências de zeros e uns: • ASCII (American Standard Code for Information Interchange). • Esta tabela criou um padrão para troca de informações em sistemas binários. Felipe Nascimento Martins
  137. 137. Felipe Nascimento Martins
  138. 138. Comunicação Serial no Arduino • Microcontrolador possui hardware para comunicação serial: • Pino digital 0 (RX): recepção de dados; • Pino digital 1 (TX): transmissão de dados; • Bit 1 = 5V; Bit 0 = 0V; • A maioria das placas Arduino possui hardware que converte sinais do padrão serial assíncrono para USB; Felipe Nascimento Martins
  139. 139. Prática 7: Medindo Temperatura • Monte o circuito com o sensor de temperatura. • Escreva um programa que mostre o valor da temperatura na tela do computador a cada 0,5s. Felipe Nascimento Martins
  140. 140. Prática 7: Medindo Temperatura • Exemplo de programa: void setup() { Serial.begin(9600); } void loop() { int sensor = analogRead(A0); Serial.println(sensor); delay(500); } Felipe Nascimento Martins
  141. 141. Arduino • A.
  142. 142. Prática 7: Medindo Temperatura http://123d.circuits.io/circuits/155990-pratica-7-medindo-temperatura-sinal-analogico/embed Felipe Nascimento Martins
  143. 143. Comunicação Serial no Arduino • Serial.println(analogValue, DEC); // envia analogValue (int) codificada em ASCII no formato decimal • Serial.println(analogValue, HEX); // envia ASCII no formato hexadecimal • Serial.println(analogValue, OCT); // envia ASCII no formato octal • Serial.println(analogValue, BIN); // envia ASCII no formato binário Felipe Nascimento Martins
  144. 144. Comunicação Serial no Arduino • Serial.available(); // retorna 1 se houver caracter disponível no buffer de recepção. Caso contrário, retorna 0. • Serial.read(); // lê um byte recebido pela Serial (int) • Exemplo: int incomingByte; if (Serial.available() > 0) { incomingByte = Serial.read(); } Felipe Nascimento Martins
  145. 145. Prática 8: Comunicação bidirecional • Outro exemplo de comunicação serial: desta vez o Arduino vai receber um dado do computador, processá-lo e retornar o resultado pela porta serial. • Vamos analisar o programa: int i, numero; void setup() { Serial.begin(9600); } void loop() { while (true) { Serial.print("Entre com um numero: "); while (Serial.available()==0); numero = Serial.read(); Felipe Nascimento Martins
  146. 146. if (numero>='0' && numero<='9') Serial.println(numero-’0’); else { Serial.println("O valor deve ser numerico!"); continue; } numero-='0'; for (i = 0; i <= 10; i++) { Serial.print(numero); Serial.print(" x "); Serial.print(i); Serial.print(" = "); Serial.println(numero*i); } Serial.println(""); } } Felipe Nascimento Martins
  147. 147. Prática 8: Comunicação bidirecional Felipe Nascimento Martins http://123d.circuits.io/circuits/155997-pratica-8-comunicacao-bidirecional-tabuada/embed
  148. 148. Felipe Nascimento Martins Mais um pouco de Eletrônica
  149. 149. Shift Registers • Shift registers (ou Registradores de Deslocamento) são memórias que recebem uma sequência de bits enviados serialmente e disponibilizam seus valores de forma simultânea; • Muito utilizados em sistemas embarcados para economizar pinos de E/S dos microcontroladores; • CI 74HC595 é um shift register de 8 bits. • Datasheet: http://arduino.cc/en/uploads/Tutorial/595datasheet.pdf Felipe Nascimento Martins
  150. 150. Shift Registers 74HC595 Felipe Nascimento Martins
  151. 151. Shift Registers 74HC595 Felipe Nascimento Martins
  152. 152. Prática 9: Usando shift register • Monte o circuito abaixo. Felipe Nascimento Martins
  153. 153. Prática 9: Usando shift register int latchPin = 8; //Pin connected to ST_CP of 74HC595 int clockPin = 12; //Pin connected to SH_CP of 74HC595 int dataPin = 11; //Pin connected to DS of 74HC595 void setup() { //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } Felipe Nascimento Martins
  154. 154. Prática 9: Usando shift register void loop() { // count from 0 to 255 and display the number for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) { // take the latchPin low: LEDs don't change digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); digitalWrite(latchPin, HIGH); // turn LEDs on delay(500); } } Felipe Nascimento Martins
  155. 155. Felipe Nascimento Martins Controle de cargas analógicas
  156. 156. “Simulando” uma tensão analógica • PWM = Pulse Width Modulation; • Razão cíclica (duty cycle): define a tensão média aplicada: T(PWM) T(PWM) T(PWM) A1 A2 A3 Felipe Nascimento Martins
  157. 157. Tensão média de um sinal PWM Felipe Nascimento Martins
  158. 158. Sinal PWM versus sinal analógico Felipe Nascimento Martins
  159. 159. Controle de potência por PWM  P = V2 / R analogWrite(11, 200);  cria no pino 11 um sinal PWM com razão cíclica igual a 200;  f = 490Hz;  apenas alguns pinos possuem saída PWM. Felipe Nascimento Martins
  160. 160. Prática 10: Controle de brilho int brilho = 0; // brilho do LED int sensor; // valor do LDR void setup() { pinMode(A2, INPUT); // pino do LDR: entrada A2 pinMode(13, OUTPUT); // pino do LED: saida 13 Serial.begin(9600); } void loop() { sensor = analogRead(A2); // le valor do LDR brilho = map(sensor, 0, 1023, 0, 255); Serial.println(brilho); // envia ao PC analogWrite(13, brilho); // aciona LED delay(100); } Felipe Nascimento Martins
  161. 161. Prática 11: Pisca-pisca suave int brilho = 0; // brilho do LED int variacao = 5; // quanto varia o brilho void setup() { pinMode(13, OUTPUT); } void loop() { analogWrite(13, brilho); brilho = brilho + variacao; if (brilho == 0 || brilho == 255) { variacao = -variacao; } delay(30); } Felipe Nascimento Martins
  162. 162. Felipe Nascimento Martins Módulo LCD
  163. 163. LCD – Liquid Cristal Display • Opção prática de apresentar uma grande quantidade de dados de forma relativamente simples e barata; • O módulo é constituído de um display de cristal líquido (LCD) e de um controlador de display; • Existem dois tipos de módulo LCD: caractere e gráfico. Felipe Nascimento Martins
  164. 164. • Os displays de caracteres são mais baratos e capazes de apresentar caracteres como letras, números e símbolos; • Sua tela é dividida em linhas e colunas, e cada posição armazena um caractere; • Não funcionam adequadamente para a apresentação de gráficos. LCD – Liquid Cristal Display Felipe Nascimento Martins
  165. 165. • Os displays gráficos são mais caros e complexos de programar; • Podem apresentar basicamente qualquer tipo de informação na tela, inclusive gráficos, fotos etc. 100 x 64 pixels 128 x 64 pixels LCD – Liquid Cristal Display Felipe Nascimento Martins
  166. 166. • Serão abordados neste curso os módulos de caractere baseados no chip controlador Hitachi HD 44780; • É um chip que é praticamente padrão no segmento de módulos de display LCD; • Permite um interface simples com microcontroladores. LCD – Liquid Cristal Display
  167. 167. • Tem largura de barramento de dados selecionável para 4 ou 8 bits; • São necessárias três linhas de controle adicionais: ENABLE, RS e R/W; • A comunicação no modo de 4 bits é realizada utilizando apenas as quatro linhas mais significativas (D7 a D4). O byte é dividido em dois nibbles onde o mais significativo é enviado primeiro. LCD – Liquid Cristal Display Felipe Nascimento Martins
  168. 168. Bit 1 de dados do LCDD18 Bit 0 de dados do LCDD07 EnableE6 Read/WriteR/W5 Register SelectRS4 ContrasteVo3 Positivo (5V)Vdd2 TerraVss1 FunçãoNomePino LCD – Liquid Cristal Display Felipe Nascimento Martins
  169. 169. Catodo do back-light (se existir)K16 Anodo do back-light (se existir)A15 Bit 7 de dados do LCDD714 Bit 6 de dados do LCDD613 Bit 5 de dados do LCDD512 Bit 4 de dados do LCDD411 Bit 3 de dados do LCDD310 Bit 2 de dados do LCDD29 FunçãoNomePino LCD – Liquid Cristal Display Felipe Nascimento Martins
  170. 170. • O HD 44780 possui as seguintes memórias: – 80 bytes de memória RAM (DDRAM – Data Display RAM); – 64 bytes de RAM para o gerador de caracteres (CGRAM – Caracter Generator RAM); – 9920 bits de memória ROM (CGROM): 208 caracteres 5x8 ou 32 caracteres 5x10. LCD – Liquid Cristal Display Felipe Nascimento Martins
  171. 171. • O Arduino possui uma biblioteca para utilização de LCDs de caractere; • Após incluir a biblioteca, é necessário declarar o display informando a que pinos do Arduino o LCD está conectado; • Em seguida, deve ser chamada a função de inicialização, passando como parâmetros o número de caracteres e de linhas que o LCD possui. LCD – Liquid Cristal Display Felipe Nascimento Martins
  172. 172. Prática 12: Dados no LCD #include <LiquidCrystal.h> // inicializa bib. informando os pinos conectados: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); // inicializa o LCD lcd.print("hello, world!"); // mostra mensagem } void loop() { // coloca cursor na coluna 0, linha 1: lcd.setCursor(0, 1); // mostra numero de segundos desde o reset: lcd.print(millis()/1000); delay(100); } Felipe Nascimento Martins
  173. 173. Prática 12: Dados no LCD Felipe Nascimento Martins
  174. 174. Prática 12: Dados no LCD Felipe Nascimento Martins
  175. 175. • Outras funções interessantes: lcd.home(); // retorna cursor ao início lcd.write(char); // imprime um caracter lcd.blink(); // aciona cursor piscante lcd.noBlink(); // desliga cursor piscante lcd.autoscroll(); // ativa deslocamento a esquerda lcd.noAutoscroll(); // desliga deslocamento lcd.noDisplay(); // apaga tela (texto na memória) lcd.display(); // liga tela (exibe caracteres) lcd.rightToLeft(); // próxima letra à esquerda lcd.leftToRight(); // próxima letra à direita lcd.clear(); // limpa a tela LCD – Liquid Cristal Display Felipe Nascimento Martins
  176. 176. Prática 13: Valor do sensor no LCD • Modifique o programa anterior para fazer com que a primeira linha do LCD mostre o valor de temperatura e a segunda linha mostre um relógio tipo HH:MM:SS. Felipe Nascimento Martins
  177. 177. LCD gráfico 128 x 64 pixels Detalhes: http://nossosrobos.blogspot.com.br/2012/01/lcd-para-seu-robo-com-arduino.html Felipe Nascimento Martins
  178. 178. Felipe Nascimento Martins Avançando com Arduino e Sistemas Embarcados
  179. 179. Felipe Nascimento Martins Motores Elétricos
  180. 180. Motor de Corrente Contínua (CC) Felipe Nascimento Martins • Alimentado em corrente contínua; • Possui ímã e bobinas internamente; • Velocidade é ajustada pela tensão de alimentação (pode ser por PWM!); • Sentido de giro é alterado pela polaridade.
  181. 181. Motor de Passo Felipe Nascimento Martins • Alimentado com sinais digitais; • Alimentação das bobinas deve ser sequencial; • Permite controle preciso de posição; • Torque cai muito com o aumento da velocidade.
  182. 182. Medição de deslocamento (encoder) • Permite medir a velocidade e posição angular dos motores; • Precisão: número de pulsos por volta. Felipe Nascimento Martins
  183. 183. Medição de deslocamento (encoder) Felipe Nascimento Martins
  184. 184. Medição de deslocamento (encoder) Felipe Nascimento Martins
  185. 185. Servomotor Felipe Nascimento Martins • É um motor CC que possui um sistema de interno de medição e de controle: • angular – controla a posição (giro) do eixo; • contínuo – controla a velocidade do eixo;
  186. 186. Servomotor Felipe Nascimento Martins
  187. 187. Servomotor Felipe Nascimento Martins • Normalmente é feito com um motor de corrente contínua, um circuito eletrônico e engrenagens para aumentar o torque;
  188. 188. Servomotor Felipe Nascimento Martins • Três fios: 2 de alimentação e um de controle; • O sinal de referência (de posição ou velocidade) é do tipo PWM.
  189. 189. Servomotor Felipe Nascimento Martins • Três fios: 2 de alimentação e um de controle; • O sinal de referência (de posição ou velocidade) é do tipo PWM.
  190. 190. Exemplo: Controle de Servomotores Felipe Nascimento Martins
  191. 191. Felipe Nascimento Martins Exemplo: Controle de Servomotores
  192. 192. #include <Servo.h> Servo myservo; // create servo object Servo myservo2; int potpin = 0; // used to connect the potentiometer int val; // value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin myservo2.attach(10); } void loop() { val = analogRead(potpin); // entre 0 e 1023 val = map(val, 0, 1023, 0, 179); // escalona myservo.write(val); myservo2.write(179-val); delay(15); } Felipe Nascimento Martins Exemplo: Controle de Servomotores
  193. 193. Outros motores com Arduino • Cada pino do Arduino pode fornecer, no máximo, 40mA de corrente -> pode não ser suficiente para acionar um motor! • Solução: usar transistores. Felipe Nascimento Martins
  194. 194. Transistor • Um transistor pode ser entendido como uma “válvula” eletrônica: é capaz de acionar cargas de alta corrente a partir de um sinal de controle de baixa corrente. • Quanto maior for a corrente no pino de “base” (B), maior será a corrente entre os pinos “coletor” (C) e “emissor” (E). • Por exemplo, se a corrente na base variar de 0 a 0,01 A, a corrente de coletor pode variar de 0 a 1A! Felipe Nascimento Martins
  195. 195. Exemplo: Motor CC com transistor Felipe Nascimento Martins
  196. 196. Exemplo: Motor CC com transistor Felipe Nascimento Martins
  197. 197. • Com um transistor é possível ligar e desligar um motor, além de controlar sua velocidade (PWM); • Mas, para inverter o sentido de giro de um motor CC é necessário inverter o sentido de circulação da corrente no motor; • Com um transistor, a corrente circula apenas num sentido; • Solução: usar quatro transistores conectados em forma de ponte: Ponte H. Ponte H Felipe Nascimento Martins
  198. 198. Ponte H Felipe Nascimento Martins
  199. 199. Ponte H – exemplo Felipe Nascimento Martins
  200. 200. Motor Shield oficial Felipe Nascimento Martins • Shield oficial para controle de motores: circuito integrado com ponte H.
  201. 201. Motor Shield • Pode acionar dois motores CC ou um motor de passo: até 36V, 600mA, 5kHz. Felipe Nascimento Martins
  202. 202. Motor Shield • Exemplo: controle de velocidade dos motores com o Shield Motor Control: Felipe Nascimento Martins
  203. 203. • Pode acionar quatro motores CC (46V, 4A) e uma carga resistiva de até 30A. Motor Shield 4 Power Felipe Nascimento Martins
  204. 204. Felipe Nascimento Martins Conectando Dispositivos
  205. 205. Comunicação Serial no Arduino • A maioria das placas Arduino possui hardware para implementação de comunicação serial em diferentes padrões: • SPI – Serial Peripheral Interface; • TWI – Two Wire serial Interface (I2C); • USART – Universal Synchronous and Asynchronous serial Receiver and Transmitter (estilo RS-232) – Já vimos este tipo; Felipe Nascimento Martins
  206. 206. SPI – Serial Peripheral Interface Felipe Nascimento Martins
  207. 207. SPI • SPI – Serial Peripheral Interface – é uma interface de comunicação serial síncrona utilizada para comunicação a curta distância: • CIs conversores A/D e D/A; • Memórias Flash e EEPROM; • Relógios de tempo real; • Sensores; • Potenciômetros digitais; • Telas de LCD; etc. Felipe Nascimento Martins
  208. 208. SPI • Na comunicação SPI sempre existe um dispositivo mestre (em geral é o próprio microcontrolador) que controla os periféricos; • Três linhas são comuns a todos os dispositivos: – MISO (Master In Slave Out) – linha pela qual o escravo envia dados ao mestre; – MOSI (Master Out Slave In) – linha pela qual o mestre envia dados aos escravos; – SCK (Serial Clock) – clock gerado pelo mestre para sincronizar a comunicação. Felipe Nascimento Martins
  209. 209. SPI • Além das linhas MISO, MOSI e SCK, cada dispositivo está conectado a uma linha SS: • SS (Slave Select) – cada escravo possui uma entrada desta linha, que é controlada pelo mestre para habilitar ou desabilitar os dispositivos individualmente: • Em nível baixo: comunicação habilitada; • Em nível alto: escravo ignora o mestre. Felipe Nascimento Martins
  210. 210. SPI Felipe Nascimento Martins
  211. 211. SPI com vários escravos Felipe Nascimento Martins
  212. 212. SPI com vários escravos Felipe Nascimento Martins
  213. 213. SPI com Arduino • A biblioteca do Arduino faz a placa operar em modo mestre; • Ordem de transmissão dos dados (primeiro pelo MSB ou pelo LSB): SPI.setBitOrder() • Linha de clock fica em nível alto ou baixo quando inativa e modo de amostragem de dados: SPI.setDataMode() • Velocidade de comunicação: SPI.setClockDivider() Felipe Nascimento Martins
  214. 214. Cartão de Memória SD Felipe Nascimento Martins
  215. 215. Cartão de Memória SD • A biblioteca “SD.h” provê meios de utilização de cartões de memória SD com o Arduino. • Esse tipo de memória se comunica com o microcontrolador por SPI. Felipe Nascimento Martins
  216. 216. Cartão de Memória SD Felipe Nascimento Martins
  217. 217. Cartão de Memória SD Alimentação: 3,3V  uso de resistores em 5V! Felipe Nascimento Martins
  218. 218. Exemplo: data logger #include <SD.h> const int chipSelect = 4; void setup() { Serial.begin(9600); Serial.print("Initializing SD card..."); pinMode(10, OUTPUT); // chip select if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); } Felipe Nascimento Martins
  219. 219. Exemplo: data logger void loop() { // make a string for assembling the data to log: String dataString = ""; // read three sensors and append to the string: for (int analogPin = 0; analogPin < 3; analogPin++) { int sensor = analogRead(analogPin); dataString += String(sensor); if (analogPin < 2) { dataString += ","; } } Felipe Nascimento Martins
  220. 220. Exemplo: data logger // open the file. only one file can be open at a time, File dataFile = SD.open("datalog.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.println(dataString); dataFile.close(); // print to the serial port too: Serial.println(dataString); } // if the file isn't open, pop up an error: else { Serial.println("error opening datalog.txt"); } } Felipe Nascimento Martins
  221. 221. TWI – Two Wire serial Interface (I2C) Felipe Nascimento Martins
  222. 222. I2C • I2C (Inter-Integrated Circuit) foi desenvolvido pela PHILIPS no início da década de 1980 para transferência de dados entre microcontroladores e equipamentos; • Barramento de comunicação serial de dados entre dispositivos onde a conexão é feita através de 2 fios; • É half-duplex, ou seja, em determinado instante, apenas recebe ou envia informação; Felipe Nascimento Martins
  223. 223. I2C • Taxa de transferência: até 100kbits/s; • Operação em modo mestre/escravo: um dispositivo ou processo (mestre) tem controle unidirecional sobre um ou mais outros dispositivos (escravos); • Pode possuir mais de um mestre, mas só um controla o barramento de cada vez. Felipe Nascimento Martins
  224. 224. I2C Felipe Nascimento Martins
  225. 225. I2C Felipe Nascimento Martins
  226. 226. I2C • Um fio transporta o sinal do clock (SCL – Serial Clock Line) e o outro, os dados (DAS - Serial Data Line); • A comunicação é síncrona. Primeiro é enviado o endereço do dispositivo destinatário. Em seguida, o dado é enviado ao barramento.
  227. 227. I2C Felipe Nascimento Martins
  228. 228. TWI (I2C) • No Arduino a biblioteca Wire possui as funções para implementação da comunicação I2C; • Esta biblioteca implementa apenas endereçamento de 7 bits; • Caso use dispositivos que exijam 8 bits de endereçamento, deve-se configurar seu endereço para a faixa 0-127. Felipe Nascimento Martins
  229. 229. TWI (I2C) Felipe Nascimento Martins
  230. 230. Exemplo: Potenciômetro Digital #include <Wire.h> void setup() { Wire.begin(); // join i2c (address optional for master) } byte val = 0; void loop() { Wire.beginTransmission(44); // transmit to device #44 // device address is specified in datasheet Wire.write(byte(0x00)); // sends instruction byte Wire.write(val); // sends potentiometer value byte Wire.endTransmission(); // stop transmitting val++; // increment value if(val == 64) { // if reached 64th position (max) val = 0; // start over from lowest value } delay(500); } Felipe Nascimento Martins
  231. 231. Arduino e NXT via RS-485 e I2C Felipe Nascimento Martins Arduino Nano
  232. 232. Arduino e NXT via RS-485 e I2C Detalhes: http://nossosrobos.blogspot.com.br/2011/08/arduino-conversando-com-nxt-via-rs-485.html http://nossosrobos.blogspot.com.br/2013/03/comunicacao-ic-entre-lego-nxt-e-arduino.html Felipe Nascimento Martins
  233. 233. Comunicação Serial USART: Meios de Utilização Felipe Nascimento Martins
  234. 234. Comunicação sem-fio • Wixel shield for Arduino, com dois módulos Wixel; • Rádio de 2,4GHz para até 30 metros, 350kbps; • Possui microcontrolador programável por interface amigável; • Tem 15 pinos de I/O, com 6 entradas analógicas, que podem ser programados de forma independente da comunicação; • Permite a criação de uma rede com até 128 módulos de comunicação; • A comunicação é feita como se fosse comunicação serial padrão; • Permite gravar programas no Arduino sem ligar o cabo USB à placa! Felipe Nascimento Martins
  235. 235. Comunicação sem-fio http://nossosrobos.blogspot.com.br/2011/12/arduino-wireless.html Felipe Nascimento Martins
  236. 236. Conexão Bluetooth • Modelo JY-BT03 - Shenzhen Jiayuan Electronic Co. Ltd.; • Conexão com pinos RX-TX do microcontrolador; • Comunicação Bluetooth 2.0; • Baud rate: 2.400 a 1.382.400 bps; • Tensão de alimentação: 5,0 V (3,6V a 6,0V); • Corrente: 35mA quando realiza "pareamento"; 8mA quando conectado; • Antena impressa na própria placa; • Possui LED que indica o estado da conexão Bluetooth; • Senha padrão: 1234. Felipe Nascimento Martins
  237. 237. Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html Felipe Nascimento Martins Conexão Bluetooth
  238. 238. Conexão Bluetooth Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html Felipe Nascimento Martins
  239. 239. Conexão Bluetooth Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html Felipe Nascimento Martins
  240. 240. Conexão em rede ZigBee • ZigBee designa um conjunto de especificações para a comunicação sem-fio entre dispositivos eletrônicos, com ênfase na baixa potência de operação, na baixa taxa de transmissão de dados e no baixo custo de implantação; • Pode-se formar uma rede com vários módulos, de maneira que a informação seja transmitida de um ao seguinte (Mesh) para aumentar o alcance total. Felipe Nascimento Martins
  241. 241. Módulo XBee – ZigBee • Módulo Digi XBee ZB - Antena Wire - Low Power • Frequência de Transm.: 2,4 GHz • Potência de Transm.: 1,25 mW • Alcance Máximo estimado: até 120m (+1 dBm) • Topologias de rede: P-to-P, P-to-M, ZigBee/Mesh • Sleep Mode < 1µA • RF Data Rate 250 kbps • Segurança: 128-bit AES • (10) GPIO, (4) ADC e 3V3 CMOS UART Felipe Nascimento Martins
  242. 242. Módulo XBee – ZigBee • XBee e XBee-PRO ZB • Frequência de Transm.: 2,4 GHz • Potência de transm.: 63 mW (+18 dBm) / Int'l 10 mW (+10 dBm) • Alcance Máximo estimado: 3200 m • RF Data Rate: RF 250 kbps, Serial até 1 Mbps • Segurança: 128-bit AES • Antena PCB - Ref: PIT Felipe Nascimento Martins
  243. 243. Ethernet Shield Felipe Nascimento Martins
  244. 244. Arduino com MATLAB Detalhes: http://nossosrobos.blogspot.com.br/2011/10/arduino-com-matlab.html Felipe Nascimento Martins
  245. 245. Arduino com LabVIEW Detalhes: http://sine.ni.com/nips/cds/view/p/lang/pt/nid/209835 Felipe Nascimento Martins
  246. 246. http://www.blendedtechnologies.com/realtime-plot-of-arduino-serial-data-using-python/231 Aquisição de dados com Arduino Felipe Nascimento Martins
  247. 247. Aquisição de dados com Arduino Felipe Nascimento Martins
  248. 248. Controle de um Robô Detalhes: http://nossosrobos.blogspot.com.br/2012/09/monte-seu-robo-com-arduino.html Felipe Nascimento Martins
  249. 249. Robôs baseados em Arduino • DFRobotShop Rover - Arduino Compatible Tracked Robot Felipe Nascimento Martins
  250. 250. Robôs baseados em Arduino • DFRobotShop Rover 2.0 – Arduino Compatible Mecanum Felipe Nascimento Martins
  251. 251. Robô Arduino oficial • Arduino Robot Felipe Nascimento Martins Detalhes: http://nossosrobos.blogspot.com.br/2013/07/arduino-robot-o-primeiro-robo-arduino.html
  252. 252. Softwares gratuitos Felipe Nascimento Martins • IDE de programação do Arduino: www.arduino.cc • Fritzing - para fazer esquemas elétricos, de proto-board e placas de circuito impresso: www.fritzing.org • 123D Circuits.io - para simulação de circuitos com ou sem Arduino e projeto de placas de circuito impresso (roda no navegador): http://123d.circuits.io
  253. 253. Referências Felipe Nascimento Martins • ARDUINO. Language Reference. Disponível em: <http://arduino.cc/en/Reference/HomePage>. MAR/2014. • ERIKSSON, Fredrik. Industrial Circuits Application Note - Stepper Motor Basics. • FONSECA, Érika e BEPPU, Mathyan. Apostila Arduino. CT/UFF, 2010. • JUSTEN, Álvaro. Curso de Arduino (apostila), 2011. • LIMA, Charles B. de; VILLAÇA, Marco V. M. AVR e Arduino – Técnicas de Projeto. 2ª ed. 2012. • MARTINS, Felipe N. Introdução à Eletrônica com Arduino. Disponível em: <http://www.slideshare.net/felipenm/oficina-de-introduo-a-eletrnica- com-arduino>. • Nossos Robôs: www.nossosrobos.blogspot.com • POMÍLIO, J.A. Eletrônica de Potência. UNICAMP (apostila para o curso de graduação). Acesso em AGO/2010. • http://www.labdegaragem.com.br/wiki • http://www.learningaboutelectronics.com/ • VALPEREIRO, Filipe. Workshop Arduino, 2008.
  254. 254. Obrigado! Felipe N. Martins @f_n_martins www.facebook.com/felipenm

×