arduino bÁsico lição iisites2.jf.ifsudestemg.edu.br/sites/default/files/lição...arduino para...
TRANSCRIPT
02/02/14 Frederico Möller 1
ARDUINO BÁSICOLição II
Frederico José Dias Möller
02/02/14 Frederico Möller 2
Sumário
● Muito mais que 0 e 1● Modelação por
largura de pulso● O comando
analogWrite● Exemplo III
– Software
● Interdisciplinaridade● Exercício III
Oscilação● Lidando com o
mundo analógico● O comando
analogRead
02/02/14 Frederico Möller 3
Sumário
● O Potênciometro● Exemplo IV
– Hardware
– Software
– Arrays
● LDR● Resistor de referência
● Buzzer● Exercício IV Sensor
de iluminação– Software
● Revisão● Leitura
complementar
02/02/14 Frederico Möller 4
Muito mais que 0 e 1
● Na lição anterior, aprendemos a usar a leitura e escrita digital.
● Ficamos limitados a “ligar” e “desligar” as coisas.
● No final usamos uma pequena artimanha para controlar a intensidade aparente de um led.
● Nessa lição aprenderemos a usar recursos do Arduino para essa variação de valores.
02/02/14 Frederico Möller 5
Modelação por largura de pulso (PWM)
● No último exercício, regulamos a intensidade da iluminação de um led, definindo a fração de tempo no qual o mesmo ficava em alto num determinador período.
● Se o led recebia um pulso de 5V em todo o período de 5ms, então a tensão aparente sobre o led era de 5V
● Se ficasse apenas 3ms dos 5ms, a tensão média no período seria de 3V se ficasse 2ms, 2V e assim por diante
02/02/14 Frederico Möller 6
Modelação por largura de pulso (PWM)
02/02/14 Frederico Möller 7
Modelação por largura de pulso (PWM)
● O PWM pode ser usado para expressar saídas em curva, como senoides e etc.
● Apesar de, como visto na lição anterior, ser possível implementar um PWM em qualquer pino de saída, O Arduino tem uma função própria para gerar PWMs e estas devem ser usadas com os pinos apropriados.
02/02/14 Frederico Möller 8
Modelação por largura de pulso (PWM)
● Os pinos PWM estão dentro do grupo dos digitais e podem ser identificados por um “PWM” ou um “~” marcado ao seu lado.
02/02/14 Frederico Möller 9
O comando analogWrite
● A “escrita” analógica do Arduino pode ser feita usando o PWM e a função responsável por isso é a “analogWrite”
● A forma da função é analogWrite(pino,valor)● Pino é o pino digital/PWM de saída.● Valor é um valor qualquer entre 0 e 255
02/02/14 Frederico Möller 10
Exemplo III
● Vamos refazer o último exercício, dessa vez usando o comando analogWrite.
● O material utilizado vai ser o mesmo do ultimo exercício, as conexões, as mesmas.
02/02/14 Frederico Möller 11
Exemplo III (Software)
● O código, como um todo, é bem parecido com o do exercício II
● Os comandos de delay e digitalWrite foram compilados em um único comando analog Write
1
02/02/14 Frederico Möller 12
Exemplo III (Software)
● Para cada unidade na variável valor, teremos uma saída analógica aumentada 51x.
● Se 255 representa 5v
51 representa 1v 1
02/02/14 Frederico Möller 13
Interdisciplinaridade
● Com base em seu conhecimento em metrologia, ou eletrônica digital, você consegue dizer qual é a “resolução” D/A do Arduíno?
● É importante observar que a saída PWM não pode ser entendida como a saída de um conversor D/A comum. Enquanto um D/A comum de 8bits e 5v teria uma saída de 1V de fato para uma entrada “51”, o PWM emite 5V em um quinto do tempo do pulso. Para determinados componentes, o PWM pode não trabalhar muito bem.
02/02/14 Frederico Möller 14
Exercício III Oscilação
● Com base no que foi aprendido até agora, montar um protótipo onde um led oscile seu brilho continuamente.
● O led deverá começar numa intensidade mínima, ou até mesmo nula, progredir até uma intensidade máxima e depois regredir de forma suave.
● A frequência dessas oscilações deverá ser controlada pelo usuário através de um botão, cada vez que o mesmo for pressionado a frequência deverá aumentar num máximo de 3 diferentes
02/02/14 Frederico Möller 15
Exercício III Oscilação
● Mais uma vez, montamos a base do programa igual ao exemplo anterior.
● Dessa vez a variável valor começa com 1 e vai até 3
● Inserimos uma variável deg, que corresponde à um ângulo em graus
02/02/14 Frederico Möller 16
Exercício III Oscilação
● Em 1 temos um teste condicional. Se o produto de valor por deg for maior que 180, deg é mandada para 0
● Em 2 temos a “escrita analógica”. A “intensidade” do sinal de saída em 11 será proporcional à uma função seno
1
2
02/02/14 Frederico Möller 17
Exercício III Oscilação
● A função sin(x), do Arduíno, retorna o valor do seno de x, sendo x em radianos.
● Para transformarmos graus em radianos, multiplicamos os graus por pi/180.
● Deg representa os graus e valor a frquencia.
02/02/14 Frederico Möller 18
Exercício III Oscilação
● Como valor*frequência nunca pode exceder 180, o resultado de sin vai ser sempre entre 0 e 1. Multiplicados por 255, dará sempre um valor entre 0 e 255.
● A função int(x), arrendonda o número x para um valor inteiro.
02/02/14 Frederico Möller 19
Exercício III Oscilação
● Em 3 temos um delay de 25ms para que seja mais fácil acompanhar a variação de valores
● É importante observar também, que logo no início do loop, a variável deg é acrescida de uma unidade. Ela foi declarada fora do loop e com valor inicial de -1, alguém pode dizer o motivo?
3
02/02/14 Frederico Möller 20
Lidando com o ambiente analógico
● Para “escrever” dados analógicos, o Arduino usa PWM.
● Para “ler”, ele usa portas especiais ligadas a conversores ADC.
02/02/14 Frederico Möller 21
O comando analogRead
● As portas analógicas convertem tensões na faixa de 0V a 5V para 10bits.
● A função de leitura é dada por analogRead(pino) onde pino é um valor de 0 a 5 e representa o pino analógico a ser lido.
● Apesar de retornar valores inteiros de 0 a 1023, é interessante que, se alguma variável for receber o resultado de analogRead, essa seja do tipo float.
02/02/14 Frederico Möller 22
O potenciômetro
● É um resistor variável.● Possui 3 pinos, mas pode
funcionar apenas com 2● A resistência entre os dois
pinos extremos é a máxima do potenciômetro.
● O pino central tem resistência variável.
02/02/14 Frederico Möller 23
Exemplo IV RGB
● O led RGB é uma junção dos leds azul, verde e vermelho em um único componente.
● Minúsculos leds RGBs são responsáveis pela formação da imagem em um monitor led.
● É possível gerar uma grande gama de cores no led RGB variando a intensidade da tensão sobre cada pino do led.
02/02/14 Frederico Möller 24
Exemplo IV RGB
● Pode parecer uma boa ideia ligar 3 potenciômetros nas entradas analógicas do Arduino. Mas se vamos gastar 3 desses componentes, por que usar um Arduino?
02/02/14 Frederico Möller 25
Exemplo IV RGB
● Usaremos um botão e um potenciometro.● O botão alternará entre 6 estados possíveis:
0,1,2,3,4,5;● Nos estados pares ele fará com que o valor de
leitura da porta analógica seja associada à uma variável que não será usada.
● Nos estados 1,3 e 5 ele fará com que a intensidade dos leds R G B sejam alteradas.
02/02/14 Frederico Möller 26
Exemplo IV Hardware
02/02/14 Frederico Möller 27
Exemplo IV Software
● A base desse programa é muito parecida com os últimos.
● Logo no início, além das variáveis que estamos habituados, declaramos também uma int “i” e uma float “val2”
02/02/14 Frederico Möller 28
Exemplo IV “Arrays”
● A variável “i” é um mero contador e será melhor explicada adiante.
● A variável val2 no entanto, é completamente diferente do que vimos até agora. Ela é do tipo float, ou seja, um número real e não apenas um inteiro. Ela pode assumir valores como 0.5, 3.14, 1.745823, -0.7, 3.0 e etc
● A utilidade de ser float será explicada adiante
02/02/14 Frederico Möller 29
Exemplo IV “Arrays”
● Outra diferença em var2 é o 6 entre colchetes após seu nome “[6]”.
● Isso indica que a variável é uma array float, ou seja uma variável float que pode armazenar diversos (no caso 6) valores ao mesmo tempo.
● Ao chamarmos val2[2] estamos pegando o 3º valor armazenado em var2.
02/02/14 Frederico Möller 30
Exemplo IV Software
● No setup, habilitamos os pinos de 9 a 11 para saída de dados. Note que todos esses pinos tem saída PWM
● O pino 12 foi configurado como pino de entrada.
02/02/14 Frederico Möller 31
Exemplo IV Software
● O pino analógico 0 não precisou ser setado.
● Há um ciclo for de 0 a 5, é importante observar ele, para que acham que esse ciclo está servindo?
02/02/14 Frederico Möller 32
Exemplo IV Software
● O resultado do acionamento do botão é o mesmo dos outros exemplos, ele incrementa a variável valor até um limite pré-estabelecido.
02/02/14 Frederico Möller 33
Exemplo IV Software
● Há uma mudança no entanto sobre o uso de valor. Agora ela é o índice da variável val2. A variável val2[valor] recebe a leitura analógica da porta 0.
02/02/14 Frederico Möller 34
Exemplo IV Software
● Teremos assim:– Val2[0] = valorA
– Val2[1] = valor11
– Val2[2] = valorB
– Val2[3] = valor10
– Val2[4] = valorC
– Val2[5] = valor9
● Os valores A,B,C não serão utilizados para nada.
02/02/14 Frederico Möller 35
Exemplo IV Software
● O ciclo for no setup serviu para zerar todas as variáveis.
● Logo que o programa é iniciado, a variável valor é igual a 0, significa que val2 está no índice 0.
● Por consequência o valorA é que recebe o valor inicial do potenciômetro.
02/02/14 Frederico Möller 36
Exemplo IV Software
● Ao clicar o botão, a variável val2 recebe o índice 1.
● Ele agora pode alterar a intensidade de uma das cores do led usando o potenciômetro.
● Regulada a cor ele clica novamente no botão e o índice “valor” vai para 2.
● O valor de val2[2] não é utilizado, assim, o valor anterior do potenciômetro não influencia na próxima cor do led.
02/02/14 Frederico Möller 37
Exemplo IV Software
● A sequencia de setagem de tensões do led segue ciclicamente.
● A importância de val2 ser float é vista dentro das funções analogWrite, val2 recebe valores inteiro de 0 a 1023 da função analogRead.
● Dentro da função analogWrite, é pedido para dividir val2 por 1023. Se val2 fosse tipo int, o valor dessa divisão seria int, ou seja, nesse caso 0, ou 1!
02/02/14 Frederico Möller 38
Exemplo IV Software
● O restante do programa segue a lógica dos programas anteriores.
● Apesar de funcionar, esse é um programa burro! Ele carrega informações para a memória que nunca irá utilizar (var2[0],var2[2] e var2[4]), o usuário também não pode escolher a cor que quer setar, ele precisa percorrer uma a uma.
02/02/14 Frederico Möller 39
LDR
● Vamos sair um pouco do Arduino e falar um pouco sobre o LDR
● O resistor dependente de luz tem sua resistência variando de acordo com a incidência de luz sobre ele.
02/02/14 Frederico Möller 40
LDR
● Sua resistência diminui não-linearmente à medida que a incidência de luz sobre ele aumenta.
02/02/14 Frederico Möller 41
Resistor de referência
● Se ligarmos um sensor tal qual o LDR em série à uma entrada analógica do Arduino não obteremos nenhum resultado válido. O LDR assumirá o valor da tensão a qual está submetido e assim a entrada analógica registrará sempre o mesmo valor.
02/02/14 Frederico Möller 42
Resistor de referência
● Se ligarmos um sensor tal qual o LDR, diretamente à uma entrada analógica do Arduino o mesmo não funcionará corretamente. A tensão sobre o sensor será constante e o Arduino sempre obterá um valor fixo.
02/02/14 Frederico Möller 43
Resistor de referência
● Para superar esse problema, devemos usar um resistor de referência.
● Esse resistor fica ligado em série com o sensor e a fonte de alimentação.
02/02/14 Frederico Möller 44
Resistor de referência
● O conjunto resistor – sensor estará sob a mesma tensão da fonte.
● Ligando a conexão resistor – sensor à porta analógica, essa receberá o resultado do divisor de tensão do sensor (ou do resistor, dependendo de como se liga).
● Fazendo os devidos cálculos, é possível obter a resistência do sensor e assim a quantidade do que ele mede (no caso, incidência de luz).
02/02/14 Frederico Möller 45
Buzzer
● É um componente componente eletrônico de audio.
● Possui, tal como o LED, um pino positivo e um negativo
● Pode ser usado para reproduzir bips, campainhas, alarmes e etc.
02/02/14 Frederico Möller 46
Exercício IV Sensor de iluminação
● Vamos agora ao exercício nº4!● Com base no que foi visto até agora construir
um sensor de iluminação.● O sensor deverá contar com um LDR para
captar a iluminação ambiente.● Um buzzer deverá emitir bips regulares,
quanto maior for a iluminação, maior a frequência dos bips.
02/02/14 Frederico Möller 47
Exercício IV Software
● Concebeu uma resolução difícil?
● Estranhou a resposta dada ao lado?
● Pois é, existem diversas respostas possíveis, mas a maioria vai ser bem simples!
02/02/14 Frederico Möller 48
Exercício IV Software
● Em 1 temos a declaração de apenas uma variável, chamada luz, ela vai receber o valor de leitura do sensor.
● No setup, o pino 13 é marcado como saída digital.
1
02/02/14 Frederico Möller 49
Exercício IV Software
● A primeira coisa que o programa faz no loop é ler a porta analógica 0 e atribuir o resultado à variável luz . [2]
2
02/02/14 Frederico Möller 50
Exercício IV Software
● Em um LDR, quanto maior a incidência de luz, menor a resistência.
● Como o LDR está em um divisor de tensão, quanto menor a resistência do sensor, menor sua tensão.
2
02/02/14 Frederico Möller 51
Exercício IV Software
● Portanto, quanto maior a iluminação ambiente, menor será o valor armazenado em “luz”
2
02/02/14 Frederico Möller 52
Exercício IV Software
● Em seguida o pino 13 recebe um sinal alto (5V).
● Dessa forma o buzzer passa a emitir um som agudo.
● 25ms depois o barulho cessa. O pino 13 volta a 0V.
02/02/14 Frederico Möller 53
Exercício IV Software
● Antes do ciclo recomeçar o programa espera “luz” segundos. Ou seja, se houver muita iluminação no ambiente, luz será um valor pequeno e o programa esperará pouco para começar um novo ciclo.
● Caso o contrário, o programa poderá esperar até pouco mais de 1 segundo para executar um novo ciclo.
02/02/14 Frederico Möller 54
Exercício IV Software
● Isso acarretará na diferença de intervalos entre os apitos do buzzer, ele apitará com maior frequência quando o ambiente estiver mais iluminado...
● Existem, como disse, diversas outras formas de escrever esse programa. A lógica básica é essa, mas é interessante tentar outros meios. Que tal usar uma senoide e uma saída PWM no buzzer?
02/02/14 Frederico Möller 55
Revisão
● Vimos nessa lição:
– O que é PWM.– O comando de escrita analógica.– O comando de leitura analógica.– O que são arrays.– O que é são potenciômetros, LDRs e buzzers.– O que é o resistor de referência.
02/02/14 Frederico Möller 56
Leitura complementar
● Series and Parallel Circuits:
– http://cnx.org/content/m10674/latest/● D/A converter:
– http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/dac.html● ADC converter:
– http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/adc.html
02/02/14 Frederico Möller 57
Dúvidas???
02/02/14 Frederico Möller 58
Obrigado e até a próxima lição!