C.E.S.A.R Introducao ao Arduino

12,245 views
12,125 views

Published on

Published in: Education
1 Comment
12 Likes
Statistics
Notes
No Downloads
Views
Total views
12,245
On SlideShare
0
From Embeds
0
Number of Embeds
2,817
Actions
Shares
0
Downloads
1,079
Comments
1
Likes
12
Embeds 0
No embeds

No notes for slide

C.E.S.A.R Introducao ao Arduino

  1. 1. introdução ao arduino Tiago Barros|tiago.barros@cesar.org.br Inovação é a gente!
  2. 2. conteúdo <ul><li>computação física </li></ul><ul><li>conceitos básicos de eletricidade </li></ul><ul><li>conceitos básicos de eletrônica </li></ul><ul><li>plataforma arduino </li></ul><ul><li>sinais analógicos e digitais </li></ul><ul><li>sensores e atuadores </li></ul><ul><li>comunicação serial </li></ul>
  3. 3. computação física
  4. 4. computação física <ul><li>uso de computação e eletrônica [sensores e atuadores] na prototipação de objetos físicos para interação com seres humanos </li></ul><ul><li>comportamento implementado por software </li></ul><ul><li>utilização de microcontroladores </li></ul>
  5. 5. computação física <ul><li>o objetivo é interligar o mundo físico com o mundo virtual </li></ul><ul><li>usar a computação e a interação com a tecnologia para o desenvolvimento das suas atividades </li></ul><ul><li>meio para comunicação e interação entre pessoas </li></ul>
  6. 6. computação física <ul><li>como vemos os </li></ul><ul><li>computadores? </li></ul>
  7. 7. computação física <ul><li>teclado </li></ul><ul><li>mouse </li></ul><ul><li>monitor </li></ul><ul><li>CPU </li></ul><ul><li>caixas de som </li></ul>como vemos os computadores?
  8. 8. computação física <ul><li>como os computadores nos veem? </li></ul>
  9. 9. computação física <ul><li>dedos [teclado/mouse] </li></ul><ul><li>olho [monitor] </li></ul><ul><li>duas orelhas [caixas de som] </li></ul>reflexo das entradas e saídas do computador como os computadores nos veem?
  10. 10. computação física <ul><li>“ mudar a forma que os computadores nos veem mudará como eles interagem conosco” </li></ul>Tom Igoe – Physical Computing
  11. 11. conceitos básicos de eletricidade
  12. 12. eletricidade <ul><li>eletricidade - interação entre partículas atômicas </li></ul>universo formado de átomos partículas atômicas: prótons: cargas positivas elétrons: cargas negativas
  13. 13. eletricidade Atomos com mais elétrons que prótons estão carregados negativamente (íon negativo) Atomos com menos elétrons que prótons estão carregados positivamente (íon positivo) “ buraco” “ elétron extra”
  14. 14. eletricidade cargas iguais se repelem cargas opostas se atraem cargas em movimento geram campo magnético campo magnético em movimento gera corrente elétrica N S
  15. 15. eletricidade – condutores e isolantes isolante – evita a passagem de elétrons condutor – permite o fluxo de elétrons
  16. 16. eletricidade – diferença de potencial (v) cargas negativas quanto maior a tensão, mais “força” teem os elétrons diferença de potencial ou tensão. cargas positivas V
  17. 17. eletricidade – corrente elétrica (i) quanto maior a corrente, maior a “quantidade” de elétrons fluxo de elétrons em um condutor
  18. 18. eletricidade – tipos de corrente elétrica corrente contínua corrente alternada
  19. 19. eletricidade – tipos de corrente elétrica inversão de polaridade no tempo mesma polaridade no tempo (sentido continuo)
  20. 20. eletricidade – resistência elétrica (r) propriedade do material condutor em reduzir a passagem dos elétrons elétrons “se acumulam e batem” no condutor, “dissipando” sua energia (gerando calor)
  21. 21. eletricidade – lei de ohm V = R x I a diferença de potencial (V) entre dois pontos de um condutor é proporcional à corrente elétrica (I) que o percorre e à sua resistência (R) V R I R = V/I I = V/R
  22. 22. eletricidade – circuito elétrico + – V i R gerador [fonte] condutor [caminho] carga [consumidor]
  23. 23. <ul><li>e agora, computação... </li></ul>
  24. 24. sistemas computacionais reativos
  25. 25. sistemas computacionais reativos <ul><li>percepção do ambiente, recebendo estímulos atavés de sensores; </li></ul><ul><li>e reação aos estímulos, de acordo com o seu comportamento (software), através de atuadores. </li></ul>
  26. 26. plataforma Arduino
  27. 27. plataforma arduino <ul><li>microcontrolador Atmel </li></ul><ul><li>programação usando Wiring (subconjunto de processing, baseado em C/C++) </li></ul><ul><li>open-source: evolução da plataforma através de contribuições dos usuários </li></ul>
  28. 28. plataforma arduino - hardware <ul><li>Duemilanove </li></ul>mini lilypad boarduino paperduino mega pro
  29. 29. plataforma arduino - hardware <ul><li>portas </li></ul><ul><ul><li>14 entradas/saídas digitais </li></ul></ul><ul><ul><li>6 entradas analógicas </li></ul></ul><ul><li>memória </li></ul><ul><ul><li>RAM: 1K </li></ul></ul><ul><ul><li>Flash (programa): 16k – 2k (bootloader) </li></ul></ul><ul><li>velocidade de processamento: 16MHz </li></ul>
  30. 30. plataforma arduino – hardware
  31. 31. plataforma arduino - instalação <ul><li>driver </li></ul><ul><li>windows: FTDI Serial USB </li></ul><ul><li>linux: não precisa instalar nada :-) </li></ul><ul><li>software </li></ul><ul><li>é só descompactar e executar </li></ul>
  32. 32. plataforma arduino - instalação <ul><li>Selecionando a placa e a porta serial </li></ul>
  33. 33. plataforma arduino – ambiente área de código área de status e saída serial compilar (verif. programa) parar execução novo abrir salvar enviar programa para placa exibir serial
  34. 34. plataforma arduino – ciclo de vida escrever compilar enviar para placa verificar execução corrigir erros corrigir erros
  35. 35. atuadores
  36. 36. plataforma arduino – estrutura do sketch
  37. 37. plataforma arduino – linguagem <ul><li>linguagem baseada em C (mas bem mais fácil) </li></ul><ul><li>comandos básicos </li></ul><ul><ul><li>pinMode() – define um pino com entrada ou saída </li></ul></ul><ul><ul><li>digitalWrite() – liga ou desliga uma saída digital </li></ul></ul><ul><ul><li>delay() – “espera” um determinado tempo </li></ul></ul>
  38. 38. plataforma arduino – linguagem <ul><li>Exemplos </li></ul><ul><ul><li>pinMode(num_do_pino, OUTPUT); </li></ul></ul><ul><ul><li>digitalWrite(num_do_pino, valor); valor é LOW ou HIGH (0 ou 1, 0V ou 5V) </li></ul></ul><ul><ul><li>delay(milisegundos); </li></ul></ul>
  39. 39. plataforma arduino – linguagem <ul><ul><li>constantes </li></ul></ul><ul><ul><li>LOW | HIGH – indica nível baixo (0V) e alto (5V) nos pinos </li></ul></ul><ul><ul><li>INPUT | OUTPUT – define se um pino vai ser pino de entrada ou de saída </li></ul></ul>
  40. 40. <ul><li>atividade prática! </li></ul>
  41. 41. prática <ul><li>fazer o programa hello arduino, que pisca um led </li></ul><ul><li>use o pino 13 de saída digital, a placa já possui um led ligado a ele :-) </li></ul>
  42. 42. plataforma arduino – hello arduino
  43. 43. Perguntas
  44. 44. plataforma arduino – linguagem <ul><li>comandos básicos </li></ul><ul><ul><li>analogWrite() – escreve um valor analógico no pino </li></ul></ul><ul><ul><li>analogWrite(num_pino, valor); valor entre 0 e 255 </li></ul></ul>
  45. 45. eletrônica – modulação PWM a função analogWrite() escreve “pulsos” muito rápidos no pino digital (só funciona nos pinos marcados com PWM). o valor a ser escrito representa o tempo que o pulso fica em nível alto e varia de 0 a 255. quanto mais tempo o pulto permanecer em nível alto, maior é a “tensão média” da saída
  46. 46. plataforma arduino - linguagem <ul><li>variáveis </li></ul><ul><ul><li>Espaço reservado na memória para armazenamento de valores </li></ul></ul><ul><ul><li>Variáveis são declaradas de acordo com o tipo de dado a ser armazenado (int, long, char, etc…) </li></ul></ul><ul><li>tipo nome = valor; </li></ul><ul><li>Exemplo: </li></ul><ul><li>int x = 10; </li></ul><ul><li>int y = 20; </li></ul><ul><li>int resultado; </li></ul><ul><li>char vogal = ‘a’; </li></ul><ul><li>Resultado = x + y; </li></ul>
  47. 47. plataforma arduino – linguagem <ul><ul><li>for </li></ul></ul><ul><ul><li>for (inicialização; condição; incremento) { </li></ul></ul><ul><ul><li>//comando(s); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>for (int i=0; i <= 255; i++){ </li></ul></ul><ul><ul><li>analogWrite(PWMpin, i); </li></ul></ul><ul><ul><li>delay(10); </li></ul></ul><ul><ul><li>} </li></ul></ul>
  48. 48. <ul><li>mais prática! </li></ul>
  49. 49. eletrônica – protoboard <ul><li>antes disso: </li></ul><ul><ul><li>Protoboard </li></ul></ul>
  50. 50. eletrônica – protoboard <ul><li>jumpers </li></ul>
  51. 51. <ul><li>antes disso mais um pouco de eletrônica... </li></ul>
  52. 52. eletrônica – resistores oferecem resistência à passagem da corrente elétrica transformam energia elétrica em energia térmica [pode ser usado como atuador] tipos: carvão [carbono] filme fio resistência: fixo variável
  53. 53. eletrônica – resistores valores expressos em ohms o corpo dos resistores possui um código de cores para identificar o valor
  54. 54. <ul><li>agora sim, prática! </li></ul>
  55. 55. prática <ul><li>modificar o programa hello arduino para acender o led com efeito de “fading” (acender gradativamente) </li></ul><ul><li>dica: use analogWrite() em vez de digitalWrite(), variando os valores escritos, de 0 a 255 </li></ul>
  56. 56. prática <ul><li>circuito </li></ul>Figura retirada de http://arduino.cc/
  57. 57. prática <ul><li>esquemático </li></ul>Figura retirada de http://arduino.cc/
  58. 58. prática <ul><li>protoboard </li></ul>Figura retirada de http://www.multilogica-shop.com/Aprendendo/Exemplos/Fading
  59. 59. prática <ul><li>Mãos à obra! </li></ul><ul><li>modificar o programa hello arduino para acender o led com efeito de “fading” (acender gradativamente) </li></ul><ul><li>dica: use analogWrite() em vez de digitalWrite(), variando os valores escritos, de 0 a 255 </li></ul>
  60. 60. Perguntas
  61. 61. sensores
  62. 62. sensores – chave (switch/button) <ul><ul><li>interrompe a passagem da corrente elétrica </li></ul></ul><ul><ul><li>liga/desliga o circuito </li></ul></ul><ul><ul><li>sensor de toque </li></ul></ul>esquemático
  63. 63. plataforma arduino – linguagem <ul><li>Comandos </li></ul><ul><ul><li>digitalRead() – le um pino de entrada </li></ul></ul><ul><li>Exemplo: </li></ul><ul><ul><li>int chave = 0; </li></ul></ul><ul><ul><li>chave = digitalRead(num_do_pino); </li></ul></ul>
  64. 64. plataforma arduino – linguagem <ul><ul><li>if </li></ul></ul><ul><ul><li>if (variavel == 0) { </li></ul></ul><ul><ul><li>// faça alguma coisa </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>if … else </li></ul></ul><ul><ul><li>if (variavel == 1){ </li></ul></ul><ul><ul><li>// acao A </li></ul></ul><ul><ul><li>} else { </li></ul></ul><ul><ul><li>// acao B </li></ul></ul><ul><ul><li>} </li></ul></ul>
  65. 65. sensores <ul><ul><li>arduino lê tensões de </li></ul></ul><ul><ul><li>entrada (e não valores 0 e 1) </li></ul></ul><ul><ul><li>5 volts == HIGH (1) </li></ul></ul><ul><ul><li>0 volts == LOW (0) </li></ul></ul><ul><ul><li>sem conexão em um </li></ul></ul><ul><ul><li>pino, a entrada flutua </li></ul></ul><ul><ul><li>entre 0 e 5 volts </li></ul></ul><ul><ul><li>(HIGH e LOW) </li></ul></ul>este resistor é necessário para que o pino seja levado para 0 quando não estiver conectado (chave aberta)
  66. 66. <ul><li>atividade prática! </li></ul>
  67. 67. sensores - prática <ul><li>fazer o circuito e o programa para acender o led 13 de acordo com sinal de entrada do pino 2 </li></ul>
  68. 68. sensores - prática <ul><li>esquemático </li></ul>Figura retirada de http://arduino.cc/
  69. 69. sensores - prática <ul><li>protoboard </li></ul>Figura retirada de http://arduino.cc/
  70. 70. sensores - prática
  71. 71. <ul><li>atividade prática! </li></ul>
  72. 72. sensores - prática <ul><li>chave no pino 2 seleciona a saída do LED – “fade” ou “blink” </li></ul>
  73. 73. Perguntas
  74. 74. <ul><li>voltando à eletrônica... </li></ul>
  75. 75. eletrônica – sinais analógicos e digitais sinal com variação contínua no tempo sinal com variação discreta (valores pré-definidos)
  76. 76. eletrônica – conversão de sinais valor é lido em intervalos regulares de tempo e transformado em um número digital
  77. 77. eletrônica – conversão de sinais vários valores, não só HIGH e LOW. quantiade de valores é a resolução.
  78. 78. eletrônica – conversão de sinais resolução de 8 bits = 256 valores resolução de 16 bits = 65536 valores
  79. 79. eletrônica - resistores <ul><li>Como funciona um resistor variável? </li></ul><ul><li>no arduino, o valor da tensão é transformado em um valor digital entre 0 e 1023 </li></ul>
  80. 80. <ul><li>atividade prática! </li></ul>
  81. 81. sensores analógicos – prática <ul><li>ler o valor do resistor variável e ligar um LED se esse valor passar de um determinado limite. </li></ul>
  82. 82. sensores analógicos – prática <ul><li>esquemático </li></ul>Figura retirada de http://arduino.cc/
  83. 83. sensores analógicos – prática <ul><li>circuito </li></ul>Figura retirada de http://arduino.cc/
  84. 84. entrada analógica – prática
  85. 85. protocolos de comunicação
  86. 86. comunicação serial – RS232 <ul><li>chip ATMEGA 168 só tem interface serial, não tem USB </li></ul><ul><li>nossa placa arduino possui um chip que converte Serial para USB </li></ul><ul><li>usamos o mesmo cabo USB pra enviar dados pro PC via serial </li></ul>
  87. 87. comunicação serial – RS232 <ul><li>o arduino possui uma biblioteca que implementa comunicação serial </li></ul><ul><li>Serial.begin(); </li></ul><ul><li>Serial.print(); </li></ul><ul><li>Serial.read(); </li></ul>
  88. 88. comunicação serial – RS232 <ul><li>Leds </li></ul><ul><ul><li>TX: dados enviados para o PC </li></ul></ul><ul><ul><li>RX: dados recebidos do PC </li></ul></ul>
  89. 89. <ul><li>atividade prática! </li></ul>
  90. 90. comunicação serial - prática “ Hello Arduino” via serial
  91. 91. comunicação serial - prática
  92. 92. eletrônica – resistores LDR <ul><li>resistor variável sensível à luz </li></ul>
  93. 93. eletrônica – resistores LDR <ul><li>resistor variável sensível à luz </li></ul><ul><li>circuito para arduino porque o resistor de 1k? </li></ul><ul><li>- para limitar a corrente </li></ul><ul><li>se o LDR assumir valores </li></ul><ul><li>muito baixos </li></ul>
  94. 94. <ul><li>atividade prática! </li></ul>
  95. 95. comunicação serial - prática ler valores do LDR e enviar via serial
  96. 96. <ul><li>atividade prática! </li></ul>
  97. 97. entrada analógica – prática <ul><li>fazer uma “escala de leds” que acendem de acordo com o aumento do valor lido do LDR na entrada analógica. </li></ul>
  98. 98. Perguntas
  99. 99. sensores sonoros <ul><li>microfones </li></ul><ul><ul><li>transformam ondas sonoras em ondas elétricas </li></ul></ul><ul><ul><li>a variação de tensão é bem pequena em um microfone de eletreto </li></ul></ul><ul><ul><li>precisa de circuito para amplificar o sinal e seu valor poder ser lido pelo arduino </li></ul></ul>
  100. 100. sensores sonoros <ul><li>circuito para amplificar o sinal do microfone para o arduino </li></ul>
  101. 101. sensores sonoros <ul><li>já temos o circuito pronto! </li></ul>
  102. 102. <ul><li>atividade prática! </li></ul>
  103. 103. sensores sonoros - prática <ul><li>detectar comandos sonoros e acender leds correspondentes </li></ul><ul><li>dica: medir a tensão de saída do circuito para calibrar o microfone (lembrando que a saída “segura” o valor por 0,5 segundo). </li></ul>
  104. 104. Perguntas
  105. 105. atuadores sonoros <ul><li>Buzzer piezoelétrico </li></ul><ul><ul><li>formado por cerâmica piezoelétrica e disco metálico </li></ul></ul><ul><ul><li>ao receber uma tensão o cristal se expande, quando removemos a tensão ele volta </li></ul></ul>
  106. 106. atuadores sonoros <ul><li>Buzzer piezoelétrico </li></ul><ul><ul><li>2 fios: preto é negativo e vermelho é positivo </li></ul></ul><ul><ul><li>aplicando uma tensão variável produz vibração que é traduzida em som </li></ul></ul>
  107. 107. <ul><li>atividade prática! </li></ul>
  108. 108. atuadores sonoros - prática <ul><li>programar o arduino para emitir som </li></ul><ul><li>como ligar o buzzer: fio preto no GND e vermelho no pino de saída desejado </li></ul><ul><li>podemos ligar um resistor em série para diminuir o volume </li></ul>
  109. 109. atuadores sonoros <ul><li>como programar o arduino para tocar uma nota musical? </li></ul><ul><ul><li>uma nota musical é um som em uma determinada frequência </li></ul></ul><ul><ul><li>a frequência de uma nota significa quantas vezes o atuador sonoro vibra em 1 segundo </li></ul></ul>
  110. 110. atuadores sonoros <ul><li>para fazer o atuador vibrar, escrevemos no pino uma sequência de valores HIGH e LOW, tantas vezes por segundo quanto for a frequência da nota </li></ul><ul><li>o tempo de cada variação HIGH e LOW é chamada de período e é o inverso da frequência </li></ul>baixa frequência alta frequência período período 1 segundo
  111. 111. plataforma arduino - linguagem <ul><li>funções </li></ul><ul><li>tipoRetorno nome(tipo parametro1, tipo parametro2) </li></ul><ul><li>{ </li></ul><ul><li>//corpo da fução </li></ul><ul><li>return variavel_do_mesmo_tipo_de_retorno; </li></ul><ul><li>} </li></ul><ul><li>Exemplo: </li></ul><ul><li>int funcaoSoma(int a, int b) </li></ul><ul><li>{ </li></ul><ul><li>int resultado = a + b; </li></ul><ul><li>return resultado; </li></ul><ul><li>} </li></ul>
  112. 112. plataforma arduino - linguagem <ul><li>arrays </li></ul><ul><ul><li>conjunto (sequencia) de variáveis do mesmo tipo </li></ul></ul><ul><ul><li>seus valores são acessados através do índice </li></ul></ul><ul><li>tipo nome[tamanho] = {lista de valores separados por virgula}; </li></ul><ul><li>Exemplo: </li></ul><ul><li>int valores[4] = {100, 200, 300, 400}; </li></ul><ul><li>char vogais [5] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’}; </li></ul><ul><li>int num = valores[2]; </li></ul><ul><li>int y = 3; </li></ul><ul><li>int x = valores[y]; </li></ul><ul><li>char vogal = vogais[y]; </li></ul>
  113. 113. atuadores sonoros <ul><li>como programar o arduino para para tocar uma nota musical? </li></ul><ul><li>timeHigh = periodo / 2 = 1 / (2 * frequência) </li></ul><ul><li>* nota frequência periodo tempo em nivel alto </li></ul><ul><li>* c (dó) 261 Hz 3830 1915 </li></ul><ul><li>* d (ré) 294 Hz 3400 1700 </li></ul><ul><li>* e (mi) 329 Hz 3038 1519 </li></ul><ul><li>* f (fá) 349 Hz 2864 1432 </li></ul><ul><li>* g (sol) 392 Hz 2550 1275 </li></ul><ul><li>* a (lá) 440 Hz 2272 1136 </li></ul><ul><li>* b (si) 493 Hz 2028 1014 </li></ul><ul><li>* C (dó) 523 Hz 1912 956 </li></ul><ul><li>char notes[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; </li></ul><ul><li>int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; </li></ul>
  114. 114. <ul><li>atividade prática! </li></ul>
  115. 115. atuadores sonoros - prática <ul><li>programar o arduino para tocar uma nota musical </li></ul><ul><li>void playTone(int period, int duration) </li></ul><ul><li>{ </li></ul><ul><li>for (long i = 0; i < duration * 1000L; i += period * 2) </li></ul><ul><li>{ </li></ul><ul><li>digitalWrite(speakerPin, HIGH); </li></ul><ul><li>delayMicroseconds(period); </li></ul><ul><li>digitalWrite(speakerPin, LOW); </li></ul><ul><li>delayMicroseconds(period); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  116. 116. <ul><li>atividade prática! </li></ul>
  117. 117. atuadores sonoros - prática <ul><li>tocar uma melodia, baseado na escala de notas abaixo: </li></ul><ul><li>cdef ff cdcd dd cgfe ee cdef ff </li></ul>
  118. 118. Perguntas
  119. 119. displays
  120. 120. eletrônica – displays de LEDs (7 seg) conjunto de leds organizados de forma a representar numeros e caracteres ligando os leds corretos, representamos numeros catodo comum ou anodo comum
  121. 121. <ul><li>atividade prática! </li></ul>
  122. 122. displays de LEDs - prática temporizador digital
  123. 123. displays de LEDs - prática temporizador digital - protoboard
  124. 124. Perguntas
  125. 125. prática final de hoje – luzes e sons <ul><li>montar um “dispositivo” interativo que utilize luz e som como entradas e/ou saídas. </li></ul>
  126. 126. arduino - referencias <ul><ul><li>Lista dos comandos da linguagem em: </li></ul></ul><ul><ul><li>http://arduino.cc/en/Reference/HomePage </li></ul></ul><ul><ul><li>Lista dos tutoriais em: </li></ul></ul><ul><ul><li>http://www.arduino.cc/en/Tutorial/HomePage </li></ul></ul>

×